/* ============================================================================
   ds-web.css · Design System web Don Artesano & CubasFarm · Fases 1-3 (D12)
   Fonte da verdade: Tokens/tokens.json (nó web) · specs: 45 componentes (nó web.componentes do tokens.json)
   Origem: portado do versão anterior (Tentativas Antigas) em 07/07/2026, com as decisões
   D1 (texto botão CF), D3 (Ônix Destaque DA, secundário/link CF) aplicadas
   na camada de tokens de marca. MONTADO, ainda não aplicado em produção.
   Uso: <html data-brand="da"> ou <html data-brand="cf">.
   ============================================================================ */

@layer reset, tokens, base, atoms, molecules, organisms, templates, utilities;

/* ================================================================
   TOKENS · núcleo (gerado do DTCG pelo Style Dictionary, versão anterior)
   ================================================================ */
@layer tokens {
:root {
  /* Texto sobre bg primário · idêntico em DA e CF */
  --action-primary-text: #ffffff;
  /* Texto sobre bg primário invertido (botão sobre surface escura) */
  --action-primary-text-inverse: #323643;
  --avatar-size-lg: 40px;
  --avatar-size-md: 32px;
  --avatar-size-sm: 24px;
  --avatar-size-xl: 64px;
  /* Borda padrão de input/card */
  --border-default: #d9d9d9;
  /* Borda sobre surface inverse */
  --border-inverse: #ffffff;
  /* Borda editorial · uso pontual */
  --border-strong: #323643;
  /* Divider muito sutil */
  --border-subtle: #ededed;
  --border-width-bold: 3px;
  --border-width-default: 1.5px;
  --border-width-hairline: 0.5px;
  /* Focus ring (proposta) */
  --border-width-thick: 2px;
  /* Botão secundário */
  --border-width-thin: 1px;
  --breakpoint-desktop: 1025px;
  --breakpoint-mobile: 0px;
  --breakpoint-tablet: 768px;
  --breakpoint-wide: 1440px;
  --canvas-feed-height: 1440px;
  --canvas-feed-width: 1080px;
  --canvas-story-height: 1920px;
  --canvas-story-width: 1080px;
  /* Azul Ônix · EXCLUSIVA Don Artesano, o Destaque (decisão D3) · nunca na CubasFarm */
  --color-azul-onix: #1b212d;
  /* Branco Resina · fundos claros quentes */
  --color-branco-resina: #f2ead9;
  /* Branco SSM · neutro absoluto, texto sobre escuro */
  --color-branco-ssm: #ffffff;
  /* Cinza Quartzo · subtítulos/menus/legendas */
  --color-cinza-quartzo: #606470;
  /* Dourado · exclusivo CubasFarm. Proibido em Don Artesano. */
  --color-dourado: #d19f47;
  /* Borda padrão de controles e cards */
  --color-neutro-border-default: #d9d9d9;
  /* Linha sutil entre seções */
  --color-neutro-border-subtle: #ededed;
  /* Page canvas grey · fundo de docs / app surface secundária */
  --color-neutro-canvas: #f8f8f8;
  /* Vermelho escuro · error state (AA sobre brancos) */
  --color-state-error: #a8281c;
  /* Azul escuro · info state (AA sobre brancos) */
  --color-state-info: #1f4d8c;
  /* Verde escuro · success state (AA sobre brancos) */
  --color-state-success: #1f6b3e;
  /* Âmbar escuro · warning state. NÃO confundir com dourado (#D19F47, brand exclusivo CF). */
  --color-state-warning: #9c6a1e;
  /* Titânio Sólido · principal (D18): dominante na DA, uso comedido na CF */
  --color-titanio-solido: #323643;
  /* Wide breakpoint */
  --container-max-width: 1440px;
  /* 48px */
  --container-padding-x-desktop: 48px;
  /* 16px */
  --container-padding-x-mobile: 16px;
  /* Default · accordions, dropdowns */
  --duration-base: 300ms;
  /* Reveals, fades editoriais */
  --duration-editorial: 800ms;
  /* Hover, color transitions */
  --duration-fast: 200ms;
  /* Feedback imediato · focus, press */
  --duration-instant: 100ms;
  /* Slide-ins, modals */
  --duration-slow: 500ms;
  --easing-default: cubic-bezier(0.4, 0, 0.2, 1);
  /* Curva premium · entradas suaves */
  --easing-editorial: cubic-bezier(0.22, 1, 0.36, 1);
  --easing-in: cubic-bezier(0.4, 0, 1, 1);
  --easing-out: cubic-bezier(0, 0, 0.2, 1);
  /* Default · sobrescrito por [data-brand] para usar accent. outline: 2px solid var(--focus-ring); outline-offset: 2px */
  --focus-ring: #323643;
  /* Legenda · 28px */
  --font-body-2xl-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* Legenda · 28px */
  --font-body-2xl-font-size: 28px;
  /* Legenda · 28px */
  --font-body-2xl-font-weight: 400;
  /* Legenda · 28px */
  --font-body-2xl-letter-spacing: 0;
  /* Legenda · 28px */
  --font-body-2xl-line-height: 1.3;
  /* Corpo · 35px (canvas social) */
  --font-body-3xl-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* Corpo · 35px (canvas social) */
  --font-body-3xl-font-size: 35px; /* Corpo 35px: drift 40px corrigido */
  /* Corpo · 35px (canvas social) */
  --font-body-3xl-font-weight: 400;
  /* Corpo · 35px (canvas social) */
  --font-body-3xl-letter-spacing: 0;
  /* Corpo · 35px (canvas social) */
  --font-body-3xl-line-height: 1.4;
  --font-body-lg-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-body-lg-font-size: 16px;
  --font-body-lg-font-weight: 400;
  --font-body-lg-letter-spacing: 0;
  --font-body-lg-line-height: 1.4;
  /* Web · Body · 14px */
  --font-body-md-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* Web · Body · 14px */
  --font-body-md-font-size: 14px;
  /* Web · Body · 14px */
  --font-body-md-font-weight: 400;
  /* Web · Body · 14px */
  --font-body-md-letter-spacing: 0;
  /* Web · Body · 14px */
  --font-body-md-line-height: 1.55;
  /* Web · Caption · 12px */
  --font-body-sm-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* Web · Caption · 12px */
  --font-body-sm-font-size: 12px;
  /* Web · Caption · 12px */
  --font-body-sm-font-weight: 400;
  /* Web · Caption · 12px */
  --font-body-sm-letter-spacing: 0;
  /* Web · Caption · 12px */
  --font-body-sm-line-height: 1.4;
  /* Credito · 22px */
  --font-body-xl-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* Credito · 22px */
  --font-body-xl-font-size: 22px;
  /* Credito · 22px */
  --font-body-xl-font-weight: 400;
  /* Credito · 22px */
  --font-body-xl-letter-spacing: 0;
  /* Credito · 22px */
  --font-body-xl-line-height: 1.3;
  --font-body-xs-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-body-xs-font-size: 10px;
  --font-body-xs-font-weight: 400;
  --font-body-xs-letter-spacing: 0;
  --font-body-xs-line-height: 1.55;
  /* H2 · 56px */
  --font-display-2xl-font-family: 'Playfair Display', Georgia, serif;
  /* H2 · 56px */
  --font-display-2xl-font-size: 56px;
  /* H2 · 56px */
  --font-display-2xl-font-weight: 500;
  /* H2 · 56px */
  --font-display-2xl-letter-spacing: 0;
  /* H2 · 56px */
  --font-display-2xl-line-height: 1.1;
  /* H1 · 80px */
  --font-display-3xl-font-family: 'Playfair Display', Georgia, serif;
  /* H1 · 80px */
  --font-display-3xl-font-size: 80px;
  /* H1 · 80px */
  --font-display-3xl-font-weight: 500;
  /* H1 · 80px */
  --font-display-3xl-letter-spacing: 0;
  /* H1 · 80px */
  --font-display-3xl-line-height: 1.1;
  /* Display Hero · canvas social 200px */
  --font-display-hero-font-family: 'Playfair Display', Georgia, serif;
  /* Display Hero · canvas social 200px */
  --font-display-hero-font-size: 200px;
  /* Display Hero · canvas social 200px */
  --font-display-hero-font-weight: 500;
  /* Display Hero · canvas social 200px */
  --font-display-hero-letter-spacing: 0;
  /* Display Hero · canvas social 200px */
  --font-display-hero-line-height: 1.1;
  --font-display-lg-font-family: 'Playfair Display', Georgia, serif;
  --font-display-lg-font-size: 32px;
  --font-display-lg-font-weight: 500;
  --font-display-lg-letter-spacing: 0;
  --font-display-lg-line-height: 1.1;
  --font-display-md-font-family: 'Playfair Display', Georgia, serif;
  --font-display-md-font-size: 28px;
  --font-display-md-font-weight: 500;
  --font-display-md-letter-spacing: 0;
  --font-display-md-line-height: 1.1;
  --font-display-sm-font-family: 'Playfair Display', Georgia, serif;
  --font-display-sm-font-size: 22px;
  --font-display-sm-font-weight: 500;
  --font-display-sm-letter-spacing: 0;
  --font-display-sm-line-height: 1.1;
  /* Web · H1 Desktop */
  --font-display-xl-font-family: 'Playfair Display', Georgia, serif;
  /* Web · H1 Desktop */
  --font-display-xl-font-size: 48px;
  /* Web · H1 Desktop */
  --font-display-xl-font-weight: 500;
  /* Web · H1 Desktop */
  --font-display-xl-letter-spacing: 0;
  /* Web · H1 Desktop */
  --font-display-xl-line-height: 1.1;
  /* Família display · títulos editoriais. NUNCA em caixa alta. */
  --font-family-display: 'Playfair Display', Georgia, serif;
  /* Família mono · código em docs, valores técnicos */
  /* Família sans · UI, body, labels */
  --font-family-sans: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* type/button-lg · 28px */
  --font-heading-lg-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* type/button-lg · 28px */
  --font-heading-lg-font-size: 28px;
  /* type/button-lg · 28px */
  --font-heading-lg-font-weight: 700;
  /* type/button-lg · 28px */
  --font-heading-lg-letter-spacing: 0.1em;
  /* type/button-lg · 28px */
  --font-heading-lg-line-height: 1.1;
  /* Tag · 22px */
  --font-heading-md-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* Tag · 22px */
  --font-heading-md-font-size: 22px;
  /* Tag · 22px */
  --font-heading-md-font-weight: 700;
  /* Tag · 22px */
  --font-heading-md-letter-spacing: 0.1em;
  /* Tag · 22px */
  --font-heading-md-line-height: 1.2;
  /* Web · Section Title · 14px */
  --font-heading-sm-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* Web · Section Title · 14px */
  --font-heading-sm-font-size: 14px;
  /* Web · Section Title · 14px */
  --font-heading-sm-font-weight: 700;
  /* Web · Section Title · 14px */
  --font-heading-sm-letter-spacing: 0.1em;
  /* Web · Section Title · 14px */
  --font-heading-sm-line-height: 1.2;
  /* H3 · 40px · Cabecalho de seção */
  --font-heading-xl-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* H3 · 40px · Cabecalho de seção */
  --font-heading-xl-font-size: 40px;
  /* H3 · 40px · Cabecalho de seção */
  --font-heading-xl-font-weight: 700;
  /* H3 · 40px · Cabecalho de seção */
  --font-heading-xl-letter-spacing: 0.1em;
  /* H3 · 40px · Cabecalho de seção */
  --font-heading-xl-line-height: 1.1;
  --font-heading-xs-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-heading-xs-font-size: 10px;
  --font-heading-xs-font-weight: 700;
  --font-heading-xs-letter-spacing: 0.1em;
  --font-heading-xs-line-height: 1.2;
  --font-label-2xs-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-label-2xs-font-size: 9px;
  --font-label-2xs-font-weight: 600;
  --font-label-2xs-letter-spacing: 0;
  --font-label-2xs-line-height: 1.2;
  /* Web · Price · 18px */
  --font-label-lg-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  /* Web · Price · 18px */
  --font-label-lg-font-size: 18px;
  /* Web · Price · 18px */
  --font-label-lg-font-weight: 600;
  /* Web · Price · 18px */
  --font-label-lg-letter-spacing: 0;
  /* Web · Price · 18px */
  --font-label-lg-line-height: 1.2;
  --font-label-md-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-label-md-font-size: 14px;
  --font-label-md-font-weight: 600;
  --font-label-md-letter-spacing: 0;
  --font-label-md-line-height: 1.2;
  --font-label-sm-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-label-sm-font-size: 12px;
  --font-label-sm-font-weight: 600;
  --font-label-sm-letter-spacing: 0;
  --font-label-sm-line-height: 1.2;
  --font-label-xs-font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-label-xs-font-size: 10px;
  --font-label-xs-font-weight: 600;
  --font-label-xs-letter-spacing: 0;
  --font-label-xs-line-height: 1.2;
  /* Padrão · nunca usa LS */
  --font-letter-spacing-none: 0;
  --font-letter-spacing-tight: -0.01em;
  /* CTA/Button Inter 700 uppercase */
  --font-letter-spacing-wide: 0.1em;
  /* Eyebrows Inter 700 uppercase */
  --font-letter-spacing-wider: 0.15em;
  /* Legendas */
  --font-line-height-default: 1.3;
  /* Web body extended (155%) */
  --font-line-height-loose: 1.55;
  /* Corpo de texto (140%) */
  --font-line-height-relaxed: 1.4;
  /* Tags, labels */
  --font-line-height-snug: 1.2;
  /* Display/heading editorial */
  --font-line-height-tight: 1.1;
  /* type/display-2xl · canvas editorial extremo, raro */
  --font-size-10xl: 280px;
  --font-size-2xl: 22px;
  --font-size-2xs: 9px;
  --font-size-3xl: 28px;
  --font-size-4xl: 32px;
  --font-size-5xl: 40px;
  --font-size-6xl: 48px;
  --font-size-7xl: 56px;
  --font-size-8xl: 80px;
  /* Display Hero · canvas social only */
  --font-size-9xl: 200px;
  --font-size-lg: 16px;
  --font-size-md: 14px;
  --font-size-sm: 12px;
  --font-size-xl: 18px;
  --font-size-xs: 10px;
  /* Peso oficial Inter em headings/CTA */
  --font-weight-bold: 700;
  /* Peso oficial Playfair Display */
  --font-weight-medium: 500;
  --font-weight-regular: 400;
  --font-weight-semibold: 600;
  --grid-cols-desktop: 12;
  --grid-cols-mobile: 4;
  --grid-cols-tablet: 8;
  --grid-gutter: 24px;
  --grid-margin-desktop: 48px; /* alinhado ao container do D12 (spacing/7) */
  --grid-margin-mobile: 16px; /* spacing/4 */
  /* Padrão · bate com Figma */
  --icon-size-lg: 24px;
  /* Botão inline com texto */
  --icon-size-md: 20px;
  /* Inline em texto, badges densos */
  --icon-size-sm: 16px;
  /* Decorativo, feature highlights */
  --icon-size-xl: 32px;
  --inline-default: 12px;
  --inline-loose: 24px;
  --inline-tight: 8px;
  /* Estado disabled de qualquer atom */
  --opacity-disabled: 0.4;
  --opacity-hover-subtle: 0.9;
  --opacity-overlay-medium: 0.5;
  --opacity-overlay-strong: 0.75;
  --opacity-overlay-subtle: 0.1;
  --opacity-press: 0.8;
  --radius-2xl: 24px;
  /* Pill / circle · robusto em qualquer tamanho */
  --radius-full: 9999px;
  --radius-lg: 12px;
  /* Botão primário, cards */
  --radius-md: 8px;
  --radius-none: 0px;
  /* Botão secundário, chips */
  --radius-sm: 4px;
  --radius-xl: 16px;
  --section-gap-default: 24px;
  --section-gap-loose: 48px;
  --section-gap-tight: 12px;
  /* 48px · em densidade alta */
  --section-padding-y-compact: 48px;
  /* 96px · padrão */
  --section-padding-y-default: 96px;
  /* 120px · seções hero/destaque */
  --section-padding-y-spacious: 120px;
  /* Drop shadow elevation · y:12 blur:32 alpha:18% */
  --shadow-lg-blur: 32px;
  /* Drop shadow elevation · y:12 blur:32 alpha:18% */
  --shadow-lg-color: rgba(0, 0, 0, 0.18);
  /* Drop shadow elevation · y:12 blur:32 alpha:18% */
  --shadow-lg-offset-x: 0px;
  /* Drop shadow elevation · y:12 blur:32 alpha:18% */
  --shadow-lg-offset-y: 12px;
  /* Drop shadow elevation · y:12 blur:32 alpha:18% */
  --shadow-lg-spread: 0px;
  /* Drop shadow card · y:6 blur:16 alpha:12% */
  --shadow-md-blur: 16px;
  /* Drop shadow card · y:6 blur:16 alpha:12% */
  --shadow-md-color: rgba(0, 0, 0, 0.12);
  /* Drop shadow card · y:6 blur:16 alpha:12% */
  --shadow-md-offset-x: 0px;
  /* Drop shadow card · y:6 blur:16 alpha:12% */
  --shadow-md-offset-y: 6px;
  /* Drop shadow card · y:6 blur:16 alpha:12% */
  --shadow-md-spread: 0px;
  /* Drop shadow sutil · y:3 blur:9 alpha:12% */
  --shadow-sm-blur: 9px;
  /* Drop shadow sutil · y:3 blur:9 alpha:12% */
  --shadow-sm-color: rgba(0, 0, 0, 0.12);
  /* Drop shadow sutil · y:3 blur:9 alpha:12% */
  --shadow-sm-offset-x: 0px;
  /* Drop shadow sutil · y:3 blur:9 alpha:12% */
  --shadow-sm-offset-y: 3px;
  /* Drop shadow sutil · y:3 blur:9 alpha:12% */
  --shadow-sm-spread: 0px;
  /* Sombras compostas (a escala existia decomposta mas nunca fechava num valor usável) */
  --shadow-sm: 0 3px 9px rgba(0, 0, 0, 0.12);
  --shadow-md: 0 6px 16px rgba(0, 0, 0, 0.12);
  --shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.18);
  --space-0: 0px;
  --space-1: 4px;
  /* Top da escala · substitui antigo 150 */
  --space-10: 120px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;
  --space-8: 64px;
  --space-9: 96px;
  --stack-default: 16px;
  --stack-loose: 32px;
  --stack-tight: 8px;
  /* Vermelho escuro · AA sobre brancos */
  --state-error-default: #a8281c;
  --state-error-subtle: #a8281c;
  /* Azul escuro · AA sobre brancos */
  --state-info-default: #1f4d8c;
  --state-info-subtle: #1f4d8c;
  /* Verde escuro · AA sobre brancos */
  --state-success-default: #1f6b3e;
  /* Tonalidade clara para banner bg (futuro: derivar com mix) */
  --state-success-subtle: #1f6b3e;
  /* Âmbar escuro · NÃO confundir com dourado brand CF */
  --state-warning-default: #9c6a1e;
  --state-warning-subtle: #9c6a1e;
  /* Page canvas (cinza neutro) */
  --surface-canvas: #f8f8f8;
  /* Card surface principal */
  --surface-default: #ffffff;
  /* Surface escura (Titânio) · hero, footer */
  --surface-inverse: #323643;
  /* Surface mais escura (Ônix) */
  --surface-inverse-deep: #1b212d;
  /* Surface quente (Branco Resina) */
  --surface-warm: #f2ead9; /* EXCLUSIVA CF (D24): nunca em contexto Don Artesano */
  /* Combina com opacity-disabled na atom */
  --text-disabled: #606470;
  /* Texto sobre surface inverse */
  --text-inverse: #ffffff;
  /* Texto principal sobre surface clara · AA 11.1:1 vs branco-ssm */
  --text-primary: #323643;
  /* Texto secundário · AA 5.9:1 vs branco-ssm */
  --text-secondary: #606470;
  /* Reservado para hint/placeholder (mesmo valor por enquanto) */
  --text-tertiary: #606470;
  --z-base: 0;
  --z-drawer: 300;
  --z-dropdown: 100;
  --z-modal: 401;
  --z-modal-backdrop: 400;
  --z-sticky: 200;
  --z-toast: 600;
  --z-tooltip: 500;
}
}

