/**
 * TynkTech - Global Website Styles
 * Add this to Builder Settings > Style field
 *
 * These styles apply to ALL Builder pages automatically
 *
 * Fonts (design system): Geist (sans), Geist Mono (eyebrows/meta/numbers),
 * Instrument Serif (the italic "warm word"), Inter (fallback). Loaded via the
 * <head> preload (FONT_PRELOAD_HTML in generate_pages.py) — a non-render-blocking
 * <link rel=preload as=style> promoted to a stylesheet, plus a <noscript>
 * fallback. We deliberately do NOT @import here: an @import in this stylesheet
 * is render-blocking and redundant with the head preload.
 */

/* ============================================
 CSS VARIABLES - Spark Palette
 --------------------------------------------
 Brand idea: TynkTech = pril (fresh / budding) + prikkel (spark).
 One vivid lime carries the whole brand; everything else is
 restrained — ink, warm paper, pencil grey, monospace meta.
 Surface mode B (default): white page, cream cards.
 Legacy alias names (--color-primary/secondary/...) are kept and
 remapped to the new tokens so existing pages shift automatically.
 ============================================ */
:root {
 /* Ink — the dark, ink-rich neutral. NOT slate. */
 --color-ink: #0a0a0a;
 --color-ink-soft: #1a1a1a;
 --color-ink-warm: #2a2725;

 /* Spark — vivid lime, the only saturated brand colour */
 --color-spark: #c4ff34; /* on dark, as BG, as dot */
 --color-spark-deep: #6b8f00; /* readable spark for text on light */
 --color-spark-soft: #e8ffaf; /* fills, soft callout bg, status pills */
 --color-spark-pulse: #a8e51a; /* darker spark for hover */

 /* Paper — warm cream surface family */
 --color-paper: #fafaf5;
 --color-paper-alt: #f2f2eb;
 --color-paper-warm: #ebebe2;

 /* Pencil — warm greys for body / muted copy */
 --color-pencil: #5a5a55;
 --color-pencil-2: #8a8a82;
 --color-pencil-3: #a8a8a0;

 /* Lines */
 --color-line: #e6e6df;

 /* ----- Legacy aliases — map old tokens to Spark ----- */
 --color-primary: var(--color-ink);
 --color-primary-dark: #000000;
 --color-primary-light: var(--color-ink-soft);
 --color-secondary: var(--color-spark);
 --color-secondary-light: var(--color-spark-soft);
 --color-accent: var(--color-spark-deep);
 --color-accent-hover: #4a6500;
 --color-text: var(--color-pencil);
 --color-muted: var(--color-pencil-2);
 --color-dark: var(--color-ink);
 --color-white: #ffffff;
 --color-light: var(--color-paper);
 --color-light-alt: var(--color-paper-alt);
 --color-border: var(--color-line);
 --color-border-alpha: rgba(10, 10, 10, 0.08);
 --color-border-input: rgba(10, 10, 10, 0.16);

 /* Shadows — warm-shifted toward ink */
 --shadow-card: 0 4px 20px rgba(10, 10, 10, 0.04);
 --shadow-card-hover: 0 8px 30px rgba(10, 10, 10, 0.08);
 --shadow-spark: 0 0 0 4px rgba(196, 255, 52, 0.30);

 /* Spacing Scale */
 --space-xs: 8px;
 --space-sm: 12px;
 --space-md: 16px;
 --space-lg: 24px;
 --space-xl: 32px;
 --space-2xl: 48px;
 --space-3xl: 64px;
 --space-4xl: 80px;
 --space-5xl: 120px;

 /* Border Radius — flatter, more editorial */
 --radius-sm: 3px;
 --radius-md: 6px;
 --radius-lg: 10px;
 --radius-xl: 14px;
 --radius-2xl: 20px;
 --radius-full: 50px;

 /* Typography — Geist (sans), Instrument Serif (warm word), Geist Mono (meta) */
 --font-family: 'Geist', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
 --font-sans: 'Geist', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
 --font-mono: 'Geist Mono', ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, Consolas, monospace;
 --font-serif: 'Instrument Serif', ui-serif, Georgia, serif;
}

/* Apply Geist to the page body so every Builder page picks up the brand sans */
body {
 font-family: var(--font-sans);
 letter-spacing: -0.005em;
}

/* ============================================
 BLOG CONTENT TYPOGRAPHY
 ============================================ */
