/*
 * DataNostro — Advisio Visual Identity (light theme, 2026-04-28)
 *
 * Public marketing pages use the same visual language as advisio.cz:
 * light backgrounds, Advisio Red CTA, navy text, Noto Sans/Serif typography.
 * No dev-tool aesthetics — only the DataNostro NAME is preserved.
 *
 * Loaded AFTER tailwind.css to override legacy Tailwind classes on public pages.
 * Pages opt in by adding `class="dn"` to <body>. The `dn-*` utility vocabulary
 * is kept for backwards compat with existing public templates, but tokens map
 * to Advisio palette.
 */

:root[data-theme="light"], html.dn, body.dn {
    /* Surfaces — DataNostro warm editorial palette (v3, 2026-05-08)
       Warm off-white body so white cards still lift; less cool/clinical
       than slate-50. Pairs with terracotta accent + deep ink navy text. */
    --dn-bg:          #FCFAF7;     /* warm off-white root bg */
    --dn-bg-card:     #FFFFFF;     /* cards lift from warm bg */
    --dn-bg-1:        #F5F0E8;     /* alt section bg */
    --dn-bg-2:        #F8F4ED;     /* form inputs, tabs container */
    --dn-bg-3:        #FCFAF7;     /* deepest light = body bg */

    /* Lines / borders — warm taupe instead of cool gray */
    --dn-line:        #ECE5D8;     /* hairline */
    --dn-line-2:      #D9CFBC;
    --dn-line-strong: #A89980;

    /* Foreground — deep ink navy, slightly warmer than pure slate */
    --dn-fg:   #0A1521;            /* primary text, headings */
    --dn-fg-1: #3D4A55;            /* body copy */
    --dn-fg-2: #5C6873;            /* muted */
    --dn-fg-3: #98A0AA;            /* very muted (timestamps) */

    /* Accent — warm terracotta orange (sophisticated CTA, not neon) */
    --dn-accent:        #E85D2F;
    --dn-accent-fg:     #FFFFFF;
    --dn-accent-glow:   rgba(232, 93, 47, 0.30);
    --dn-accent-soft:   rgba(232, 93, 47, 0.08);
    --dn-accent-hover:  #D34818;

    /* Status — emerald is now ONLY for operational/success (not branding) */
    --dn-ok:   #10B981;            /* operational green */
    --dn-warn: #F59E0B;            /* warning amber */
    --dn-bad:  #DC2626;            /* error red */
    --dn-info: #3B82F6;            /* info blue */
    --dn-purple: #7C3AED;

    /* Radius — sharper than before (jiný sGTM hosting-influenced editorial feel: 0–4 px max).
       Pill shapes still go to 999px via class overrides where needed. */
    --dn-radius-xs: 0px;
    --dn-radius-sm: 2px;
    --dn-radius-md: 3px;
    --dn-radius-lg: 4px;
    --dn-radius-xl: 6px;

    --dn-section-y: clamp(56px, 8vw, 120px);

    /* Spacing scale — 5/10/15/20/30/40/50/70/100/150 (jiný sGTM hosting rhythm). */
    --dn-sp-3xs: 2px;
    --dn-sp-2xs: 5px;
    --dn-sp-xs:  10px;
    --dn-sp-sm:  15px;
    --dn-sp-md:  20px;
    --dn-sp-lg:  30px;
    --dn-sp-xl:  40px;
    --dn-sp-2xl: 50px;
    --dn-sp-3xl: 70px;
    --dn-sp-4xl: 100px;
    --dn-sp-5xl: 150px;

    /* Offset hard-shadows — jiný sGTM hosting signature.
       Negative-X positive-Y, zero blur, tinted color. Halves on hover. */
    --dn-shadow-tint:        rgba(232, 93, 47, 0.85);  /* terracotta */
    --dn-shadow-tint-soft:   rgba(232, 93, 47, 0.35);
    --dn-shadow-tint-navy:   rgba(10, 21, 33, 0.85);

    /* Fonts — Noto Sans body + JetBrains Mono display + Noto Serif italic accent.
       Display headings use mono for distinct editorial feel (jiný sGTM hosting-influenced). */
    --dn-font-sans:    "Noto Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    --dn-font-display: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    --dn-font-mono:    "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    --dn-font-serif:   "Noto Serif", Georgia, serif;
}

/* ===== Body shell ===== */
body.dn {
    background: var(--dn-bg);
    color: var(--dn-fg);
    font-family: var(--dn-font-sans);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
    line-height: 1.6;
    font-feature-settings: "kern", "liga", "calt", "ss01";
}

body.dn main { background: var(--dn-bg); }

body.dn ::selection {
    background: var(--dn-accent);
    color: var(--dn-accent-fg);
}

/* Logo wordmark — [DataNostro] in red Noto Serif italic (matches client zone).
   line-height: 1 + display: inline-flex prevents italic descenders from
   throwing off vertical alignment vs neighbouring nav text/pills. */
.dn-wordmark {
    display: inline-flex;
    align-items: center;
    font-family: var(--dn-font-serif);
    font-style: italic;
    font-weight: 700;
    color: var(--dn-accent);
    letter-spacing: -0.01em;
    line-height: 1;
    /* Optical baseline shift — italic Noto Serif sits visually lower than
       sans-serif neighbours; nudge up by a hair for centered look. */
    transform: translateY(-1px);
}

/* ===== Container ===== */
.dn-container {
    max-width: 1280px;
    margin-inline: auto;
    padding-inline: clamp(20px, 4vw, 40px);
}

/* ===== Type =====
   Display headings use JetBrains Mono — distinctive editorial-tech feel
   (Display heading uses mono for the same purpose). Body uses Noto Sans.
   Two-weight rule: only 400 (regular) and 700 (bold). */
.dn-h-display {
    font-family: var(--dn-font-display);
    font-size: clamp(36px, 5.5vw, 60px);
    font-weight: 700;
    letter-spacing: -0.025em;
    line-height: 1.08;
    color: var(--dn-fg);
}

.dn-h-section {
    font-family: var(--dn-font-display);
    font-size: clamp(26px, 3.2vw, 38px);
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.15;
    color: var(--dn-fg);
}

.dn-h-card {
    font-family: var(--dn-font-display);
    font-size: 17px;
    font-weight: 700;
    color: var(--dn-fg);
    line-height: 1.35;
    letter-spacing: -0.01em;
}

.dn-lede {
    font-size: clamp(16px, 1.4vw, 19px);
    line-height: 1.65;
    color: var(--dn-fg-1);
    max-width: 60ch;
}

.dn-mono { font-family: var(--dn-font-mono); }

/* Italic emphasis inside display headings — Noto Serif italic in red (advisio.cz pattern) */
.dn-serif-italic, .dn-h-display em, .dn-h-section em {
    font-family: var(--dn-font-serif);
    font-style: italic;
    font-weight: 400;
    letter-spacing: -0.005em;
    color: var(--dn-accent);
}

/* ===== Eyebrow (small uppercase label, no mono — Advisio doesn't use mono) ===== */
.dn-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: var(--dn-font-sans);
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--dn-accent);
}
.dn-eyebrow::before {
    content: "";
    width: 24px;
    height: 2px;
    background: var(--dn-accent);
}

/* ===== Tags ===== */
.dn-tag {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    border-radius: var(--dn-radius-sm);
    background: var(--dn-bg-1);
    font-family: var(--dn-font-sans);
    font-size: 12px;
    font-weight: 500;
    color: var(--dn-fg-1);
}
.dn-tag-accent {
    background: var(--dn-accent-soft);
    color: var(--dn-accent);
}
.dn-tag-status::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--dn-ok);
}

/* ===== Cards ===== */
.dn-card {
    border: 1px solid var(--dn-line);
    border-radius: var(--dn-radius-xl);
    background: var(--dn-bg-card);              /* always pure white — lifts from body */
    padding: clamp(20px, 2.5vw, 28px);
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
    transition: border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
}
.dn-card:hover {
    border-color: var(--dn-line-2);
    box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);
    transform: translateY(-2px);
}
.dn-card-featured {
    border-color: var(--dn-accent);
    background: linear-gradient(180deg, rgba(232, 93, 47, 0.04), var(--dn-bg-card));
}

/* ===== Dark data card — for hero data-viz / monitoring previews =====
   Inverted navy card on light pages. Used for the "live event log"
   on the homepage hero — terminal/dashboard preview that mirrors
   the look of xrm.advisio.cz dashboard tiles. */
.dn-card-data {
    background: var(--dn-fg);          /* #0F172A navy */
    color: rgba(255, 255, 255, 0.92);
    border: 1px solid #2D4A61;
    border-radius: var(--dn-radius-xl);
    overflow: hidden;
    box-shadow: 0 12px 32px rgba(15, 23, 42, 0.18);
}
.dn-card-data .dn-card-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 14px 18px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.10);
    font-family: var(--dn-font-mono);
    font-size: 11px;
    color: rgba(255, 255, 255, 0.6);
    letter-spacing: 0.04em;
}
.dn-card-data .dn-stat-mini-label {
    font-family: var(--dn-font-mono);
    font-size: 10px;
    color: rgba(255, 255, 255, 0.5);
    text-transform: uppercase;
    letter-spacing: 0.1em;
    margin-bottom: 6px;
}
.dn-card-data .dn-stat-mini-value {
    font-size: 22px;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: #FFFFFF;
}
.dn-card-data .dn-stat-mini-delta {
    font-family: var(--dn-font-mono);
    font-size: 11px;
    color: var(--dn-accent);
    margin-top: 4px;
}
.dn-card-data .dn-stat-divider { border-color: rgba(255, 255, 255, 0.10) !important; background: rgba(255, 255, 255, 0.10); }
.dn-card-data .dn-stat-cell { border-color: rgba(255, 255, 255, 0.10) !important; }

/* Event row in dark data card — overrides default light row colors */
.dn-event-row.dn-event-dark > :nth-child(1) { color: rgba(255, 255, 255, 0.50); }
.dn-event-row.dn-event-dark > :nth-child(3) { color: rgba(255, 255, 255, 0.85); }
.dn-event-row.dn-event-dark > :nth-child(4) { text-align: right; color: rgba(255, 255, 255, 0.65); }

/* ===== Buttons (Advisio style) ===== */
.dn-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 12px 22px;
    border-radius: var(--dn-radius-md);
    font-family: var(--dn-font-sans);
    font-size: 14px;
    font-weight: 600;
    letter-spacing: 0.02em;
    line-height: 1;
    border: 1px solid transparent;
    cursor: pointer;
    transition: background 160ms ease, border-color 160ms ease, transform 160ms ease;
    text-decoration: none;
    white-space: nowrap;
}
.dn-btn:hover { transform: translateY(-1px); }
.dn-btn-primary {
    background: var(--dn-accent);
    color: var(--dn-accent-fg);
    border-color: var(--dn-accent);
}
.dn-btn-primary:hover { background: var(--dn-accent-hover); border-color: var(--dn-accent-hover); }
.dn-btn-secondary {
    background: var(--dn-fg);          /* filled navy #0F172A */
    color: #FFFFFF;
    border-color: var(--dn-fg);
}
.dn-btn-secondary:hover {
    background: #1a2f3d;               /* slightly darker navy on hover */
    border-color: #1a2f3d;
    color: #FFFFFF;
}
.dn-btn-ghost {
    background: transparent;
    color: var(--dn-fg-1);
}
.dn-btn-ghost:hover { color: var(--dn-accent); background: var(--dn-bg-2); }
.dn-btn .dn-arrow { transition: transform 160ms ease; }
.dn-btn:hover .dn-arrow { transform: translateX(2px); }

/* ===== Header / nav (light, frosted) ===== */
body.dn nav#main-nav,
body.dn header.dn-header {
    background: rgba(255, 255, 255, 0.85) !important;
    backdrop-filter: saturate(160%) blur(14px);
    -webkit-backdrop-filter: saturate(160%) blur(14px);
    border-bottom: 1px solid var(--dn-line) !important;
    color: var(--dn-fg);
}
body.dn nav#main-nav a,
body.dn header.dn-header a {
    color: var(--dn-fg-1);
    transition: color 160ms ease;
}
body.dn nav#main-nav a:hover,
body.dn header.dn-header a:hover {
    color: var(--dn-accent);
    background: transparent !important;
}

/* Dark-mode public marketing nav (audit 2026-05-09 — was hardcoded
   rgba(255,255,255,0.85) so it stayed light cream against the dark
   page bg, making the wordmark and menu links invisible). */