/* ================================================================
   TOKENS · marca Don Artesano (decisão D3 aplicada)
   ================================================================ */
@layer tokens {
[data-brand="da"] {
  /* Accent DA · Azul Ônix, o Destaque (decisão D3) · focus-ring, marcadores, detalhes finos */
  --accent: #1b212d;
  /* DA primário · Titânio Sólido */
  --action-primary-bg: #323643;
  /* DA pressed · Azul Ônix */
  --action-primary-bg-active: #1b212d;
  /* DA hover · Azul Ônix */
  --action-primary-bg-hover: #1b212d;
  /* DA secondary hover · fill Titânio */
  --action-secondary-bg-hover: #323643;
  /* DA secondary · 1px Titânio */
  --action-secondary-border: #323643;
  /* DA secondary · texto Titânio */
  --action-secondary-text: #323643;
  /* DA secondary hover · texto inverso */
  --action-secondary-text-hover: #ffffff;
  --link-default: #323643;
  --link-hover: #1b212d;
}
}

/* ================================================================
   TOKENS · marca CubasFarm (decisões D1 e D3 aplicadas)
   ================================================================ */
@layer tokens {
[data-brand="cf"] {
  /* Accent CF · focus-ring, marcadores, detalhes (máx 1-2 elementos/viewport · guardrail) */
  --accent: #d19f47;
  /* CF primário · Dourado */
  --action-primary-bg: #d19f47;
  /* CF pressed · Titânio (Ônix é exclusiva DA, D3) */
  --action-primary-bg-active: #323643;
  /* CF hover · Titânio (escurece) */
  --action-primary-bg-hover: #323643;
  /* CF primário texto · Branco SSM (decisão D1: spec restaurada pelo dono; ratio 2.40:1 fica como nota informativa) */
  --action-primary-text: #ffffff;
  /* CF secondary hover · fill Branco Resina (D3: escuro chapado não é da CF) */
  --action-secondary-bg-hover: #f2ead9;
  /* CF secondary · 1px Dourado (decisão D3) */
  --action-secondary-border: #d19f47;
  /* CF secondary · texto Titânio (decisão D3) */
  --action-secondary-text: #323643;
  /* CF secondary hover · texto Titânio sobre Resina */
  --action-secondary-text-hover: #323643;
  /* Link CF · Titânio, hover Dourado (decisão D3) */
  --link-default: #323643;
  --link-hover: #d19f47;
}
}

/* ================================================================
   RESET (pular no embed do documento)
   ================================================================ */
/* @layer reset · minimal modern reset.
   No opinionated body styles here; base.css handles defaults. */

@layer reset {
  *, *::before, *::after { box-sizing: border-box; }

  * { margin: 0; }

  html { -webkit-text-size-adjust: 100%; tab-size: 4; }

  body { line-height: 1.5; -webkit-font-smoothing: antialiased; }

  img, picture, video, canvas, svg { display: block; max-width: 100%; }

  input, button, textarea, select { font: inherit; color: inherit; }

  p, h1, h2, h3, h4, h5, h6 { overflow-wrap: break-word; }

  button {
    appearance: none;
    background: transparent;
    border: 0;
    padding: 0;
    cursor: pointer;
  }

  a { color: inherit; text-decoration: none; }

  ul, ol { list-style: none; padding: 0; }

  /* Respect user motion preference */
  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
      animation-duration: 0.01ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: 0.01ms !important;
      scroll-behavior: auto !important;
    }
  }
}

/* ================================================================
   BASE (pular no embed do documento)
   ================================================================ */
/* @layer base · opinionated defaults that consume tokens.
   These apply to bare HTML elements. Components override via @layer atoms+. */

@layer base {
  html {
    background: var(--surface-canvas);
    color: var(--text-primary);
    font-family: var(--font-body-md-font-family);
    font-size: 16px;
    line-height: var(--font-body-md-line-height);
  }

  body {
    font-family: var(--font-body-md-font-family);
    font-weight: var(--font-body-md-font-weight);
    font-size: var(--font-body-md-font-size);
    line-height: var(--font-body-md-line-height);
    color: var(--text-primary);
    font-variant-numeric: lining-nums; /* numerais sempre lining, herdado por toda a árvore */
  }

  /* Default focus ring · overridden by atom-specific :focus-visible if needed.
     Uses accent slot so DA gets Azul Ônix (D3), CF gets Dourado automatically. */
  :focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }

  /* Selection */
  ::selection {
    background: var(--accent);
    color: var(--surface-default);
  }

  /* Default link color (only if no .ds-link applied) */
  a {
    color: var(--link-default);
    text-decoration: underline;
    text-underline-offset: 2px;
    text-decoration-thickness: 1px;
  }
  a:hover { color: var(--link-hover); }
}

/* ================================================================
   ÁTOMOS (17)
   ================================================================ */
/* ---- átomo: typography ---- */
/* Numerais em Playfair: SEMPRE lining (lnum). O conjunto padrão da fonte é oldstyle e a marca não o usa. Requer a fonte completa auto-hospedada (Web/fontes). */
.ds-display-hero, .ds-display-xl, .ds-display-lg, .ds-display-md, .ds-display-sm, .ds-bloco-de-depoimento__quote { font-variant-numeric: lining-nums; }

/* Typography atoms · apenas classes CSS, sem markup.
   Templates compõem: <h1 class="ds-display-xl">...</h1>.
   Stylelint trava qualquer template que declare font-* fora dessas classes.

   ⚠️ REGRA INVIOLÁVEL: VALORES NUMÉRICOS SEMPRE EM INTER
   Preços, parcelas, quantidades, ratings, contagens, unidades, datas, IDs:
   sempre Inter (body/label/heading). Playfair (display) é EXCLUSIVA para
   texto editorial/títulos. Use também `font-variant-numeric: tabular-nums`
   para alinhar dígitos em colunas (preços, tabelas, paginação).

   Por quê: Playfair tem proporções variáveis nos algarismos · fica
   desalinhado em listas. Inter tem opção tabular-nums e desenho geométrico
   que valoriza valores numéricos. Esta regra está ENFORCED nos atoms/molecules
   (price, rating, badge, pagination) · não há override. */

