Remove Spirits from the home page

Drops the Spirits venture from the hero icons, the ventures tabs and its 3D bottle,
and from the home copy and meta description, with matching ES/AR translations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Alejandro Veras
2026-10-16 11:30:05 -04:00
parent 965ec4c2c5
commit d99d86a269
5 changed files with 16 additions and 38 deletions
+2 -3
View File
@@ -16,11 +16,10 @@ export const localize = (path, locale) => (locale === DEFAULT_LOCALE ? path : `/
export const JS_STRINGS = [ export const JS_STRINGS = [
'Switch to light mode', 'Switch to dark mode', 'Open menu', 'Close menu', 'Copied', 'Switch to light mode', 'Switch to dark mode', 'Open menu', 'Close menu', 'Copied',
'Your email app should open with the message ready to send.', 'Your email app should open with the message ready to send.',
'AI Software', 'Marketing & AI Search', 'Spirits', 'Education Technology', 'Cybersecurity', 'E-Commerce', 'AI Software', 'Marketing & AI Search', 'Education Technology', 'Cybersecurity', 'E-Commerce',
'MARKETING & AI SEARCH', 'AI SOFTWARE', 'SPIRITS', 'EDUCATION TECHNOLOGY', 'CYBERSECURITY', 'E-COMMERCE', 'MARKETING & AI SEARCH', 'AI SOFTWARE', 'EDUCATION TECHNOLOGY', 'CYBERSECURITY', 'E-COMMERCE',
'Leading teams through a constantly changing search landscape.', 'Leading teams through a constantly changing search landscape.',
'Building around new opportunities created by AI.', 'Building around new opportunities created by AI.',
'Taking a consumer brand from idea to market.',
'Creating technology designed for real classrooms.', 'Creating technology designed for real classrooms.',
'Solving security challenges for growing businesses.', 'Solving security challenges for growing businesses.',
'Turning product ideas into businesses built around real customers.', 'Turning product ideas into businesses built around real customers.',
+3 -6
View File
@@ -1,6 +1,6 @@
{ {
"Dylan Mazzei | Founder, Operator &amp; Entrepreneur": "ديلان مازي | مؤسس ومشغّل ورائد أعمال", "Dylan Mazzei | Founder, Operator &amp; Entrepreneur": "ديلان مازي | مؤسس ومشغّل ورائد أعمال",
"Meet Dylan Mazzei, a founder and operator leading ventures across AI, software, spirits, education, cybersecurity, e-commerce, and more.": "تعرّف على ديلان مازي، المؤسس والمشغّل الذي يقود مشاريع في الذكاء الاصطناعي والبرمجيات والمشروبات الروحية والتعليم والأمن السيبراني والتجارة الإلكترونية وغيرها.", "Meet Dylan Mazzei, a founder and operator leading ventures across AI, software, education, cybersecurity, e-commerce, and more.": "تعرّف على ديلان مازي، المؤسس والمشغّل الذي يقود مشاريع في الذكاء الاصطناعي والبرمجيات والتعليم والأمن السيبراني والتجارة الإلكترونية وغيرها.",
"Skip to content": "انتقل إلى المحتوى", "Skip to content": "انتقل إلى المحتوى",
"Dylan Mazzei, home": "ديلان مازي، الصفحة الرئيسية", "Dylan Mazzei, home": "ديلان مازي، الصفحة الرئيسية",
"Dylan <b>Mazzei</b>": "Dylan <b>Mazzei</b>", "Dylan <b>Mazzei</b>": "Dylan <b>Mazzei</b>",
@@ -43,7 +43,7 @@
"DYLAN MAZZEI | FOUNDER &amp; OPERATOR": "ديلان مازي | مؤسس ومشغّل", "DYLAN MAZZEI | FOUNDER &amp; OPERATOR": "ديلان مازي | مؤسس ومشغّل",
"One Good Idea Has Never": "لم تكن فكرة جيدة واحدة", "One Good Idea Has Never": "لم تكن فكرة جيدة واحدة",
"Been Enough for Me.": "كافية لي يومًا.", "Been Enough for Me.": "كافية لي يومًا.",
"I’ve spent the last eight years turning ideas into companies across marketing, AI, software, spirits, education, cybersecurity, e-commerce, and more. Four have been sold. Others are growing. And I’m nowhere near finished building.": "أمضيت السنوات الثماني الماضية في تحويل الأفكار إلى شركات في التسويق والذكاء الاصطناعي والبرمجيات والمشروبات الروحية والتعليم والأمن السيبراني والتجارة الإلكترونية وغيرها. بيعت أربع منها. وأخرى تواصل النمو. وما زلت بعيدًا كل البعد عن التوقف عن البناء.", "I’ve spent the last eight years turning ideas into companies across marketing, AI, software, education, cybersecurity, e-commerce, and more. Four have been sold. Others are growing. And I’m nowhere near finished building.": "أمضيت السنوات الثماني الماضية في تحويل الأفكار إلى شركات في التسويق والذكاء الاصطناعي والبرمجيات والتعليم والأمن السيبراني والتجارة الإلكترونية وغيرها. بيعت أربع منها. وأخرى تواصل النمو. وما زلت بعيدًا كل البعد عن التوقف عن البناء.",
"MY STORY": "قصتي", "MY STORY": "قصتي",
"EXPLORE MY VENTURES": "استكشف مشاريعي", "EXPLORE MY VENTURES": "استكشف مشاريعي",
"Four exits": "أربع صفقات تخارج", "Four exits": "أربع صفقات تخارج",
@@ -67,7 +67,6 @@
"MARKETING &amp; AI SEARCH": "التسويق والبحث بالذكاء الاصطناعي", "MARKETING &amp; AI SEARCH": "التسويق والبحث بالذكاء الاصطناعي",
"Active": "نشطة", "Active": "نشطة",
"AI SOFTWARE": "برمجيات الذكاء الاصطناعي", "AI SOFTWARE": "برمجيات الذكاء الاصطناعي",
"SPIRITS": "المشروبات الروحية",
"EDUCATION TECHNOLOGY": "تكنولوجيا التعليم", "EDUCATION TECHNOLOGY": "تكنولوجيا التعليم",
"CYBERSECURITY": "الأمن السيبراني", "CYBERSECURITY": "الأمن السيبراني",
"E-COMMERCE": "التجارة الإلكترونية", "E-COMMERCE": "التجارة الإلكترونية",
@@ -96,10 +95,9 @@
"\"finishedBuilding\"": "\"finishedBuilding\"", "\"finishedBuilding\"": "\"finishedBuilding\"",
"false": "false", "false": "false",
"Current ventures": "المشاريع الحالية", "Current ventures": "المشاريع الحالية",
"Today, I lead businesses across AI, marketing, software, spirits, education technology, cybersecurity, and e-commerce. They operate in very different worlds, which keeps me curious.": "أقود اليوم أعمالًا في الذكاء الاصطناعي والتسويق والبرمجيات والمشروبات الروحية وتكنولوجيا التعليم والأمن السيبراني والتجارة الإلكترونية. تعمل كلها في عوالم مختلفة تمامًا، وهذا ما يبقيني فضوليًا.", "Today, I lead businesses across AI, marketing, software, education technology, cybersecurity, and e-commerce. They operate in very different worlds, which keeps me curious.": "أقود اليوم أعمالًا في الذكاء الاصطناعي والتسويق والبرمجيات وتكنولوجيا التعليم والأمن السيبراني والتجارة الإلكترونية. تعمل كلها في عوالم مختلفة تمامًا، وهذا ما يبقيني فضوليًا.",
"MARKETING &amp; AI SEARCH Leading teams through a constantly changing search landscape.": "التسويق والبحث بالذكاء الاصطناعي قيادة الفرق في مشهد بحث يتغير باستمرار.", "MARKETING &amp; AI SEARCH Leading teams through a constantly changing search landscape.": "التسويق والبحث بالذكاء الاصطناعي قيادة الفرق في مشهد بحث يتغير باستمرار.",
"AI SOFTWARE Building around new opportunities created by AI.": "برمجيات الذكاء الاصطناعي البناء على الفرص الجديدة التي يخلقها الذكاء الاصطناعي.", "AI SOFTWARE Building around new opportunities created by AI.": "برمجيات الذكاء الاصطناعي البناء على الفرص الجديدة التي يخلقها الذكاء الاصطناعي.",
"SPIRITS Taking a consumer brand from idea to market.": "المشروبات الروحية نقل علامة استهلاكية من الفكرة إلى السوق.",
"EDUCATION TECHNOLOGY Creating technology designed for real classrooms.": "تكنولوجيا التعليم ابتكار تقنيات مصممة للفصول الدراسية الحقيقية.", "EDUCATION TECHNOLOGY Creating technology designed for real classrooms.": "تكنولوجيا التعليم ابتكار تقنيات مصممة للفصول الدراسية الحقيقية.",
"CYBERSECURITY Solving security challenges for growing businesses.": "الأمن السيبراني حل تحديات الأمن للشركات النامية.", "CYBERSECURITY Solving security challenges for growing businesses.": "الأمن السيبراني حل تحديات الأمن للشركات النامية.",
"E-COMMERCE Turning product ideas into businesses built around real customers.": "التجارة الإلكترونية تحويل أفكار المنتجات إلى أعمال مبنية حول عملاء حقيقيين.", "E-COMMERCE Turning product ideas into businesses built around real customers.": "التجارة الإلكترونية تحويل أفكار المنتجات إلى أعمال مبنية حول عملاء حقيقيين.",
@@ -1309,7 +1307,6 @@
"E-Commerce": "التجارة الإلكترونية", "E-Commerce": "التجارة الإلكترونية",
"MARKETING & AI SEARCH": "التسويق والبحث بالذكاء الاصطناعي", "MARKETING & AI SEARCH": "التسويق والبحث بالذكاء الاصطناعي",
"Building around new opportunities created by AI.": "البناء على الفرص الجديدة التي يخلقها الذكاء الاصطناعي.", "Building around new opportunities created by AI.": "البناء على الفرص الجديدة التي يخلقها الذكاء الاصطناعي.",
"Taking a consumer brand from idea to market.": "نقل علامة استهلاكية من الفكرة إلى السوق.",
"Creating technology designed for real classrooms.": "ابتكار تقنيات مصممة للفصول الدراسية الحقيقية.", "Creating technology designed for real classrooms.": "ابتكار تقنيات مصممة للفصول الدراسية الحقيقية.",
"Solving security challenges for growing businesses.": "حل تحديات الأمن للشركات النامية.", "Solving security challenges for growing businesses.": "حل تحديات الأمن للشركات النامية.",
"Turning product ideas into businesses built around real customers.": "تحويل أفكار المنتجات إلى أعمال مبنية حول عملاء حقيقيين." "Turning product ideas into businesses built around real customers.": "تحويل أفكار المنتجات إلى أعمال مبنية حول عملاء حقيقيين."
+3 -6
View File
@@ -1,6 +1,6 @@
{ {
"Dylan Mazzei | Founder, Operator &amp; Entrepreneur": "Dylan Mazzei | Fundador, operador y emprendedor", "Dylan Mazzei | Founder, Operator &amp; Entrepreneur": "Dylan Mazzei | Fundador, operador y emprendedor",
"Meet Dylan Mazzei, a founder and operator leading ventures across AI, software, spirits, education, cybersecurity, e-commerce, and more.": "Conoce a Dylan Mazzei, fundador y operador al frente de empresas en IA, software, bebidas espirituosas, educación, ciberseguridad, e-commerce y más.", "Meet Dylan Mazzei, a founder and operator leading ventures across AI, software, education, cybersecurity, e-commerce, and more.": "Conoce a Dylan Mazzei, fundador y operador al frente de empresas en IA, software, educación, ciberseguridad, e-commerce y más.",
"Skip to content": "Saltar al contenido", "Skip to content": "Saltar al contenido",
"Dylan Mazzei, home": "Dylan Mazzei, inicio", "Dylan Mazzei, home": "Dylan Mazzei, inicio",
"Dylan <b>Mazzei</b>": "Dylan <b>Mazzei</b>", "Dylan <b>Mazzei</b>": "Dylan <b>Mazzei</b>",
@@ -43,7 +43,7 @@
"DYLAN MAZZEI | FOUNDER &amp; OPERATOR": "DYLAN MAZZEI | FUNDADOR Y OPERADOR", "DYLAN MAZZEI | FOUNDER &amp; OPERATOR": "DYLAN MAZZEI | FUNDADOR Y OPERADOR",
"One Good Idea Has Never": "Una buena idea nunca", "One Good Idea Has Never": "Una buena idea nunca",
"Been Enough for Me.": "me ha bastado.", "Been Enough for Me.": "me ha bastado.",
"I’ve spent the last eight years turning ideas into companies across marketing, AI, software, spirits, education, cybersecurity, e-commerce, and more. Four have been sold. Others are growing. And I’m nowhere near finished building.": "He pasado los últimos ocho años convirtiendo ideas en empresas de marketing, IA, software, bebidas espirituosas, educación, ciberseguridad, e-commerce y más. Cuatro se han vendido. Otras siguen creciendo. Y no estoy ni cerca de terminar de construir.", "I’ve spent the last eight years turning ideas into companies across marketing, AI, software, education, cybersecurity, e-commerce, and more. Four have been sold. Others are growing. And I’m nowhere near finished building.": "He pasado los últimos ocho años convirtiendo ideas en empresas de marketing, IA, software, educación, ciberseguridad, e-commerce y más. Cuatro se han vendido. Otras siguen creciendo. Y no estoy ni cerca de terminar de construir.",
"MY STORY": "MI HISTORIA", "MY STORY": "MI HISTORIA",
"EXPLORE MY VENTURES": "EXPLORA MIS EMPRESAS", "EXPLORE MY VENTURES": "EXPLORA MIS EMPRESAS",
"Four exits": "Cuatro ventas", "Four exits": "Cuatro ventas",
@@ -67,7 +67,6 @@
"MARKETING &amp; AI SEARCH": "MARKETING Y BÚSQUEDA CON IA", "MARKETING &amp; AI SEARCH": "MARKETING Y BÚSQUEDA CON IA",
"Active": "Activa", "Active": "Activa",
"AI SOFTWARE": "SOFTWARE DE IA", "AI SOFTWARE": "SOFTWARE DE IA",
"SPIRITS": "BEBIDAS ESPIRITUOSAS",
"EDUCATION TECHNOLOGY": "TECNOLOGÍA EDUCATIVA", "EDUCATION TECHNOLOGY": "TECNOLOGÍA EDUCATIVA",
"CYBERSECURITY": "CIBERSEGURIDAD", "CYBERSECURITY": "CIBERSEGURIDAD",
"E-COMMERCE": "E-COMMERCE", "E-COMMERCE": "E-COMMERCE",
@@ -96,10 +95,9 @@
"\"finishedBuilding\"": "\"finishedBuilding\"", "\"finishedBuilding\"": "\"finishedBuilding\"",
"false": "false", "false": "false",
"Current ventures": "Empresas actuales", "Current ventures": "Empresas actuales",
"Today, I lead businesses across AI, marketing, software, spirits, education technology, cybersecurity, and e-commerce. They operate in very different worlds, which keeps me curious.": "Hoy lidero negocios de IA, marketing, software, bebidas espirituosas, tecnología educativa, ciberseguridad y e-commerce. Operan en mundos muy distintos, y eso me mantiene curioso.", "Today, I lead businesses across AI, marketing, software, education technology, cybersecurity, and e-commerce. They operate in very different worlds, which keeps me curious.": "Hoy lidero negocios de IA, marketing, software, tecnología educativa, ciberseguridad y e-commerce. Operan en mundos muy distintos, y eso me mantiene curioso.",
"MARKETING &amp; AI SEARCH Leading teams through a constantly changing search landscape.": "MARKETING Y BÚSQUEDA CON IA Liderando equipos en un panorama de búsqueda que cambia constantemente.", "MARKETING &amp; AI SEARCH Leading teams through a constantly changing search landscape.": "MARKETING Y BÚSQUEDA CON IA Liderando equipos en un panorama de búsqueda que cambia constantemente.",
"AI SOFTWARE Building around new opportunities created by AI.": "SOFTWARE DE IA Construyendo sobre las nuevas oportunidades que crea la IA.", "AI SOFTWARE Building around new opportunities created by AI.": "SOFTWARE DE IA Construyendo sobre las nuevas oportunidades que crea la IA.",
"SPIRITS Taking a consumer brand from idea to market.": "BEBIDAS ESPIRITUOSAS Llevando una marca de consumo de la idea al mercado.",
"EDUCATION TECHNOLOGY Creating technology designed for real classrooms.": "TECNOLOGÍA EDUCATIVA Creando tecnología pensada para aulas reales.", "EDUCATION TECHNOLOGY Creating technology designed for real classrooms.": "TECNOLOGÍA EDUCATIVA Creando tecnología pensada para aulas reales.",
"CYBERSECURITY Solving security challenges for growing businesses.": "CIBERSEGURIDAD Resolviendo retos de seguridad para negocios en crecimiento.", "CYBERSECURITY Solving security challenges for growing businesses.": "CIBERSEGURIDAD Resolviendo retos de seguridad para negocios en crecimiento.",
"E-COMMERCE Turning product ideas into businesses built around real customers.": "E-COMMERCE Convirtiendo ideas de producto en negocios construidos alrededor de clientes reales.", "E-COMMERCE Turning product ideas into businesses built around real customers.": "E-COMMERCE Convirtiendo ideas de producto en negocios construidos alrededor de clientes reales.",
@@ -1309,7 +1307,6 @@
"E-Commerce": "E-commerce", "E-Commerce": "E-commerce",
"MARKETING & AI SEARCH": "MARKETING Y BÚSQUEDA CON IA", "MARKETING & AI SEARCH": "MARKETING Y BÚSQUEDA CON IA",
"Building around new opportunities created by AI.": "Construyendo sobre las nuevas oportunidades que crea la IA.", "Building around new opportunities created by AI.": "Construyendo sobre las nuevas oportunidades que crea la IA.",
"Taking a consumer brand from idea to market.": "Llevando una marca de consumo de la idea al mercado.",
"Creating technology designed for real classrooms.": "Creando tecnología pensada para aulas reales.", "Creating technology designed for real classrooms.": "Creando tecnología pensada para aulas reales.",
"Solving security challenges for growing businesses.": "Resolviendo retos de seguridad para negocios en crecimiento.", "Solving security challenges for growing businesses.": "Resolviendo retos de seguridad para negocios en crecimiento.",
"Turning product ideas into businesses built around real customers.": "Convirtiendo ideas de producto en negocios construidos alrededor de clientes reales." "Turning product ideas into businesses built around real customers.": "Convirtiendo ideas de producto en negocios construidos alrededor de clientes reales."
+4 -6
View File
@@ -3,7 +3,6 @@ import { icon, eyebrow, btn, textLink, mark } from '../layout.mjs';
const ventures = [ const ventures = [
['search', 'MARKETING &amp; AI SEARCH'], ['search', 'MARKETING &amp; AI SEARCH'],
['chip', 'AI SOFTWARE'], ['chip', 'AI SOFTWARE'],
['bottle', 'SPIRITS'],
['edu', 'EDUCATION TECHNOLOGY'], ['edu', 'EDUCATION TECHNOLOGY'],
['shield', 'CYBERSECURITY'], ['shield', 'CYBERSECURITY'],
['bag', 'E-COMMERCE'], ['bag', 'E-COMMERCE'],
@@ -35,7 +34,7 @@ const arrowUR = '<svg viewBox="0 0 14 14" fill="none" stroke="currentColor" stro
export default { export default {
path: '/', path: '/',
title: 'Dylan Mazzei | Founder, Operator &amp; Entrepreneur', title: 'Dylan Mazzei | Founder, Operator &amp; Entrepreneur',
description: 'Meet Dylan Mazzei, a founder and operator leading ventures across AI, software, spirits, education, cybersecurity, e-commerce, and more.', description: 'Meet Dylan Mazzei, a founder and operator leading ventures across AI, software, education, cybersecurity, e-commerce, and more.',
head: '<link rel="stylesheet" href="/assets/home.css">', head: '<link rel="stylesheet" href="/assets/home.css">',
scripts: '<script src="/assets/o2/three.min.js" defer></script>\n<script src="/assets/home.js" defer></script>', scripts: '<script src="/assets/o2/three.min.js" defer></script>\n<script src="/assets/home.js" defer></script>',
body: ` body: `
@@ -48,7 +47,7 @@ export default {
<div class="emblem" id="emblem"><img alt="Dylan Mazzei monogram" src="/assets/o2/dylan-monogram.webp" width="720" height="480"></div> <div class="emblem" id="emblem"><img alt="Dylan Mazzei monogram" src="/assets/o2/dylan-monogram.webp" width="720" height="480"></div>
${eyebrow('DYLAN MAZZEI | FOUNDER &amp; OPERATOR')} ${eyebrow('DYLAN MAZZEI | FOUNDER &amp; OPERATOR')}
<h1 id="hero-title"><span class="grad">One Good Idea Has Never</span> <span class="grad2">Been Enough for Me.</span></h1> <h1 id="hero-title"><span class="grad">One Good Idea Has Never</span> <span class="grad2">Been Enough for Me.</span></h1>
<p class="lead">I’ve spent the last eight years turning ideas into companies across marketing, AI, software, spirits, education, cybersecurity, e-commerce, and more. Four have been sold. Others are growing. And I’m nowhere near finished building.</p> <p class="lead">I’ve spent the last eight years turning ideas into companies across marketing, AI, software, education, cybersecurity, e-commerce, and more. Four have been sold. Others are growing. And I’m nowhere near finished building.</p>
<div class="btn-row">${btn('MY STORY', '/about/')}${btn('EXPLORE MY VENTURES', '#ventures', 'ghost')}</div> <div class="btn-row">${btn('MY STORY', '/about/')}${btn('EXPLORE MY VENTURES', '#ventures', 'ghost')}</div>
<div class="icon-row" id="iconRow" aria-hidden="true"></div> <div class="icon-row" id="iconRow" aria-hidden="true"></div>
</div> </div>
@@ -114,12 +113,11 @@ export default {
<div class="vhead reveal"> <div class="vhead reveal">
${eyebrow('CURRENT VENTURES')} ${eyebrow('CURRENT VENTURES')}
<h2 id="ventures-title" class="sr-only">Current ventures</h2> <h2 id="ventures-title" class="sr-only">Current ventures</h2>
<p class="lead">Today, I lead businesses across AI, marketing, software, spirits, education technology, cybersecurity, and e-commerce. They operate in very different worlds, which keeps me curious.</p> <p class="lead">Today, I lead businesses across AI, marketing, software, education technology, cybersecurity, and e-commerce. They operate in very different worlds, which keeps me curious.</p>
</div> </div>
<ul class="sr-only"> <ul class="sr-only">
<li>MARKETING &amp; AI SEARCH Leading teams through a constantly changing search landscape.</li> <li>MARKETING &amp; AI SEARCH Leading teams through a constantly changing search landscape.</li>
<li>AI SOFTWARE Building around new opportunities created by AI.</li> <li>AI SOFTWARE Building around new opportunities created by AI.</li>
<li>SPIRITS Taking a consumer brand from idea to market.</li>
<li>EDUCATION TECHNOLOGY Creating technology designed for real classrooms.</li> <li>EDUCATION TECHNOLOGY Creating technology designed for real classrooms.</li>
<li>CYBERSECURITY Solving security challenges for growing businesses.</li> <li>CYBERSECURITY Solving security challenges for growing businesses.</li>
<li>E-COMMERCE Turning product ideas into businesses built around real customers.</li> <li>E-COMMERCE Turning product ideas into businesses built around real customers.</li>
@@ -127,7 +125,7 @@ export default {
<div class="vtabs reveal" id="vtabs" role="tablist" aria-label="Ventures"></div> <div class="vtabs reveal" id="vtabs" role="tablist" aria-label="Ventures"></div>
<div class="vpanel reveal" id="vpanel"> <div class="vpanel reveal" id="vpanel">
<div class="vinfo"> <div class="vinfo">
<div><span class="vnum" id="vnum">01 / 06</span></div> <div><span class="vnum" id="vnum">01 / 05</span></div>
<div class="vt" id="vt" aria-live="polite"><h3 id="vname">MARKETING &amp; AI SEARCH</h3><p id="vdesc">Leading teams through a constantly changing search landscape.</p></div> <div class="vt" id="vt" aria-live="polite"><h3 id="vname">MARKETING &amp; AI SEARCH</h3><p id="vdesc">Leading teams through a constantly changing search landscape.</p></div>
<div class="btn-row">${btn('EXPLORE MY VENTURES', '/portfolio/', 'primary', 'btn-sm')}</div> <div class="btn-row">${btn('EXPLORE MY VENTURES', '/portfolio/', 'primary', 'btn-sm')}</div>
</div> </div>
+4 -17
View File
@@ -15,10 +15,9 @@
const ICONS = [ const ICONS = [
{ n: 'AI Software', side: 'l', x: '8%', y: '24%', r: '6deg', d: '0s', p: '<rect x="6" y="6" width="12" height="12" rx="2.5"/><path d="M9 3v3M15 3v3M9 18v3M15 18v3M3 9h3M3 15h3M18 9h3M18 15h3"/><path d="M9.6 15v-3.6L12 9.4l2.4 2V15M9.6 13.4h4.8"/>' }, { n: 'AI Software', side: 'l', x: '8%', y: '24%', r: '6deg', d: '0s', p: '<rect x="6" y="6" width="12" height="12" rx="2.5"/><path d="M9 3v3M15 3v3M9 18v3M15 18v3M3 9h3M3 15h3M18 9h3M18 15h3"/><path d="M9.6 15v-3.6L12 9.4l2.4 2V15M9.6 13.4h4.8"/>' },
{ n: 'Marketing & AI Search', side: 'l', x: '15%', y: '50%', r: '-7deg', d: '-2s', p: '<circle cx="10.5" cy="10.5" r="6.2"/><path d="m15.2 15.2 5 5"/><path d="m7.6 12.6 2.2-2.4 1.8 1.6 2.6-3"/>' }, { n: 'Marketing & AI Search', side: 'l', x: '15%', y: '50%', r: '-7deg', d: '-2s', p: '<circle cx="10.5" cy="10.5" r="6.2"/><path d="m15.2 15.2 5 5"/><path d="m7.6 12.6 2.2-2.4 1.8 1.6 2.6-3"/>' },
{ n: 'Spirits', side: 'l', x: '6%', y: '73%', r: '8deg', d: '-4s', p: '<path d="M10 2.5h4M10.5 2.5v4.2L8.6 9.4a3 3 0 0 0-.6 1.8V20a1.5 1.5 0 0 0 1.5 1.5h5A1.5 1.5 0 0 0 16 20v-8.8a3 3 0 0 0-.6-1.8l-1.9-2.7V2.5"/><path d="M8 13.5h8v4H8z"/>' }, { n: 'Education Technology', side: 'r', x: '8%', y: '30%', r: '-6deg', d: '-1s', p: '<path d="m2.5 9.5 9.5-5 9.5 5-9.5 5z"/><path d="M6.5 12v4.2c0 1.2 2.5 2.8 5.5 2.8s5.5-1.6 5.5-2.8V12"/><path d="M21.5 9.5v6"/>' },
{ n: 'Education Technology', side: 'r', x: '8%', y: '22%', r: '-6deg', d: '-1s', p: '<path d="m2.5 9.5 9.5-5 9.5 5-9.5 5z"/><path d="M6.5 12v4.2c0 1.2 2.5 2.8 5.5 2.8s5.5-1.6 5.5-2.8V12"/><path d="M21.5 9.5v6"/>' }, { n: 'Cybersecurity', side: 'r', x: '12%', y: '62%', r: '7deg', d: '-3s', p: '<path d="M12 3 4.5 6v5.5c0 4.5 3.2 7.8 7.5 9.5 4.3-1.7 7.5-5 7.5-9.5V6z"/><rect x="9" y="10.8" width="6" height="5" rx="1"/><path d="M10.2 10.8V9.4a1.8 1.8 0 0 1 3.6 0v1.4"/>' },
{ n: 'Cybersecurity', side: 'r', x: '15%', y: '50%', r: '7deg', d: '-3s', p: '<path d="M12 3 4.5 6v5.5c0 4.5 3.2 7.8 7.5 9.5 4.3-1.7 7.5-5 7.5-9.5V6z"/><rect x="9" y="10.8" width="6" height="5" rx="1"/><path d="M10.2 10.8V9.4a1.8 1.8 0 0 1 3.6 0v1.4"/>' }, { n: 'E-Commerce', side: 'l', x: '6%', y: '73%', r: '8deg', d: '-5s', p: '<path d="M5 8h14l-1 12H6z"/><path d="M9 8V7a3 3 0 0 1 6 0v1"/>' },
{ n: 'E-Commerce', side: 'r', x: '6%', y: '73%', r: '-8deg', d: '-5s', p: '<path d="M5 8h14l-1 12H6z"/><path d="M9 8V7a3 3 0 0 1 6 0v1"/>' },
]; ];
const tileHTML = (i) => '<div class="tile">' + svg(i.p) + '</div><span class="tl">' + T(i.n).replace('&', '&amp;') + '</span>'; const tileHTML = (i) => '<div class="tile">' + svg(i.p) + '</div><span class="tl">' + T(i.n).replace('&', '&amp;') + '</span>';
const fl = $('#floaters'), ir = $('#iconRow'); const fl = $('#floaters'), ir = $('#iconRow');
@@ -215,7 +214,6 @@
const V = [ const V = [
{ n: 'MARKETING & AI SEARCH', d: 'Leading teams through a constantly changing search landscape.', c: '#1fb7ff', m: 'magnifier' }, { n: 'MARKETING & AI SEARCH', d: 'Leading teams through a constantly changing search landscape.', c: '#1fb7ff', m: 'magnifier' },
{ n: 'AI SOFTWARE', d: 'Building around new opportunities created by AI.', c: '#7a7bff', m: 'chip' }, { n: 'AI SOFTWARE', d: 'Building around new opportunities created by AI.', c: '#7a7bff', m: 'chip' },
{ n: 'SPIRITS', d: 'Taking a consumer brand from idea to market.', c: '#3fa9ff', m: 'bottle' },
{ n: 'EDUCATION TECHNOLOGY', d: 'Creating technology designed for real classrooms.', c: '#27d9ff', m: 'cap' }, { n: 'EDUCATION TECHNOLOGY', d: 'Creating technology designed for real classrooms.', c: '#27d9ff', m: 'cap' },
{ n: 'CYBERSECURITY', d: 'Solving security challenges for growing businesses.', c: '#8a6bff', m: 'lock' }, { n: 'CYBERSECURITY', d: 'Solving security challenges for growing businesses.', c: '#8a6bff', m: 'lock' },
{ n: 'E-COMMERCE', d: 'Turning product ideas into businesses built around real customers.', c: '#1a8bff', m: 'bag' }, { n: 'E-COMMERCE', d: 'Turning product ideas into businesses built around real customers.', c: '#1a8bff', m: 'bag' },
@@ -234,7 +232,7 @@
function setV(i, first) { function setV(i, first) {
vi = (i + V.length) % V.length; vi = (i + V.length) % V.length;
vbtns.forEach((b, n) => b.setAttribute('aria-selected', String(n === vi))); vbtns.forEach((b, n) => b.setAttribute('aria-selected', String(n === vi)));
const apply = () => { vname.textContent = T(V[vi].n); vdesc.textContent = T(V[vi].d); vnum.textContent = '0' + (vi + 1) + ' / 06'; vpanel.style.setProperty('--ac', V[vi].c); vt.classList.remove('out'); }; const apply = () => { vname.textContent = T(V[vi].n); vdesc.textContent = T(V[vi].d); vnum.textContent = '0' + (vi + 1) + ' / 0' + V.length; vpanel.style.setProperty('--ac', V[vi].c); vt.classList.remove('out'); };
if (first || reduce) apply(); else { vt.classList.add('out'); setTimeout(apply, 200); } if (first || reduce) apply(); else { vt.classList.add('out'); setTimeout(apply, 200); }
vSwitch(vi); vSwitch(vi);
const sel = vbtns[vi]; const sel = vbtns[vi];
@@ -315,17 +313,6 @@
g.rotation.x = -.35; g.rotation.x = -.35;
return g; return g;
}, },
// Spirits: a bottle (lathe profile) with a chrome cap
bottle() {
const g = new THREE.Group();
const pts = [[0, -1.7], [.78, -1.7], [.86, -1.55], [.86, .35], [.7, .7], [.32, 1.05], [.27, 1.55], [0, 1.55]].map(([x, y]) => new THREE.Vector2(x, y));
g.add(M(new THREE.LatheGeometry(pts, 48), glass));
const liquid = M(new THREE.CylinderGeometry(.78, .78, 1.6, 48), metal); liquid.position.y = -.85; g.add(liquid);
const label = M(new THREE.CylinderGeometry(.875, .875, .55, 48, 1, true), glow); label.position.y = -.35; g.add(label);
const cap = M(new THREE.CylinderGeometry(.3, .3, .4, 32), chrome); cap.position.y = 1.72; g.add(cap);
g.scale.setScalar(.85);
return g;
},
// Education Technology: a graduation cap // Education Technology: a graduation cap
cap() { cap() {
const g = new THREE.Group(); const g = new THREE.Group();