html[data-theme="dark"] body.dn nav#main-nav,
html[data-theme="dark"] body.dn header.dn-header,
html.dn-dark body.dn nav#main-nav,
html.dn-dark body.dn header.dn-header {
    background: rgba(14, 21, 33, 0.78) !important;
    border-bottom: 1px solid #29384B !important;
    color: var(--dn-fg);
}
html[data-theme="dark"] body.dn nav#main-nav a,
html[data-theme="dark"] body.dn header.dn-header a,
html.dn-dark body.dn nav#main-nav a,
html.dn-dark body.dn header.dn-header a {
    color: var(--dn-fg-1);
}
html[data-theme="dark"] body.dn .dn-nav-trigger,
html.dn-dark body.dn .dn-nav-trigger {
    color: var(--dn-fg-1);
}
html[data-theme="dark"] body.dn .dn-nav-mega:hover .dn-nav-trigger,
html[data-theme="dark"] body.dn .dn-nav-mega:focus-within .dn-nav-trigger,
html.dn-dark body.dn .dn-nav-mega:hover .dn-nav-trigger,
html.dn-dark body.dn .dn-nav-mega:focus-within .dn-nav-trigger {
    color: var(--dn-fg);
}
/* Mega-menu dropdown surface */
html[data-theme="dark"] body.dn .dn-nav-mega-panel,
html.dn-dark body.dn .dn-nav-mega-panel {
    background: #16202E !important;
    border: 1px solid #29384B !important;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.55) !important;
}
html[data-theme="dark"] body.dn .dn-nav-mega-panel a,
html.dn-dark body.dn .dn-nav-mega-panel a {
    color: var(--dn-fg-1);
}
html[data-theme="dark"] body.dn .dn-nav-mega-panel a:hover,
html.dn-dark body.dn .dn-nav-mega-panel a:hover {
    background: rgba(255, 110, 64, 0.10) !important;
    color: var(--dn-accent) !important;
}
/* Wordmark + status pill in nav — pure white in dark for max legibility
   on the deep ink topbar (was warm off-white = AA-borderline in tests). */
html[data-theme="dark"] body.dn .dn-wordmark,
html.dn-dark body.dn .dn-wordmark {
    color: #FFFFFF !important;
}
html[data-theme="dark"] body.dn .dn-wordmark .dn-bracket,
html.dn-dark body.dn .dn-wordmark .dn-bracket {
    color: var(--dn-accent);
}
/* Public mobile menu toggle — outline + glyph need to flip to dark */
html[data-theme="dark"] body.dn .dn-mobile-toggle,
html.dn-dark body.dn .dn-mobile-toggle {
    border-color: var(--dn-line-2);
    color: var(--dn-fg);
    background: transparent;
}
html[data-theme="dark"] body.dn .dn-mobile-toggle:hover,
html.dn-dark body.dn .dn-mobile-toggle:hover {
    border-color: var(--dn-accent);
    color: var(--dn-accent);
    background: rgba(255, 110, 64, 0.10);
}
/* Public mobile menu drawer — was hardcoded light bg */
html[data-theme="dark"] body.dn .dn-mobile-menu,
html.dn-dark body.dn .dn-mobile-menu {
    background: #0E1521;
    border-top-color: var(--dn-line) !important;
}
/* Search button + theme toggle in public nav */
html[data-theme="dark"] body.dn nav#main-nav button,
html.dn-dark body.dn nav#main-nav button {
    color: var(--dn-fg);
}
html[data-theme="dark"] body.dn nav#main-nav button:hover,
html.dn-dark body.dn nav#main-nav button:hover {
    color: var(--dn-accent);
    background: rgba(255, 110, 64, 0.10) !important;
}
/* Dashboard / CS pills in nav */
html[data-theme="dark"] body.dn nav#main-nav .dn-btn-secondary,
html[data-theme="dark"] body.dn nav#main-nav .dn-btn-ghost,
html.dn-dark body.dn nav#main-nav .dn-btn-secondary,
html.dn-dark body.dn nav#main-nav .dn-btn-ghost {
    color: var(--dn-fg) !important;
    border-color: var(--dn-line-2) !important;
    background: transparent !important;
}
html[data-theme="dark"] body.dn nav#main-nav .dn-btn-secondary:hover,
html.dn-dark body.dn nav#main-nav .dn-btn-secondary:hover {
    background: rgba(255, 110, 64, 0.10) !important;
    border-color: var(--dn-accent) !important;
    color: var(--dn-accent) !important;
}
/* Status pill in public nav (e.g. STATUS: Operační) */
html[data-theme="dark"] body.dn nav#main-nav .dn-status-pill,
html.dn-dark body.dn nav#main-nav .dn-status-pill {
    background: rgba(255, 255, 255, 0.05) !important;
    border-color: var(--dn-line-2) !important;
    color: var(--dn-fg) !important;
}

/* ===== Footer (Advisio dark navy — same token-flip trick as .dn-section-dark) =====
   Re-declare the foreground tokens INSIDE the footer scope so every nested
   inline `var(--dn-fg-X)` style automatically reads light variants — no more
   dark-text-on-dark-bg invisibility for footer links. */
body.dn footer {
    background: #0F172A !important;
    border-top: 0 !important;
    /* Light variants of fg tokens — only inside footer */
    --dn-fg:        #FFFFFF;
    --dn-fg-1:      rgba(255, 255, 255, 0.86);
    --dn-fg-2:      rgba(255, 255, 255, 0.66);
    --dn-fg-3:      rgba(255, 255, 255, 0.50);
    --dn-line:      rgba(255, 255, 255, 0.10);
    --dn-line-2:    rgba(255, 255, 255, 0.20);
    --dn-bg-card:   #2D4A61;
    color: rgba(255, 255, 255, 0.86);
}
body.dn footer a {
    color: rgba(255, 255, 255, 0.86);
    text-decoration: none;
    transition: color 160ms ease;
}
body.dn footer a:hover { color: var(--dn-accent); }
body.dn footer h3, body.dn footer h4 {
    color: rgba(255, 255, 255, 0.50) !important;
    font-family: var(--dn-font-sans) !important;
    font-size: 12px !important;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-weight: 700;
}
body.dn footer .dn-divider { background: rgba(255, 255, 255, 0.10); }
/* Footer mini-tags (EU SERVERY, 99.9% UPTIME) */
body.dn footer .dn-tag {
    background: rgba(255, 255, 255, 0.08);
    border-color: rgba(255, 255, 255, 0.10);
    color: rgba(255, 255, 255, 0.86);
}

/* ===== Accessibility ===== */
/* Skip-to-content link — visible on focus only */
.dn-skip-link {
    position: absolute;
    left: -10000px;
    top: auto;
    width: 1px;
    height: 1px;
    overflow: hidden;
    z-index: 100;
}
.dn-skip-link:focus {
    position: fixed;
    left: 16px;
    top: 16px;
    width: auto;
    height: auto;
    padding: 12px 20px;
    background: var(--dn-accent);
    color: var(--dn-accent-fg);
    border-radius: var(--dn-radius-md);
    font-weight: 600;
    font-size: 14px;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}

/* Visible keyboard focus everywhere — WCAG 2.4.7 */
body.dn :focus-visible {
    outline: 2px solid var(--dn-accent);
    outline-offset: 2px;
    border-radius: var(--dn-radius-sm);
}
body.dn .dn-btn:focus-visible {
    outline-offset: 3px;
}

/* Respect prefers-reduced-motion — WCAG 2.3.3 */
@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;
    }
    .dn-pulse, .dn-bg-grid { animation: none !important; }
}

/* Visually hidden — for screen reader only labels */
.dn-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* ===== Section ===== */
.dn-section {
    padding-block: var(--dn-section-y);
}
.dn-section + .dn-section {
    border-top: 1px solid var(--dn-line);
}

/* Alt-bg section (zebra-stripe) */
.dn-section-alt {
    background: var(--dn-bg-1);
}

/* ===== Dark navy section (advisio.cz inverted hero/CTA pattern) =====
   Override CSS custom props so EVERY child element automatically reads
   the light variants — `.dn-stat`, inline `var(--dn-fg-2)` styles, etc.
   That way no individual element needs a `.dn-section-dark X` selector. */
.dn-section-dark {
    /* Background is the old light-theme fg color (#0F172A Advisio Dark) */
    background: #0F172A;
    /* Flip the foreground tokens to light variants */
    --dn-fg:        #FFFFFF;
    --dn-fg-1:      rgba(255, 255, 255, 0.86);
    --dn-fg-2:      rgba(255, 255, 255, 0.66);
    --dn-fg-3:      rgba(255, 255, 255, 0.46);
    /* Lines / borders barely visible against navy — keep them subtle */
    --dn-line:      rgba(255, 255, 255, 0.10);
    --dn-line-2:    rgba(255, 255, 255, 0.20);
    --dn-line-strong: rgba(255, 255, 255, 0.32);
    /* Card surface should be a SLIGHTLY lighter navy, not transparent on dark
       (transparent + dark text = the readability bug the user reported). */
    --dn-bg-card:   #2D4A61;     /* lighter navy — readable lift */
    --dn-bg:        #0F172A;
    --dn-bg-1:      #1A2F3D;
    --dn-bg-2:      #2D4A61;
    color: #FFFFFF;
}

/* Eyebrow accent dot stays red, but the eyebrow text shifts to red too
   (it's a marketing accent in dark mode, not a muted label). */
.dn-section-dark .dn-eyebrow { color: var(--dn-accent); }
.dn-section-dark .dn-eyebrow::before { background: var(--dn-accent); }

/* Headings explicitly white (overrides body.dn h2/h3 = var(--dn-fg) which
   is now also white via the cascade — but be defensive). */
.dn-section-dark h1, .dn-section-dark h2, .dn-section-dark h3,
.dn-section-dark h4, .dn-section-dark h5, .dn-section-dark h6,
.dn-section-dark .dn-h-display, .dn-section-dark .dn-h-section, .dn-section-dark .dn-h-card {
    color: #FFFFFF;
}

/* Stats — were var(--dn-fg) which now correctly resolves to white. Add an
   explicit rule for safety + to bump weight for hierarchy on dark bg. */
.dn-section-dark .dn-stat { color: #FFFFFF; }
.dn-section-dark .dn-stat-accent { color: var(--dn-accent); }

/* Cards inside a dark section — solid lighter navy, not transparent.
   Transparent overlay made child content invisible against parent navy. */
.dn-section-dark .dn-card {
    background: var(--dn-bg-card);
    border-color: var(--dn-line);
    color: #FFFFFF;
    box-shadow: none;
}
.dn-section-dark .dn-card:hover {
    border-color: var(--dn-line-2);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.20);
    transform: translateY(-2px);
}
.dn-section-dark .dn-card-featured {
    border-color: var(--dn-accent);
    background: linear-gradient(180deg, rgba(232, 93, 47, 0.10), var(--dn-bg-card));
}

/* Divider on navy needs to be visible */
.dn-section-dark .dn-divider { background: var(--dn-line); }

/* Tag/pill/badge tweaks for dark surface */
.dn-section-dark .dn-tag {
    background: rgba(255, 255, 255, 0.08);
    color: rgba(255, 255, 255, 0.86);
}
.dn-section-dark .dn-tag-accent {
    background: rgba(232, 93, 47, 0.16);
    color: #FFFFFF;
}

/* Buttons in dark sections — primary stays red (good contrast), but
   secondary/ghost need lighter borders/text. */
/* Inside dark sections the navy-filled secondary would disappear into the
   navy band — fall back to outlined-white for contrast. */
.dn-section-dark .dn-btn-secondary {
    background: transparent;
    color: #FFFFFF;
    border-color: rgba(255, 255, 255, 0.30);
}
.dn-section-dark .dn-btn-secondary:hover {
    border-color: #FFFFFF;
    background: rgba(255, 255, 255, 0.06);
}
.dn-section-dark .dn-btn-ghost { color: rgba(255, 255, 255, 0.86); }
.dn-section-dark .dn-btn-ghost:hover { color: #FFFFFF; background: rgba(255, 255, 255, 0.08); }

/* Form fields on dark surface */
.dn-section-dark input, .dn-section-dark textarea, .dn-section-dark select {
    background: rgba(255, 255, 255, 0.06);
    border-color: rgba(255, 255, 255, 0.20);
    color: #FFFFFF;
}
.dn-section-dark input::placeholder, .dn-section-dark textarea::placeholder {
    color: rgba(255, 255, 255, 0.40);
}

/* Subtle dot grid background — light red dots */
.dn-bg-grid {
    background-image: radial-gradient(circle, rgba(232, 93, 47, 0.10) 1px, transparent 1px);
    background-size: 32px 32px;
    -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 30%, #000 50%, transparent 100%);
            mask-image: radial-gradient(ellipse 70% 60% at 50% 30%, #000 50%, transparent 100%);
    opacity: 0.7;
}

/* ===== Tables ===== */
.dn-table {
    width: 100%;
    border-collapse: collapse;
    font-variant-numeric: tabular-nums;
}
.dn-table th, .dn-table td {
    padding: 14px 18px;
    border-bottom: 1px solid var(--dn-line);
    text-align: left;
    font-size: 14px;
}
.dn-table th {
    font-size: 12px;
    font-weight: 700;
    color: var(--dn-fg-2);
    background: var(--dn-bg-2);
}

/* ===== Status pill ===== */
.dn-status-pill {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    border-radius: 999px;
    background: var(--dn-bg-1);
    font-size: 12px;
    font-weight: 500;
    color: var(--dn-fg-1);
}
.dn-status-pill::before {
    content: "";
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--dn-ok);   /* default = operational (teal) */
    box-shadow: 0 0 8px rgba(37, 186, 171, 0.4);
}
/* Status state modifiers — applied via .is-degraded / .is-down */
.dn-status-pill.is-degraded::before {
    background: var(--dn-warn);
    box-shadow: 0 0 8px rgba(235, 178, 97, 0.4);
}
.dn-status-pill.is-down::before {
    background: var(--dn-bad);
    box-shadow: 0 0 8px rgba(232, 93, 47, 0.4);
}
/* Pill becomes a clickable link variant */
a.dn-status-pill { text-decoration: none; transition: border-color 160ms ease; }
a.dn-status-pill:hover { border-color: var(--dn-line-strong); }

/* ===== Number block ===== */
.dn-stat {
    font-family: var(--dn-font-sans);
    font-weight: 700;
    font-size: clamp(40px, 5vw, 64px);
    line-height: 1;
    letter-spacing: -0.025em;
    color: var(--dn-fg);
}
.dn-stat-accent { color: var(--dn-accent); }

/* ===== Misc helpers ===== */
.dn-divider { height: 1px; background: var(--dn-line); border: 0; margin: 0; }
.dn-text-muted { color: var(--dn-fg-2); }
.dn-text-faint { color: var(--dn-fg-3); }

@keyframes dn-pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.4; }
}
.dn-pulse { animation: dn-pulse 2.4s ease-in-out infinite; }