@layer atoms {
  /* ----- Display (Playfair Display Medium) ----- */
  .ds-display-sm,
  .ds-display-md,
  .ds-display-lg,
  .ds-display-xl,
  .ds-display-2xl,
  .ds-display-3xl,
  .ds-display-hero {
    font-family: var(--font-display-sm-font-family);
    font-weight: var(--font-display-sm-font-weight);
    color: var(--text-primary);
  }
  .ds-display-sm  { font-size: var(--font-display-sm-font-size);  line-height: var(--font-display-sm-line-height);  letter-spacing: var(--font-display-sm-letter-spacing); }
  .ds-display-md  { font-size: var(--font-display-md-font-size);  line-height: var(--font-display-md-line-height);  letter-spacing: var(--font-display-md-letter-spacing); }
  .ds-display-lg  { font-size: var(--font-display-lg-font-size);  line-height: var(--font-display-lg-line-height);  letter-spacing: var(--font-display-lg-letter-spacing); }
  .ds-display-xl  { font-size: var(--font-display-xl-font-size);  line-height: var(--font-display-xl-line-height);  letter-spacing: var(--font-display-xl-letter-spacing); }
  .ds-display-2xl { font-size: var(--font-display-2xl-font-size); line-height: var(--font-display-2xl-line-height); letter-spacing: var(--font-display-2xl-letter-spacing); }
  .ds-display-3xl { font-size: var(--font-display-3xl-font-size); line-height: var(--font-display-3xl-line-height); letter-spacing: var(--font-display-3xl-letter-spacing); }
  .ds-display-hero{ font-size: var(--font-display-hero-font-size);line-height: var(--font-display-hero-line-height);letter-spacing: var(--font-display-hero-letter-spacing); }

  /* ----- Heading (Inter Bold UPPERCASE) ----- */
  .ds-heading-xs,
  .ds-heading-sm,
  .ds-heading-md,
  .ds-heading-lg,
  .ds-heading-xl {
    font-family: var(--font-heading-sm-font-family);
    font-weight: var(--font-heading-sm-font-weight);
    color: var(--text-primary);
    text-transform: uppercase;
  }
  .ds-heading-xs { font-size: var(--font-heading-xs-font-size); line-height: var(--font-heading-xs-line-height); letter-spacing: var(--font-heading-xs-letter-spacing); }
  .ds-heading-sm { font-size: var(--font-heading-sm-font-size); line-height: var(--font-heading-sm-line-height); letter-spacing: var(--font-heading-sm-letter-spacing); }
  .ds-heading-md { font-size: var(--font-heading-md-font-size); line-height: var(--font-heading-md-line-height); letter-spacing: var(--font-heading-md-letter-spacing); }
  .ds-heading-lg { font-size: var(--font-heading-lg-font-size); line-height: var(--font-heading-lg-line-height); letter-spacing: var(--font-heading-lg-letter-spacing); }
  .ds-heading-xl { font-size: var(--font-heading-xl-font-size); line-height: var(--font-heading-xl-line-height); letter-spacing: var(--font-heading-xl-letter-spacing); }

  /* ----- Body (Inter Regular) ----- */
  .ds-body-xs,
  .ds-body-sm,
  .ds-body-md,
  .ds-body-lg,
  .ds-body-xl,
  .ds-body-2xl,
  .ds-body-3xl {
    font-family: var(--font-body-md-font-family);
    font-weight: var(--font-body-md-font-weight);
    color: var(--text-primary);
  }
  .ds-body-xs  { font-size: var(--font-body-xs-font-size);  line-height: var(--font-body-xs-line-height);  }
  .ds-body-sm  { font-size: var(--font-body-sm-font-size);  line-height: var(--font-body-sm-line-height);  }
  .ds-body-md  { font-size: var(--font-body-md-font-size);  line-height: var(--font-body-md-line-height);  }
  .ds-body-lg  { font-size: var(--font-body-lg-font-size);  line-height: var(--font-body-lg-line-height);  }
  .ds-body-xl  { font-size: var(--font-body-xl-font-size);  line-height: var(--font-body-xl-line-height);  }
  .ds-body-2xl { font-size: var(--font-body-2xl-font-size); line-height: var(--font-body-2xl-line-height); }
  .ds-body-3xl { font-size: var(--font-body-3xl-font-size); line-height: var(--font-body-3xl-line-height); }

  /* ----- Label (Inter Semi Bold) ----- */
  .ds-label-2xs,
  .ds-label-xs,
  .ds-label-sm,
  .ds-label-md,
  .ds-label-lg {
    font-family: var(--font-label-md-font-family);
    font-weight: var(--font-label-md-font-weight);
    color: var(--text-primary);
  }
  .ds-label-2xs { font-size: var(--font-label-2xs-font-size); line-height: var(--font-label-2xs-line-height); }
  .ds-label-xs  { font-size: var(--font-label-xs-font-size);  line-height: var(--font-label-xs-line-height);  }
  .ds-label-sm  { font-size: var(--font-label-sm-font-size);  line-height: var(--font-label-sm-line-height);  }
  .ds-label-md  { font-size: var(--font-label-md-font-size);  line-height: var(--font-label-md-line-height);  }
  .ds-label-lg  { font-size: var(--font-label-lg-font-size);  line-height: var(--font-label-lg-line-height);  }

  /* ----- Text color modifiers (independent of family) ----- */
  .ds-text--secondary { color: var(--text-secondary); }
  .ds-text--inverse   { color: var(--text-inverse); }
  .ds-text--accent    { color: var(--accent); }
  .ds-text--disabled  { color: var(--text-disabled); opacity: var(--opacity-disabled); }

  /* ----- Eyebrow utility (composes label + uppercase + wider spacing) ----- */
  .ds-eyebrow {
    text-transform: uppercase;
    letter-spacing: var(--font-letter-spacing-wider);
    color: var(--accent);
  }
}

/* ---- átomo: icon ---- */
/* Icon atom · consome o sprite inline via <use href="#icon-*">.
   Cor herdada via currentColor (sprite normalizado por build-sprite.mjs).
   Sizes: sm 16 / md 20 / lg 24 (default) / xl 32. */

@layer atoms {
  .ds-icone {
    --ds-icone-size: var(--icon-size-lg, 24px);
    display: inline-block;
    flex-shrink: 0;
    width: var(--ds-icone-size);
    height: var(--ds-icone-size);
    aspect-ratio: 1;     /* Defesa contra Starlight CSS `svg { height: auto }` em SVG sem viewBox local */
    color: inherit;
    fill: none;
    vertical-align: middle;
  }
  .ds-icone--sm  { --ds-icone-size: var(--icon-size-sm, 16px); }
  .ds-icone--md  { --ds-icone-size: var(--icon-size-md, 20px); }
  .ds-icone--lg  { --ds-icone-size: var(--icon-size-lg, 24px); }
  .ds-icone--xl  { --ds-icone-size: var(--icon-size-xl, 32px); }

  /* Color modifiers · inherit from parent unless explicit */
  .ds-icone--accent      { color: var(--accent); }
  .ds-icone--secondary   { color: var(--text-secondary); }
  .ds-icone--inverse     { color: var(--text-inverse); }
}

/* ---- átomo: button ---- */
/* Button atom · brand-agnostic.
   Variantes: primary (default), secondary. Sizes: sm, md (default), lg.
   Estados: default, hover, active, focus-visible, disabled, loading.
   Marca cascateia via [data-brand] em ancestral · atom não conhece DA/CF. */

@layer atoms {
  .ds-botao {
    /* === Local custom properties (override-friendly) === */
    --_bg: var(--action-primary-bg);
    --_bg-hover: var(--action-primary-bg-hover);
    --_bg-active: var(--action-primary-bg-active);
    --_text: var(--action-primary-text);
    --_border: transparent;
    --_radius: var(--radius-md);
    --_padding-y: var(--space-3);
    --_padding-x: var(--space-5);

    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    padding: var(--_padding-y) var(--_padding-x);
    min-height: 44px;
    background: var(--_bg);
    color: var(--_text);
    border: var(--border-width-thin) solid var(--_border);
    border-radius: var(--_radius);
    font-family: var(--font-heading-sm-font-family);
    font-weight: var(--font-heading-sm-font-weight);
    font-size: var(--font-heading-sm-font-size);
    line-height: 1;
    letter-spacing: var(--font-heading-sm-letter-spacing);
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
    user-select: none;
    transition: background var(--duration-fast) var(--easing-default),
                color var(--duration-fast) var(--easing-default),
                border-color var(--duration-fast) var(--easing-default);
  }

  /* === States === */
  .ds-botao:hover:not(:disabled):not([aria-disabled="true"]):not([data-state="loading"]) {
    background: var(--_bg-hover);
  }
  .ds-botao:active:not(:disabled):not([aria-disabled="true"]):not([data-state="loading"]) {
    background: var(--_bg-active);
  }
  .ds-botao:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-botao:disabled,
  .ds-botao[aria-disabled="true"] {
    opacity: var(--opacity-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  /* === Loading ===
     Text fica visível mas com opacidade reduzida; spinner aparece via padding-left.
     Largura do botão NÃO muda (padding-left fixo evita reflow). */
  .ds-botao[data-state="loading"] {
    cursor: progress;
    pointer-events: none;
    position: relative;
    padding-left: calc(var(--_padding-x) + 1em + var(--space-2));
  }
  .ds-botao[data-state="loading"]::before {
    content: "";
    position: absolute;
    left: var(--_padding-x);
    top: 50%;
    width: 1em;
    height: 1em;
    margin-top: calc(-0.5em);
    border: 2px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    animation: ds-botao-spin 800ms linear infinite; /* escala: editorial */
    opacity: 0.85;
  }
  @keyframes ds-botao-spin { to { transform: rotate(360deg); } }

  @media (prefers-reduced-motion: reduce) {
    .ds-botao[data-state="loading"]::before { animation-duration: 3s; }
  }

  /* === Secondary variant ·: weight 400 (not 700) === */
  .ds-botao--secundario {
    --_bg: transparent;
    --_bg-hover: var(--action-secondary-bg-hover);
    --_bg-active: var(--action-secondary-bg-hover);
    --_text: var(--action-secondary-text);
    --_border: var(--action-secondary-border);
    --_radius: var(--radius-sm);
    font-weight: var(--font-weight-regular);
  }
  .ds-botao--secundario:hover:not(:disabled):not([aria-disabled="true"]):not([data-state="loading"]) {
    color: var(--action-secondary-text-hover);
  }

  /* === Sizes === */
  .ds-botao--sm {
    --_padding-y: var(--space-2);
    --_padding-x: var(--space-4);
    min-height: 32px;
    font-size: var(--font-heading-xs-font-size);
  }
  .ds-botao--lg {
    --_padding-y: var(--space-4);
    --_padding-x: var(--space-7);
    min-height: 56px;
    font-size: var(--font-heading-md-font-size);
  }

  /* === Icon-only variant (square) === */
  .ds-botao--icon-only {
    --_padding-x: var(--_padding-y);
    aspect-ratio: 1;
    min-width: 44px;
  }
  .ds-botao--icon-only.ds-botao--sm { min-width: 32px; }
  .ds-botao--icon-only.ds-botao--lg { min-width: 56px; }

  /* === Full-width modifier === */
  .ds-botao--block { width: 100%; }
  /* Sobre fundos escuros (Ônix/Titânio/foto escura): primário invertido */
  .ds-botao--inverso {
    background: var(--color-branco-ssm, #ffffff);
    color: var(--color-titanio-solido, #323643);
  }
  .ds-botao--inverso:hover { background: var(--border-subtle, #ededed); }
}

/* ---- átomo: link ---- */
/* Link atom · text-decoration com offset elegante.
   Inline (default): sublinhado. Standalone: sem sublinhado, com underline-on-hover. */

@layer atoms {
  .ds-link {
    color: var(--link-default);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    text-decoration-color: currentColor;
    transition: color var(--duration-fast) var(--easing-default),
                text-decoration-color var(--duration-fast) var(--easing-default);
  }
  .ds-link:hover { color: var(--link-hover); }
  .ds-link:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
    border-radius: var(--radius-sm);
  }
  .ds-link[aria-disabled="true"] {
    color: var(--text-disabled);
    pointer-events: none;
    opacity: var(--opacity-disabled);
  }
  .ds-link:visited { color: var(--link-default); }

  /* Standalone variant · sem sublinhado por padrão */
  .ds-link--standalone {
    text-decoration: none;
  }
  .ds-link--standalone:hover {
    text-decoration: underline;
  }

  /* Quiet (inverse) */
  .ds-link--inverso {
    color: var(--text-inverse);
  }
  .ds-link--inverso:hover {
    color: var(--accent);
  }
}

/* ---- átomo: divider ---- */
/* Divider atom · linha sutil entre seções/itens.
   Horizontal default; vertical via modifier. */

@layer atoms {
  .ds-divisor {
    border: 0;
    background: var(--border-subtle);
    block-size: var(--border-width-thin);
    inline-size: 100%;
    margin: 0;
  }
  .ds-divisor--default { background: var(--border-default); }
  .ds-divisor--strong  { background: var(--border-strong); }

  /* Vertical */
  .ds-divisor--vertical {
    inline-size: var(--border-width-thin);
    block-size: auto;
    align-self: stretch;
  }
}

/* ---- átomo: tag ---- */
/* Tag atom · chip estática ou removível.
   Pill-shape, label.sm typography, sutil border. */

@layer atoms {
  .ds-tag {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-1) var(--space-3);
    background: var(--surface-default);
    color: var(--text-primary);
    background: var(--border-subtle); background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-full);
    font-family: var(--font-label-sm-font-family);
    font-weight: var(--font-label-sm-font-weight);
    font-size: var(--font-label-sm-font-size);
    line-height: var(--font-label-sm-line-height);
    white-space: nowrap;
  }

  /* Filled variant · fundo sutil quente */
  .ds-tag--filled {
    background: var(--surface-warm);
    border-color: transparent;
  }

  /* Removable: close button inline */
  .ds-tag__remove {
    appearance: none;
    background: transparent;
    border: 0;
    padding: 0;
    cursor: pointer;
    color: inherit;
    opacity: 0.6;
    transition: opacity var(--duration-fast) var(--easing-default);
    display: inline-flex;
  }
  .ds-tag__remove:hover { opacity: 1; }
  .ds-tag__remove:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
    border-radius: var(--radius-full);
  }
}

/* ---- átomo: badge ---- */
/* Badge atom · pill compacto, estático.
   3 variantes do Figma: neutro, destaque, sale. */

@layer atoms {
  .ds-badge {
    display: inline-flex;
    align-items: center;
    padding: 2px var(--space-2);
    background: var(--border-subtle);
    color: var(--text-primary);
    border-radius: var(--radius-sm);
    font-family: var(--font-label-xs-font-family);
    font-weight: var(--font-label-xs-font-weight);
    font-size: var(--font-label-xs-font-size);
    line-height: 1.4;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    white-space: nowrap;
  }

  /* Variantes Figma */
  .ds-badge--destaque {
    background: var(--accent);
    color: var(--action-primary-text);
  }
  .ds-badge--oferta {
    background: var(--color-state-error);
    color: var(--color-branco-ssm);
  }
  .ds-badge--sucesso {
    background: var(--color-state-success);
    color: var(--color-branco-ssm);
  }
  .ds-badge--info {
    background: var(--color-state-info);
    color: var(--color-branco-ssm);
  }
}

/* ---- átomo: input ---- */
/* Input atom · text field.
   Estados: default, hover, focus, disabled, error.
   Wrap em FormField (molecule) para label/helper/error message. */

@layer atoms {
  .ds-input {
    display: block;
    inline-size: 100%;
    min-height: 44px;
    padding: var(--space-3) var(--space-4);
    background: var(--surface-default);
    color: var(--text-primary);
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-md);
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    line-height: 1.4;
    transition: border-color var(--duration-fast) var(--easing-default),
                box-shadow var(--duration-fast) var(--easing-default);
  }
  .ds-input::placeholder { color: var(--text-tertiary); }

  .ds-input:hover:not(:disabled):not([aria-invalid="true"]) {
    border-color: var(--text-secondary);
  }
  .ds-input:focus-visible {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 2px var(--accent);
  }
  .ds-input:disabled {
    background: var(--surface-canvas);
    color: var(--text-disabled);
    cursor: not-allowed;
    opacity: var(--opacity-disabled);
  }
  .ds-input[aria-invalid="true"] {
    border-color: var(--color-state-error);
  }
  /* Em superfícies escuras (nav, footer) */
  .ds-input--inverso {
    background: rgba(255, 255, 255, 0.08);
    border-color: rgba(255, 255, 255, 0.2);
    color: rgba(255, 255, 255, 0.92);
  }
  .ds-input--inverso::placeholder { color: rgba(255, 255, 255, 0.45); }
  .ds-input[aria-invalid="true"]:focus-visible {
    box-shadow: 0 0 0 2px var(--color-state-error);
  }
}

/* ---- átomo: textarea ---- */
/* Textarea atom · herda Input + min-height maior + resize. */

@layer atoms {
  .ds-textarea {
    display: block;
    inline-size: 100%;
    min-height: 120px;
    padding: var(--space-3) var(--space-4);
    background: var(--surface-default);
    color: var(--text-primary);
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-md);
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    line-height: 1.5;
    resize: vertical;
    transition: border-color var(--duration-fast) var(--easing-default),
                box-shadow var(--duration-fast) var(--easing-default);
  }
  .ds-textarea::placeholder { color: var(--text-tertiary); }
  .ds-textarea:hover:not(:disabled):not([aria-invalid="true"]) {
    border-color: var(--text-secondary);
  }
  .ds-textarea:focus-visible {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 2px var(--accent);
  }
  .ds-textarea:disabled {
    background: var(--surface-canvas);
    color: var(--text-disabled);
    cursor: not-allowed;
    opacity: var(--opacity-disabled);
  }
  .ds-textarea[aria-invalid="true"] {
    border-color: var(--color-state-error);
  }
}

