Apply remaining owner feedback
- Remove The Business Launch Playbook everywhere (home section, About card, Business Setup and Consulting mentions) - Add the meSEO logo and a Korrith venture card linking to korrith.com - Rename the press feature to Gulf Insider; the card links out once a URL is set - Use the new photos of Dylan: podcast headshot, About, Consulting, Fractional, the magazine cover and a Press photo gallery Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@@ -41,7 +41,8 @@ Importa el repo en Vercel. `vercel.json` ya define el build (`npm run build`), l
|
|||||||
|
|
||||||
## Pendientes de contenido
|
## Pendientes de contenido
|
||||||
|
|
||||||
- **Press:** confirmar el titular exacto del artículo de Gulf Magazine y su URL (`FEATURE` en `src/pages/press.mjs`).
|
- **Press:** falta el link del artículo de Gulf Insider y confirmar su titular exacto (`FEATURE` en `src/pages/press.mjs`).
|
||||||
|
- **Korrith:** falta el cargo de Dylan (el tercer campo, vacío, en `src/pages/portfolio.mjs`).
|
||||||
- **Páginas fuera del alcance actual:** Playbook y Poetry no forman parte del sitio. Sus secciones se muestran sin botón; si se crean esas páginas, se añade el botón con su texto original del documento.
|
- **Páginas fuera del alcance actual:** Playbook y Poetry no forman parte del sitio. Sus secciones se muestran sin botón; si se crean esas páginas, se añade el botón con su texto original del documento.
|
||||||
- **Calendario:** poner el link real de agenda en `SITE.calendar`.
|
- **Calendario:** poner el link real de agenda en `SITE.calendar`.
|
||||||
- **Formulario de contacto:** hoy abre el cliente de correo con el mensaje prellenado. Para recibirlo directo hay que conectar un servicio (Formspree, Resend, etc.).
|
- **Formulario de contacto:** hoy abre el cliente de correo con el mensaje prellenado. Para recibirlo directo hay que conectar un servicio (Formspree, Resend, etc.).
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="visual portrait anim">
|
<div class="visual portrait anim">
|
||||||
<img src="/assets/dylan-portrait.jpg" alt="Dylan Mazzei" width="900" height="900">
|
<img src="/assets/photos/dylan-gallery-wall.jpg" alt="Dylan Mazzei" width="1100" height="1467" style="object-position:center 18%">
|
||||||
<div class="flow" aria-hidden="true">
|
<div class="flow" aria-hidden="true">
|
||||||
<small>Four companies have been sold.</small>
|
<small>Four companies have been sold.</small>
|
||||||
<ol><li>Insurance</li><li>Marketing</li><li>Home Healthcare</li><li>Apparel</li></ol>
|
<ol><li>Insurance</li><li>Marketing</li><li>Home Healthcare</li><li>Apparel</li></ol>
|
||||||
@@ -176,15 +176,7 @@ export default {
|
|||||||
<p>Not every interest needs monetizing.<br>Not every thought needs optimizing.<br>Not everything meaningful needs a metric attached to it.</p>
|
<p>Not every interest needs monetizing.<br>Not every thought needs optimizing.<br>Not everything meaningful needs a metric attached to it.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="duo reveal">
|
<div class="reveal">
|
||||||
<article class="card card-lg">
|
|
||||||
<span class="ic">${icon('book')}</span>
|
|
||||||
<h3 class="h-lg">Some Ideas Need Structure</h3>
|
|
||||||
<div class="prose">
|
|
||||||
<p>That instinct became The Business Launch Playbook.</p>
|
|
||||||
<p>I wanted to put what I had learned about beginnings somewhere useful, especially that strange stretch where an idea has to become something real.</p>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
<article class="card card-lg card-dark">
|
<article class="card card-lg card-dark">
|
||||||
${eyebrow('A DIFFERENT OUTLET')}
|
${eyebrow('A DIFFERENT OUTLET')}
|
||||||
<h3 class="h-lg">Some Thoughts Need Space.</h3>
|
<h3 class="h-lg">Some Thoughts Need Space.</h3>
|
||||||
|
|||||||
@@ -125,7 +125,6 @@ export default {
|
|||||||
<p class="sr-only">You open another account. Hire someone. Add a partner. Enter another market. Raise money. Sell something.</p>
|
<p class="sr-only">You open another account. Hire someone. Add a partner. Enter another market. Raise money. Sell something.</p>
|
||||||
<p class="body-ink">Suddenly, a decision made in an afternoon is still sitting in the middle of the business years later.</p>
|
<p class="body-ink">Suddenly, a decision made in an afternoon is still sitting in the middle of the business years later.</p>
|
||||||
<p>My perspective comes from operating companies across different industries and markets, not simply helping someone complete a filing.</p>
|
<p>My perspective comes from operating companies across different industries and markets, not simply helping someone complete a filing.</p>
|
||||||
<p>It’s also why I wrote The Business Launch Playbook.</p>
|
|
||||||
<p class="body-ink">The beginning deserves more thought than it usually gets.</p>
|
<p class="body-ink">The beginning deserves more thought than it usually gets.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ const plans = [
|
|||||||
|
|
||||||
const services = [
|
const services = [
|
||||||
{ id: 'marketing', icon: 'search', name: 'Marketing & AI Search', h: 'Get Found Where Attention Is Moving.', p: ['SEO, AI search visibility, paid media, and funnel strategy grounded in what people actually discover, click, and choose.', 'Marketing has been part of my operating world for years, and it remains one of the areas where technology keeps changing the answer.'], cta: 'EXPLORE MARKETING & AI SEARCH', href: '/consulting/marketing/' },
|
{ id: 'marketing', icon: 'search', name: 'Marketing & AI Search', h: 'Get Found Where Attention Is Moving.', p: ['SEO, AI search visibility, paid media, and funnel strategy grounded in what people actually discover, click, and choose.', 'Marketing has been part of my operating world for years, and it remains one of the areas where technology keeps changing the answer.'], cta: 'EXPLORE MARKETING & AI SEARCH', href: '/consulting/marketing/' },
|
||||||
{ id: 'business-setup', icon: 'building', name: 'Business Setup', h: 'Start With Fewer Expensive Mistakes.', p: ['Entity and state selection, licensing, banking architecture, and the practical decisions that turn an idea into an operating business.', 'I’ve started enough companies to know that early decisions have a habit of following you. I unpack more of that thinking in The Business Launch Playbook.'], cta: 'EXPLORE BUSINESS SETUP', href: '/consulting/business-setup/' },
|
{ id: 'business-setup', icon: 'building', name: 'Business Setup', h: 'Start With Fewer Expensive Mistakes.', p: ['Entity and state selection, licensing, banking architecture, and the practical decisions that turn an idea into an operating business.', 'I’ve started enough companies to know that early decisions have a habit of following you.'], cta: 'EXPLORE BUSINESS SETUP', href: '/consulting/business-setup/' },
|
||||||
{ id: 'optimization', icon: 'gauge', name: 'Business Optimization', h: 'Find What Growth Made Messy.', p: ['Growth creates opportunity.', 'It also creates workarounds, extra steps, unnecessary costs, unclear ownership, and processes nobody remembers choosing.', 'The job is to find what the business has outgrown and make it work for where the company is going next.'] , cta: 'EXPLORE BUSINESS OPTIMIZATION', href: '/consulting/business-optimization/' },
|
{ id: 'optimization', icon: 'gauge', name: 'Business Optimization', h: 'Find What Growth Made Messy.', p: ['Growth creates opportunity.', 'It also creates workarounds, extra steps, unnecessary costs, unclear ownership, and processes nobody remembers choosing.', 'The job is to find what the business has outgrown and make it work for where the company is going next.'] , cta: 'EXPLORE BUSINESS OPTIMIZATION', href: '/consulting/business-optimization/' },
|
||||||
{ id: 'supply-chain', icon: 'truck', name: 'Supply Chain', h: 'Know What Happens Before It Reaches the Customer.', p: ['Sourcing, supplier vetting, logistics planning, and landed-cost analysis for businesses where products have to move through the real world.', 'My work across consumer products and e-commerce has taught me that what happens before the sale can determine whether the sale makes sense.'] , cta: 'EXPLORE SUPPLY CHAIN', href: '/consulting/supply-chain/' },
|
{ id: 'supply-chain', icon: 'truck', name: 'Supply Chain', h: 'Know What Happens Before It Reaches the Customer.', p: ['Sourcing, supplier vetting, logistics planning, and landed-cost analysis for businesses where products have to move through the real world.', 'My work across consumer products and e-commerce has taught me that what happens before the sale can determine whether the sale makes sense.'] , cta: 'EXPLORE SUPPLY CHAIN', href: '/consulting/supply-chain/' },
|
||||||
{ id: 'cybersecurity', icon: 'shield', name: 'Cybersecurity', h: 'Find the Exposure Before Someone Else Does.', p: ['Security posture assessments, vulnerability reviews, and compliance readiness grounded in how the business actually operates.', 'The goal isn’t security theatre.', 'It’s understanding where the business is exposed and what deserves attention first.'] , cta: 'EXPLORE CYBERSECURITY', href: '/consulting/cybersecurity/' },
|
{ id: 'cybersecurity', icon: 'shield', name: 'Cybersecurity', h: 'Find the Exposure Before Someone Else Does.', p: ['Security posture assessments, vulnerability reviews, and compliance readiness grounded in how the business actually operates.', 'The goal isn’t security theatre.', 'It’s understanding where the business is exposed and what deserves attention first.'] , cta: 'EXPLORE CYBERSECURITY', href: '/consulting/cybersecurity/' },
|
||||||
@@ -191,7 +191,7 @@ export default {
|
|||||||
<div class="btn-row">${btn('EXPLORE DYLAN’S VENTURES', '/portfolio/')}</div>
|
<div class="btn-row">${btn('EXPLORE DYLAN’S VENTURES', '/portfolio/')}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="visual portrait">
|
<div class="visual portrait">
|
||||||
<img src="/assets/dylan-portrait.jpg" alt="Dylan Mazzei" width="900" height="900" loading="lazy">
|
<img src="/assets/photos/dylan-bull.jpg" alt="Dylan Mazzei" width="1100" height="1467" loading="lazy" style="object-position:center 30%">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ export default {
|
|||||||
h2: 'I Don’t Advise From the Sidelines.',
|
h2: 'I Don’t Advise From the Sidelines.',
|
||||||
paras: ['*Fractional leadership only works if the person in the seat is willing to own decisions.', 'That is how I approach my own companies, and it is how I approach a fractional role.', 'I work with the team, review the numbers, make the calls that belong to the role, and stay close enough to see whether those decisions are working.'],
|
paras: ['*Fractional leadership only works if the person in the seat is willing to own decisions.', 'That is how I approach my own companies, and it is how I approach a fractional role.', 'I work with the team, review the numbers, make the calls that belong to the role, and stay close enough to see whether those decisions are working.'],
|
||||||
link: ['You can see the companies I operate today and the businesses and exits that shaped that experience.', '/portfolio/'],
|
link: ['You can see the companies I operate today and the businesses and exits that shaped that experience.', '/portfolio/'],
|
||||||
side: '<div class="portrait"><img src="/assets/dylan-portrait.jpg" alt="Dylan Mazzei" width="900" height="900" loading="lazy"></div>',
|
side: '<div class="portrait"><img src="/assets/photos/dylan-livex.jpg" alt="Dylan Mazzei at LIVEX" width="1100" height="1467" loading="lazy" style="object-position:center 25%"></div>',
|
||||||
}) +
|
}) +
|
||||||
faqBlock({ id: 'fr-faq', h2: 'Before You Open a Seat.', items: faqs }) +
|
faqBlock({ id: 'fr-faq', h2: 'Before You Open a Seat.', items: faqs }) +
|
||||||
closingBlock({
|
closingBlock({
|
||||||
|
|||||||
@@ -206,27 +206,6 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="playbook" aria-labelledby="playbook-title">
|
|
||||||
<div class="pbword" id="pbword" aria-hidden="true">Playbook Playbook</div>
|
|
||||||
<div class="wrap pbgrid">
|
|
||||||
<div class="pbtext reveal">
|
|
||||||
${eyebrow('FROM THE NOTEBOOK')}
|
|
||||||
<h2 id="playbook-title" class="h-display">Different Businesses. Different Beginnings. One Playbook.</h2>
|
|
||||||
<p class="lead">I’ve started enough businesses to know the beginning matters.</p>
|
|
||||||
<p class="lead">The early calls. The first customers. The moments when an idea has to become more than an idea.</p>
|
|
||||||
<p class="lead">The Business Launch Playbook puts my approach to those moments on the page, shaped by years of starting, operating, and growing businesses across very different industries.</p>
|
|
||||||
</div>
|
|
||||||
<div class="book-stage reveal">
|
|
||||||
<div class="book" id="book" role="img" aria-label="The Business Launch Playbook by Dylan Mazzei">
|
|
||||||
${mark()}
|
|
||||||
<h3>The Business Launch Playbook</h3>
|
|
||||||
<div class="by">Dylan Mazzei</div>
|
|
||||||
<span class="sheen" aria-hidden="true"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="press" aria-labelledby="press-title">
|
<section id="press" aria-labelledby="press-title">
|
||||||
<div class="wrap">
|
<div class="wrap">
|
||||||
<div class="phead">
|
<div class="phead">
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { icon, eyebrow, btn, textLink } from '../layout.mjs';
|
import { icon, eyebrow, btn, textLink } from '../layout.mjs';
|
||||||
|
|
||||||
const URLS = {"Ai Growth Technologies": "https://aigrowthtechnologies.com", "READTYCH": "https://readtych.com", "Growth360Partners": "https://growth360partners.com", "Infinitus Texas": "https://www.infinitustx.com", "Skinny Spiritz": "https://skinnyspiritz.com", "meSEO": "https://meseoapp.com"};
|
const URLS = {"Ai Growth Technologies": "https://aigrowthtechnologies.com", "READTYCH": "https://readtych.com", "Growth360Partners": "https://growth360partners.com", "Infinitus Texas": "https://www.infinitustx.com", "Skinny Spiritz": "https://skinnyspiritz.com", "meSEO": "https://meseoapp.com", "Korrith": "https://korrith.com"};
|
||||||
|
|
||||||
|
const DARK_LOGOS = ['meseo.png'];
|
||||||
|
|
||||||
const ventures = [
|
const ventures = [
|
||||||
['Ai Growth Technologies', 'AG', 'CEO & Board Member', 'AI-focused marketing and growth company working at the intersection of digital visibility, strategy, and performance.', ['AI Search', 'Digital Visibility', 'Growth Strategy'], null],
|
['Ai Growth Technologies', 'AG', 'CEO & Board Member', 'AI-focused marketing and growth company working at the intersection of digital visibility, strategy, and performance.', ['AI Search', 'Digital Visibility', 'Growth Strategy'], null],
|
||||||
@@ -9,7 +11,8 @@ const ventures = [
|
|||||||
['Infinitus Texas', 'IT', 'Partner & Strategic Advisor', 'Strategic partnership focused on brand positioning, marketing direction, and creating stronger foundations for scalable growth.', ['Strategy', 'Positioning', 'Growth'], 'infinitus-texas.png'],
|
['Infinitus Texas', 'IT', 'Partner & Strategic Advisor', 'Strategic partnership focused on brand positioning, marketing direction, and creating stronger foundations for scalable growth.', ['Strategy', 'Positioning', 'Growth'], 'infinitus-texas.png'],
|
||||||
['Skinny Spiritz', 'SS', 'Chief Executive Officer & Board Member', 'Beverage brand where product, positioning, placement, partnerships, and customer attention all have to work together.', ['Spirits', 'Brand Growth', 'Partnerships'], 'skinny-spiritz.svg'],
|
['Skinny Spiritz', 'SS', 'Chief Executive Officer & Board Member', 'Beverage brand where product, positioning, placement, partnerships, and customer attention all have to work together.', ['Spirits', 'Brand Growth', 'Partnerships'], 'skinny-spiritz.svg'],
|
||||||
['AiGrowth360', 'A3', 'Chief Executive Officer & Founder', 'Performance-driven digital marketing company using AI, analytics, and search strategy to find better ways to create measurable growth.', ['AI', 'Analytics', 'Performance Marketing'], null],
|
['AiGrowth360', 'A3', 'Chief Executive Officer & Founder', 'Performance-driven digital marketing company using AI, analytics, and search strategy to find better ways to create measurable growth.', ['AI', 'Analytics', 'Performance Marketing'], null],
|
||||||
['meSEO', 'me', 'Founder & Strategic Growth Leader', 'Web application built around AI search, SEO, and the changing ways businesses are discovered online.', ['Software', 'AI Search', 'SEO'], null],
|
['meSEO', 'me', 'Founder & Strategic Growth Leader', 'Web application built around AI search, SEO, and the changing ways businesses are discovered online.', ['Software', 'AI Search', 'SEO'], 'meseo.png'],
|
||||||
|
['Korrith', 'KO', '', 'Enterprise-grade managed infrastructure, AI-powered security, and quantum readiness.', ['Secure Infrastructure', 'AI Security', 'Quantum Readiness'], 'korrith.png'],
|
||||||
];
|
];
|
||||||
|
|
||||||
const capabilities = [
|
const capabilities = [
|
||||||
@@ -62,8 +65,8 @@ export default {
|
|||||||
${ventures
|
${ventures
|
||||||
.map(
|
.map(
|
||||||
([name, mono, role, desc, focus, logo]) => `<article class="venture">${URLS[name] ? `<a class="venture-link" href="${URLS[name]}" target="_blank" rel="noopener" aria-label="Visit ${name}"></a>` : ''}
|
([name, mono, role, desc, focus, logo]) => `<article class="venture">${URLS[name] ? `<a class="venture-link" href="${URLS[name]}" target="_blank" rel="noopener" aria-label="Visit ${name}"></a>` : ''}
|
||||||
<div class="vlogo${logo ? '' : ' vlogo-empty'}">${logo ? `<img src="/assets/logos/${logo}" alt="${name} logo" loading="lazy">` : `<span class="mono" aria-hidden="true">${mono}</span>`}</div>
|
<div class="vlogo${logo ? '' : ' vlogo-empty'}${DARK_LOGOS.includes(logo) ? ' vlogo-dark' : ''}">${logo ? `<img src="/assets/logos/${logo}" alt="${name} logo" loading="lazy">` : `<span class="mono" aria-hidden="true">${mono}</span>`}</div>
|
||||||
<div class="stack-xs"><h3>${name}</h3><p class="vrole">${role}</p></div>
|
<div class="stack-xs"><h3>${name}</h3>${role ? `<p class="vrole">${role}</p>` : ''}</div>
|
||||||
<p>${desc}</p>
|
<p>${desc}</p>
|
||||||
<div class="focus"><small>FOCUS:</small><div class="chips">${focus.map((f) => `<span class="tag">${f}</span>`).join('')}</div></div>
|
<div class="focus"><small>FOCUS:</small><div class="chips">${focus.map((f) => `<span class="tag">${f}</span>`).join('')}</div></div>
|
||||||
</article>`
|
</article>`
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { icon, eyebrow, btn, textLink, SITE } from '../layout.mjs';
|
import { icon, eyebrow, btn, textLink, SITE } from '../layout.mjs';
|
||||||
|
|
||||||
// TODO(content): the source document asks for the exact published Gulf Magazine
|
// TODO(content): add the Gulf Insider article link (FEATURE.url) and confirm the
|
||||||
// headline. Replace FEATURE.headline (and add FEATURE.url) once it is confirmed.
|
// exact published headline (FEATURE.headline).
|
||||||
const FEATURE = {
|
const FEATURE = {
|
||||||
outlet: 'GULF MAGAZINE • FEATURE ARTICLE',
|
outlet: 'GULF INSIDER • FEATURE ARTICLE',
|
||||||
headline: 'Inside Dylan Mazzei’s High-Stakes',
|
headline: 'Inside Dylan Mazzei’s High-Stakes',
|
||||||
url: null,
|
url: null,
|
||||||
};
|
};
|
||||||
@@ -46,10 +46,11 @@ export default {
|
|||||||
<div class="stack-sm">${eyebrow('FEATURED PRESS')}<h2 id="featured" class="h-display">From the Other Side of the Interview.</h2></div>
|
<div class="stack-sm">${eyebrow('FEATURED PRESS')}<h2 id="featured" class="h-display">From the Other Side of the Interview.</h2></div>
|
||||||
</div>
|
</div>
|
||||||
<article class="feature-press reveal">
|
<article class="feature-press reveal">
|
||||||
|
${FEATURE.url ? `<a class="fp-link" href="${FEATURE.url}" target="_blank" rel="noopener" aria-label="Read the Gulf Insider feature"></a>` : ''}
|
||||||
<div class="fp-visual" aria-hidden="true">
|
<div class="fp-visual" aria-hidden="true">
|
||||||
<div class="magazine">
|
<div class="magazine">
|
||||||
<img src="/assets/dylan-portrait.jpg" alt="" width="900" height="900" loading="lazy">
|
<img src="/assets/photos/dylan-goodlife.jpg" alt="" width="1100" height="1467" loading="lazy">
|
||||||
<span class="mast">GULF</span>
|
<span class="mast">GULF INSIDER</span>
|
||||||
<span class="cover-line">${FEATURE.headline}</span>
|
<span class="cover-line">${FEATURE.headline}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -62,6 +63,14 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section class="section" aria-label="Photos of Dylan Mazzei">
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="gallery reveal">
|
||||||
|
${[['dylan-livex-smile','Dylan Mazzei at the LIVEX Liveability and Investment Exhibition'],['dylan-podcast','Dylan Mazzei in a podcast studio'],['dylan-gallery-wall','Dylan Mazzei at an exhibition'],['dylan-dinner','Dylan Mazzei at dinner']].map(([f,a]) => `<figure><img src="/assets/photos/${f}.jpg" alt="${a}" width="1100" height="1467" loading="lazy"></figure>`).join('')}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<section class="section" aria-labelledby="speak">
|
<section class="section" aria-labelledby="speak">
|
||||||
<div class="wrap">
|
<div class="wrap">
|
||||||
<div class="sec-head reveal">
|
<div class="sec-head reveal">
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 252 KiB After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 326 KiB |
|
After Width: | Height: | Size: 213 KiB |
|
After Width: | Height: | Size: 236 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 321 KiB |
|
After Width: | Height: | Size: 332 KiB |
|
After Width: | Height: | Size: 223 KiB |
@@ -1011,3 +1011,11 @@ h1, h2, h3, h4 { font-weight: 600; }
|
|||||||
|
|
||||||
.venture-link { position: absolute; inset: 0; z-index: 2; border-radius: inherit; }
|
.venture-link { position: absolute; inset: 0; z-index: 2; border-radius: inherit; }
|
||||||
.venture:has(.venture-link) { cursor: pointer; }
|
.venture:has(.venture-link) { cursor: pointer; }
|
||||||
|
.vlogo.vlogo-dark { background: #111318; border-color: #111318; }
|
||||||
|
.gallery { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
|
||||||
|
.gallery figure { margin: 0; border-radius: 24px; overflow: hidden; border: 1px solid var(--bd); aspect-ratio: 3 / 4; }
|
||||||
|
.gallery img { width: 100%; height: 100%; object-fit: cover; object-position: center 25%; transition: transform .6s ease; }
|
||||||
|
.gallery figure:hover img { transform: scale(1.04); }
|
||||||
|
@media (max-width: 900px) { .gallery { grid-template-columns: repeat(2, 1fr); } }
|
||||||
|
.feature-press { position: relative; }
|
||||||
|
.fp-link { position: absolute; inset: 0; z-index: 3; border-radius: inherit; }
|
||||||
|
|||||||