/* ===== Form fields (Advisio light, mirrors client zone .ad-search/.ad-field) ===== */
body.dn input[type="text"], body.dn input[type="email"], body.dn input[type="url"],
body.dn input[type="password"], body.dn input[type="tel"],
body.dn textarea, body.dn select {
    background: var(--dn-bg-card);  /* white inputs on warm body bg */
    border: 1px solid var(--dn-line-2);
    border-radius: var(--dn-radius-md);
    color: var(--dn-fg);
    padding: 12px 14px;
    font-family: var(--dn-font-sans);
    font-size: 14px;
    transition: border-color 160ms ease, box-shadow 160ms ease;
}
body.dn input:focus, body.dn textarea:focus, body.dn select:focus {
    outline: none;
    border-color: var(--dn-accent);
    box-shadow: 0 0 0 3px var(--dn-accent-soft);
}
body.dn input::placeholder, body.dn textarea::placeholder { color: var(--dn-fg-3); }

/* ===== Code (light gray panels — pure Advisio, no dev-tool dark islands) ===== */
body.dn pre, body.dn code {
    font-family: var(--dn-font-mono);
    background: var(--dn-bg-1);
    border: 1px solid var(--dn-line);
    border-radius: var(--dn-radius-md);
    color: var(--dn-fg);
}
body.dn pre {
    padding: 16px 18px;
    overflow-x: auto;
    font-size: 13px;
    line-height: 1.55;
}
body.dn :not(pre) > code {
    padding: 1px 6px;
    font-size: 0.92em;
    background: var(--dn-bg-2);
    color: var(--dn-accent);
}

/* ===== Headings on public pages ===== */
body.dn h1, body.dn h2, body.dn h3, body.dn h4, body.dn h5, body.dn h6 {
    color: var(--dn-fg);
    font-family: var(--dn-font-sans);
}
body.dn h1, body.dn h2, body.dn h3 {
    font-weight: 700;
    letter-spacing: -0.015em;
}

/* ===== Compat overrides for legacy Tailwind classes on public pages =====
   The legacy templates ship with bg-white/bg-gray-50/text-gray-X classes
   from the old indigo+emerald era. We remap them to Advisio palette so
   we don't have to rewrite every page. */
body.dn .bg-white { background: var(--dn-bg-card) !important; }
body.dn .bg-gray-50 { background: var(--dn-bg-2) !important; }
body.dn .bg-gray-100 { background: var(--dn-bg-1) !important; }
body.dn .bg-navy-900, body.dn .bg-gray-900 { background: var(--dn-fg) !important; color: #fff !important; }
body.dn .text-gray-900, body.dn .text-navy-900 { color: var(--dn-fg) !important; }
body.dn .text-gray-700, body.dn .text-gray-800 { color: var(--dn-fg-1) !important; }
body.dn .text-gray-600 { color: var(--dn-fg-1) !important; }
body.dn .text-gray-500 { color: var(--dn-fg-2) !important; }
body.dn .text-gray-400 { color: var(--dn-fg-3) !important; }
body.dn .text-gray-300 { color: var(--dn-fg-3) !important; }
/* `.text-white` on dark navy bg — keep white. On light bg it would be invisible,
   but those uses are scoped to dark sections (hero overlays, dark CTAs). */
body.dn .border-gray-100, body.dn .border-gray-200, body.dn .border-gray-300 { border-color: var(--dn-line) !important; }
body.dn .border-gray-700, body.dn .border-gray-800 { border-color: var(--dn-line-2) !important; }

/* Brand color mapping (red accent) */
body.dn .text-brand-600, body.dn .text-brand-500, body.dn .text-brand-700 { color: var(--dn-accent) !important; }
body.dn .text-accent-500, body.dn .text-accent-600, body.dn .text-accent-400 { color: var(--dn-ok) !important; }
body.dn .bg-brand-50 { background: var(--dn-accent-soft) !important; }
body.dn .bg-brand-100 { background: var(--dn-accent-soft) !important; }
body.dn .bg-accent-50 { background: rgba(37, 186, 171, 0.10) !important; }
body.dn .bg-brand-600, body.dn .bg-brand-500 { background: var(--dn-accent) !important; color: var(--dn-accent-fg) !important; }
body.dn .border-brand-200 { border-color: var(--dn-accent) !important; }
body.dn .border-accent-200 { border-color: var(--dn-ok) !important; }

/* Legacy gradient classes — flatten to Advisio palette */
body.dn .gradient-brand, body.dn .gradient-cta {
    background: var(--dn-accent) !important;
    color: var(--dn-accent-fg) !important;
}
body.dn .gradient-hero {
    background: linear-gradient(135deg, var(--dn-bg-1) 0%, var(--dn-bg-2) 100%) !important;
    color: var(--dn-fg) !important;
}
body.dn .gradient-text {
    background: none !important;
    -webkit-text-fill-color: var(--dn-accent) !important;
    color: var(--dn-accent) !important;
}

/* Hover states */
body.dn .hover\:bg-white:hover { background: var(--dn-bg-card) !important; }
body.dn .hover\:bg-gray-50:hover { background: var(--dn-bg-2) !important; }
body.dn .hover\:bg-brand-50:hover { background: var(--dn-accent-soft) !important; }
body.dn .hover\:bg-brand-700:hover { background: var(--dn-accent-hover) !important; }
body.dn .hover\:text-brand-600:hover, body.dn .hover\:text-brand-700:hover { color: var(--dn-accent-hover) !important; }

/* Soft Advisio shadows */
body.dn .shadow-sm { box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04) !important; }
body.dn .shadow, body.dn .shadow-md { box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06) !important; }
body.dn .shadow-lg { box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08) !important; }
body.dn .shadow-xl { box-shadow: 0 16px 40px rgba(15, 23, 42, 0.10) !important; }
body.dn .shadow-brand-600\/20 { box-shadow: 0 6px 18px rgba(232, 93, 47, 0.18) !important; }

/* Glass effect — light frosted (used on hero overlays) */
body.dn .glass {
    background: rgba(255, 255, 255, 0.70) !important;
    backdrop-filter: blur(20px);
    border: 1px solid rgba(15, 23, 42, 0.08) !important;
}
html[data-theme="dark"] body.dn .glass,
html.dn-dark body.dn .glass {
    background: rgba(22, 32, 46, 0.70) !important;
    border: 1px solid rgba(255, 255, 255, 0.08) !important;
}

/* Grid pattern dot — subtle red dots on light bg */
body.dn .grid-pattern {
    background-image: radial-gradient(circle, rgba(232, 93, 47, 0.08) 1px, transparent 1px) !important;
    background-size: 32px 32px;
}

/* ===== Prose for KB articles ===== */
.dn-prose {
    color: var(--dn-fg-1);
    font-size: 16px;
    line-height: 1.75;
}
.dn-prose h2 {
    font-size: clamp(22px, 2.4vw, 30px);
    font-weight: 700;
    letter-spacing: -0.015em;
    color: var(--dn-fg);
    margin-top: 2.4em;
    margin-bottom: 0.6em;
}
.dn-prose h3 {
    font-size: 19px;
    font-weight: 600;
    color: var(--dn-fg);
    margin-top: 1.8em;
    margin-bottom: 0.4em;
}
.dn-prose p { margin-bottom: 1.1em; }
.dn-prose ul, .dn-prose ol { margin-bottom: 1.2em; padding-left: 1.4em; }
.dn-prose ul li { list-style: disc; }
.dn-prose ol li { list-style: decimal; }
.dn-prose li { margin-bottom: 0.4em; }
.dn-prose a { color: var(--dn-accent); border-bottom: 1px solid var(--dn-accent-soft); }
.dn-prose a:hover { border-bottom-color: var(--dn-accent); }
.dn-prose strong { color: var(--dn-fg); font-weight: 700; }
.dn-prose blockquote {
    border-left: 3px solid var(--dn-accent);
    padding: 4px 0 4px 18px;
    margin: 1.4em 0;
    color: var(--dn-fg-1);
    font-style: italic;
    font-family: var(--dn-font-serif);
}

/* ─── Form submit loading state ─── */
/* Triggered by global script in base.html on POST form submit. Prevents
   double-submit and gives clear visual feedback during slow form roundtrips
   (contact form sends an email, care form hits the DB, etc.). */
.dn-btn-loading {
    pointer-events: none;
    opacity: 0.85;
    cursor: wait !important;
    display: inline-flex !important;
    align-items: center;
    gap: 8px;
}
.dn-btn-loading .dn-arrow { display: none; }
.dn-spinner {
    display: inline-block;
    width: 14px;
    height: 14px;
    border: 2px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    animation: dn-spin 720ms linear infinite;
    flex-shrink: 0;
}
@keyframes dn-spin {
    to { transform: rotate(360deg); }
}
@media (prefers-reduced-motion: reduce) {
    .dn-spinner { animation-duration: 0s; border-top-color: currentColor; opacity: 0.6; }
}


/* ─── jiný sGTM hosting-influenced visual primitives (2026-05-09) ──────────────────
   1. Offset hard-shadows — negative-X positive-Y, zero blur, halve on hover.
   2. Link hover — terracotta + 1px underline drawn 5px below baseline.
   3. Sharper card defaults to match the editorial mono-display aesthetic.
   4. Logo strip with edge-fade mask. */

/* 1. Offset shadows ─────────────────────────────────────────────────── */
.dn-shadow-md {
    box-shadow: -12px 12px 0 var(--dn-shadow-tint);
    transition: box-shadow 200ms ease-out, transform 200ms ease-out;
}
.dn-shadow-md:hover { box-shadow: -6px 6px 0 var(--dn-shadow-tint); }

.dn-shadow-sm {
    box-shadow: -6px 6px 0 var(--dn-shadow-tint);
    transition: box-shadow 200ms ease-out;
}
.dn-shadow-sm:hover { box-shadow: -3px 3px 0 var(--dn-shadow-tint); }

.dn-shadow-md-soft {
    box-shadow: -10px 10px 0 var(--dn-shadow-tint-soft);
    transition: box-shadow 200ms ease-out;
}
.dn-shadow-md-soft:hover { box-shadow: -5px 5px 0 var(--dn-shadow-tint-soft); }

.dn-shadow-md-navy {
    box-shadow: -10px 10px 0 var(--dn-shadow-tint-navy);
    transition: box-shadow 200ms ease-out;
}
.dn-shadow-md-navy:hover { box-shadow: -5px 5px 0 var(--dn-shadow-tint-navy); }

@media (prefers-reduced-motion: reduce) {
    .dn-shadow-md, .dn-shadow-sm, .dn-shadow-md-soft, .dn-shadow-md-navy { transition: none; }
}

/* 2. Link hover — accent color + underline 5px below baseline.
   Scoped to in-content links inside .dn-prose / .dn-link / paragraph tags
   so navigation/nav links keep their existing styling. */
body.dn .dn-link,
body.dn .dn-prose a,
body.dn p > a:not(.dn-btn):not(.dn-tag) {
    color: var(--dn-fg);
    text-decoration: none;
    position: relative;
    transition: color 160ms ease-out;
}
body.dn .dn-link:hover,
body.dn .dn-prose a:hover,
body.dn p > a:not(.dn-btn):not(.dn-tag):hover {
    color: var(--dn-accent);
}
body.dn .dn-link:hover::after,
body.dn .dn-prose a:hover::after,
body.dn p > a:not(.dn-btn):not(.dn-tag):hover::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: calc(100% + 4px);
    height: 1px;
    background: var(--dn-accent);
}

/* 3. Logo strip with fade-mask — for "Trusted by" / partners section. */
.dn-logo-strip {
    overflow: hidden;
    -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 15% 85%, transparent 100%);
            mask-image: linear-gradient(90deg, transparent 0%, #000 15% 85%, transparent 100%);
}
.dn-logo-strip-track {
    display: flex;
    gap: 80px;
    align-items: center;
    animation: dn-logo-scroll 40s linear infinite;
    width: max-content;
}
@keyframes dn-logo-scroll {
    from { transform: translateX(0); }
    to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
    .dn-logo-strip-track { animation: none; }
}

/* 4. Mono utility — for inline code-y / id-style strings. */
.dn-mono-text {
    font-family: var(--dn-font-mono);
    font-size: 13px;
    letter-spacing: -0.01em;
}