.blog-content,
article.blog-content {
 font-size: 17px;
 line-height: 1.9;
 color: var(--color-text);
}

/* Headings */
.blog-content h1,
.blog-content h2,
.blog-content h3,
.blog-content h4,
.blog-content h5,
.blog-content h6 {
 color: var(--color-primary);
 font-weight: 600;
 line-height: 1.3;
 margin-top: 48px;
 margin-bottom: 20px;
}

.blog-content h1 { font-size: 28px; }
.blog-content h2 {
 font-size: 24px;
 border-bottom: 1px solid var(--color-border);
 padding-bottom: 12px;
}
.blog-content h3 { font-size: 20px; }
.blog-content h4 { font-size: 18px; }
.blog-content h5,
.blog-content h6 { font-size: 16px; }

/* First heading - no top margin */
.blog-content > h1:first-child,
.blog-content > h2:first-child,
.blog-content > h3:first-child {
 margin-top: 0;
}

/* Paragraphs */
.blog-content p {
 margin: 0 0 24px 0;
}

/* Lists */
.blog-content ul,
.blog-content ol {
 margin: 0 0 24px 0;
 padding-left: 32px;
}

.blog-content li {
 margin-bottom: 12px;
 line-height: 1.8;
}

.blog-content ul { list-style-type: disc; }
.blog-content ol { list-style-type: decimal; }

/* Links */
.blog-content a {
 color: var(--color-accent);
 text-decoration: underline;
 text-underline-offset: 2px;
}

.blog-content a:hover {
 color: var(--color-accent-hover);
}

/* Images */
.blog-content img {
 max-width: 100%;
 height: auto;
 border-radius: var(--radius-md);
 margin: 32px auto;
 display: block;
}

/* Blockquotes */
.blog-content blockquote {
 border-left: 4px solid var(--color-primary);
 padding: 16px 24px;
 margin: 32px 0;
 background: var(--color-light);
 color: var(--color-muted);
 font-style: italic;
}

.blog-content blockquote p {
 margin: 0;
}

/* Code */
.blog-content code {
 background: var(--color-light-alt);
 padding: 3px 8px;
 border-radius: var(--radius-sm);
 font-size: 0.9em;
 font-family: 'SF Mono', Monaco, Consolas, monospace;
 color: #334155;
}

.blog-content pre {
 background: var(--color-primary-light);
 color: #e2e8f0;
 padding: 24px;
 border-radius: var(--radius-md);
 overflow-x: auto;
 margin: 32px 0;
 font-size: 14px;
 line-height: 1.6;
}

.blog-content pre code {
 background: none;
 padding: 0;
 color: inherit;
}

/* Tables */
.blog-content table {
 width: 100%;
 border-collapse: collapse;
 margin: 32px 0;
 font-size: 15px;
 border: 1px solid var(--color-border);
 border-radius: var(--radius-md);
 overflow: hidden;
}

.blog-content th,
.blog-content td {
 padding: 14px 16px;
 text-align: left;
 border-bottom: 1px solid var(--color-border);
}

.blog-content th {
 font-weight: 600;
 color: var(--color-primary);
 background: var(--color-light);
}

.blog-content tr:last-child td {
 border-bottom: none;
}

/* Horizontal rule */
.blog-content hr {
 border: none;
 border-top: 1px solid var(--color-border);
 margin: 48px 0;
}

/* Strong/Bold */
.blog-content strong,
.blog-content b {
 font-weight: 600;
 color: var(--color-primary);
}

/* ============================================
 UTILITY CLASSES
 ============================================ */

/* Transitions */
.transition-smooth {
 transition: all 0.2s ease;
}

.transition-color {
 transition: color 0.2s ease;
}

.transition-opacity {
 transition: opacity 0.2s ease;
}

.transition-opacity:hover {
 opacity: 0.7;
}

/* Hover Effects */
.hover-lift:hover {
 transform: translateY(-2px);
}

.hover-shadow:hover {
 box-shadow: var(--shadow-card-hover);
}

/* Card Base */
.card-base {
 background: var(--color-white);
 border-radius: var(--radius-xl);
 border: 1px solid var(--color-border-alpha);
 box-shadow: var(--shadow-card);
}