/* ---- átomo: select ---- */
/* Select atom · native <select> estilizado com chevron via background-image.
   Mantém a11y nativa do browser. */

@layer atoms {
  .ds-select {
    appearance: none;
    -webkit-appearance: none;
    display: block;
    inline-size: 100%;
    min-height: 44px;
    padding: var(--space-3) var(--space-9) var(--space-3) var(--space-4);
    background: var(--surface-default)
      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23606470' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E")
      no-repeat right var(--space-4) center / 16px 16px;
    color: var(--text-primary);
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-md);
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    line-height: 1.4;
    cursor: pointer;
    transition: border-color var(--duration-fast) var(--easing-default),
                box-shadow var(--duration-fast) var(--easing-default);
  }
  .ds-select:hover:not(:disabled) { border-color: var(--text-secondary); }
  .ds-select:focus-visible {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 2px var(--accent);
  }
  .ds-select:disabled {
    background-color: var(--surface-canvas);
    color: var(--text-disabled);
    cursor: not-allowed;
    opacity: var(--opacity-disabled);
  }
  .ds-select[aria-invalid="true"] { border-color: var(--color-state-error); }
}

/* ---- átomo: checkbox ---- */
/* Checkbox atom · custom appearance, accessible.
   Estados: unchecked, checked, indeterminate, focus, disabled, invalid. */

@layer atoms {
  .ds-checkbox {
    color: var(--text-primary);
    appearance: none;
    -webkit-appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 20px;
    block-size: 20px;
    margin: 0;
    background: var(--surface-default);
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: background var(--duration-fast) var(--easing-default),
                border-color var(--duration-fast) var(--easing-default);
    position: relative;
  }
  .ds-checkbox:hover:not(:disabled) {
    border-color: var(--text-secondary);
  }
  .ds-checkbox:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-checkbox:checked {
    background: var(--accent);
    border-color: var(--accent);
  }
  .ds-checkbox:checked::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12l6 6L20 6'/%3E%3C/svg%3E");
    background-size: 80% 80%;
    background-position: center;
    background-repeat: no-repeat;
  }
  .ds-checkbox:indeterminate {
    background: var(--accent);
    border-color: var(--accent);
  }
  .ds-checkbox:indeterminate::after {
    content: "";
    position: absolute;
    inset: 4px;
    background: var(--color-branco-ssm);
    border-radius: 1px;
    top: 50%;
    bottom: auto;
    height: 2px;
    transform: translateY(-50%);
  }
  .ds-checkbox:disabled {
    cursor: not-allowed;
    opacity: var(--opacity-disabled);
  }
  .ds-checkbox[aria-invalid="true"] {
    border-color: var(--color-state-error);
  }
}

/* ---- átomo: radio ---- */
/* Radio atom · round, custom appearance.
   Estados: unchecked, checked, focus, disabled, invalid. */

@layer atoms {
  .ds-radio {
    color: var(--text-primary);
    appearance: none;
    -webkit-appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 20px;
    block-size: 20px;
    margin: 0;
    background: var(--surface-default);
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: 50%;
    cursor: pointer;
    transition: background var(--duration-fast) var(--easing-default),
                border-color var(--duration-fast) var(--easing-default);
    position: relative;
  }
  .ds-radio:hover:not(:disabled) { border-color: var(--text-secondary); }
  .ds-radio:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-radio:checked {
    border-color: var(--accent);
    border-width: 2px;
  }
  .ds-radio:checked::after {
    content: "";
    position: absolute;
    inline-size: 10px;
    block-size: 10px;
    background: var(--accent);
    border-radius: 50%;
  }
  .ds-radio:disabled {
    cursor: not-allowed;
    opacity: var(--opacity-disabled);
  }
  .ds-radio[aria-invalid="true"] { border-color: var(--color-state-error); }
}

/* ---- átomo: toggle ---- */
/* Toggle atom · switch tipo iOS via checkbox.
   Estados: off, on, focus, disabled. */

@layer atoms {
  .ds-toggle {
    color: var(--text-primary);
    appearance: none;
    -webkit-appearance: none;
    display: inline-block;
    inline-size: 40px;
    block-size: 22px;
    margin: 0;
    background: var(--cinza-quartzo, var(--color-cinza-quartzo));
    border-radius: var(--radius-full);
    position: relative;
    cursor: pointer;
    transition: background var(--duration-fast) var(--easing-default);
  }
  .ds-toggle::after {
    content: "";
    position: absolute;
    top: 2px;
    left: 2px;
    inline-size: 18px;
    block-size: 18px;
    background: var(--color-branco-ssm);
    border-radius: 50%;
    transition: transform var(--duration-fast) var(--easing-default);
  }
  .ds-toggle:checked {
    background: var(--accent);
  }
  .ds-toggle:checked::after {
    transform: translateX(18px);
  }
  .ds-toggle:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-toggle:disabled {
    cursor: not-allowed;
    opacity: var(--opacity-disabled);
  }
}

/* ---- átomo: avatar ---- */
/* Avatar atom · round container para image/initials/icon.
   Sizes: sm 24 / md 32 / lg 40 / xl 64. */

@layer atoms {
  .ds-avatar {
    --_size: var(--avatar-size-md);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: var(--_size);
    block-size: var(--_size);
    background: var(--surface-warm);
    color: var(--text-primary);
    border-radius: 50%;
    overflow: hidden;
    font-family: var(--font-label-sm-font-family);
    font-weight: var(--font-label-sm-font-weight);
    font-size: calc(var(--_size) * 0.4);
    user-select: none;
    text-transform: uppercase;
  }
  .ds-avatar img,
  .ds-avatar svg {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
  }

  .ds-avatar--sm { --_size: var(--avatar-size-sm); }
  .ds-avatar--md { --_size: var(--avatar-size-md); }
  .ds-avatar--lg { --_size: var(--avatar-size-lg); }
  .ds-avatar--xl { --_size: var(--avatar-size-xl); }

  /* Status dot · usado em conjunto com presença online */
  .ds-avatar--with-status {
    position: relative;
    overflow: visible;
  }
  .ds-avatar--with-status::after {
    content: "";
    position: absolute;
    inline-size: 25%;
    block-size: 25%;
    background: var(--color-state-success);
    border: 2px solid var(--surface-default);
    border-radius: 50%;
    bottom: 0;
    right: 0;
  }
}

/* ---- átomo: progress-bar ---- */
/* Progress Bar atom · determinate (value) ou indeterminate (animation).
   ARIA: role="progressbar" + aria-valuenow/min/max. */

@layer atoms {
  .ds-barra-de-progresso {
    appearance: none;
    -webkit-appearance: none;
    display: block;
    inline-size: 100%;
    block-size: 4px;
    background: var(--border-subtle);
    border-radius: var(--radius-full);
    overflow: hidden;
    border: 0;
  }
  /* Native <progress> styling */
  .ds-barra-de-progresso::-webkit-progress-bar { background: var(--border-subtle); border-radius: var(--radius-full); }
  .ds-barra-de-progresso::-webkit-progress-value { background: var(--accent); border-radius: var(--radius-full); transition: inline-size var(--duration-base) var(--easing-default); }
  .ds-barra-de-progresso::-moz-progress-bar { background: var(--accent); border-radius: var(--radius-full); }

  /* div-based version for indeterminate */
  .ds-barra-de-progresso--indeterminate {
    position: relative;
  }
  .ds-barra-de-progresso--indeterminate::before {
    content: "";
    position: absolute;
    inset-block: 0;
    inline-size: 40%;
    background: var(--accent);
    border-radius: var(--radius-full);
    animation: ds-barra-de-progresso-slide 1.5s cubic-bezier(0.4, 0, 0.2, 1) infinite;
  }
  @keyframes ds-barra-de-progresso-slide {
    0%   { transform: translateX(-100%); }
    100% { transform: translateX(250%); }
  }
}

/* ---- átomo: skeleton ---- */
/* Skeleton atom · loading placeholder.
   Variantes: line (default), block, circle. */

@layer atoms {
  .ds-skeleton {
    display: block;
    background:
      linear-gradient(
        90deg,
        var(--border-subtle) 0%,
        var(--border-default) 50%,
        var(--border-subtle) 100%
      );
    background-size: 200% 100%;
    animation: ds-skeleton-shimmer 1.5s cubic-bezier(0.4, 0, 0.2, 1) infinite;
    border-radius: var(--radius-sm);
    inline-size: 100%;
    block-size: 16px;
  }
  .ds-skeleton--block {
    block-size: 120px;
    border-radius: var(--radius-md);
  }
  .ds-skeleton--circle {
    inline-size: 40px;
    block-size: 40px;
    border-radius: 50%;
  }
  @keyframes ds-skeleton-shimmer {
    0%   { background-position: 200% 0; }
    100% { background-position: -200% 0; }
  }
  @media (prefers-reduced-motion: reduce) {
    .ds-skeleton { animation: none; background: var(--border-subtle); }
  }
}

/* ---- átomo: tooltip ---- */
/* Tooltip atom · popover hint.
   Dois modos:
   1) Wrapper interativo (.ds-tooltip-wrap) · pure CSS, ativa em hover/focus-within.
      Posicionamento estático (top default). Bom para hints curtos sem collision.
   2) Standalone (.ds-tooltip) · só estilo, controlado por JS/molecule para
      casos com collision-detection (Floating UI / Popover API). */

@layer atoms {
  .ds-tooltip-wrap {
    position: relative;
    display: inline-flex;
  }
  .ds-tooltip-wrap > .ds-tooltip {
    position: absolute;
    left: 50%;
    bottom: calc(100% + 8px);
    transform: translate(-50%, 4px);
  }
  .ds-tooltip-wrap:hover > .ds-tooltip,
  .ds-tooltip-wrap:focus-within > .ds-tooltip {
    opacity: 1;
    transform: translate(-50%, 0);
  }

  .ds-tooltip {
    --_bg: var(--surface-inverse);
    --_text: var(--text-inverse);
    position: absolute;
    z-index: var(--z-tooltip);
    padding: var(--space-2) var(--space-3);
    background: var(--_bg);
    color: var(--_text);
    border-radius: var(--radius-sm);
    font-family: var(--font-label-sm-font-family);
    font-weight: var(--font-label-sm-font-weight);
    font-size: var(--font-label-sm-font-size);
    line-height: var(--font-label-sm-line-height);
    max-width: 280px;
    white-space: normal;
    pointer-events: none;
    opacity: 0;
    transform: translateY(4px);
    transition: opacity var(--duration-fast) var(--easing-default),
                transform var(--duration-fast) var(--easing-default);
  }
  .ds-tooltip[data-shown="true"],
  .ds-tooltip--shown {
    opacity: 1;
    transform: translateY(0);
  }

  /* Arrow */
  .ds-tooltip::after {
    content: "";
    position: absolute;
    inline-size: 8px;
    block-size: 8px;
    background: var(--_bg);
    transform: rotate(45deg);
    top: -4px;
    left: 50%;
    margin-left: -4px;
  }

  /* Position modifiers */
  .ds-tooltip--bottom::after { top: -4px; bottom: auto; }
  .ds-tooltip--top::after { top: auto; bottom: -4px; }
  .ds-tooltip--left::after { left: auto; right: -4px; top: 50%; margin: 0; transform: rotate(45deg) translateY(-50%); }
  .ds-tooltip--right::after { left: -4px; right: auto; top: 50%; margin: 0; transform: rotate(45deg) translateY(-50%); }
}

/* ================================================================
   MOLÉCULAS (14)
   ================================================================ */
/* ---- molécula: form-field ---- */
/* Form Field · label + control + helper/error.
   Composição: <label> + atom de form (input/textarea/select) + helper.
   Estado de erro: data-state="invalid" no wrapper; helper vira error message. */

@layer molecules {
  .ds-campo-de-formulario {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
  }
  .ds-campo-de-formulario__label {
    font-family: var(--font-label-sm-font-family);
    font-weight: var(--font-label-sm-font-weight);
    font-size: var(--font-label-sm-font-size);
    line-height: var(--font-label-sm-line-height);
    color: var(--text-primary);
  }
  .ds-campo-de-formulario__label--required::after {
    content: " *";
    color: var(--color-state-error);
  }
  .ds-campo-de-formulario__helper {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: var(--font-body-sm-line-height);
    color: var(--text-secondary);
  }
  .ds-campo-de-formulario[data-state="invalid"] .ds-campo-de-formulario__helper {
    color: var(--color-state-error);
  }
  .ds-campo-de-formulario__hint-row {
    display: flex;
    justify-content: space-between;
    gap: var(--space-3);
  }
}

/* ---- molécula: search-bar ---- */
/* Search Bar · input + submit/icon button.
   Compõe .ds-input + .ds-botao (icon-only) com layout horizontal. */

@layer molecules {
  .ds-barra-de-busca {
    display: flex;
    gap: var(--space-2);
    align-items: stretch;
    inline-size: 100%;
  }
  .ds-barra-de-busca > .ds-input {
    flex: 1;
  }
  .ds-barra-de-busca > .ds-botao {
    flex-shrink: 0;
  }

  /* Variant: joined · input e botão como um único pill */
  .ds-barra-de-busca--joined {
    gap: 0;
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-md);
    background: var(--surface-default);
    overflow: hidden;
  }
  .ds-barra-de-busca--joined > .ds-input {
    border: 0;
    background: transparent;
  }
  .ds-barra-de-busca--joined > .ds-input:focus-visible {
    box-shadow: none;
  }
  .ds-barra-de-busca--joined > .ds-botao {
    border-radius: 0;
    border: 0;
  }
  .ds-barra-de-busca--joined:focus-within {
    border-color: var(--accent);
    box-shadow: 0 0 0 2px var(--accent);
  }
}

/* ---- molécula: filter-chip ---- */
/* Filter Chip · selectable pill com optional count.
   aria-pressed="true" no botão indica selecionado. */