/* 5. jiný sGTM hosting-style "stat band" — full-width colored section with big numbers. */
.dn-stat-band {
    background: var(--dn-fg);
    color: #FFFFFF;
    padding: var(--dn-sp-2xl) 0;
}
.dn-stat-band-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: var(--dn-sp-xl);
    text-align: center;
}
.dn-stat-band .dn-stat-num {
    font-family: var(--dn-font-display);
    font-size: clamp(36px, 5vw, 56px);
    font-weight: 700;
    line-height: 1;
    color: var(--dn-accent);
    letter-spacing: -0.03em;
}
.dn-stat-band .dn-stat-label {
    margin-top: 8px;
    font-size: 13px;
    color: rgba(255, 255, 255, 0.72);
    letter-spacing: 0.04em;
}


/* ─── Mega-menu (jiný sGTM hosting-style 2–3 column dropdown) ─────────────────────── */
.dn-nav-mega {
    position: relative;
    display: inline-flex;
}
.dn-nav-trigger {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 8px 12px;
    background: transparent;
    border: 0;
    font-family: var(--dn-font-sans);
    font-size: 13px;
    font-weight: 500;
    color: var(--dn-fg-1);
    cursor: pointer;
    border-radius: 4px;
    transition: color 160ms ease-out, background 160ms ease-out;
}
.dn-nav-mega:hover .dn-nav-trigger,
.dn-nav-mega:focus-within .dn-nav-trigger {
    color: var(--dn-accent);
    background: var(--dn-bg-2);
}
.dn-nav-mega:hover .dn-nav-trigger svg,
.dn-nav-mega:focus-within .dn-nav-trigger svg {
    transform: rotate(180deg);
}
.dn-nav-trigger svg { transition: transform 200ms ease-out; }

.dn-nav-panel {
    position: absolute;
    top: calc(100% + 8px);
    left: 0;
    min-width: 480px;
    max-width: 720px;
    background: var(--dn-bg-card);
    border: 1px solid var(--dn-line);
    border-radius: 4px;
    box-shadow: -10px 10px 0 var(--dn-shadow-tint-soft), 0 1px 4px rgba(15, 23, 42, 0.08);
    padding: 20px;
    z-index: 60;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-4px);
    transition: opacity 200ms ease-out, transform 200ms ease-out, visibility 200ms ease-out;
    pointer-events: none;
}
.dn-nav-mega:hover .dn-nav-panel,
.dn-nav-mega:focus-within .dn-nav-panel {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
    pointer-events: auto;
}

.dn-nav-panel-grid {
    display: grid;
    gap: 24px;
}
.dn-nav-col {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 220px;
}
.dn-nav-col-title {
    margin: 0 0 6px;
    padding: 0 8px;
    font-family: var(--dn-font-display);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    color: var(--dn-fg-3);
    text-transform: uppercase;
}
.dn-nav-item {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 8px 10px;
    border-radius: 3px;
    text-decoration: none;
    color: var(--dn-fg);
    transition: background 160ms ease-out, color 160ms ease-out;
}
.dn-nav-item:hover {
    background: var(--dn-bg-2);
    color: var(--dn-fg);
}
.dn-nav-item strong {
    font-family: var(--dn-font-display);
    font-size: 13px;
    font-weight: 700;
    color: var(--dn-fg);
    letter-spacing: -0.01em;
    line-height: 1.3;
}
.dn-nav-item:hover strong { color: var(--dn-accent); }
.dn-nav-item span {
    font-size: 12px;
    color: var(--dn-fg-2);
    line-height: 1.4;
}

/* Right-edge dropdowns: shift panel left so it doesn't overflow viewport. */
.dn-nav-mega:nth-last-child(-n+4) .dn-nav-panel { left: auto; right: 0; }

@media (max-width: 1023px) {
    .dn-nav-mega { display: none; }   /* mobile uses the existing burger menu */
}


/* ─── A11y polish (P0) ──────────────────────────────────────────────────
   1. WCAG AA: body link color uses --dn-accent-hover (4.7:1 vs ~3.4 for accent).
   2. Visible focus rings on all interactive elements. */

body.dn .dn-link,
body.dn .dn-prose a:not(.dn-btn):not(.dn-tag),
body.dn p > a:not(.dn-btn):not(.dn-tag) {
    color: var(--dn-accent-hover);
}

body.dn :focus-visible {
    outline: 2px solid var(--dn-accent);
    outline-offset: 2px;
    border-radius: 2px;
}
body.dn .dn-btn:focus-visible,
body.dn .dn-tier-cta:focus-visible {
    outline-offset: 3px;
}

/* ─── Mega-menu active page indicator ───────────────────────────────────
   When the current URL is inside a mega-menu group, the trigger gets a dot. */
.dn-nav-trigger.is-active::after {
    content: "";
    width: 4px;
    height: 4px;
    background: var(--dn-accent);
    border-radius: 50%;
    margin-left: 4px;
}
.dn-nav-trigger.is-active { color: var(--dn-fg); font-weight: 700; }
.dn-nav-item.is-active { background: var(--dn-bg-2); }
.dn-nav-item.is-active strong { color: var(--dn-accent); }


/* ─── Button system overhaul (P1: #59, #60, #61, #62, #63) ──────────────
   Sizes: dn-btn-sm (compact), default (standard), dn-btn-lg (hero CTA).
   Variants: primary, secondary, ghost, destructive.
   Animated arrow: arrow translates +4px on hover (offset CTA pattern). */

.dn-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 12px 20px;
    border: 1px solid var(--dn-fg);
    border-radius: 0;
    font-family: var(--dn-font-sans);
    font-size: 14px;
    font-weight: 700;
    line-height: 1.2;
    text-decoration: none;
    cursor: pointer;
    transition: background 200ms ease-out, color 200ms ease-out, box-shadow 200ms ease-out, transform 200ms ease-out;
    position: relative;
    white-space: nowrap;
}

/* Sizes */
.dn-btn-sm { padding: 8px 14px; font-size: 13px; }
.dn-btn-lg { padding: 16px 28px; font-size: 16px; }

/* Variants */
.dn-btn-primary {
    background: var(--dn-accent);
    color: #FFFFFF;
    border-color: var(--dn-accent);
    box-shadow: -6px 6px 0 var(--dn-shadow-tint-soft);
}
.dn-btn-primary:hover {
    background: var(--dn-accent-hover);
    border-color: var(--dn-accent-hover);
    box-shadow: -3px 3px 0 var(--dn-shadow-tint-soft);
    transform: translate(2px, -2px);
    color: #FFFFFF;
}

.dn-btn-secondary {
    background: var(--dn-bg-card);
    color: var(--dn-fg);
    border-color: var(--dn-fg);
}
.dn-btn-secondary:hover {
    background: var(--dn-fg);
    color: var(--dn-bg-card);
}

.dn-btn-ghost {
    background: transparent;
    color: var(--dn-fg);
    border-color: transparent;
}
.dn-btn-ghost:hover {
    color: var(--dn-accent);
    background: var(--dn-accent-soft);
}

.dn-btn-destructive {
    background: var(--dn-bad);
    color: #FFFFFF;
    border-color: var(--dn-bad);
    box-shadow: -6px 6px 0 rgba(220, 38, 38, 0.25);
}
.dn-btn-destructive:hover {
    background: #B91C1C;
    border-color: #B91C1C;
    box-shadow: -3px 3px 0 rgba(220, 38, 38, 0.25);
    transform: translate(2px, -2px);
    color: #FFFFFF;
}

/* Arrow icon — translates +4px right on hover (existing .dn-arrow class polished) */
.dn-btn .dn-arrow,
.dn-arrow {
    transition: transform 200ms ease-out;
}
.dn-btn:hover .dn-arrow,
a:hover > .dn-arrow {
    transform: translateX(4px);
}

@media (prefers-reduced-motion: reduce) {
    .dn-btn, .dn-btn .dn-arrow { transition: none; transform: none !important; }
}

/* ─── Animated FAQ accordion (P1: #78) ──────────────────────────────────
   Slide+fade on open via @keyframes — works with existing
   <details><summary>...</summary><p>...</p></details> sibling markup
   (no wrapper div needed). The :not(summary) selector keeps the trigger
   from animating with the content. */
@keyframes dn-faq-slide-down {
    from { opacity: 0; transform: translateY(-6px); }
    to   { opacity: 1; transform: translateY(0); }
}
.dn-pricing-faq details[open] > *:not(summary),
.dn-faq-list details[open] > *:not(summary),
details.dn-faq-anim[open] > *:not(summary) {
    animation: dn-faq-slide-down 220ms ease-out;
}
@media (prefers-reduced-motion: reduce) {
    .dn-pricing-faq details[open] > *:not(summary),
    .dn-faq-list details[open] > *:not(summary),
    details.dn-faq-anim[open] > *:not(summary) { animation: none; }
}

/* ─── Counter animation for stat-band (P1: #103) ────────────────────────
   JS reads data-target, ramps from 0. CSS just provides initial state. */
.dn-stat-num[data-target] { font-variant-numeric: tabular-nums; }

/* ─── Compliance badges (P1: #112) ──────────────────────────────────────
   Footer trust strip — flat outlined pills with icon. */
.dn-trust-strip {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
    justify-content: center;
    padding: 16px 0;
    border-top: 1px solid rgba(255, 255, 255, 0.08);
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    margin: 32px 0;
}
.dn-trust-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: 0;
    font-family: var(--dn-font-display);
    font-size: 11px;
    font-weight: 700;
    color: rgba(255, 255, 255, 0.86);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    text-decoration: none;
    transition: border-color 200ms ease-out, color 200ms ease-out;
}
.dn-trust-badge:hover {
    border-color: var(--dn-accent);
    color: var(--dn-accent);
}

/* ─── Typography micro-polish (P1: #1, #2, #3, #5) ──────────────────────
   1. Italic emphasis inside mono headings — bump 1.05em for visual balance.
   2. Czech hyphenation on display headings (lang=cs).
   3. Body paragraphs in .dn-prose capped at 65ch.
   5. Optional drop-cap on first paragraph of blog post body. */
.dn-h-display em, .dn-h-section em { font-size: 1.05em; }
[lang="cs"] .dn-h-display, [lang="cs"] .dn-h-section, html[lang="cs"] .dn-h-display, html[lang="cs"] .dn-h-section {
    hyphens: auto;
    -webkit-hyphens: auto;
    -ms-hyphens: auto;
}
.dn-prose p, .dn-prose ul, .dn-prose ol {
    max-width: 65ch;
}
.dn-prose-dropcap > p:first-of-type::first-letter {
    float: left;
    font-family: var(--dn-font-display);
    font-size: 4.5em;
    line-height: 0.9;
    margin: 4px 10px 0 0;
    color: var(--dn-accent);
    font-weight: 700;
}


/* ─── Tables polish (P1: #74, #75) ──────────────────────────────────────
   Hover row highlight, sortable column indicator, consistent table look. */
.dn-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 14px;
}
.dn-table th,
.dn-table td {
    padding: 12px 16px;
    text-align: left;
    border-bottom: 1px solid var(--dn-line);
}
.dn-table th {
    font-family: var(--dn-font-display);
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--dn-fg-2);
    background: var(--dn-bg-2);
    position: sticky;
    top: 0;
    z-index: 1;
}
.dn-table tbody tr {
    transition: background 160ms ease-out;
}
.dn-table tbody tr:hover {
    background: var(--dn-bg-2);
}
.dn-table tbody tr:last-child td { border-bottom: 0; }

/* Sortable column header — clickable + arrow indicator */
.dn-table th.dn-sortable {
    cursor: pointer;
    user-select: none;
    position: relative;
    padding-right: 28px;
}
.dn-table th.dn-sortable::after {
    content: "↕";
    position: absolute;
    right: 12px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 11px;
    opacity: 0.4;
    transition: opacity 160ms ease-out;
}
.dn-table th.dn-sortable:hover::after { opacity: 0.8; }
.dn-table th.dn-sort-asc::after  { content: "↑"; opacity: 1; color: var(--dn-accent); }
.dn-table th.dn-sort-desc::after { content: "↓"; opacity: 1; color: var(--dn-accent); }

/* ─── Form polish (P1: #51, #54) ────────────────────────────────────────
   Required asterisk + helper text consistency. */
.dn-required-mark {
    color: var(--dn-accent);
    font-weight: 700;
    margin-left: 4px;
}
.dn-form-helper {
    margin-top: 6px;
    font-size: 12px;
    color: var(--dn-fg-2);
    line-height: 1.4;
}
.dn-form-error {
    margin-top: 6px;
    font-size: 12px;
    color: var(--dn-bad);
    line-height: 1.4;
    display: flex;
    align-items: flex-start;
    gap: 4px;
}
.dn-form-error::before {
    content: "⚠";
    font-size: 13px;
    flex-shrink: 0;
}

/* Disabled state tokens (P1: #14) */
:root[data-theme="light"], html.dn, body.dn {
    --dn-disabled-bg:   #F1EDE5;
    --dn-disabled-fg:   #98A0AA;
    --dn-disabled-line: #E0DACE;
}
.dn-btn:disabled,
.dn-btn[aria-disabled="true"],
[disabled].dn-btn {
    background: var(--dn-disabled-bg) !important;
    color: var(--dn-disabled-fg) !important;
    border-color: var(--dn-disabled-line) !important;
    box-shadow: none !important;
    cursor: not-allowed !important;
    transform: none !important;
}