/* Card with hover effects */
.card-hover {
 background: var(--color-white);
 border-radius: var(--radius-xl);
 border: 1px solid var(--color-border);
 transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.card-hover:hover {
 transform: translateY(-6px);
 box-shadow: 0 20px 40px -12px rgba(0, 0, 0, 0.1);
 border-color: #cbd5e1;
}

/* Blog/Featured card style */
.card-blog {
 display: block;
 background: var(--color-white);
 border-radius: var(--radius-2xl);
 border: 1px solid var(--color-border);
 overflow: hidden;
 text-decoration: none;
 transition: all 0.2s ease;
}

.card-blog:hover {
 border-color: #d1d5db;
 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
}

/* Blog card category - green uppercase */
.blog-card-category {
 display: block;
 font-size: 12px;
 font-weight: 600;
 color: var(--color-secondary) !important;
 text-transform: uppercase;
 letter-spacing: 0.05em;
 margin-bottom: 12px;
}

/* Blog card title - bold */
.blog-card-title {
 font-size: 18px;
 font-weight: 700 !important;
 color: var(--color-primary);
 margin: 0 0 12px 0;
 line-height: 1.3;
 display: -webkit-box;
 -webkit-line-clamp: 2;
 -webkit-box-orient: vertical;
 overflow: hidden;
}

/* Blog card intro text */
.blog-card-intro {
 font-size: 14px;
 color: var(--color-muted);
 margin: 0 0 16px 0;
 line-height: 1.5;
 display: -webkit-box;
 -webkit-line-clamp: 2;
 -webkit-box-orient: vertical;
 overflow: hidden;
}

/* Blog card date */
.blog-card-date {
 font-size: 13px;
 color: #9ca3af;
}

/* Featured blog card (larger) */
.blog-card-title-lg {
 font-size: 20px;
 font-weight: 700 !important;
 color: var(--color-primary);
 margin: 0 0 12px 0;
 line-height: 1.3;
}

.blog-card-intro-lg {
 font-size: 15px;
 color: var(--color-muted);
 margin: 0 0 16px 0;
 line-height: 1.5;
 display: -webkit-box;
 -webkit-line-clamp: 3;
 -webkit-box-orient: vertical;
 overflow: hidden;
}

/* Case study card */
.card-case-study {
 background: var(--color-white);
 border-radius: var(--radius-2xl);
 border: 1px solid var(--color-border);
 padding: 48px;
}

@media (max-width: 768px) {
 .card-case-study {
 padding: 28px;
 }
}

/* Eyebrow Label — Spark pill (lime bg, ink text, mono caps, leading spark dot) */
.eyebrow {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 font-family: var(--font-mono);
 font-size: 11px;
 font-weight: 700;
 color: var(--color-ink);
 text-transform: uppercase;
 letter-spacing: 0.14em;
 line-height: 1;
 padding: 5px 12px 5px 10px;
 background: var(--color-spark);
 border-radius: var(--radius-full);
 white-space: nowrap;
}
.eyebrow::before {
 content: '';
 width: 11px;
 height: 11px;
 background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20d='M12,0L13.5,9.5L24,12L13.5,14.5L12,24L10.5,14.5L0,12L10.5,9.5Z'%20fill='%230a0a0a'/%3E%3C/svg%3E") center / contain no-repeat;
 display: inline-block;
 flex-shrink: 0;
}

/* Eyebrow variant for dark backgrounds — ink pill, lime text + dot */
.eyebrow-light {
 display: inline-flex;
 align-items: center;
 gap: 8px;
 font-family: var(--font-mono);
 font-size: 11px;
 font-weight: 700;
 color: var(--color-spark);
 text-transform: uppercase;
 letter-spacing: 0.14em;
 line-height: 1;
 padding: 5px 12px 5px 10px;
 background: var(--color-ink);
 border-radius: var(--radius-full);
 white-space: nowrap;
}
.eyebrow-light::before {
 content: '';
 width: 11px;
 height: 11px;
 background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20d='M12,0L13.5,9.5L24,12L13.5,14.5L12,24L10.5,14.5L0,12L10.5,9.5Z'%20fill='%23c4ff34'/%3E%3C/svg%3E") center / contain no-repeat;
 display: inline-block;
 flex-shrink: 0;
}

/* Muted section label (The Challenge, Our Solution, etc.) */
.label-muted {
 font-size: 14px;
 font-weight: 600;
 color: #94a3b8;
 text-transform: uppercase;
 letter-spacing: 0.08em;
}

/* Small tag/badge */
.tag {
 display: inline-block;
 font-size: 12px;
 font-weight: 700;
 color: var(--color-primary);
 text-transform: uppercase;
 letter-spacing: 0.08em;
 padding: 6px 12px;
 background: var(--color-border-alpha);
 border-radius: var(--radius-sm);
}

/* Category tag (muted style) */
.tag-muted {
 display: inline-block;
 font-size: 13px;
 font-weight: 500;
 color: var(--color-muted);
 text-transform: uppercase;
 letter-spacing: 0.05em;
}

/* Container */
.container-lg {
 max-width: 1280px;
 margin: 0 auto;
 padding: 0 56px;
}

.container-md {
 max-width: 1100px;
 margin: 0 auto;
 padding: 0 56px;
}

.container-sm {
 max-width: 800px;
 margin: 0 auto;
 padding: 0 56px;
}

/* ============================================
 ANIMATIONS
 ============================================ */

/* Marquee for logo carousel */
@keyframes marquee {
 0% { transform: translateX(0); }
 100% { transform: translateX(-50%); }
}

.animate-marquee {
 animation: marquee 30s linear infinite;
}

/* Fade In */
@keyframes fadeIn {
 from { opacity: 0; transform: translateY(10px); }
 to { opacity: 1; transform: translateY(0); }
}

.animate-fade-in {
 animation: fadeIn 0.3s ease-out;
}

/* ============================================
 FORM ELEMENTS
 ============================================ */

.form-input {
 width: 100%;
 padding: 14px 16px;
 font-size: 15px;
 border: 1px solid var(--color-border-input);
 border-radius: 10px;
 background: var(--color-white);
 color: var(--color-dark);
 box-sizing: border-box;
 transition: border-color 0.2s ease;
 outline: none;
}

.form-input:focus {
 border-color: var(--color-primary);
}

.form-input::placeholder {
 color: var(--color-muted);
}

.form-label {
 display: block;
 font-size: 14px;
 font-weight: 500;
 color: var(--color-dark);
 margin-bottom: 8px;
}

/* ============================================
 BUTTONS
 ============================================ */

.btn-primary {
 display: inline-flex;
 align-items: center;
 justify-content: center;
 padding: 16px 32px;
 font-size: 15px;
 font-weight: 600;
 color: var(--color-white);
 background: var(--color-primary);
 border: none;
 border-radius: var(--radius-full);
 cursor: pointer;
 transition: all 0.2s ease;
 text-decoration: none;
}

.btn-primary:hover {
 background: var(--color-primary-light);
 transform: translateY(-1px);
}

.btn-secondary {
 display: inline-flex;
 align-items: center;
 justify-content: center;
 padding: 16px 32px;
 font-size: 15px;
 font-weight: 600;
 color: var(--color-primary);
 background: transparent;
 border: 1px solid var(--color-border);
 border-radius: var(--radius-full);
 cursor: pointer;
 transition: all 0.2s ease;
 text-decoration: none;
}

.btn-secondary:hover {
 border-color: var(--color-primary);
}

/* Filter/Pill button */
.btn-filter {
 padding: 10px 20px;
 font-size: 13px;
 font-weight: 500;
 color: #374151;
 background: var(--color-white);
 border: 1px solid var(--color-border);
 border-radius: var(--radius-full);
 cursor: pointer;
 transition: all 0.2s ease;
 text-transform: uppercase;
 letter-spacing: 0.05em;
 outline: none;
}

.btn-filter:hover {
 background: var(--color-light-alt);
 border-color: #d1d5db;
}

.btn-filter.active {
 background: var(--color-primary);
 color: var(--color-white);
 border-color: var(--color-primary);
}

@media (max-width: 768px) {
 .btn-filter {
 padding: 8px 16px;
 font-size: 12px;
 }
}

/* Read article button style */
.btn-read {
 display: block;
 width: 100%;
 padding: 12px 0;
 text-align: center;
 font-size: 14px;
 font-weight: 500;
 color: var(--color-primary);
 border: 1px solid var(--color-border);
 border-radius: var(--radius-md);
 transition: all 0.2s ease;
}

.card-blog:hover .btn-read {
 background: var(--color-light);
}

/* ============================================
 POLICY PAGE ELEMENTS
 ============================================ */

/* Info card (gray background box) */
.info-card {
 padding: 24px;
 background: var(--color-light);
 border-radius: var(--radius-lg);
 margin: 16px 0;
}

.info-card-title {
 font-size: 18px;
 font-weight: 600;
 color: var(--color-primary);
 margin: 0 0 16px 0;
}

/* Callout boxes */
.callout {
 padding: 16px;
 border-radius: var(--radius-md);
 margin: 16px 0;
 border-left: 4px solid;
}

.callout-info {
 background: #f0f9ff;
 border-left-color: #0ea5e9;
}

.callout-warning {
 background: #fef3c7;
 border-left-color: #f59e0b;
}

.callout-success {
 background: #f0fdf4;
 border-left-color: #22c55e;
}

.callout-error {
 background: #fef2f2;
 border-left-color: #ef4444;
}

.callout-blue {
 background: #eff6ff;
 border-left-color: #3b82f6;
}

/* Juridisch basis cards */
.legal-basis-card {
 padding: 16px;
 background: var(--color-light);
 border-radius: var(--radius-md);
 margin-bottom: 12px;
 border-left: 4px solid var(--color-border);
}

.legal-basis-card.consent { border-left-color: #22c55e; background: #f0fdf4; }
.legal-basis-card.contract { border-left-color: #3b82f6; background: #eff6ff; }
.legal-basis-card.legitimate { border-left-color: #f59e0b; background: #fffbeb; }
.legal-basis-card.legal { border-left-color: #ef4444; background: #fef2f2; }

/* Rights card (for GDPR rights) */
.rights-card {
 padding: 20px;
 background: var(--color-light);
 border-radius: var(--radius-md);
 margin-bottom: 12px;
}

.rights-card-title {
 font-weight: 600;
 color: var(--color-primary);
 margin: 0 0 8px 0;
}

.rights-card-desc {
 margin: 0;
 color: var(--color-muted);
}

/* Data table */
.data-table {
 width: 100%;
 border-collapse: collapse;
 margin: 16px 0;
}

.data-table th,
.data-table td {
 padding: 12px 16px;
 text-align: left;
 border-bottom: 1px solid var(--color-border);
}

.data-table th {
 background: var(--color-light);
 font-weight: 600;
 color: var(--color-primary);
 border-bottom-width: 2px;
}

.data-table tr:last-child td {
 border-bottom: none;
}

/* Info table (label-value pairs) */
.info-table {
 width: 100%;
 border-collapse: collapse;
}

.info-table td {
 padding: 8px 0;
}

.info-table .label {
 color: var(--color-muted);
 width: 200px;
}

/* Policy list styling */
.policy-list {
 margin: 16px 0;
 padding-left: 24px;
}

.policy-list li {
 margin-bottom: 8px;
 line-height: 1.6;
}

.policy-list.spaced li {
 margin-bottom: 12px;
}

/* Security grid */
.security-grid {
 display: grid;
 grid-template-columns: repeat(2, 1fr);
 gap: 16px;
 margin: 20px 0;
}

@media (max-width: 768px) {
 .security-grid {
 grid-template-columns: 1fr;
 }
}

.security-card {
 padding: 16px;
 background: var(--color-light);
 border-radius: var(--radius-md);
}

.security-card-title {
 font-weight: 600;
 margin: 0 0 8px 0;
}

.security-card ul {
 margin: 0;
 padding-left: 20px;
 color: var(--color-muted);
}

/* Policy section title (subsection heading) */
.policy-section-title {
 margin-top: 20px;
 font-weight: 600;
 color: var(--color-primary);
}

/* Policy meta info (last updated, version) */
.policy-meta {
 margin-top: 16px;
 color: var(--color-muted);
 font-size: 14px;
}

.policy-meta + .policy-meta {
 margin-top: 0;
}

/* Rights grid (GDPR rights cards) */
.rights-grid {
 margin: 20px 0;
 display: grid;
 gap: 12px;
}

/* Juridisch basis grid */
.legal-basis-grid {
 margin: 20px 0;
}

/* Contact card (at end of policy pages) */
.contact-card {
 margin-top: 16px;
 padding: 24px;
 background: var(--color-light);
 border-radius: var(--radius-lg);
}

.contact-card-title {
 font-weight: 600;
 color: var(--color-primary);
 margin: 0 0 16px 0;
}

.contact-card-body {
 margin: 0;
}

.contact-card-body a {
 color: var(--color-accent);
}

/* Note/warning box styling */
.note-box {
 margin-top: 16px;
 padding: 16px;
 background: #fef3c7;
 border-radius: var(--radius-md);
 border-left: 4px solid #f59e0b;
}

/* Link styling in policy pages */
.policy-link {
 color: var(--color-accent);
}

/* Spacing utilities for policy pages */
.policy-mt-sm { margin-top: 12px; }
.policy-mt-md { margin-top: 16px; }
.policy-mt-lg { margin-top: 20px; }

/* Required field indicator */
.required-indicator {
 color: #ef4444;
}

/* Feature tag (solutions page) */
.feature-tag {
 display: inline-block;
 padding: 4px 10px;
 background: var(--color-light-alt);
 border-radius: var(--radius-sm);
 font-size: 12px;
 color: var(--color-text);
 margin: 4px 4px 4px 0;
}

/* Impressum page specific */
.imprint-title {
 font-size: 22px;
}

.imprint-address {
 line-height: 1.8;
 font-size: 16px;
}

/* ============================================
 LANGUAGE SWITCHER
 ============================================ */

.lang-switcher {
 display: flex;
 align-items: center;
 gap: 4px;
 margin-left: 16px;
}

.lang-switcher a {
 display: inline-flex;
 align-items: center;
 justify-content: center;
 width: 32px;
 height: 32px;
 font-size: 12px;
 font-weight: 600;
 color: var(--color-muted);
 text-decoration: none;
 border-radius: var(--radius-sm);
 text-transform: uppercase;
 transition: all 0.2s ease;
}

.lang-switcher a:hover {
 color: var(--color-primary);
 background: var(--color-light-alt);
}

.lang-switcher a.active {
 color: var(--color-white);
 background: var(--color-primary);
}

@media (max-width: 768px) {
 .lang-switcher {
 position: absolute;
 right: 70px;
 top: 50%;
 transform: translateY(-50%);
 }
}

/* ============================================
 MOBILE RESPONSIVE
 ============================================ */

@media (max-width: 768px) {
 .blog-content {
 font-size: 16px;
 line-height: 1.8;
 }

 .blog-content h1 { font-size: 24px; }
 .blog-content h2 { font-size: 21px; }
 .blog-content h3 { font-size: 18px; }

 .blog-content h1,
 .blog-content h2,
 .blog-content h3 {
 margin-top: 36px;
 margin-bottom: 16px;
 }

 .blog-content pre {
 padding: 16px;
 font-size: 13px;
 }

 .container-lg,
 .container-md,
 .container-sm {
 padding: 0 24px;
 }
}

@media (max-width: 1024px) {
 .container-lg,
 .container-md,
 .container-sm {
 padding: 0 40px;
 }
}

/* ============================================================
 Typography accents — adds editorial contrast to the otherwise
 monoline system sans. Use sparingly: one quote per long page,
 .mono on the wordmark and on inline IDs/code references.
 ============================================================ */

.mono {
 font-family: var(--font-mono);
 letter-spacing: 0;
}

.editorial-quote {
 font-family: var(--font-serif);
 font-style: italic;
 font-weight: 400;
 font-size: 28px;
 line-height: 1.3;
 color: var(--color-ink);
 border-left: 2px solid var(--color-spark);
 padding: 4px 0 4px 22px;
 margin: 0;
}

@media (max-width: 768px) {
 .editorial-quote {
 font-size: 20px;
 padding-left: 18px;
 }
}

/* ============================================================
 SPARK BRAND ELEMENTS
 ============================================================ */

/* The "warm word" — italic serif accent (use sparingly, one per headline) */
.warm {
 font-family: var(--font-serif);
 font-style: italic;
 font-weight: 400;
 color: var(--color-spark-deep);
 letter-spacing: -0.02em;
}

/* Top-level nav links — spark-deep underline reveal on hover */
.TynkTech-nav-link {
 position: relative;
 text-decoration: none;
 transition: color 0.18s ease;
}
.TynkTech-nav-link::after {
 content: "";
 position: absolute;
 left: 0;
 right: 0;
 bottom: -4px;
 height: 1.5px;
 background: var(--color-spark-deep);
 transform: scaleX(0);
 transform-origin: left center;
 transition: transform 0.28s cubic-bezier(0.4, 0, 0.2, 1);
}
.TynkTech-nav-link:hover { color: var(--color-ink) !important; }
.TynkTech-nav-link:hover::after { transform: scaleX(1); }

/* Mega-menu trigger: shares the underline reveal, plus an active (open) state */
.TynkTech-mega-trigger { position: relative; }
.TynkTech-nav-link.active,
.TynkTech-mega-trigger.active { color: var(--color-ink) !important; }
.TynkTech-mega-trigger.active::after { transform: scaleX(1); }
.TynkTech-mega-trigger .caret { transition: transform 0.22s ease; }
.TynkTech-mega-trigger.active .caret { transform: rotate(180deg); }

/* Mega panel: hidden by default, shown via .open (JS-toggled) */
.TynkTech-mega-panel { display: none; }
.TynkTech-mega-panel.open { display: flex; animation: TynkTech-mega-in 0.18s ease-out; }
.TynkTech-mega-item:hover { background: var(--color-paper) !important; }
.TynkTech-mega-icon { background: var(--color-paper-alt); color: var(--color-pencil); transition: all 0.15s ease; }
.TynkTech-mega-item:hover .TynkTech-mega-icon { background: var(--color-ink); color: var(--color-spark); }
.TynkTech-mega-item .mega-arrow { opacity: 0; transition: opacity 0.15s ease; }
.TynkTech-mega-item:hover .mega-arrow { opacity: 1; }

@media (max-width: 1024px) {
 .TynkTech-mega-panel { display: none !important; }
}

@keyframes TynkTech-mega-in {
 from { opacity: 0; transform: translateY(-6px); }
 to { opacity: 1; transform: translateY(0); }
}
@keyframes TynkTech-stagger-in {
 from { opacity: 0; transform: translateY(8px); }
 to { opacity: 1; transform: translateY(0); }
}
@keyframes TynkTech-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes TynkTech-draw { to { stroke-dashoffset: 0; } }
@keyframes TynkTech-grow-x { from { transform: scaleX(0); } to { transform: scaleX(1); } }

/* Spark animations */
@keyframes TynkTech-pulse {
 0% { box-shadow: 0 0 0 0 rgba(196, 255, 52, 0.50); }
 70% { box-shadow: 0 0 0 8px rgba(196, 255, 52, 0); }
 100% { box-shadow: 0 0 0 0 rgba(196, 255, 52, 0); }
}
@keyframes TynkTech-spark-pulse {
 0%, 100% { transform: scale(1) rotate(0deg); }
 50% { transform: scale(1.06) rotate(8deg); }
}
@keyframes TynkTech-float {
 0%, 100% { transform: translateY(0); }
 50% { transform: translateY(-6px); }
}

/* ============================================================
 SCROLL MOTION — top-level sections rise + fade in as they
 enter the viewport. Applied by public/js/motion.js (which adds
 .bw-reveal to below-the-fold sections, then .bw-in on entry).
 Sparkline paths (.bw-spark-draw) draw their stroke via JS.
 ============================================================ */
.bw-reveal {
 opacity: 0;
 transform: translateY(26px);
 transition: opacity 0.7s cubic-bezier(0.4, 0, 0.2, 1),
 transform 0.7s cubic-bezier(0.4, 0, 0.2, 1);
 will-change: opacity, transform;
}
.bw-reveal.bw-in {
 opacity: 1;
 transform: none;
}

/* Accessibility: no scroll motion for users who ask for reduced motion. */
@media (prefers-reduced-motion: reduce) {
 .bw-reveal {
 opacity: 1 !important;
 transform: none !important;
 transition: none !important;
 }
}

/* ============================================================
 RICH-TEXT BODY — restore paragraph rhythm inside content
 blocks whose innerHTML is several <p>s. Builder's reset.css
 zeroes <p> margins, which collapses paragraphs into one wall
 of text. Apply via classes:["bw-prose"] on the body block.
 ============================================================ */
.bw-prose > p {
 margin: 0 0 20px 0;
}
.bw-prose > p:last-child {
 margin-bottom: 0;
}
.bw-prose strong {
 font-weight: 600;
 color: var(--color-ink);
}

/* === DIA CALM LOOK-AND-FEEL (2026-06-18) === */
/* Light, editorial headings site-wide. Page headings set weight inline (e.g. 800),
 so these rules use !important to override. Serif "warm word" accents stay per-page. */
h1, h2 { font-weight: 300 !important; }
h3, h4 { font-weight: 400 !important; }
/* === END DIA CALM === */