@layer molecules {
  .ds-chip-de-filtro {
    appearance: none;
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-2) var(--space-4);
    background: var(--surface-default);
    color: var(--text-primary);
    background: var(--border-subtle); background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-full);
    font-family: var(--font-label-sm-font-family);
    font-weight: var(--font-label-sm-font-weight);
    font-size: var(--font-label-sm-font-size);
    line-height: var(--font-label-sm-line-height);
    cursor: pointer;
    transition: background var(--duration-fast) var(--easing-default),
                border-color var(--duration-fast) var(--easing-default),
                color var(--duration-fast) var(--easing-default);
  }
  .ds-chip-de-filtro:hover:not(:disabled):not([aria-pressed="true"]) {
    border-color: var(--text-secondary);
  }
  .ds-chip-de-filtro:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-chip-de-filtro[aria-pressed="true"] {
    background: var(--accent);
    color: var(--action-primary-text);
    border-color: var(--accent);
  }
  .ds-chip-de-filtro:disabled {
    opacity: var(--opacity-disabled);
    cursor: not-allowed;
  }
  .ds-chip-de-filtro__count {
    display: inline-block;
    min-inline-size: 1.5em;
    padding-inline: var(--space-1);
    background: rgba(0, 0, 0, 0.08);
    border-radius: var(--radius-full);
    text-align: center;
    font-variant-numeric: tabular-nums;
  }
  .ds-chip-de-filtro[aria-pressed="true"] .ds-chip-de-filtro__count {
    background: rgba(255, 255, 255, 0.25);
  }
}

/* ---- molécula: nav-item ---- */
/* Nav Item · link com estado "current".
   Sinalização via aria-current="page" (semântico) + visual sublinhado. */

@layer molecules {
  .ds-item-de-navegacao {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-2) var(--space-3);
    color: var(--text-primary);
    font-family: var(--font-heading-sm-font-family);
    font-weight: var(--font-heading-sm-font-weight);
    font-size: var(--font-heading-sm-font-size);
    line-height: var(--font-heading-sm-line-height);
    letter-spacing: var(--font-heading-sm-letter-spacing);
    text-transform: uppercase;
    text-decoration: none;
    border-radius: var(--radius-sm);
    transition: color var(--duration-fast) var(--easing-default),
                background var(--duration-fast) var(--easing-default);
    position: relative;
  }
  .ds-item-de-navegacao:hover { color: var(--accent); }
  .ds-item-de-navegacao:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-item-de-navegacao[aria-current="page"] {
    color: var(--accent);
  }
  .ds-item-de-navegacao[aria-current="page"]::after {
    content: "";
    position: absolute;
    bottom: -2px;
    left: var(--space-3);
    right: var(--space-3);
    block-size: 2px;
    background: var(--accent);
  }

  /* Inverse · sobre fundo escuro */
  .ds-item-de-navegacao--inverso { color: var(--text-inverse); }
  .ds-item-de-navegacao--inverso:hover { color: var(--accent); }
}

/* ---- molécula: breadcrumb ---- */
/* Breadcrumb · trilha de navegação.
   <nav aria-label="Breadcrumb"> + <ol> + <li>. Último item com aria-current="page". */

@layer molecules {
  .ds-trilha {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2);
    list-style: none;
    padding: 0;
    margin: 0;
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: var(--font-body-sm-line-height);
  }
  .ds-trilha__item {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    color: var(--text-secondary);
  }
  .ds-trilha__item a {
    color: var(--text-secondary);
    text-decoration: none;
    transition: color var(--duration-fast) var(--easing-default);
  }
  .ds-trilha__item a:hover {
    color: var(--accent);
    text-decoration: underline;
    text-underline-offset: 3px;
  }
  .ds-trilha__item a:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
    border-radius: var(--radius-sm);
  }
  .ds-trilha__item[aria-current="page"] {
    color: var(--text-primary);
    font-weight: var(--font-weight-semibold, 600);
  }
  .ds-trilha__sep {
    color: var(--text-secondary);
    opacity: 0.5;
    user-select: none;
  }
}

/* ---- molécula: pagination ---- */
/* Pagination · navegação entre páginas.
   <nav aria-label="Paginação"> + <ul role="list"> + page buttons. */

@layer molecules {
  .ds-paginacao {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
    font-family: var(--font-label-sm-font-family);
    font-size: var(--font-label-sm-font-size);
  }
  .ds-paginacao__page {
    appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-inline-size: 36px;
    min-block-size: 36px;
    padding: 0 var(--space-3);
    background: transparent;
    color: var(--text-primary);
    border: var(--border-width-thin) solid transparent;
    border-radius: var(--radius-sm);
    font: inherit;
    font-variant-numeric: tabular-nums;
    cursor: pointer;
    transition: background var(--duration-fast) var(--easing-default),
                border-color var(--duration-fast) var(--easing-default);
  }
  .ds-paginacao__page:hover:not([aria-current="page"]):not(:disabled) {
    border-color: var(--border-default);
  }
  .ds-paginacao__page:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-paginacao__page[aria-current="page"] {
    background: var(--accent);
    color: var(--action-primary-text);
    font-weight: var(--font-weight-bold, 700);
  }
  .ds-paginacao__page:disabled {
    opacity: var(--opacity-disabled);
    cursor: not-allowed;
  }
  .ds-paginacao__ellipsis {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-inline-size: 36px;
    color: var(--text-secondary);
    user-select: none;
  }
}

/* ---- molécula: price-display ---- */
/* Price Display · preço atual + opcional crossed + parcelas.
   Uso em product cards, PDP, payment summary.

   REGRA INVIOLÁVEL: valores numéricos (preços, parcelas, quantidades)
   SEMPRE em Inter. Playfair é exclusiva para texto editorial.
   Tabular-nums para alinhar dígitos em colunas.

   Mais detalhes em /foundations/tipografia/#regra-numeros-inter */

@layer molecules {
  .ds-preco {
    font-variant-numeric: tabular-nums;
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
    line-height: 1.2;
  }
  .ds-preco__crossed {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    color: var(--text-secondary);
    text-decoration: line-through;
    text-decoration-thickness: 1px;
    font-variant-numeric: tabular-nums;
  }
  .ds-preco__current {
    /* Inter Bold para preço · não Playfair. Valores são tabulares. */
    font-family: var(--font-label-lg-font-family);
    font-weight: var(--font-weight-bold);
    font-size: var(--font-size-3xl);
    line-height: 1.1;
    color: var(--text-primary);
    font-variant-numeric: tabular-nums;
  }
  .ds-preco--accent .ds-preco__current {
    color: var(--accent);
  }
  .ds-preco__installments {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    color: var(--text-secondary);
    font-variant-numeric: tabular-nums;
  }

  /* Inline variant · horizontal compact */
  .ds-preco--inline {
    flex-direction: row;
    align-items: baseline;
    gap: var(--space-3);
  }
  .ds-preco--inline .ds-preco__current {
    font-size: var(--font-label-lg-font-size);
    font-weight: var(--font-label-lg-font-weight);
  }
}

/* ---- molécula: rating-display ---- */
/* Rating Display · estrelas + valor numérico + count.
   Acessibilidade: aria-label no wrapper descreve o rating ("4.5 de 5 estrelas, 124 avaliações").
   Estrelas são aria-hidden. */

@layer molecules {
  .ds-nota-em-estrelas {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    color: var(--text-secondary);
  }
  .ds-nota-em-estrelas__stars {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    color: var(--accent);
  }
  .ds-nota-em-estrelas__stars .ds-icone {
    inline-size: var(--icon-size-sm);
    block-size: var(--icon-size-sm);
  }
  .ds-nota-em-estrelas__stars--lg .ds-icone {
    inline-size: var(--icon-size-lg);
    block-size: var(--icon-size-lg);
  }
  .ds-nota-em-estrelas__star-empty { color: var(--border-default); }
  .ds-nota-em-estrelas__value {
    font-weight: var(--font-weight-semibold, 600);
    color: var(--text-primary);
    font-variant-numeric: tabular-nums;
  }
  .ds-nota-em-estrelas__count { color: var(--text-secondary); }
}

/* ---- molécula: quantity-selector ---- */
/* Quantity Selector · botões −/+ + input numérico.
   Compõe .ds-botao (icon-only sm) + .ds-input.
   role="group" + aria-label="Quantidade" no wrapper. */

@layer molecules {
  .ds-seletor-de-quantidade {
    display: inline-flex;
    align-items: stretch;
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-md);
    overflow: hidden;
  }
  .ds-seletor-de-quantidade__button {
    appearance: none;
    background: transparent;
    border: 0;
    inline-size: 36px;
    min-block-size: 40px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--text-primary);
    cursor: pointer;
    font-size: 1.25rem;
    line-height: 1;
    transition: background var(--duration-fast) var(--easing-default);
  }
  .ds-seletor-de-quantidade__button:hover:not(:disabled) {
    background: var(--border-subtle);
  }
  .ds-seletor-de-quantidade__button:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: -2px;
  }
  .ds-seletor-de-quantidade__button:disabled {
    opacity: var(--opacity-disabled);
    cursor: not-allowed;
  }
  .ds-seletor-de-quantidade__input {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: textfield;
    inline-size: 48px;
    border: 0;
    background: transparent;
    text-align: center;
    font: inherit;
    color: var(--text-primary);
    font-variant-numeric: tabular-nums;
    min-block-size: 40px;
  }
  .ds-seletor-de-quantidade__input::-webkit-outer-spin-button,
  .ds-seletor-de-quantidade__input::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
  }
  .ds-seletor-de-quantidade__input:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: -2px;
  }
  .ds-seletor-de-quantidade:focus-within {
    border-color: var(--accent);
  }
}

/* ---- molécula: feature-box ---- */
/* Feature Box · icon + title + description.
   Use em sessões "diferenciais", "como funciona", marketing landing.
   Variants: horizontal (default), vertical (stacked, centered). */

@layer molecules {
  .ds-bloco-de-diferencial {
    display: grid;
    grid-template-columns: auto 1fr;
    grid-template-rows: auto 1fr;
    gap: var(--space-3) var(--space-4);
    align-items: start;
    block-size: 100%;
  }
  .ds-bloco-de-diferencial__icon {
    grid-row: 1 / span 2;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 48px;
    block-size: 48px;
    color: var(--accent);
  }
  .ds-bloco-de-diferencial__icon .ds-icone {
    inline-size: 100%;
    block-size: 100%;
  }
  .ds-bloco-de-diferencial__title {
    margin: 0;
    color: var(--text-primary);
  }
  .ds-bloco-de-diferencial__description {
    margin: 0;
    color: var(--text-secondary);
    line-height: var(--font-body-md-line-height);
  }

  /* Vertical variant · stacked, centered */
  .ds-bloco-de-diferencial--vertical {
    grid-template-columns: 1fr;
    text-align: center;
    justify-items: center;
  }
  .ds-bloco-de-diferencial--vertical .ds-bloco-de-diferencial__icon {
    grid-row: auto;
    inline-size: 64px;
    block-size: 64px;
  }
}

/* ---- molécula: product-card ---- */
/* Product Card · molecule para grids de catálogo.
   Composta de: image link + body (tag + title + rating + price + CTA).
   Brand-agnostic · usa slots de action e accent. */

@layer molecules {
  .ds-card-de-catalogo {
    display: flex;
    flex-direction: column;
    block-size: 100%;
    background: var(--surface-default);
    border-radius: var(--radius-md);
    overflow: hidden;
    /* D21: sem borda de repouso. Separação por superfície (card claro sobre canvas) + sombra. */
    box-shadow: var(--shadow-sm);
    transition: box-shadow var(--duration-fast) var(--easing-default),
                transform var(--duration-fast) var(--easing-default);
  }
  .ds-card-de-catalogo:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-md);
  }
  .ds-card-de-catalogo__image {
    display: block;
    position: relative;
    aspect-ratio: 1;
    background: var(--surface-warm);
    overflow: hidden;
  }
  .ds-card-de-catalogo__image img {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    transition: transform var(--duration-base) var(--easing-default);
  }
  .ds-card-de-catalogo__image:hover img {
    transform: scale(1.04);
  }
  .ds-card-de-catalogo__image:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: -2px;
  }
  .ds-card-de-catalogo__badge {
    position: absolute;
    top: var(--space-3);
    left: var(--space-3);
  }
  .ds-card-de-catalogo__body {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    padding: var(--space-4);
    flex: 1;
  }
  .ds-card-de-catalogo__category {
    color: var(--text-secondary);
  }
  .ds-card-de-catalogo__title {
    margin: 0;
    color: var(--text-primary);
  }
  .ds-card-de-catalogo__title a {
    color: inherit;
    text-decoration: none;
  }
  .ds-card-de-catalogo__title a:hover {
    color: var(--accent);
  }
  .ds-card-de-catalogo__cta {
    margin-block-start: auto;
    padding-block-start: var(--space-3);
  }
}

/* ---- molécula: review-card ---- */
/* Review Card · header (avatar + nome + rating) + body (texto) + date.
   Use em sessões de social proof, PDP, trustindex. */

@layer molecules {
  .ds-card-de-avaliacao {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    padding: var(--space-5);
    background: var(--surface-default);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm); /* D21: superfície + sombra, sem borda de repouso */
  }
  .ds-card-de-avaliacao__header {
    display: flex;
    align-items: center;
    gap: var(--space-3);
  }
  .ds-card-de-avaliacao__identity {
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
  }
  .ds-card-de-avaliacao__name {
    font-family: var(--font-label-md-font-family);
    font-weight: var(--font-weight-semibold, 600);
    color: var(--text-primary);
    line-height: 1.2;
  }
  .ds-card-de-avaliacao__body {
    margin: 0;
    color: var(--text-primary);
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    line-height: var(--font-body-md-line-height);
  }
  .ds-card-de-avaliacao__body::before { content: "“"; color: var(--accent); margin-right: 0.1em; }
  .ds-card-de-avaliacao__body::after  { content: "”"; color: var(--accent); margin-left: 0.1em; }
  .ds-card-de-avaliacao__date {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    color: var(--text-secondary);
  }
}

/* ---- molécula: payment-card ---- */
/* Payment Card · brand mark + last 4 + validade.
   Use em checkout / "cartões salvos" / payment method picker.
   selected state via data-state="selected" ou aria-pressed em wrap button. */

@layer molecules {
  .ds-cartao-salvo {
    font-family: var(--font-sans);
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-4);
    background: var(--surface-default);
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-md);
    transition: border-color var(--duration-fast) var(--easing-default),
                background var(--duration-fast) var(--easing-default);
    inline-size: 100%;
    text-align: left;
  }
  .ds-cartao-salvo:hover {
    border-color: var(--text-secondary);
  }
  .ds-cartao-salvo:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-cartao-salvo[data-state="selected"],
  .ds-cartao-salvo[aria-pressed="true"] {
    border-color: var(--accent);
    background: var(--surface-warm);
  }
  .ds-cartao-salvo__brand {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 40px;
    block-size: 28px;
    background: var(--surface-warm);
    border-radius: var(--radius-sm);
    color: var(--text-primary);
    flex-shrink: 0;
  }
  .ds-cartao-salvo__details {
    display: flex;
    flex-direction: column;
    gap: 2px;
    flex: 1;
    min-inline-size: 0;
  }
  .ds-cartao-salvo__number {
    font-family: var(--font-label-md-font-family);
    font-weight: var(--font-weight-semibold, 600);
    color: var(--text-primary);
    font-variant-numeric: tabular-nums;
  }
  .ds-cartao-salvo__expiry {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    color: var(--text-secondary);
  }
}