/* ─── Tabular numbers (P1: #7, #8) ──────────────────────────────────────
   Apply to anything that displays numbers in a stack (prices, metrics). */
.dn-price-amount,
.dn-stat-num,
.dn-mono,
.dn-mono-text,
table.dn-table td {
    font-variant-numeric: tabular-nums;
}

/* ─── Eyebrow mobile bump (P1: #6) ──────────────────────────────────────
   12 px is too tight under 640 px. */
@media (max-width: 640px) {
    .dn-eyebrow { font-size: 13px; }
}

/* ─── Image-top blog card variant (P1: #68) ─────────────────────────────
   For blog index. Falls back gracefully when no featured_image. */
.dn-blog-card {
    display: flex;
    flex-direction: column;
    overflow: hidden;
    border: 1px solid var(--dn-line);
    border-radius: 4px;
    background: var(--dn-bg-card);
    text-decoration: none;
    color: var(--dn-fg);
    transition: box-shadow 200ms ease-out, transform 200ms ease-out;
}
.dn-blog-card:hover {
    box-shadow: -8px 8px 0 var(--dn-shadow-tint-soft);
    transform: translate(2px, -2px);
}
.dn-blog-card-image {
    aspect-ratio: 16 / 9;
    background: linear-gradient(135deg, var(--dn-bg-1), var(--dn-bg-2));
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    position: relative;
}
.dn-blog-card-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.dn-blog-card-image-fallback {
    font-size: 56px;
    opacity: 0.5;
}
.dn-blog-card-body {
    padding: 20px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    flex: 1;
}

/* ─── Card consistency audit (P1: #67) ──────────────────────────────────
   Standardize .dn-card hover with the offset shadow primitive. */
.dn-card {
    transition: box-shadow 200ms ease-out, transform 200ms ease-out, border-color 200ms ease-out;
}
.dn-card:hover {
    box-shadow: -6px 6px 0 var(--dn-shadow-tint-soft);
    transform: translate(2px, -2px);
}


/* ─── Scroll-triggered section reveal (P1: #104) ────────────────────────
   Sections fade + slide-up 8px when they scroll into viewport. JS in base.html
   adds .dn-revealed when IntersectionObserver fires. */
.dn-reveal {
    opacity: 0;
    transform: translateY(12px);
    transition: opacity 480ms ease-out, transform 480ms ease-out;
    will-change: opacity, transform;
}
.dn-reveal.dn-revealed {
    opacity: 1;
    transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
    .dn-reveal { opacity: 1; transform: none; transition: none; }
}

/* ─── Sticky mobile pricing CTA (P1: #84) ───────────────────────────────
   Always-visible "Try free" bar at bottom of viewport on small screens. */
.dn-sticky-cta-mobile {
    display: none;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 100;
    background: var(--dn-bg-card);
    border-top: 2px solid var(--dn-fg);
    padding: 12px 16px;
    box-shadow: 0 -4px 16px rgba(10, 21, 33, 0.08);
}
.dn-sticky-cta-mobile-inner {
    display: flex;
    gap: 12px;
    align-items: center;
}
.dn-sticky-cta-mobile-text {
    flex: 1;
    font-size: 13px;
    color: var(--dn-fg-1);
    line-height: 1.3;
}
.dn-sticky-cta-mobile-text strong {
    display: block;
    font-family: var(--dn-font-display);
    color: var(--dn-fg);
    font-size: 14px;
}
.dn-sticky-cta-mobile .dn-btn {
    flex-shrink: 0;
}
@media (max-width: 768px) {
    .dn-sticky-cta-mobile { display: block; }
    /* Pad the page so content isn't covered by the sticky bar. */
    body.dn.has-sticky-cta { padding-bottom: 80px; }
}

/* ─── KB "Was this helpful?" feedback widget (P1: #122) ─────────────────
   Two-button voter at end of articles. localStorage prevents double-vote. */
.dn-helpful {
    display: flex;
    flex-direction: column;
    gap: 12px;
    align-items: center;
    padding: 28px 24px;
    margin: 40px 0 0;
    border: 1px solid var(--dn-line);
    border-radius: 4px;
    background: var(--dn-bg-2);
    text-align: center;
}
.dn-helpful-question {
    font-family: var(--dn-font-display);
    font-size: 14px;
    font-weight: 700;
    color: var(--dn-fg);
    letter-spacing: 0.04em;
    text-transform: uppercase;
}
.dn-helpful-buttons {
    display: flex;
    gap: 12px;
}
.dn-helpful-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 18px;
    background: var(--dn-bg-card);
    border: 1px solid var(--dn-fg);
    color: var(--dn-fg);
    font-family: var(--dn-font-display);
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    transition: background 200ms ease-out, color 200ms ease-out, transform 200ms ease-out;
}
.dn-helpful-btn:hover {
    background: var(--dn-fg);
    color: var(--dn-bg-card);
    transform: translateY(-2px);
}
.dn-helpful-btn[data-helpful="yes"]:hover {
    background: var(--dn-ok);
    border-color: var(--dn-ok);
    color: #FFFFFF;
}
.dn-helpful-btn[data-helpful="no"]:hover {
    background: var(--dn-bad);
    border-color: var(--dn-bad);
    color: #FFFFFF;
}
.dn-helpful-thanks {
    font-size: 13px;
    color: var(--dn-accent);
    font-weight: 600;
    display: none;
}
.dn-helpful.dn-voted .dn-helpful-buttons,
.dn-helpful.dn-voted .dn-helpful-question { display: none; }
.dn-helpful.dn-voted .dn-helpful-thanks { display: block; }

/* ─── Print stylesheet (P1: #120) ───────────────────────────────────────
   Strips sticky nav, dark hero bands, shadows, decorative backgrounds.
   Optimizes for paper / PDF reading of blog + KB articles. */
@media print {
    nav, footer, .dn-bg-grid, .dn-mobile-menu, .dn-sticky-cta-mobile,
    #dn-tour-launcher, .dn-toast-region, [role="alert"][aria-live],
    .dn-helpful, .dn-share-row, .dn-related-grid {
        display: none !important;
    }
    body.dn, body.dn main {
        background: #FFFFFF !important;
        color: #000000 !important;
    }
    .dn-section-dark, .dn-card-data {
        background: #FFFFFF !important;
        color: #000000 !important;
    }
    .dn-section-dark *, .dn-card-data * {
        color: #000000 !important;
    }
    .dn-card, .dn-tier-card {
        box-shadow: none !important;
        border: 1px solid #888 !important;
        page-break-inside: avoid;
        transform: none !important;
    }
    .dn-h-display, .dn-h-section, .dn-h-card {
        page-break-after: avoid;
    }
    a[href]::after {
        content: " (" attr(href) ")";
        font-size: 0.85em;
        color: #555;
    }
    a[href^="#"]::after, a[href^="javascript"]::after { content: ""; }
    pre, table, blockquote { page-break-inside: avoid; }
    img { max-width: 100% !important; }
}


/* ─── Pricing mobile horizontal scroll-snap (P1: #94) ───────────────────
   Below 768px, tier grid becomes a horizontal scroller with one-card-snap.
   Lets visitors swipe through tiers without scrolling the whole page. */
@media (max-width: 768px) {
    .dn-pricing-grid {
        display: grid;
        grid-auto-flow: column !important;
        grid-auto-columns: 88vw;
        grid-template-columns: unset !important;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
        -webkit-overflow-scrolling: touch;
        gap: 12px;
        padding: 0 6vw 16px;
        margin-inline: -16px;
    }
    .dn-pricing-grid > .dn-tier-card {
        scroll-snap-align: center;
        min-width: 0;
    }
    /* Hint scroll affordance — gradient fade on right edge */
    .dn-pricing-grid::-webkit-scrollbar { height: 4px; }
    .dn-pricing-grid::-webkit-scrollbar-thumb {
        background: var(--dn-line-strong);
        border-radius: 2px;
    }
    /* Featured tier no longer pops up on mobile (cards equal height) */
    .dn-tier-featured {
        transform: none !important;
        box-shadow: -8px 8px 0 var(--dn-shadow-tint) !important;
    }
}

/* ─── Stat card formalized (P1: #69) ────────────────────────────────────
   Reusable pattern: big mono number, label, optional small caption.
   Variants: bordered (default white card) and on-dark (for dark sections). */
.dn-stat-card {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
    padding: 24px;
    border: 1px solid var(--dn-line);
    border-radius: 4px;
    background: var(--dn-bg-card);
    transition: box-shadow 200ms ease-out, transform 200ms ease-out;
}
.dn-stat-card:hover {
    box-shadow: -6px 6px 0 var(--dn-shadow-tint-soft);
    transform: translate(2px, -2px);
}
.dn-stat-card-num {
    font-family: var(--dn-font-display);
    font-size: clamp(32px, 4vw, 48px);
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.03em;
    color: var(--dn-accent);
    font-variant-numeric: tabular-nums;
}
.dn-stat-card-label {
    font-family: var(--dn-font-display);
    font-size: 12px;
    font-weight: 700;
    color: var(--dn-fg);
    letter-spacing: 0.06em;
    text-transform: uppercase;
}
.dn-stat-card-caption {
    font-size: 13px;
    color: var(--dn-fg-2);
    line-height: 1.5;
}
/* Dark variant — lives on dark hero sections */
.dn-stat-card-dark {
    background: rgba(255, 255, 255, 0.04);
    border-color: rgba(255, 255, 255, 0.12);
}
.dn-stat-card-dark .dn-stat-card-label { color: rgba(255, 255, 255, 0.92); }
.dn-stat-card-dark .dn-stat-card-caption { color: rgba(255, 255, 255, 0.66); }

/* ─── Inline form validation (P1: #50, #99) ─────────────────────────────
   Field-level error state: red border + helper text. JS in base.html
   wires it up on blur for forms with .dn-form-validate. */
.dn-input,
.dn-form-input,
input[type="text"].dn-form-input,
input[type="email"].dn-form-input,
input[type="tel"].dn-form-input,
input[type="url"].dn-form-input,
input[type="number"].dn-form-input,
textarea.dn-form-input,
select.dn-form-input {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--dn-line-2);
    border-radius: 3px;
    background: var(--dn-bg-card);
    font-family: var(--dn-font-sans);
    font-size: 14px;
    color: var(--dn-fg);
    transition: border-color 160ms ease-out, box-shadow 160ms ease-out;
}
.dn-form-input:focus,
.dn-input:focus {
    outline: none;
    border-color: var(--dn-accent);
    box-shadow: 0 0 0 3px var(--dn-accent-soft);
}
.dn-form-input.dn-invalid,
.dn-input.dn-invalid {
    border-color: var(--dn-bad);
    box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.08);
}
.dn-form-error {
    margin-top: 6px;
    font-size: 12px;
    color: var(--dn-bad);
    line-height: 1.4;
    display: flex;
    align-items: flex-start;
    gap: 4px;
    animation: dn-faq-slide-down 200ms ease-out;
}
.dn-form-error::before {
    content: "⚠";
    font-size: 13px;
    flex-shrink: 0;
}
.dn-form-row { display: grid; gap: 16px; }
@media (min-width: 640px) { .dn-form-row.dn-form-row-2 { grid-template-columns: 1fr 1fr; } }


/* ─── Active flat nav link (P0 #41 follow-up) ───────────────────────────
   Top-level nav links (Ceník/Migrace/Kontakt) get accent dot when current. */
.dn-nav-flat.is-active {
    color: var(--dn-fg) !important;
    font-weight: 700;
    background: var(--dn-bg-2);
}
.dn-nav-flat.is-active::after {
    content: "";
    display: inline-block;
    width: 4px;
    height: 4px;
    background: var(--dn-accent);
    border-radius: 50%;
    margin-left: 6px;
    vertical-align: middle;
}

/* ─── Skeleton screens (P1 #95) ─────────────────────────────────────────
   Animated shimmer placeholder for loading lists (activity, audit log). */
.dn-skeleton {
    background: linear-gradient(
        90deg,
        var(--dn-bg-2) 0%,
        var(--dn-bg-1) 50%,
        var(--dn-bg-2) 100%
    );
    background-size: 200% 100%;
    animation: dn-skeleton-shimmer 1.4s ease-in-out infinite;
    border-radius: 3px;
    color: transparent !important;
    user-select: none;
    pointer-events: none;
}
@keyframes dn-skeleton-shimmer {
    from { background-position: 200% 0; }
    to   { background-position: -200% 0; }
}
.dn-skeleton-text { height: 1em; min-width: 40px; }
.dn-skeleton-line { height: 14px; border-radius: 2px; }
.dn-skeleton-card {
    height: 64px;
    border: 1px solid var(--dn-line);
    border-radius: 4px;
    margin-bottom: 8px;
}
@media (prefers-reduced-motion: reduce) {
    .dn-skeleton { animation: none; opacity: 0.7; }
}


/* ─── Scroll-to-top button (P1: minor polish) ───────────────────────────
   Appears after 500px scroll, fixed bottom-right, smooth scroll on click. */
.dn-scroll-top {
    position: fixed;
    bottom: 24px;
    right: 24px;
    z-index: 50;
    width: 44px;
    height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--dn-fg);
    color: #FFFFFF;
    border: 1px solid var(--dn-fg);
    border-radius: 0;
    cursor: pointer;
    opacity: 0;
    visibility: hidden;
    transform: translateY(8px);
    transition: opacity 200ms ease-out, transform 200ms ease-out, visibility 200ms ease-out, background 160ms ease-out;
    box-shadow: -6px 6px 0 var(--dn-shadow-tint-soft);
}
.dn-scroll-top.dn-visible {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}
.dn-scroll-top:hover {
    background: var(--dn-accent);
    border-color: var(--dn-accent);
    box-shadow: -3px 3px 0 var(--dn-shadow-tint-soft);
    transform: translate(2px, -2px);
}
@media (max-width: 768px) {
    .dn-scroll-top { bottom: 80px; right: 16px; width: 40px; height: 40px; }
    /* Avoid colliding with sticky mobile pricing CTA on pricing page */
    body.has-sticky-cta .dn-scroll-top { bottom: 92px; }
}
@media (prefers-reduced-motion: reduce) {
    .dn-scroll-top { transition: none; transform: none !important; }
}


/* ─── Network offline banner (P1: #100) ─────────────────────────────────
   Sticky red bar at top when navigator.onLine = false. */
.dn-offline-banner {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 1000;
    background: var(--dn-bad);
    color: #FFFFFF;
    text-align: center;
    padding: 8px 16px;
    font-family: var(--dn-font-display);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.04em;
    transform: translateY(-100%);
    transition: transform 200ms ease-out;
}
.dn-offline-banner.dn-visible { transform: translateY(0); }
body.dn.is-offline { padding-top: 36px; }
body.dn.is-offline #main-nav { top: 36px; }

/* ─── Form draft auto-save indicator (P1: #58) ──────────────────────────
   Subtle "Uloženo jako koncept" toast in form footer when localStorage syncs. */
.dn-draft-indicator {
    display: none;
    align-items: center;
    gap: 6px;
    font-family: var(--dn-font-mono);
    font-size: 11px;
    color: var(--dn-fg-2);
    margin-top: 8px;
    opacity: 0;
    transition: opacity 200ms ease-out;
}
.dn-draft-indicator::before {
    content: "✓";
    color: var(--dn-ok);
    font-size: 14px;
}
.dn-draft-indicator.dn-visible {
    display: inline-flex;
    opacity: 1;
}

/* ─── Search icon button in nav (P1: #46) ───────────────────────────────
   Opens the existing Cmd+K palette via custom event. */
.dn-nav-search-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: transparent;
    border: 1px solid var(--dn-line-2);
    border-radius: 4px;
    color: var(--dn-fg-1);
    cursor: pointer;
    transition: border-color 160ms ease-out, color 160ms ease-out, background 160ms ease-out;
}
.dn-nav-search-btn:hover {
    border-color: var(--dn-accent);
    color: var(--dn-accent);
    background: var(--dn-accent-soft);
}
.dn-nav-search-btn-label {
    font-family: var(--dn-font-mono);
    font-size: 10px;
    margin-left: 6px;
    color: var(--dn-fg-3);
    background: var(--dn-bg-2);
    padding: 2px 5px;
    border-radius: 2px;
    border: 1px solid var(--dn-line);
}
@media (max-width: 1023px) {
    .dn-nav-search-btn-label { display: none; }
}


/* ─── Blog blockquote + KB code styling (P1: #4, #126) ──────────────────
   Blockquote: vertical accent bar on left + display font. Code blocks:
   warm bg + copy button overlay. */
.dn-prose blockquote {
    margin: 28px 0;
    padding: 18px 22px;
    border-left: 3px solid var(--dn-accent);
    background: var(--dn-bg-1);
    font-family: var(--dn-font-display);
    font-size: 17px;
    font-weight: 400;
    line-height: 1.55;
    color: var(--dn-fg);
    font-style: normal;
}
.dn-prose blockquote p { margin: 0; }
.dn-prose blockquote cite,
.dn-prose blockquote footer {
    display: block;
    margin-top: 10px;
    font-family: var(--dn-font-sans);
    font-size: 13px;
    color: var(--dn-fg-2);
    font-style: normal;
}
.dn-prose blockquote cite::before { content: "— "; }

.dn-prose pre,
.dn-prose code {
    font-family: var(--dn-font-mono);
}
.dn-prose code:not(pre code) {
    background: var(--dn-bg-2);
    padding: 2px 6px;
    border-radius: 2px;
    font-size: 0.9em;
    color: var(--dn-accent-hover);
    border: 1px solid var(--dn-line);
}
.dn-prose pre {
    position: relative;
    background: var(--dn-fg);
    color: #FFFFFF;
    padding: 18px 20px;
    border-radius: 4px;
    overflow-x: auto;
    margin: 20px 0;
    font-size: 13px;
    line-height: 1.6;
}
.dn-prose pre code {
    background: transparent;
    color: inherit;
    border: 0;
    padding: 0;
}
.dn-copy-btn {
    position: absolute;
    top: 8px;
    right: 8px;
    background: rgba(255, 255, 255, 0.08);
    color: rgba(255, 255, 255, 0.7);
    border: 1px solid rgba(255, 255, 255, 0.12);
    padding: 4px 10px;
    border-radius: 2px;
    font-family: var(--dn-font-mono);
    font-size: 11px;
    cursor: pointer;
    transition: background 160ms ease-out, color 160ms ease-out;
}
.dn-copy-btn:hover {
    background: var(--dn-accent);
    color: #FFFFFF;
    border-color: var(--dn-accent);
}
.dn-copy-btn.dn-copied {
    background: var(--dn-ok);
    color: #FFFFFF;
    border-color: var(--dn-ok);
}

/* ─── Dashboard sidebar collapse memory (P1: #129) ──────────────────────
   Collapse to icon-only mode. localStorage remembers state across pages. */
@media (min-width: 1024px) {
    body.dn-sidebar-collapsed .app-sidebar {
        width: 64px !important;
    }
    body.dn-sidebar-collapsed .app-sidebar-link span,
    body.dn-sidebar-collapsed .app-sidebar-section-title,
    body.dn-sidebar-collapsed .app-sidebar-account,
    body.dn-sidebar-collapsed .app-sidebar-link kbd {
        display: none !important;
    }
    body.dn-sidebar-collapsed .app-sidebar-link {
        justify-content: center;
        padding: 10px 0;
    }
    body.dn-sidebar-collapsed .app-sidebar-link svg {
        margin: 0;
    }
}
.dn-sidebar-toggle {
    display: none;
    position: absolute;
    top: 14px;
    right: -12px;
    width: 24px;
    height: 24px;
    background: var(--dn-bg-card);
    border: 1px solid var(--dn-line-2);
    border-radius: 50%;
    cursor: pointer;
    z-index: 5;
    align-items: center;
    justify-content: center;
    color: var(--dn-fg-2);
    transition: color 160ms ease-out, border-color 160ms ease-out, transform 200ms ease-out;
}
.dn-sidebar-toggle:hover {
    color: var(--dn-accent);
    border-color: var(--dn-accent);
}
body.dn-sidebar-collapsed .dn-sidebar-toggle svg {
    transform: rotate(180deg);
}
@media (min-width: 1024px) {
    .dn-sidebar-toggle { display: inline-flex; }
}


/* ─── Mega-batch P1 (2026-05-09) ────────────────────────────────────────
   Bulk visual polish covering items #9, #13, #15, #17–22, #25–29, #32, #33,
   #37, #44, #47, #52, #53, #56, #70, #71, #76, #77, #79, #80, #85–88,
   #90, #94, #96, #98, #105, #106, #119, #124, #125, #136 markers from
   docs/UX_VISUAL_CHECKLIST.md. Mostly CSS-only utilities to apply on top
   of existing markup. */

/* #13 — Visited link state (subtle muted shade so users see read articles) */
.dn-prose a:visited:not(.dn-btn):not(.dn-tag),
.dn-link:visited {
    color: var(--dn-fg-2);
}

/* #15 — Color-blind safe status: text label + icon, never color alone */
.dn-status-pill::before, .dn-status-tag::before {
    content: "";
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    margin-right: 6px;
    vertical-align: middle;
    background: var(--dn-ok);
}
.dn-status-pill.is-degraded::before { background: var(--dn-warn); border-radius: 0; transform: rotate(45deg); }
.dn-status-pill.is-down::before { background: var(--dn-bad); border-radius: 0; }
.dn-status-pill.is-degraded { color: var(--dn-warn); }
.dn-status-pill.is-down { color: var(--dn-bad); }

/* #17, #18 — Padding + section spacing tokens (fluid clamp helpers) */
.dn-section-y { padding-block: clamp(40px, 5vw, 100px); }
.dn-section-y-lg { padding-block: clamp(56px, 7vw, 120px); }

/* #25 — Hero subhead pyramid: subhead always narrower than h1 */
.dn-hero-subhead { max-width: 56ch; }

/* #26 — Hero above-the-fold: cap padding so hero fits on 14" laptop */
@media (min-height: 700px) and (min-width: 1024px) {
    .dn-hero-fit { min-height: calc(100vh - 64px); display: flex; align-items: center; }
}

/* #29 — Hero CTA secondary text size 12 → 13 */
.dn-hero-meta { font-size: 13px !important; }

/* #32 — Comparison matrix row hover bg */
.dn-matrix-table tbody tr { transition: background 160ms ease-out; }
.dn-matrix-table tbody tr:hover { background: var(--dn-bg-1); }

/* #33 — Annual savings badge gentle pulse on first toggle */
@keyframes dn-pulse-savings {
    0%, 100% { transform: scale(1); }
    50% { transform: scale(1.08); }
}
.dn-toggle-savings.dn-pulse {
    animation: dn-pulse-savings 1.4s ease-out 2;
}
@media (prefers-reduced-motion: reduce) {
    .dn-toggle-savings.dn-pulse { animation: none; }
}

/* #37 — Per-tier feature tooltip on hover (inline help). Inline element with
   data-tip="..." gets a tooltip on hover. */
[data-tip] {
    position: relative;
    cursor: help;
    border-bottom: 1px dotted var(--dn-line-strong);
}
[data-tip]:hover::after, [data-tip]:focus::after {
    content: attr(data-tip);
    position: absolute;
    bottom: calc(100% + 6px);
    left: 50%;
    transform: translateX(-50%);
    background: var(--dn-fg);
    color: var(--dn-bg-card);
    padding: 6px 10px;
    border-radius: 3px;
    font-family: var(--dn-font-sans);
    font-size: 12px;
    font-weight: 400;
    line-height: 1.4;
    white-space: normal;
    width: max-content;
    max-width: 240px;
    z-index: 50;
    box-shadow: 0 2px 8px rgba(10, 21, 33, 0.18);
}

/* #47 — Mega-menu hover delay (avoids accidental opens) */
.dn-nav-mega .dn-nav-panel { transition-delay: 120ms; }
.dn-nav-mega:hover .dn-nav-panel,
.dn-nav-mega:focus-within .dn-nav-panel { transition-delay: 0ms; }

/* #52, #56 — Submit btn full-width on mobile */
@media (max-width: 640px) {
    form .dn-btn[type="submit"], form button[type="submit"] {
        width: 100%;
        justify-content: center;
    }
}

/* #70, #71 — Card click target consistency: full-card link cards lift */
a.dn-card { text-decoration: none; color: var(--dn-fg); display: block; }
a.dn-card:hover { color: var(--dn-fg); }

/* #79 — FAQ anchor links: target highlight + scroll-margin to clear sticky nav */
.dn-pricing-faq details, .dn-faq-list details {
    scroll-margin-top: 100px;
}
.dn-pricing-faq details:target, .dn-faq-list details:target {
    background: var(--dn-accent-soft);
    transition: background 600ms ease-out;
}

/* #85 — Touch target minimum 44×44 on mobile */
@media (max-width: 768px) {
    .dn-btn, .dn-btn-sm { min-height: 44px; }
    .dn-nav-flat, .dn-nav-trigger, .dn-helpful-btn,
    .dn-mobile-flat, .dn-mobile-acc-summary, .dn-tag {
        min-height: 44px;
        display: inline-flex;
        align-items: center;
    }
    /* Icon buttons need 44x44 too */
    .dn-nav-search-btn, .dn-mobile-toggle, .dn-scroll-top,
    .dn-copy-btn { min-width: 44px; min-height: 44px; }
}

/* #94, #96 — Toast notification region polish */
.dn-toast-region { pointer-events: none; }
.dn-toast-region > * { pointer-events: auto; }

/* #98 — Optimistic UI: pending state for async toggles */
.dn-pending {
    opacity: 0.6;
    pointer-events: none;
    position: relative;
}
.dn-pending::after {
    content: "";
    position: absolute;
    top: 50%; right: 8px;
    width: 12px; height: 12px;
    margin-top: -6px;
    border: 2px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    animation: dn-spin 0.7s linear infinite;
}