/* ---- molécula: photo-card ---- */
/* Photo Card · figure com image + caption rounded.
   Use em hero, galerias, ambient shots em PDP. */

@layer molecules {
  .ds-card-de-foto {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    margin: 0;
  }
  .ds-card-de-foto__image {
    display: block;
    inline-size: 100%;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: var(--radius-lg);
    background: var(--surface-warm);
  }
  .ds-card-de-foto--square .ds-card-de-foto__image { aspect-ratio: 1; }
  .ds-card-de-foto--portrait .ds-card-de-foto__image { aspect-ratio: 3 / 4; }
  .ds-card-de-foto--wide .ds-card-de-foto__image { aspect-ratio: 16 / 9; }

  .ds-card-de-foto__caption {
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
    padding-inline: var(--space-1);
  }
  .ds-card-de-foto__caption .ds-eyebrow {
    margin-block-end: var(--space-1);
  }
  .ds-card-de-foto__caption p {
    margin: 0;
    color: var(--text-secondary);
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: var(--font-body-sm-line-height);
  }
}

/* ================================================================
   ORGANISMOS (12)
   ================================================================ */
/* ---- organismo: barra de topo ---- */
/* Barra de topo (top bar) · chrome do topo de toda página, UNIVERSAL para os 3 contextos.
   Composto de: top bar (departamentos opcional) + main bar (logo + nav-items + search + icons + user/cart).
   Sticky em scroll, mas degrada para position: static em prefers-reduced-motion.
   Marca cascateia naturalmente via [data-brand]. */

@layer organisms {
  .ds-barra-de-topo {
    position: sticky;
    top: 0;
    z-index: var(--z-sticky);
    background: var(--surface-default);
    /* D21: header separa por superfície (branco sobre canvas), sem linha de repouso */
    isolation: isolate;
  }

  /* === Top bar (departamentos / promo / mensagem) · OPCIONAL === */
  .ds-barra-de-topo__topbar {
    background: var(--surface-inverse);
    color: var(--text-inverse);
    padding: var(--space-2) 0;
  }
  .ds-barra-de-topo__topbar-inner {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--space-5);
    padding-inline: var(--container-padding-x-desktop);
    max-inline-size: var(--container-max-width);
    margin-inline: auto;
    font-family: var(--font-label-sm-font-family);
    font-size: var(--font-label-sm-font-size);
    line-height: var(--font-label-sm-line-height);
  }
  .ds-barra-de-topo__topbar a {
    color: inherit;
    text-decoration: none;
    border-block-end: 1px solid transparent;
    transition: border-color var(--duration-fast) var(--easing-default);
  }
  .ds-barra-de-topo__topbar a:hover { border-color: currentColor; }

  /* === Main bar (logo + nav + actions) === */
  .ds-barra-de-topo__main {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: var(--space-6);
    padding: var(--space-4) var(--container-padding-x-desktop);
    max-inline-size: var(--container-max-width);
    margin-inline: auto;
  }
  .ds-barra-de-topo__brand {
    display: inline-flex;
    align-items: center;
    color: var(--text-primary);
    text-decoration: none;
  }
  /* Slot de logo: recebe UM arquivo de logo COMPLETO (horizontal no desktop, selo
     em espaços mínimos). Logo não se compõe: NUNCA ponha o selo + o nome digitado
     ao lado, pois isso inventa um lockup que não existe. A tinta é herdada do
     contexto (Titânio sobre claro, Branco sobre escuro), nunca Dourado (D10). */
  .ds-barra-de-topo__logo {
    display: inline-flex;
    block-size: 28px;
    color: var(--text-primary);
  }
  .ds-barra-de-topo__logo svg,
  .ds-barra-de-topo__logo img { block-size: 100%; inline-size: auto; }

  .ds-barra-de-topo__nav {
    display: flex;
    justify-content: center;
    gap: var(--space-1);
  }

  .ds-barra-de-topo__actions {
    display: flex;
    align-items: center;
    gap: var(--space-2);
  }

  /* Botão de menu (hamburger): abre/fecha o menu lateral no shell de aplicação e
     no mobile. Alvo tátil 44px. Some no desktop dos contextos que não têm lateral. */
  .ds-barra-de-topo__toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 44px;
    block-size: 44px;
    margin-inline-start: calc(var(--space-2) * -1);
    border: none;
    background: none;
    color: var(--text-primary);
    cursor: pointer;
    border-radius: var(--radius-md);
  }
  .ds-barra-de-topo__toggle:hover { background: var(--surface-canvas); }
  .ds-barra-de-topo__toggle svg { inline-size: 22px; block-size: 22px; }

  /* Título de página/app (contexto sistema): substitui a nav por um rótulo. */
  .ds-barra-de-topo__titulo {
    font-family: var(--font-heading-sm-font-family);
    font-weight: var(--font-heading-sm-font-weight);
    font-size: var(--font-heading-sm-font-size);
    color: var(--text-primary);
    margin: 0;
  }

  /* === CONTEXTO 1 · SISTEMA (app/dashboard) ===
     toggle + título + ações (busca, notificações, avatar). Sem topbar promo.
     Grid: toggle | título | espaço | ações. */
  .ds-barra-de-topo--sistema .ds-barra-de-topo__main {
    grid-template-columns: auto auto 1fr auto;
    gap: var(--space-4);
    padding-block: var(--space-3);
  }

  /* === CONTEXTO 2 · INSTITUCIONAL (site) ===
     logo à esquerda, nav e um CTA à direita; mais ar, sem topbar promo.
     Grid: logo | nav | ação (CTA). */
  .ds-barra-de-topo--institucional .ds-barra-de-topo__main {
    grid-template-columns: auto 1fr auto;
    padding-block: var(--space-5);
  }
  .ds-barra-de-topo--institucional .ds-barra-de-topo__nav { justify-content: flex-end; gap: var(--space-4); }

  /* === CONTEXTO 3 · ECOMMERCE (loja) === é o comportamento base: topbar promo
     opcional + logo + nav de categorias + ações (busca, conta, carrinho). */

  /* Superfície inversa (Titânio) opcional, para qualquer contexto. */
  .ds-barra-de-topo--inverso { background: var(--surface-inverse); color: var(--text-inverse); }
  .ds-barra-de-topo--inverso .ds-barra-de-topo__brand,
  .ds-barra-de-topo--inverso .ds-barra-de-topo__logo,
  .ds-barra-de-topo--inverso .ds-barra-de-topo__toggle,
  .ds-barra-de-topo--inverso .ds-barra-de-topo__titulo { color: var(--text-inverse); }

  /* Mobile: collapse nav atrás de hamburger; topbar centraliza único item */
  @media (max-width: 1024px) {
    .ds-barra-de-topo__main {
      grid-template-columns: auto 1fr auto;
      gap: var(--space-3);
      padding-inline: var(--container-padding-x-mobile);
    }
    .ds-barra-de-topo__nav {
      display: none;
    }
    .ds-barra-de-topo__topbar-inner {
      padding-inline: var(--container-padding-x-mobile);
      gap: var(--space-3);
    }
  }

  @media (prefers-reduced-motion: reduce) {
    .ds-barra-de-topo { position: static; }
  }
}

/* ---- organismo: menu lateral ---- */
/* Menu lateral (side nav / rail) · navegação vertical UNIVERSAL para os 3 contextos:
   sistema (nav do app, com grupos + ícones + rodapé de usuário), institucional
   (seções do site/docs) e e-commerce (conta ou categorias). Compõe com a barra de
   topo num "shell de aplicação" (topo fixo + lateral), ou funciona sozinho.
   D21: separa por superfície (branco sobre canvas), sem borda de repouso. */
@layer organisms {
  .ds-menu-lateral {
    display: flex;
    flex-direction: column;
    inline-size: 264px;
    block-size: 100%;
    background: var(--surface-default);
    color: var(--text-primary);
  }

  /* Topo: slot de logo COMPLETO (nunca composto, D10) ou título do app. */
  .ds-menu-lateral__topo {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    min-block-size: 56px;
    padding: var(--space-3) var(--space-4);
  }
  .ds-menu-lateral__logo { display: inline-flex; block-size: 26px; color: var(--text-primary); }
  .ds-menu-lateral__logo svg,
  .ds-menu-lateral__logo img { block-size: 100%; inline-size: auto; }

  /* Corpo: rola sozinho quando a nav é longa (a página não rola de lado). */
  .ds-menu-lateral__corpo {
    flex: 1 1 auto;
    overflow-y: auto;
    padding: var(--space-3) var(--space-2);
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
  }

  .ds-menu-lateral__grupo { display: flex; flex-direction: column; gap: 2px; }
  .ds-menu-lateral__grupo-titulo {
    margin: 0;
    padding: var(--space-2) var(--space-3);
    font-family: var(--font-label-sm-font-family);
    font-size: var(--font-label-sm-font-size);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--text-tertiary);
  }

  .ds-menu-lateral__item {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-2) var(--space-3);
    border-radius: var(--radius-md);
    color: var(--text-secondary);
    text-decoration: none;
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: 1.2;
    min-block-size: 40px;
    transition: background var(--duration-fast) var(--easing-default),
                color var(--duration-fast) var(--easing-default);
  }
  .ds-menu-lateral__item:hover { background: var(--surface-canvas); color: var(--text-primary); }
  .ds-menu-lateral__item:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
  /* Ativo: superfície afundada + peso + barra da marca à esquerda (Titânio, principal). */
  /* Ativo: superfície afundada + cor primária + peso. SEM barra/filete inset:
     o dono reprova esse ornamento (barra lateral inventada, sem base no sistema). */
  .ds-menu-lateral__item--ativo {
    background: var(--surface-canvas);
    color: var(--text-primary);
    font-weight: 600;
  }
  .ds-menu-lateral__item-icone { flex: 0 0 auto; inline-size: 20px; block-size: 20px; }
  .ds-menu-lateral__item-rotulo { flex: 1 1 auto; }
  .ds-menu-lateral__item-contador {
    flex: 0 0 auto;
    font-variant-numeric: tabular-nums;
    font-size: var(--font-label-sm-font-size);
    font-weight: 600;
    color: var(--text-tertiary);
  }

  /* Rodapé: bloco de usuário/conta ou links secundários. */
  .ds-menu-lateral__rodape {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-3) var(--space-4);
  }

  /* Variante RAIL (compacta): só ícones; rótulos e contadores somem, item centraliza.
     Referência: navigation rail do Material / side nav recolhida do Carbon. */
  .ds-menu-lateral--rail { inline-size: 72px; }
  .ds-menu-lateral--rail .ds-menu-lateral__grupo-titulo,
  .ds-menu-lateral--rail .ds-menu-lateral__item-rotulo,
  .ds-menu-lateral--rail .ds-menu-lateral__item-contador { display: none; }
  .ds-menu-lateral--rail .ds-menu-lateral__item { justify-content: center; padding-inline: 0; }
  /* rail: o ativo herda a superfície afundada da base (bloco atrás do ícone), sem anel */

  /* Superfície inversa (Titânio), para lateral escura em app/loja. */
  .ds-menu-lateral--inverso { background: var(--surface-inverse); color: var(--text-inverse); }
  .ds-menu-lateral--inverso .ds-menu-lateral__logo { color: var(--text-inverse); }
  .ds-menu-lateral--inverso .ds-menu-lateral__grupo-titulo { color: rgba(255, 255, 255, 0.55); }
  .ds-menu-lateral--inverso .ds-menu-lateral__item { color: rgba(255, 255, 255, 0.72); }
  .ds-menu-lateral--inverso .ds-menu-lateral__item:hover { background: rgba(255, 255, 255, 0.08); color: var(--text-inverse); }
  .ds-menu-lateral--inverso .ds-menu-lateral__item--ativo { background: rgba(255, 255, 255, 0.12); color: var(--text-inverse); }
  .ds-menu-lateral--inverso .ds-menu-lateral__item-contador { color: rgba(255, 255, 255, 0.55); }
}

/* ---- organismo: footer ---- */
/* Footer · chrome do bottom de toda página.
   Composto de: colunas de links + brand block + social row + legal bar.
   Surface: bg/inverse (Titânio) com text/inverse (Branco SSM).
   Em mobile: colunas viram stack vertical. */

@layer organisms {
  .ds-rodape {
    background: var(--surface-inverse);
    color: var(--text-inverse);
    padding-block: var(--space-9) var(--space-5);
  }

  /* Top: brand + colunas */
  .ds-rodape__top {
    display: grid;
    grid-template-columns: 1.5fr repeat(4, 1fr);
    gap: var(--space-7);
    padding-inline: var(--container-padding-x-desktop);
    max-inline-size: var(--container-max-width);
    margin-inline: auto;
  }

  .ds-rodape__brand {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
    max-inline-size: 280px;
  }
  .ds-rodape__brand-mark {
    inline-size: 120px;
    color: var(--text-inverse);
  }
  .ds-rodape__brand-tagline {
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    line-height: var(--font-body-md-line-height);
    color: var(--text-inverse);
    opacity: 0.8;
  }

  .ds-rodape__column {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
  }
  .ds-rodape__column-title {
    font-family: var(--font-heading-sm-font-family);
    font-weight: var(--font-heading-sm-font-weight);
    font-size: var(--font-heading-sm-font-size);
    line-height: var(--font-heading-sm-line-height);
    letter-spacing: var(--font-heading-sm-letter-spacing);
    text-transform: uppercase;
    color: var(--accent);
    margin: 0;
  }
  .ds-rodape__column ul {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    list-style: none;
    padding: 0;
    margin: 0;
  }
  .ds-rodape__column a {
    color: var(--text-inverse);
    opacity: 0.8;
    text-decoration: none;
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: var(--font-body-sm-line-height);
    transition: opacity var(--duration-fast) var(--easing-default), color var(--duration-fast) var(--easing-default);
  }
  .ds-rodape__column a:hover { opacity: 1; color: var(--accent); }

  /* Middle: divisor + social row */
  .ds-rodape__divider {
    margin-block: var(--space-7);
    border: 0;
    block-size: var(--border-width-thin);
    background: var(--text-inverse);
    opacity: 0.15;
    inline-size: calc(100% - 2 * var(--container-padding-x-desktop));
    margin-inline: var(--container-padding-x-desktop);
    max-inline-size: var(--container-max-width);
  }

  .ds-rodape__bottom {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--space-5);
    padding-inline: var(--container-padding-x-desktop);
    max-inline-size: var(--container-max-width);
    margin-inline: auto;
  }
  .ds-rodape__legal {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: var(--font-body-sm-line-height);
    color: var(--text-inverse);
    opacity: 0.6;
  }
  .ds-rodape__social {
    display: flex;
    gap: var(--space-3);
  }
  .ds-rodape__social a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 36px;
    block-size: 36px;
    border-radius: var(--radius-full);
    background: rgba(255, 255, 255, 0.1); /* D21: preenchido, sem contorno */
    color: var(--text-inverse);
    opacity: 0.8;
    transition: opacity var(--duration-fast) var(--easing-default), background var(--duration-fast) var(--easing-default), color var(--duration-fast) var(--easing-default);
  }
  .ds-rodape__social a:hover {
    opacity: 1;
    background: var(--accent);
    color: var(--action-primary-text);
  }
  .ds-rodape__social a:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }

  /* Mobile: stack todas as colunas */
  @media (max-width: 768px) {
    .ds-rodape__top {
      grid-template-columns: 1fr;
      gap: var(--space-6);
      padding-inline: var(--container-padding-x-mobile);
    }
    .ds-rodape__divider {
      inline-size: calc(100% - 2 * var(--container-padding-x-mobile));
      margin-inline: var(--container-padding-x-mobile);
    }
    .ds-rodape__bottom {
      flex-direction: column;
      align-items: flex-start;
      padding-inline: var(--container-padding-x-mobile);
    }
  }
}

/* ---- organismo: newsletter ---- */
/* Newsletter · email subscribe form com aria-live status.
   Composto de: title + description + email input + submit button + status message.
   3 variantes de surface: default (warm), inverse (Titânio), highlight (Resina). */

@layer organisms {
  .ds-newsletter {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
    gap: var(--space-7);
    align-items: center;
    background: var(--color-neutro-canvas, #f8f8f8);
    padding: var(--space-8) var(--container-padding-x-desktop);
    border-radius: var(--radius-lg);
  }

  .ds-newsletter__intro {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
  }
  .ds-newsletter__eyebrow {
    color: var(--accent);
  }
  .ds-newsletter__title {
    margin: 0;
    color: var(--text-primary);
  }
  .ds-newsletter__description {
    margin: 0;
    color: var(--text-secondary);
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    line-height: var(--font-body-md-line-height);
  }

  .ds-newsletter__form {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
  }
  .ds-newsletter__input-row {
    display: flex;
    gap: var(--space-2);
  }
  .ds-newsletter__input-row .ds-input {
    flex: 1;
  }

  .ds-newsletter__status {
    min-block-size: 1.5em;
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: var(--font-body-sm-line-height);
    color: var(--text-secondary);
  }
  .ds-newsletter__status[data-state="success"] { color: var(--color-state-success); }
  .ds-newsletter__status[data-state="error"]   { color: var(--color-state-error); }

  .ds-newsletter__consent {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: var(--font-body-sm-line-height);
    color: var(--text-secondary);
  }
  .ds-newsletter__consent a {
    color: var(--link-default);
    text-decoration: underline;
    text-underline-offset: 2px;
  }

  /* === Variant: inverse (over dark hero) === */
  .ds-newsletter--inverso {
    background: var(--surface-inverse);
  }
  .ds-newsletter--inverso .ds-newsletter__title,
  .ds-newsletter--inverso .ds-newsletter__description {
    color: var(--text-inverse);
  }
  .ds-newsletter--inverso .ds-newsletter__description { opacity: 0.85; }

  /* === Mobile: stack vertically === */
  @media (max-width: 768px) {
    .ds-newsletter {
      grid-template-columns: 1fr;
      padding: var(--space-6) var(--container-padding-x-mobile);
    }
    .ds-newsletter__input-row {
      flex-direction: column;
    }
  }

  /* Variante highlight · Branco Resina (prometida no cabeçalho original, implementada na porta) */
  .ds-newsletter--destaque {
    background: #f2ead9;
  }
}

/* ---- organismo: quote-block ---- */
/* Quote Block · destaque editorial de citação.
   Composto de: optional eyebrow + grande quote (Playfair) + atribuição (avatar + name + role).
   Surface: warm ou inverse. Brand cascade via accent. */

@layer organisms {
  .ds-bloco-de-depoimento {
    display: flex;
    flex-direction: column;
    gap: var(--space-6);
    padding: var(--space-8) var(--space-7);
    background: var(--surface-warm);
    border-radius: var(--radius-lg);
    position: relative;
  }
  .ds-bloco-de-depoimento::before {
    content: "“";
    position: absolute;
    top: var(--space-3);
    left: var(--space-5);
    font-family: var(--font-display-3xl-font-family);
    font-size: var(--font-size-9xl);
    line-height: 1;
    color: var(--accent);
    opacity: 0.18;
    user-select: none;
    pointer-events: none;
  }

  .ds-bloco-de-depoimento__eyebrow {
    color: var(--accent);
    align-self: flex-start;
  }
  .ds-bloco-de-depoimento__quote {
    margin: 0;
    color: var(--text-primary);
    font-family: var(--font-display-lg-font-family);
    font-weight: var(--font-display-lg-font-weight);
    font-size: var(--font-display-lg-font-size);
    line-height: var(--font-display-lg-line-height);
    letter-spacing: var(--font-display-lg-letter-spacing);
    position: relative;
  }

  .ds-bloco-de-depoimento__attribution {
    display: flex;
    align-items: center;
    gap: var(--space-3);
  }
  .ds-bloco-de-depoimento__attribution-text {
    display: flex;
    flex-direction: column;
    gap: 2px;
  }
  .ds-bloco-de-depoimento__name {
    font-family: var(--font-label-md-font-family);
    font-weight: var(--font-weight-semibold);
    font-size: var(--font-label-md-font-size);
    line-height: 1.2;
    color: var(--text-primary);
  }
  .ds-bloco-de-depoimento__role {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    color: var(--text-secondary);
  }

  /* === Inverse variant === */
  .ds-bloco-de-depoimento--inverso {
    background: var(--surface-inverse);
  }
  .ds-bloco-de-depoimento--inverso .ds-bloco-de-depoimento__quote,
  .ds-bloco-de-depoimento--inverso .ds-bloco-de-depoimento__name { color: var(--text-inverse); }
  .ds-bloco-de-depoimento--inverso .ds-bloco-de-depoimento__role { color: var(--text-inverse); opacity: 0.7; }

  @media (max-width: 768px) {
    .ds-bloco-de-depoimento {
      padding: var(--space-6) var(--space-5);
    }
  }
}

/* ---- organismo: feature-pill-card ---- */
/* Feature Pill Card · destaque horizontal: icon grande + title + descrição + opcional CTA.
   Diferente do feature-box (molecule) por ser MAIOR, com background pill, hover state, CTA inline.
   Composição: ícone (xl) + texto + opcional CTA. */

@layer organisms {
  .ds-pilula-de-beneficio {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: var(--space-5);
    padding: var(--space-5) var(--space-6);
    background: var(--surface-default);
    border: none; background-color: var(--border-subtle); /* D21: preenchido */
    border-radius: var(--radius-full);
    transition: border-color var(--duration-fast) var(--easing-default),
                box-shadow var(--duration-fast) var(--easing-default),
                transform var(--duration-fast) var(--easing-default);
    text-decoration: none;
    color: inherit;
  }
  .ds-pilula-de-beneficio:hover {
    border-color: var(--accent);
    box-shadow: var(--shadow-md);
    transform: translateY(-2px);
  }
  .ds-pilula-de-beneficio:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }

  .ds-pilula-de-beneficio__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 56px;
    block-size: 56px;
    background: var(--surface-warm);
    border-radius: var(--radius-full);
    color: var(--accent);
    flex-shrink: 0;
  }
  .ds-pilula-de-beneficio__icon .ds-icone {
    inline-size: 28px;
    block-size: 28px;
  }

  .ds-pilula-de-beneficio__body {
    display: flex;
    flex-direction: column;
    gap: var(--space-1);
    min-inline-size: 0;
  }
  .ds-pilula-de-beneficio__title {
    margin: 0;
    color: var(--text-primary);
    font-family: var(--font-heading-sm-font-family);
    font-weight: var(--font-weight-bold);
    font-size: var(--font-heading-md-font-size);
    line-height: var(--font-heading-md-line-height);
    letter-spacing: var(--font-heading-md-letter-spacing);
    text-transform: uppercase;
  }
  .ds-pilula-de-beneficio__description {
    margin: 0;
    color: var(--text-secondary);
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    line-height: var(--font-body-sm-line-height);
  }

  .ds-pilula-de-beneficio__cta {
    display: inline-flex;
    align-items: center;
    color: var(--accent);
    flex-shrink: 0;
    transition: transform var(--duration-fast) var(--easing-default);
  }
  .ds-pilula-de-beneficio:hover .ds-pilula-de-beneficio__cta {
    transform: translateX(4px);
  }

  @media (max-width: 600px) {
    .ds-pilula-de-beneficio {
      grid-template-columns: auto 1fr;
      border-radius: var(--radius-lg);
      padding: var(--space-4);
    }
    .ds-pilula-de-beneficio__cta { grid-column: 2; justify-self: end; }
  }
}

/* ---- organismo: contact-card ---- */
/* Contact Card · bloco com info de contato + canais.
   Composto de: title + descrição + lista de canais (icon + label + value).
   Use em PDP, About, sidebar de FAQ. */

@layer organisms {
  .ds-card-de-contato {
    display: flex;
    flex-direction: column;
    gap: var(--space-5);
    padding: var(--space-7);
    background: var(--surface-default);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm); /* D21: superfície + sombra, sem borda de repouso */
  }

  .ds-card-de-contato__header {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
  }
  .ds-card-de-contato__title {
    margin: 0;
    color: var(--text-primary);
  }
  .ds-card-de-contato__description {
    margin: 0;
    color: var(--text-secondary);
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    line-height: var(--font-body-md-line-height);
  }

  .ds-card-de-contato__channels {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
    list-style: none;
    padding: 0;
    margin: 0;
  }
  .ds-card-de-contato__channel {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
    gap: var(--space-3);
    padding: var(--space-3) 0;
    text-decoration: none;
    color: inherit;
    transition: color var(--duration-fast) var(--easing-default);
  }
  .ds-card-de-contato__channel:hover { color: var(--accent); }
  .ds-card-de-contato__channel:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
    border-radius: var(--radius-sm);
  }

  .ds-card-de-contato__channel-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 40px;
    block-size: 40px;
    background: var(--surface-warm);
    border-radius: var(--radius-full);
    color: var(--accent);
  }
  .ds-card-de-contato__channel-body {
    display: flex;
    flex-direction: column;
    gap: 2px;
  }
  .ds-card-de-contato__channel-label {
    font-family: var(--font-label-sm-font-family);
    font-size: var(--font-label-sm-font-size);
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-secondary);
  }
  .ds-card-de-contato__channel-value {
    font-family: var(--font-label-md-font-family);
    font-weight: var(--font-weight-semibold);
    font-size: var(--font-label-md-font-size);
    color: var(--text-primary);
  }
}

/* ---- organismo: product-card-org ---- */
/* Product Card (organism) · variante grande, horizontal, para destaque.
   Diferente do molecule (vertical, grid de catálogo).
   Composto de: image (large left) + body (right: tag + title + rating + price + description + CTAs).
   Use em PDP "Produtos relacionados", em destaques de home. */

@layer organisms {
  .ds-produto-em-destaque {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0;
    background: var(--surface-default);
    border-radius: var(--radius-lg);
    overflow: hidden;
    box-shadow: var(--shadow-sm); /* D21: superfície + sombra, sem borda de repouso */
    transition: box-shadow var(--duration-fast) var(--easing-default);
  }
  .ds-produto-em-destaque:hover {
    box-shadow: var(--shadow-lg);
  }

  .ds-produto-em-destaque__image {
    display: block;
    aspect-ratio: 4 / 5;
    background: var(--surface-warm);
    overflow: hidden;
    position: relative;
  }
  .ds-produto-em-destaque__image img {
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    transition: transform var(--duration-base) var(--easing-default);
  }
  .ds-produto-em-destaque__image:hover img { transform: scale(1.03); }
  .ds-produto-em-destaque__image:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: -2px;
  }

  .ds-produto-em-destaque__badge {
    position: absolute;
    top: var(--space-4);
    left: var(--space-4);
  }

  .ds-produto-em-destaque__body {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    padding: var(--space-7);
    justify-content: center;
  }

  .ds-produto-em-destaque__category {
    color: var(--text-secondary);
  }
  .ds-produto-em-destaque__title {
    margin: 0;
    color: var(--text-primary);
  }
  .ds-produto-em-destaque__title a {
    color: inherit;
    text-decoration: none;
  }
  .ds-produto-em-destaque__title a:hover { color: var(--accent); }

  .ds-produto-em-destaque__description {
    margin: 0;
    color: var(--text-secondary);
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    line-height: var(--font-body-md-line-height);
  }

  .ds-produto-em-destaque__actions {
    display: flex;
    gap: var(--space-3);
    margin-block-start: var(--space-3);
  }

  /* Image-right variant */
  .ds-produto-em-destaque--reverse {
    grid-template-columns: 1fr 1fr;
  }
  .ds-produto-em-destaque--reverse .ds-produto-em-destaque__image { order: 2; }

  @media (max-width: 768px) {
    .ds-produto-em-destaque,
    .ds-produto-em-destaque--reverse {
      grid-template-columns: 1fr;
    }
    .ds-produto-em-destaque--reverse .ds-produto-em-destaque__image { order: 0; }
    .ds-produto-em-destaque__body { padding: var(--space-5); }
  }
}

/* ---- organismo: hero-slider ---- */
/* Hero Slider · carrossel de slides com auto-rotate CSS-only.
   Composto de: slides (image bg + content overlay) + nav dots + arrows.
   Acessibilidade: role="region" aria-roledescription="carousel".
   Auto-rotate via CSS animation (5s por slide). Pausa em hover/focus-within.
   Respeitar prefers-reduced-motion. */