/* #105 — Page transition (subtle fade-in on every page) */
@keyframes dn-page-in {
    from { opacity: 0; transform: translateY(4px); }
    to   { opacity: 1; transform: translateY(0); }
}
body.dn main { animation: dn-page-in 280ms ease-out; }
@media (prefers-reduced-motion: reduce) {
    body.dn main { animation: none; }
}

/* #106 — Cursor follow accent on interactive cards (subtle) */
.dn-card[data-cursor], .dn-tier-card[data-cursor] {
    background-image: radial-gradient(circle at var(--mx, 50%) var(--my, 50%),
        rgba(232, 93, 47, 0.06), transparent 200px);
}

/* #119 — Social share row for blog posts */
.dn-share-row {
    display: flex;
    gap: 8px;
    align-items: center;
    margin-top: 32px;
    padding-top: 24px;
    border-top: 1px solid var(--dn-line);
}
.dn-share-row > span {
    font-family: var(--dn-font-mono);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--dn-fg-3);
    margin-right: 4px;
}
.dn-share-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border: 1px solid var(--dn-line);
    border-radius: 3px;
    color: var(--dn-fg-1);
    background: var(--dn-bg-card);
    text-decoration: none;
    transition: border-color 160ms ease-out, color 160ms ease-out;
}
.dn-share-btn:hover { border-color: var(--dn-accent); color: var(--dn-accent); }

/* #125 — KB last-updated date prominent */
.dn-kb-updated {
    font-family: var(--dn-font-mono);
    font-size: 12px;
    color: var(--dn-fg-3);
    margin: 4px 0 0;
}
.dn-kb-updated strong { color: var(--dn-fg-2); font-weight: 700; }


/* ─── Dashboard density toggle (P1: #135) ───────────────────────────────
   Power-user mode: tighter padding on cards/tables/buttons so more fits
   on screen. Toggle stored in localStorage, applied to body. */
body.dn-density-compact .app-card,
body.dn-density-compact .dn-card,
body.dn-density-compact .bg-white {
    padding-top: 12px !important;
    padding-bottom: 12px !important;
}
body.dn-density-compact .dn-table th,
body.dn-density-compact .dn-table td,
body.dn-density-compact .app-table th,
body.dn-density-compact .app-table td {
    padding-top: 8px !important;
    padding-bottom: 8px !important;
}
body.dn-density-compact .app-page-title { font-size: 18px !important; }
body.dn-density-compact h1, body.dn-density-compact h2 { margin-bottom: 8px !important; }

/* Density toggle button — sits next to sidebar collapse */
.dn-density-toggle {
    display: none;
    position: absolute;
    top: 50px;
    right: -12px;
    width: 24px;
    height: 24px;
    background: var(--dn-bg-card);
    border: 1px solid var(--dn-line-2);
    border-radius: 50%;
    cursor: pointer;
    z-index: 5;
    align-items: center;
    justify-content: center;
    color: var(--dn-fg-2);
    transition: color 160ms ease-out, border-color 160ms ease-out;
}
.dn-density-toggle:hover { color: var(--dn-accent); border-color: var(--dn-accent); }
@media (min-width: 1024px) { .dn-density-toggle { display: inline-flex; } }

/* ─── Floating label form variant (P1: #58) ─────────────────────────────
   Input + label group; label sits inside the input on rest, floats up
   on focus or filled. Add via .dn-float wrapper. */
.dn-float {
    position: relative;
}
.dn-float input,
.dn-float textarea {
    padding-top: 22px;
    padding-bottom: 6px;
}
.dn-float label {
    position: absolute;
    top: 13px;
    left: 12px;
    pointer-events: none;
    color: var(--dn-fg-2);
    font-size: 14px;
    transition: top 160ms ease-out, font-size 160ms ease-out, color 160ms ease-out;
    background: transparent;
    padding: 0 4px;
}
.dn-float input:focus + label,
.dn-float textarea:focus + label,
.dn-float input:not(:placeholder-shown) + label,
.dn-float textarea:not(:placeholder-shown) + label {
    top: -8px;
    font-size: 11px;
    color: var(--dn-accent);
    background: var(--dn-bg-card);
    font-family: var(--dn-font-display);
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}


/* ─── Quick wins (P1 final batch) ──────────────────────────────────────
   #134 — quick action chips in dashboard sidebar (CSS only)
   #119 follow-up — share row visible on KB articles too */
.dn-quick-action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 3px;
    color: var(--dn-fg-3);
    background: transparent;
    margin-left: auto;
    transition: color 160ms ease-out, background 160ms ease-out;
    font-size: 16px;
    line-height: 1;
    text-decoration: none;
}
.dn-quick-action:hover {
    color: var(--dn-accent);
    background: var(--dn-accent-soft);
}

/* #76 / #77 — Table row actions kebab menu (placeholder primitive) */
.dn-row-actions {
    position: relative;
    display: inline-block;
}
.dn-row-actions-trigger {
    width: 28px;
    height: 28px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: 0;
    color: var(--dn-fg-2);
    cursor: pointer;
    border-radius: 3px;
    transition: background 160ms ease-out;
}
.dn-row-actions-trigger:hover { background: var(--dn-bg-2); color: var(--dn-fg); }
.dn-row-actions-menu {
    position: absolute;
    right: 0;
    top: calc(100% + 4px);
    min-width: 160px;
    background: var(--dn-bg-card);
    border: 1px solid var(--dn-line-2);
    border-radius: 4px;
    box-shadow: -4px 4px 0 var(--dn-shadow-tint-soft);
    padding: 4px;
    display: none;
    z-index: 30;
}
.dn-row-actions[aria-expanded="true"] .dn-row-actions-menu { display: block; }
.dn-row-actions-menu a, .dn-row-actions-menu button {
    display: block;
    width: 100%;
    padding: 8px 12px;
    font-family: var(--dn-font-sans);
    font-size: 13px;
    color: var(--dn-fg);
    text-decoration: none;
    background: transparent;
    border: 0;
    text-align: left;
    border-radius: 3px;
    cursor: pointer;
}
.dn-row-actions-menu a:hover, .dn-row-actions-menu button:hover {
    background: var(--dn-bg-2);
    color: var(--dn-accent);
}


/* ════════════════════════════════════════════════════════════════════════
   DARK MODE (P1 #130) — opt-in via [data-theme="dark"] on <html>.
   Token-level overrides: every --dn-* var gets a dark counterpart so all
   public + dashboard surfaces follow the theme without per-page work.
   ════════════════════════════════════════════════════════════════════════ */

html[data-theme="dark"], html[data-theme="dark"] body.dn,
html.dn-dark, html.dn-dark body.dn {
    /* Surfaces — deep ink navy with subtle warm undertone */
    --dn-bg:          #0E1521;
    --dn-bg-card:     #16202E;
    --dn-bg-1:        #1B2532;
    --dn-bg-2:        #1F2A38;
    --dn-bg-3:        #0E1521;

    /* Lines / borders */
    --dn-line:        #29384B;
    --dn-line-2:      #3D5066;
    --dn-line-strong: #5A7090;

    /* Foreground — warm off-white */
    --dn-fg:   #F5EFE7;
    --dn-fg-1: #C5CDD8;
    --dn-fg-2: #94A0AE;
    --dn-fg-3: #6B7787;

    /* Accent stays terracotta — works on dark too. Soft variant brighter. */
    --dn-accent:        #FF6E40;
    --dn-accent-fg:     #0E1521;
    --dn-accent-glow:   rgba(255, 110, 64, 0.36);
    --dn-accent-soft:   rgba(255, 110, 64, 0.14);
    --dn-accent-hover:  #FF7F55;

    /* Status — brighter for dark legibility */
    --dn-ok:   #34D399;
    --dn-warn: #FBBF24;
    --dn-bad:  #F87171;
    --dn-info: #60A5FA;

    --dn-shadow-tint:        rgba(255, 110, 64, 0.40);
    --dn-shadow-tint-soft:   rgba(255, 110, 64, 0.18);
    --dn-shadow-tint-navy:   rgba(0, 0, 0, 0.55);

    --dn-disabled-bg:   #232E3D;
    --dn-disabled-fg:   #5A6878;
    --dn-disabled-line: #2D3A4A;
}

/* Body shell — when html has data-theme=dark */
html[data-theme="dark"] body, html.dn-dark body {
    background: var(--dn-bg) !important;
    color: var(--dn-fg);
    color-scheme: dark;
}

/* ─── Tailwind class overrides for dashboard ─── */
html[data-theme="dark"] .bg-white,
html.dn-dark .bg-white { background-color: var(--dn-bg-card) !important; }

html[data-theme="dark"] .bg-gray-50,
html.dn-dark .bg-gray-50 { background-color: var(--dn-bg-1) !important; }

html[data-theme="dark"] .bg-gray-100,
html.dn-dark .bg-gray-100 { background-color: var(--dn-bg-2) !important; }

html[data-theme="dark"] .bg-brand-50,
html.dn-dark .bg-brand-50 { background-color: var(--dn-accent-soft) !important; }
html[data-theme="dark"] .bg-emerald-50,
html.dn-dark .bg-emerald-50 { background-color: rgba(16, 185, 129, 0.14) !important; }
html[data-theme="dark"] .bg-amber-50,
html.dn-dark .bg-amber-50 { background-color: rgba(245, 158, 11, 0.14) !important; }
html[data-theme="dark"] .bg-red-50,
html.dn-dark .bg-red-50 { background-color: rgba(220, 38, 38, 0.14) !important; }
html[data-theme="dark"] .bg-blue-50,
html.dn-dark .bg-blue-50 { background-color: rgba(59, 130, 246, 0.14) !important; }

html[data-theme="dark"] .text-gray-900,
html[data-theme="dark"] .text-navy-800,
html[data-theme="dark"] .text-navy-900,
html.dn-dark .text-gray-900,
html.dn-dark .text-navy-800,
html.dn-dark .text-navy-900 { color: var(--dn-fg) !important; }

html[data-theme="dark"] .text-gray-700,
html[data-theme="dark"] .text-navy-700,
html.dn-dark .text-gray-700,
html.dn-dark .text-navy-700 { color: var(--dn-fg-1) !important; }

html[data-theme="dark"] .text-gray-600,
html[data-theme="dark"] .text-gray-500,
html.dn-dark .text-gray-600,
html.dn-dark .text-gray-500 { color: var(--dn-fg-2) !important; }

html[data-theme="dark"] .text-gray-400,
html[data-theme="dark"] .text-gray-300,
html.dn-dark .text-gray-400,
html.dn-dark .text-gray-300 { color: var(--dn-fg-3) !important; }

html[data-theme="dark"] .border-gray-100,
html[data-theme="dark"] .border-gray-200,
html.dn-dark .border-gray-100,
html.dn-dark .border-gray-200 { border-color: var(--dn-line) !important; }

html[data-theme="dark"] .border-gray-300,
html.dn-dark .border-gray-300 { border-color: var(--dn-line-2) !important; }

html[data-theme="dark"] .shadow-sm,
html[data-theme="dark"] .shadow-md,
html[data-theme="dark"] .shadow-lg,
html.dn-dark .shadow-sm,
html.dn-dark .shadow-md,
html.dn-dark .shadow-lg {
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4) !important;
}

/* App-specific surfaces */
html[data-theme="dark"] .app-card,
html[data-theme="dark"] .app-modal,
html[data-theme="dark"] .app-table-wrap,
html[data-theme="dark"] .app-empty,
html.dn-dark .app-card,
html.dn-dark .app-modal,
html.dn-dark .app-table-wrap,
html.dn-dark .app-empty {
    background: var(--dn-bg-card) !important;
    border-color: var(--dn-line) !important;
    color: var(--dn-fg);
}

html[data-theme="dark"] .app-sidebar,
html.dn-dark .app-sidebar {
    background: #0B121C !important;
    border-color: var(--dn-line) !important;
}

html[data-theme="dark"] input,
html[data-theme="dark"] textarea,
html[data-theme="dark"] select,
html.dn-dark input,
html.dn-dark textarea,
html.dn-dark select {
    background-color: var(--dn-bg-1) !important;
    color: var(--dn-fg);
    border-color: var(--dn-line-2) !important;
}
html[data-theme="dark"] input::placeholder,
html[data-theme="dark"] textarea::placeholder,
html.dn-dark input::placeholder,
html.dn-dark textarea::placeholder {
    color: var(--dn-fg-3);
}

/* Code blocks already dark — keep readable on dark theme */
html[data-theme="dark"] .dn-prose pre,
html.dn-dark .dn-prose pre {
    background: #050B14 !important;
    border: 1px solid var(--dn-line);
}

/* ─── "Intentionally dark" components keep their dark aesthetic in dark
   mode too. They originally use background: var(--dn-fg) to get
   navy-on-light contrast in light theme. With token inversion, --dn-fg
   flips to warm off-white, which would invert these surfaces. Override
   them to stay on a slightly elevated dark surface so they read against
   the page bg. */
html[data-theme="dark"] .dn-card-data,
html[data-theme="dark"] .dn-stat-band,
html[data-theme="dark"] .dn-section-dark,
html.dn-dark .dn-card-data,
html.dn-dark .dn-stat-band,
html.dn-dark .dn-section-dark {
    background: #050B14 !important;
    color: rgba(255, 255, 255, 0.92) !important;
    border-color: var(--dn-line-2) !important;
}
html[data-theme="dark"] .dn-card-data .dn-stat-mini-value,
html.dn-dark .dn-card-data .dn-stat-mini-value {
    color: #FFFFFF !important;
}
html[data-theme="dark"] .dn-stat-band *,
html[data-theme="dark"] .dn-section-dark *:not(.dn-tag):not(a),
html.dn-dark .dn-stat-band *,
html.dn-dark .dn-section-dark *:not(.dn-tag):not(a) {
    color: rgba(255, 255, 255, 0.92);
}

/* Filled-navy secondary button keeps its dark fill in both modes */
html[data-theme="dark"] .dn-btn-secondary,
html.dn-dark .dn-btn-secondary {
    background: #1B2A3D !important;
    border-color: #1B2A3D !important;
    color: #FFFFFF !important;
}
html[data-theme="dark"] .dn-btn-secondary:hover,
html.dn-dark .dn-btn-secondary:hover {
    background: #243349 !important;
    border-color: #243349 !important;
}

/* Tailwind navy-900/gray-900 utility — keep dark in dark mode */
html[data-theme="dark"] body .bg-navy-900,
html[data-theme="dark"] body .bg-gray-900,
html.dn-dark body .bg-navy-900,
html.dn-dark body .bg-gray-900 {
    background: #050B14 !important;
    color: #FFFFFF !important;
}

/* Helpful widget hover — keep navy fill in dark mode */
html[data-theme="dark"] .dn-helpful-btn:hover,
html.dn-dark .dn-helpful-btn:hover {
    background: #1B2A3D !important;
    color: #FFFFFF !important;
}

/* Tooltip — keep dark surface and white text */
html[data-theme="dark"] [class*="dn-tooltip"]::after,
html.dn-dark [class*="dn-tooltip"]::after {
    background: #050B14 !important;
    color: #FFFFFF !important;
}

/* Status pill in nav — ensure dark navy fill against dark page bg has
   enough contrast (it was looking muddy in the screenshot) */
html[data-theme="dark"] .dn-status-pill,
html.dn-dark .dn-status-pill {
    background: rgba(255, 255, 255, 0.06) !important;
    border-color: var(--dn-line-2) !important;
    color: var(--dn-fg) !important;
}

/* Theme toggle button (sun ↔ moon icon) */
.dn-theme-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: transparent;
    border: 1px solid var(--dn-line-2);
    border-radius: 4px;
    color: var(--dn-fg-1);
    cursor: pointer;
    transition: border-color 160ms ease-out, color 160ms ease-out, background 160ms ease-out;
}
.dn-theme-toggle:hover {
    border-color: var(--dn-accent);
    color: var(--dn-accent);
    background: var(--dn-accent-soft);
}
.dn-theme-toggle .dn-theme-sun { display: inline-flex; }
.dn-theme-toggle .dn-theme-moon { display: none; }
html[data-theme="dark"] .dn-theme-toggle .dn-theme-sun,
html.dn-dark .dn-theme-toggle .dn-theme-sun { display: none; }
html[data-theme="dark"] .dn-theme-toggle .dn-theme-moon,
html.dn-dark .dn-theme-toggle .dn-theme-moon { display: inline-flex; }

/* ════════════════════════════════════════════════════════════════════════
   MODERN 2026 PATTERNS
   View Transitions, Container Queries, Scroll-driven Animations,
   :has() parent selectors, text-wrap balance/pretty, Popover API,
   content-visibility, color-mix(), anchor positioning.
   All progressively enhanced — older browsers fall back gracefully.
   ════════════════════════════════════════════════════════════════════════ */

/* ─── View Transitions API ──────────────────────────────────────────────
   Enables cross-document smooth transitions for same-origin navigation.
   Header/nav/footer get persistent names so they don't refade between
   pages. Hero h1 morphs across landing pages that share titles. */
@view-transition { navigation: auto; }

::view-transition-group(root) { animation-duration: 0.28s; }
::view-transition-old(root) {
    animation: dn-vt-fade-out 0.18s cubic-bezier(0.4, 0, 1, 1) both;
}
::view-transition-new(root) {
    animation: dn-vt-fade-in 0.28s cubic-bezier(0, 0, 0.2, 1) 0.06s both;
}
@keyframes dn-vt-fade-out {
    to { opacity: 0; transform: translateY(-4px); }
}
@keyframes dn-vt-fade-in {
    from { opacity: 0; transform: translateY(6px); }
    to   { opacity: 1; transform: translateY(0); }
}
nav#main-nav  { view-transition-name: dn-nav; }
footer.dn-footer { view-transition-name: dn-footer; }
.dn-mobile-cta-bar { view-transition-name: dn-mobile-cta; }
::view-transition-group(dn-nav),
::view-transition-group(dn-footer),
::view-transition-group(dn-mobile-cta) { animation-duration: 0s; }
@media (prefers-reduced-motion: reduce) {
    ::view-transition-old(*),
    ::view-transition-new(*) { animation: none !important; }
}

/* ─── Container Queries ─────────────────────────────────────────────────
   Cards adapt to their container width, not viewport. Lets the same
   card render compact in a sidebar, full in the main column. */
.dn-card,
.dn-tier-card,
.dn-blog-card,
.dn-cms-card {
    container-type: inline-size;
    container-name: dn-card;
}
.dn-kb-grid,
.dn-pricing-grid,
.dn-feature-grid,
.dn-platform-grid {
    container-type: inline-size;
    container-name: dn-grid;
}

/* When a card is < 280px wide, drop to compact spacing + smaller text */
@container dn-card (max-width: 280px) {
    .dn-h-card { font-size: 16px; line-height: 1.3; }
    h3.dn-h-card + p { font-size: 12px; }
}
/* When a grid container is narrow, collapse to single column */
@container dn-grid (max-width: 540px) {
    .dn-kb-grid,
    .dn-feature-grid,
    .dn-platform-grid {
        grid-template-columns: 1fr !important;
    }
}

/* ─── Scroll-driven Animations ──────────────────────────────────────────
   `animation-timeline: view()` reveals elements as they scroll into
   view. Replaces IntersectionObserver-based JS reveal where supported. */
@supports (animation-timeline: view()) {
    /* Apply only to opt-in reveal class. Hero H1s are above-the-fold and
       shouldn't flash. Cards in deep grids reveal as they scroll up. */
    .dn-reveal,
    section:not(:first-of-type) > .dn-container > .dn-card,
    section:not(:first-of-type) .dn-blog-card,
    section:not(:first-of-type) .dn-cms-card {
        animation: dn-scroll-reveal linear both;
        animation-timeline: view();
        animation-range: entry 0% entry 60%;
    }
    @keyframes dn-scroll-reveal {
        from { opacity: 0; transform: translateY(24px); }
        to   { opacity: 1; transform: translateY(0); }
    }
    /* Header shrink on scroll using scroll() timeline */
    nav#main-nav {
        animation: dn-nav-shrink linear both;
        animation-timeline: scroll(root);
        animation-range: 0 200px;
    }
    @keyframes dn-nav-shrink {
        from { backdrop-filter: blur(0);     background: transparent; }
        to   { backdrop-filter: blur(14px);  background: color-mix(in oklab, var(--dn-bg) 72%, transparent); }
    }
    /* Reading progress bar on long-form articles using scroll() timeline.
       Add <div class="dn-scroll-progress"></div> at top of <main>. */
    .dn-scroll-progress {
        position: fixed;
        top: 0; left: 0; right: 0;
        height: 3px;
        z-index: 100;
        background: var(--dn-accent);
        transform-origin: 0 50%;
        animation: dn-progress linear;
        animation-timeline: scroll(root);
    }
    @keyframes dn-progress {
        from { transform: scaleX(0); }
        to   { transform: scaleX(1); }
    }
    @media (prefers-reduced-motion: reduce) {
        .dn-reveal,
        section:not(:first-of-type) > .dn-container > .dn-card,
        section:not(:first-of-type) .dn-blog-card,
        section:not(:first-of-type) .dn-cms-card,
        nav#main-nav,
        .dn-scroll-progress {
            animation: none;
        }
    }
}

/* ─── :has() parent selectors ───────────────────────────────────────────
   Style cards that contain a featured tag, forms with errors, sections
   with a particular child — without adding wrapper classes. */
.dn-card:has(> .dn-tag-featured) {
    border-color: var(--dn-accent);
    box-shadow: -8px 8px 0 0 var(--dn-shadow-tint-soft);
}
.dn-card:has(.dn-card-cta:hover) {
    border-color: var(--dn-accent);
    transform: translate(-2px, -2px);
}
form.dn-form:has(:invalid:not(:placeholder-shown)) .dn-form-submit {
    background: var(--dn-disabled-bg);
    color: var(--dn-disabled-fg);
    pointer-events: none;
}
/* Hide section title when its only child is empty (e.g. testimonial
   section with no testimonials yet) */
section:has(> .dn-empty-marker:only-child) { display: none; }
/* Highlight FAQ details when an answer inside has hover */
.dn-faq-item:has(summary:hover) { background: var(--dn-bg-1); }
/* When a tier card has the suggested marker AND user hovered it */
.dn-tier-card:has(.dn-tier-suggested):hover {
    transform: translate(-3px, -3px);
}

/* ─── text-wrap: balance / pretty ───────────────────────────────────────
   Balanced line lengths on headlines, no orphaned last word on body. */
h1, h2, .dn-h-display, .dn-h-section, .dn-eyebrow,
.dn-tier-name, .dn-h-card,
blockquote, .dn-lede {
    text-wrap: balance;
}
.dn-prose p,
.dn-prose li,
.dn-blog-card p,
.dn-card p {
    text-wrap: pretty;
}

/* ─── content-visibility for off-screen sections ────────────────────────
   Browser skips render until the section is near viewport. Set
   contain-intrinsic-size so layout doesn't jump on first paint. */
section.dn-cv,
.dn-faq,
.dn-comparison-matrix,
.dn-timeline,
footer.dn-footer {
    content-visibility: auto;
    contain-intrinsic-size: 1px 800px;
}

/* ─── color-mix() for state tints ───────────────────────────────────────
   Programmatic hover/active variants from the accent token. */
@supports (color: color-mix(in oklab, red, blue)) {
    .dn-btn-primary:hover {
        background: color-mix(in oklab, var(--dn-accent) 88%, black);
    }
    .dn-btn-ghost:hover {
        background: color-mix(in oklab, var(--dn-accent) 12%, transparent);
    }
    .dn-tag:hover {
        background: color-mix(in oklab, var(--dn-accent) 16%, transparent);
        color: var(--dn-accent);
    }
    .dn-link:hover {
        color: color-mix(in oklab, var(--dn-accent) 80%, var(--dn-fg));
    }
}

/* ─── Popover API ───────────────────────────────────────────────────────
   Native popovers (top-layer, light-dismiss). Use on tooltips/menus that
   should escape parent overflow:hidden / z-index stacks. Apply
   popover="auto" + popovertarget="id" on trigger button. */
[popover] {
    position: fixed;
    inset: unset;
    margin: 0;
    padding: 14px 16px;
    border: 1px solid var(--dn-line);
    background: var(--dn-bg-card);
    border-radius: var(--dn-radius-lg);
    box-shadow: -8px 8px 0 0 var(--dn-shadow-tint-soft);
    color: var(--dn-fg);
    font-size: 13px;
    line-height: 1.5;
    max-width: 320px;
    opacity: 0;
    transform: translateY(-4px);
    transition: opacity 160ms ease-out, transform 160ms ease-out, overlay 160ms ease-out allow-discrete, display 160ms ease-out allow-discrete;
}
[popover]:popover-open {
    opacity: 1;
    transform: translateY(0);
}
@starting-style {
    [popover]:popover-open {
        opacity: 0;
        transform: translateY(-4px);
    }
}
[popover]::backdrop {
    background: transparent;
}

/* ─── Anchor positioning ────────────────────────────────────────────────
   Tooltips/popovers anchored to a trigger without JS positioning.
   Trigger: anchor-name: --my-anchor; Popover: position-anchor: --my-anchor; */
@supports (anchor-name: --x) {
    .dn-anchor-tooltip {
        position-anchor: var(--anchor, --dn-trigger);
        position-area: bottom;
        position-try-fallbacks: top, right, left;
        margin-top: 8px;
    }
}

/* ─── Modern 2026 progressive selectors ─────────────────────────────────
   :user-invalid for forms (only after blur, not on initial render),
   :focus-visible-within for groups. */
input:user-invalid,
textarea:user-invalid,
select:user-invalid {
    border-color: var(--dn-bad);
    background: color-mix(in oklab, var(--dn-bad) 5%, var(--dn-bg-2));
}
input:user-valid,
textarea:user-valid,
select:user-valid {
    border-color: var(--dn-ok);
}

/* ─── Field-sizing for textareas ────────────────────────────────────────
   Textareas auto-grow to content (replaces 30 lines of JS). */
textarea {
    field-sizing: content;
    min-height: 80px;
    max-height: 50vh;
}

/* ─── light-dark() function for tokens that already have theme variants ─
   Single declaration, browser picks light or dark based on color-scheme. */
@supports (color: light-dark(white, black)) {
    :root { color-scheme: light dark; }
    /* Apps opt in via class */
}