@layer organisms {
  .ds-carrossel-hero {
    position: relative;
    inline-size: 100%;
    aspect-ratio: 16 / 7;
    overflow: hidden;
    border-radius: var(--radius-lg);
    background: var(--surface-inverse);
    isolation: isolate;
  }

  .ds-carrossel-hero__track {
    display: flex;
    inline-size: 100%;
    block-size: 100%;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scrollbar-width: none;
  }
  .ds-carrossel-hero__track::-webkit-scrollbar { display: none; }

  .ds-carrossel-hero__slide {
    flex: 0 0 100%;
    scroll-snap-align: start;
    position: relative;
    display: grid;
    place-items: center;
    overflow: hidden;
  }

  .ds-carrossel-hero__image {
    position: absolute;
    inset: 0;
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    z-index: -1;
  }
  .ds-carrossel-hero__overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(27, 33, 45, 0.3) 0%, rgba(27, 33, 45, 0.65) 100%);
    z-index: -1;
  }

  .ds-carrossel-hero__content {
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
    align-items: flex-start;
    color: var(--text-inverse);
    padding: var(--space-9);
    max-inline-size: 720px;
  }
  .ds-carrossel-hero__eyebrow {
    color: var(--accent);
  }
  .ds-carrossel-hero__title {
    margin: 0;
    color: var(--text-inverse);
  }
  .ds-carrossel-hero__description {
    margin: 0;
    color: var(--text-inverse);
    opacity: 0.9;
    font-family: var(--font-body-lg-font-family);
    font-size: var(--font-body-lg-font-size);
    line-height: var(--font-body-lg-line-height);
    max-inline-size: 540px;
  }
  .ds-carrossel-hero__actions {
    display: flex;
    gap: var(--space-3);
    margin-block-start: var(--space-3);
  }

  /* Navigation arrows */
  .ds-carrossel-hero__nav {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 48px;
    block-size: 48px;
    background: rgba(255, 255, 255, 0.18);
    backdrop-filter: blur(8px);
    border-radius: var(--radius-full);
    color: var(--text-inverse);
    cursor: pointer;
    transition: background var(--duration-fast) var(--easing-default);
  }
  .ds-carrossel-hero__nav:hover { background: rgba(255, 255, 255, 0.3); }
  .ds-carrossel-hero__nav:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }
  .ds-carrossel-hero__nav--prev { left: var(--space-5); }
  .ds-carrossel-hero__nav--next { right: var(--space-5); }

  /* Dots */
  .ds-carrossel-hero__dots {
    position: absolute;
    bottom: var(--space-5);
    left: 50%;
    transform: translateX(-50%);
    z-index: 2;
    display: inline-flex;
    gap: var(--space-2);
  }
  .ds-carrossel-hero__dot {
    color: var(--text-inverse);
    appearance: none;
    inline-size: 10px;
    block-size: 10px;
    padding: 0;
    border: 0;
    border-radius: var(--radius-full);
    background: rgba(255, 255, 255, 0.45);
    cursor: pointer;
    transition: background var(--duration-fast) var(--easing-default), inline-size var(--duration-fast) var(--easing-default);
  }
  .ds-carrossel-hero__dot:hover { background: rgba(255, 255, 255, 0.5); }
  .ds-carrossel-hero__dot[aria-current="true"] {
    inline-size: 28px;
    border-radius: var(--radius-full);
    background: var(--text-inverse);
  }
  .ds-carrossel-hero__dot:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }

  @media (max-width: 768px) {
    .ds-carrossel-hero {
      aspect-ratio: 4 / 5;
    }
    .ds-carrossel-hero__content {
      padding: var(--space-6);
    }
    .ds-carrossel-hero__nav { display: none; }
  }
}

/* ---- organismo: diferenciais-section ---- */
/* Diferenciais Section · sessão de página com row de feature-boxes (do molecule).
   Composto de: section header (eyebrow + title + description) + grid de features.
   Use em home, landing pages, sobre. Pode ser inverse. */

@layer organisms {
  .ds-secao-de-diferenciais {
    padding-block: var(--section-padding-y-default);
    padding-inline: var(--container-padding-x-desktop);
  }

  .ds-secao-de-diferenciais__inner {
    max-inline-size: var(--container-max-width);
    margin-inline: auto;
    display: flex;
    flex-direction: column;
    gap: var(--space-7);
  }

  .ds-secao-de-diferenciais__header {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    max-inline-size: 720px;
  }
  .ds-secao-de-diferenciais__eyebrow { color: var(--accent); }
  .ds-secao-de-diferenciais__title {
    margin: 0;
    color: var(--text-primary);
  }
  .ds-secao-de-diferenciais__description {
    margin: 0;
    color: var(--text-secondary);
    font-family: var(--font-body-lg-font-family);
    font-size: var(--font-body-lg-font-size);
    line-height: var(--font-body-lg-line-height);
  }

  .ds-secao-de-diferenciais__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: var(--space-6);
  }

  /* === Inverse variant === */
  .ds-secao-de-diferenciais--inverso { background: var(--surface-inverse); }
  .ds-secao-de-diferenciais--inverso .ds-secao-de-diferenciais__title { color: var(--text-inverse); }
  .ds-secao-de-diferenciais--inverso .ds-secao-de-diferenciais__description { color: var(--text-inverse); opacity: 0.8; }

  @media (max-width: 768px) {
    .ds-secao-de-diferenciais {
      padding-block: var(--section-padding-y-compact);
      padding-inline: var(--container-padding-x-mobile);
    }
    .ds-secao-de-diferenciais__grid { gap: var(--space-5); }
  }
}

/* ---- organismo: product-grid-section ---- */
/* Product Grid Section · sessão de página com header + filter chips + grid de product-cards.
   Composto de: section header + filter row (chips) + opcional CTA "Ver todos" + grid.
   Use em home, PLP, category. */

@layer organisms {
  .ds-vitrine-de-produtos {
    padding-block: var(--section-padding-y-default);
    padding-inline: var(--container-padding-x-desktop);
  }

  .ds-vitrine-de-produtos__inner {
    max-inline-size: var(--container-max-width);
    margin-inline: auto;
    display: flex;
    flex-direction: column;
    gap: var(--space-6);
  }

  .ds-vitrine-de-produtos__header {
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
    gap: var(--space-5);
    flex-wrap: wrap;
  }
  .ds-vitrine-de-produtos__title-group {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
  }
  .ds-vitrine-de-produtos__eyebrow { color: var(--accent); }
  .ds-vitrine-de-produtos__title {
    margin: 0;
    color: var(--text-primary);
  }

  .ds-vitrine-de-produtos__filters {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
  }

  .ds-vitrine-de-produtos__grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: var(--space-5);
  }

  .ds-vitrine-de-produtos__footer {
    display: flex;
    justify-content: center;
    padding-block-start: var(--space-3);
  }

  @media (max-width: 768px) {
    .ds-vitrine-de-produtos {
      padding-block: var(--section-padding-y-compact);
      padding-inline: var(--container-padding-x-mobile);
    }
    .ds-vitrine-de-produtos__grid {
      grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
      gap: var(--space-4);
    }
  }
}

/* ---- organismo: link-cards-row ---- */
/* Link Cards Row · row de cards clicáveis (imagens + título + arrow).
   Combina Figma area-lks-row + area-lks-tile.
   Composto de: header opcional + grid horizontal de tiles.
   Each tile: image bg + title + arrow icon overlay. */

@layer organisms {
  .ds-atalhos-de-categoria {
    padding-block: var(--section-padding-y-default);
    padding-inline: var(--container-padding-x-desktop);
  }

  .ds-atalhos-de-categoria__inner {
    max-inline-size: var(--container-max-width);
    margin-inline: auto;
    display: flex;
    flex-direction: column;
    gap: var(--space-6);
  }

  .ds-atalhos-de-categoria__header {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
    max-inline-size: 720px;
  }
  .ds-atalhos-de-categoria__title {
    margin: 0;
    color: var(--text-primary);
  }

  .ds-atalhos-de-categoria__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: var(--space-4);
  }

  .ds-atalho-de-categoria {
    display: block;
    position: relative;
    aspect-ratio: 4 / 5;
    background: var(--surface-warm);
    border-radius: var(--radius-lg);
    overflow: hidden;
    text-decoration: none;
    color: var(--text-inverse);
    transition: transform var(--duration-fast) var(--easing-default);
  }
  .ds-atalho-de-categoria:hover { transform: translateY(-4px); }
  .ds-atalho-de-categoria:focus-visible {
    outline: var(--border-width-thick) solid var(--accent);
    outline-offset: 2px;
  }

  .ds-atalho-de-categoria__image {
    position: absolute;
    inset: 0;
    inline-size: 100%;
    block-size: 100%;
    object-fit: cover;
    z-index: 0;
    transition: transform var(--duration-base) var(--easing-default);
  }
  .ds-atalho-de-categoria:hover .ds-atalho-de-categoria__image { transform: scale(1.06); }

  .ds-atalho-de-categoria__overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, transparent 50%, rgba(27, 33, 45, 0.85) 100%);
    z-index: 1;
  }

  .ds-atalho-de-categoria__body {
    position: absolute;
    inset-block-end: 0;
    inset-inline: 0;
    z-index: 2;
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
    padding: var(--space-5);
    gap: var(--space-3);
  }
  .ds-atalho-de-categoria__title {
    margin: 0;
    color: var(--text-inverse);
    font-family: var(--font-display-sm-font-family);
    font-weight: var(--font-display-sm-font-weight);
    font-size: var(--font-display-sm-font-size);
    line-height: var(--font-display-sm-line-height);
  }
  .ds-atalho-de-categoria__arrow {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 40px;
    block-size: 40px;
    background: var(--accent);
    color: var(--action-primary-text);
    border-radius: var(--radius-full);
    flex-shrink: 0;
    transition: transform var(--duration-fast) var(--easing-default);
  }
  .ds-atalho-de-categoria:hover .ds-atalho-de-categoria__arrow { transform: translateX(4px); }

  /* Wide variant (tile) · landscape */
  .ds-atalho-de-categoria--wide { aspect-ratio: 16 / 9; }

  @media (max-width: 768px) {
    .ds-atalhos-de-categoria {
      padding-block: var(--section-padding-y-compact);
      padding-inline: var(--container-padding-x-mobile);
    }
  }
}

/* ---- organismo: trustindex-reviews ---- */
/* TrustIndex Reviews · sessão de social proof.
   Composto de: aggregate (stars + média + count) + row de review-cards (molecule).
   Use em PDP, home, sobre. */

@layer organisms {
  .ds-bloco-de-avaliacoes {
    padding-block: var(--section-padding-y-default);
    padding-inline: var(--container-padding-x-desktop);
    background: var(--surface-warm);
  }

  .ds-bloco-de-avaliacoes__inner {
    max-inline-size: var(--container-max-width);
    margin-inline: auto;
    display: flex;
    flex-direction: column;
    gap: var(--space-6);
  }

  .ds-bloco-de-avaliacoes__header {
    display: flex;
    flex-direction: column;
    gap: var(--space-3);
    align-items: center;
    text-align: center;
  }
  .ds-bloco-de-avaliacoes__eyebrow { color: var(--accent); }
  .ds-bloco-de-avaliacoes__title {
    margin: 0;
    color: var(--text-primary);
  }

  /* Aggregate score block */
  .ds-bloco-de-avaliacoes__aggregate {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-5) var(--space-7);
    background: var(--surface-default);
    border-radius: var(--radius-lg);
    align-self: center;
  }
  .ds-bloco-de-avaliacoes__score {
    display: flex;
    align-items: baseline;
    gap: var(--space-2);
  }
  .ds-bloco-de-avaliacoes__score-value {
    font-family: var(--font-label-lg-font-family);
    font-weight: var(--font-weight-bold);
    font-size: var(--font-size-7xl);
    line-height: 1;
    color: var(--text-primary);
    font-variant-numeric: tabular-nums;
  }
  .ds-bloco-de-avaliacoes__score-max {
    font-family: var(--font-body-md-font-family);
    font-size: var(--font-body-md-font-size);
    color: var(--text-secondary);
    font-variant-numeric: tabular-nums;
  }
  .ds-bloco-de-avaliacoes__score-meta {
    font-family: var(--font-body-sm-font-family);
    font-size: var(--font-body-sm-font-size);
    color: var(--text-secondary);
  }

  .ds-bloco-de-avaliacoes__reviews {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: var(--space-4);
  }

  @media (max-width: 768px) {
    .ds-bloco-de-avaliacoes {
      padding-block: var(--section-padding-y-compact);
      padding-inline: var(--container-padding-x-mobile);
    }
    .ds-bloco-de-avaliacoes__reviews {
      grid-template-columns: 1fr;
    }
  }
}

/* ================================================================
   EXTRAS FASE 1 · nascidos no sistema vivo (não existiam no versão anterior)
   ================================================================ */
@layer atoms {
  /* Átomo: card genérico */
  .ds-card {
    background: var(--surface-default, #ffffff);
    border-radius: 16px; /* D21: sem borda, curva generosa */
    padding: 24px;
  }
  a.ds-card { display: block; text-decoration: none; color: inherit; transition: box-shadow var(--duration-fast, 200ms) var(--easing-default, ease), border-color var(--duration-fast, 200ms) var(--easing-default, ease); }
  a.ds-card:hover { box-shadow: 0 3px 9px rgba(0, 0, 0, 0.12); }
  a.ds-card:focus-visible { outline: 2px solid var(--accent, #323643); outline-offset: 2px; }

  /* Átomo: ficha (pares rótulo/valor) · promovido dos documentos (v2.5.1) */
  .ds-ficha { margin: 0; padding: 0; display: flex; flex-direction: column; }
  .ds-ficha > div { display: flex; gap: 16px; align-items: baseline; padding: 7px 0; }
  .ds-ficha dt { font-family: var(--font-body-md-font-family, Inter, sans-serif); font-size: 10px; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; color: var(--color-cinza-quartzo, #606470); min-width: 130px; flex-shrink: 0; }
  .ds-ficha--compacta > div { padding: 2px 0; border-bottom: none; gap: 10px; }
  .ds-ficha--compacta dt { min-width: 86px; font-size: 9.5px; }
  .ds-ficha--compacta dd { font-size: 12px; }
  .ds-ficha dd { margin: 0; font-family: var(--font-body-md-font-family, Inter, sans-serif); font-size: 13px; color: var(--color-titanio-solido, #323643); line-height: 1.5; }
}

@layer base {
  /* Layout de página (nó web do tokens.json) */
  .ds-container { max-width: var(--container-max-width, 1440px); margin-inline: auto; padding-inline: var(--container-padding-x-mobile, 16px); }
  @media (min-width: 1025px) { .ds-container { padding-inline: var(--container-padding-x-desktop, 48px); } }
  .ds-section { padding-block: 96px; }
  .ds-section--compact { padding-block: 48px; }
  .ds-section--spacious { padding-block: 120px; }
}
