/* Skolshield Front — the site stylesheet.

   Rewritten 2026-10-26 ("quiet editorial"): a token layer first, Bootstrap
   recoloured through its own CSS variables, then a small set of primitives
   (page-head, section, band, eyebrow, figure, tile, feature-grid, bento,
   cta-block, chip) that every page is built from. Page-specific rules follow,
   and a COMPAT block at the end keeps the pages not yet rebuilt on the
   primitives presentable; each later PR deletes the part it retires.

   Rules of the file: one accent, two radii, two shadows, one dark (the navy
   band, reserved for the films). Colours are tokens, never hex, outside the
   token block and the SVG palette. */

/* ============ 1. Fonts (self-hosted; no third-party request) ============ */
@font-face {
    font-family: "Inter";
    src: url("../fonts/InterVariable.cd5ff82829ea.woff2") format("woff2");
    font-weight: 100 900;
    font-style: normal;
    font-display: swap;
}
@font-face {
    font-family: "Inter";
    src: url("../fonts/InterVariable-Italic.118c1a0aaa89.woff2") format("woff2");
    font-weight: 100 900;
    font-style: italic;
    font-display: swap;
}

/* ============ 2. Tokens ============ */
:root {
    --ss-font: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

    --ss-blue: #1d4ed8;
    --ss-blue-rgb: 29, 78, 216;
    --ss-blue-deep: #1e40af;
    --ss-blue-tint: #e8eefb;
    --ss-blue-line: #b9c9f3;

    --ss-bg: #faf9f7;
    --ss-surface: #ffffff;
    --ss-surface-2: #f3f1ec;
    --ss-ink: #1c2230;
    --ss-ink-2: #5a6372;
    --ss-ink-3: #8a919c;
    --ss-line: #e5e1da;
    --ss-line-strong: #cfc9bf;

    --ss-navy: #0b1a33;
    --ss-navy-2: #12264a;
    --ss-on-navy: #dbe3f0;
    --ss-on-navy-2: #9fb0cc;

    --ss-ok: #157347;
    --ss-ok-tint: #e6f4ec;
    --ss-warn: #b45309;
    --ss-warn-tint: #fdf3e3;
    --ss-mask: #c8552a;

    --radius-sm: 0.5rem;
    --radius: 1rem;
    --shadow-sm: 0 1px 2px rgba(28, 34, 48, 0.06);
    --shadow: 0 1px 2px rgba(28, 34, 48, 0.05), 0 16px 40px -12px rgba(28, 34, 48, 0.14);

    --space-section: clamp(3.5rem, 2.5rem + 4vw, 6.5rem);
    --space-section-sm: clamp(2.5rem, 2rem + 2vw, 4rem);
    --space-head: clamp(3rem, 2rem + 3vw, 5rem);
    --space-stack: 1.5rem;

    /* ---- Bootstrap, retargeted at the tokens ---- */
    --bs-body-font-family: var(--ss-font);
    --bs-body-bg: var(--ss-bg);
    --bs-body-color: var(--ss-ink);
    --bs-body-line-height: 1.6;
    --bs-heading-color: var(--ss-ink);
    --bs-secondary-color: var(--ss-ink-2);
    --bs-tertiary-color: var(--ss-ink-3);
    --bs-primary: var(--ss-blue);
    --bs-primary-rgb: var(--ss-blue-rgb);
    --bs-primary-bg-subtle: var(--ss-blue-tint);
    --bs-primary-border-subtle: var(--ss-blue-line);
    --bs-primary-text-emphasis: var(--ss-blue-deep);
    --bs-link-color: var(--ss-blue);
    --bs-link-color-rgb: var(--ss-blue-rgb);
    --bs-link-hover-color: var(--ss-blue-deep);
    --bs-link-hover-color-rgb: 30, 64, 175;
    --bs-border-color: var(--ss-line);
    --bs-light-rgb: 243, 241, 236;
    --bs-border-radius: var(--radius-sm);
    --bs-border-radius-sm: 0.375rem;
    --bs-border-radius-lg: 0.75rem;
    --bs-border-radius-xl: var(--radius);
    --bs-border-radius-xxl: var(--radius);
    --bs-box-shadow-sm: var(--shadow-sm);
    --bs-box-shadow: var(--shadow);
    --bs-box-shadow-lg: var(--shadow);
    --bs-focus-ring-color: rgba(var(--ss-blue-rgb), 0.25);
}

html { font-optical-sizing: auto; }
body { -webkit-font-smoothing: antialiased; }

/* ============ 3. Bootstrap components that hard-code the old blue ============ */
.btn {
    --bs-btn-font-weight: 600;
    --bs-btn-border-radius: var(--radius-sm);
    --bs-btn-padding-x: 1.1rem;
    --bs-btn-padding-y: 0.55rem;
}
.btn-lg {
    --bs-btn-padding-x: 1.4rem;
    --bs-btn-padding-y: 0.75rem;
    --bs-btn-font-size: 1.0625rem;
    --bs-btn-border-radius: var(--radius-sm);
}
.btn-sm {
    --bs-btn-padding-x: 0.8rem;
    --bs-btn-padding-y: 0.35rem;
    --bs-btn-border-radius: 0.375rem;
}
.btn-primary {
    --bs-btn-bg: var(--ss-blue);
    --bs-btn-border-color: var(--ss-blue);
    --bs-btn-hover-bg: var(--ss-blue-deep);
    --bs-btn-hover-border-color: var(--ss-blue-deep);
    --bs-btn-active-bg: var(--ss-blue-deep);
    --bs-btn-active-border-color: var(--ss-blue-deep);
    --bs-btn-disabled-bg: var(--ss-blue);
    --bs-btn-disabled-border-color: var(--ss-blue);
    --bs-btn-focus-shadow-rgb: var(--ss-blue-rgb);
}
.btn-outline-primary {
    --bs-btn-color: var(--ss-blue);
    --bs-btn-border-color: var(--ss-blue-line);
    --bs-btn-hover-bg: var(--ss-blue-tint);
    --bs-btn-hover-color: var(--ss-blue-deep);
    --bs-btn-hover-border-color: var(--ss-blue);
    --bs-btn-active-bg: var(--ss-blue);
    --bs-btn-active-border-color: var(--ss-blue);
    --bs-btn-disabled-color: var(--ss-blue);
    --bs-btn-disabled-border-color: var(--ss-blue-line);
    --bs-btn-focus-shadow-rgb: var(--ss-blue-rgb);
}
.form-control, .form-select {
    border-color: var(--ss-line-strong);
}
.form-control:focus, .form-select:focus {
    border-color: var(--ss-blue-line);
    box-shadow: 0 0 0 0.25rem rgba(var(--ss-blue-rgb), 0.18);
}
.form-check-input:checked {
    background-color: var(--ss-blue);
    border-color: var(--ss-blue);
}
.form-check-input:focus {
    border-color: var(--ss-blue-line);
    box-shadow: 0 0 0 0.25rem rgba(var(--ss-blue-rgb), 0.18);
}
.form-range::-webkit-slider-thumb { background-color: var(--ss-blue); }
.form-range::-moz-range-thumb { background-color: var(--ss-blue); }
.accordion {
    --bs-accordion-border-color: var(--ss-line);
    --bs-accordion-border-radius: var(--radius);
    --bs-accordion-inner-border-radius: calc(var(--radius) - 1px);
    --bs-accordion-bg: var(--ss-surface);
    --bs-accordion-active-bg: var(--ss-surface);
    --bs-accordion-active-color: var(--ss-ink);
    --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--ss-blue-rgb), 0.18);
    --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%231d4ed8'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
}
.dropdown-menu {
    --bs-dropdown-border-color: var(--ss-line);
    --bs-dropdown-border-radius: var(--radius-sm);
    --bs-dropdown-link-active-bg: var(--ss-blue);
    --bs-dropdown-link-hover-bg: var(--ss-surface-2);
    --bs-dropdown-box-shadow: var(--shadow);
    box-shadow: var(--shadow);
}
.card {
    --bs-card-border-color: var(--ss-line);
    --bs-card-border-radius: var(--radius);
    --bs-card-inner-border-radius: calc(var(--radius) - 1px);
    --bs-card-bg: var(--ss-surface);
}
.badge { font-weight: 600; }
.table { --bs-table-border-color: var(--ss-line); }
.alert-primary {
    --bs-alert-bg: var(--ss-blue-tint);
    --bs-alert-border-color: var(--ss-blue-line);
    --bs-alert-color: var(--ss-blue-deep);
}
hr { border-color: var(--ss-line); opacity: 1; }

/* ============ 4. Type ============ */
h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {
    font-weight: 700;
    color: var(--ss-ink);
}
h1 {
    font-size: clamp(2.25rem, 1.5rem + 2.8vw, 3.75rem);
    line-height: 1.05;
    letter-spacing: -0.025em;
    text-wrap: balance;
}
h2 {
    font-size: clamp(1.75rem, 1.25rem + 1.6vw, 2.5rem);
    line-height: 1.12;
    letter-spacing: -0.02em;
    text-wrap: balance;
}
h3 {
    font-size: clamp(1.25rem, 1.1rem + 0.5vw, 1.5rem);
    line-height: 1.25;
    letter-spacing: -0.01em;
}
h4 { font-size: 1.0625rem; line-height: 1.35; }
h5 { font-size: 1rem; line-height: 1.4; }
.lead {
    font-size: 1.125rem;
    font-weight: 400;
    line-height: 1.6;
    color: var(--ss-ink-2);
}
.prose { max-width: 68ch; }
.prose p, .prose li { color: var(--ss-ink); }
.tabular { font-variant-numeric: tabular-nums; }
small, .small { color: inherit; }
a { text-underline-offset: 0.15em; }

/* ============ 5. Chrome: navbar, footer, language offer ============ */
.site-nav {
    z-index: 1030;
    background: rgba(250, 249, 247, 0.92);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--ss-line);
    padding-top: 0.6rem;
    padding-bottom: 0.6rem;
    --bs-navbar-color: var(--ss-ink-2);
    --bs-navbar-hover-color: var(--ss-ink);
    --bs-navbar-active-color: var(--ss-ink);
    --bs-navbar-brand-color: var(--ss-ink);
    --bs-navbar-brand-hover-color: var(--ss-ink);
    --bs-navbar-toggler-border-color: var(--ss-line-strong);
    --bs-navbar-nav-link-padding-x: 0.7rem;
    transition: transform 0.25s ease, box-shadow 0.25s ease;
    will-change: transform;
}
.site-nav.nav-hidden {
    transform: translateY(-100%);
    box-shadow: none;
}
.site-nav .nav-link { font-weight: 500; }
.navbar-brand {
    font-size: 1.25rem;
    letter-spacing: -0.01em;
}
.navbar-brand .fa-shield-alt { color: var(--ss-blue); }
.site-nav .btn-group .btn { font-weight: 600; }
@media (prefers-reduced-motion: reduce) {
    .site-nav { transition: none; }
}

#lang-offer {
    background: var(--ss-blue-tint);
    border-bottom: 1px solid var(--ss-blue-line);
}

.site-footer {
    background: var(--ss-surface-2);
    border-top: 1px solid var(--ss-line);
    padding: 3rem 0 2rem;
    color: var(--ss-ink-2);
    font-size: 0.925rem;
}
.site-footer h5, .site-footer h6 { color: var(--ss-ink); }
.site-footer h6 {
    font-size: 0.75rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ss-ink-3);
}
.site-footer a {
    color: var(--ss-ink);
    text-decoration: none;
    display: inline-block;
    padding: 0.2rem 0;   /* 24px touch target without moving anything */
}
.site-footer a:hover { color: var(--ss-blue); }
.site-footer .site-footer-meta a { color: var(--ss-ink-2); }
.site-footer hr { border-color: var(--ss-line); }

/* ============ 6. Primitives ============ */

/* Page head: the title block every page opens with. Light, on the canvas. */
.page-head {
    padding: var(--space-head) 0 clamp(2rem, 1.5rem + 2vw, 3.5rem);
}
.page-head--center { text-align: center; }
.page-head h1 { margin-bottom: 1rem; }
.page-head .lead {
    font-size: 1.25rem;
    max-width: 46rem;
}
.page-head--center .lead { margin-left: auto; margin-right: auto; }
.page-head .page-head-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
    margin-top: 1.75rem;
}
.page-head--center .page-head-actions { justify-content: center; }
.page-head .page-head-notes {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 1.25rem;
    margin: 1.25rem 0 0;
    font-size: 0.9rem;
    color: var(--ss-ink-2);
}
.page-head .page-head-notes .fa-check { color: var(--ss-ok); }

/* Section: one block of the page. --alt sits on the second surface. */
.section { padding: var(--space-section) 0; }
.section--tight { padding: var(--space-section-sm) 0; }
.section--alt {
    background: var(--ss-surface-2);
    border-top: 1px solid var(--ss-line);
    border-bottom: 1px solid var(--ss-line);
}
.section--alt + .section--alt { border-top: 0; }
.section-head { margin-bottom: clamp(2rem, 1.5rem + 1.5vw, 3rem); }
.section-head .lead { margin-bottom: 0; }
.section-head--center { text-align: center; }
.section-head--center .lead { margin-left: auto; margin-right: auto; max-width: 44rem; }

/* Band: a section with its own surface. --dark is the navy, films only. */
.band { padding: var(--space-section) 0; }
.band--alt {
    background: var(--ss-surface-2);
    border-top: 1px solid var(--ss-line);
    border-bottom: 1px solid var(--ss-line);
}
.band--dark {
    background: linear-gradient(180deg, var(--ss-navy) 0%, var(--ss-navy-2) 100%);
    color: var(--ss-on-navy);
}
.band--dark h1, .band--dark h2, .band--dark h3, .band--dark h4 { color: #fff; }
.band--dark .lead, .band--dark .text-muted, .band--dark p { color: var(--ss-on-navy); }
.band--dark .eyebrow { color: var(--ss-on-navy-2); }
.band--dark a:not(.btn) { color: #fff; }
.band--dark .btn-outline-primary {
    --bs-btn-color: #fff;
    --bs-btn-border-color: rgba(255, 255, 255, 0.45);
    --bs-btn-hover-bg: rgba(255, 255, 255, 0.1);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-border-color: #fff;
    --bs-btn-active-bg: rgba(255, 255, 255, 0.16);
    --bs-btn-active-border-color: #fff;
    --bs-btn-active-color: #fff;
}

/* Eyebrow: the small label over a heading. */
.eyebrow {
    display: inline-block;
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ss-ink-2);
    margin-bottom: 0.75rem;
}
.eyebrow--accent { color: var(--ss-blue); }
.eyebrow .fa-check { color: var(--ss-ok); }

/* Figure: a screenshot or film on a light surface. --browser adds the bar.
   display: block overrides Bootstrap's own .figure (inline-block), which
   would shrink an aspect-ratio box with absolute children to nothing. */
.figure {
    display: block;
    position: relative;
    margin: 0;
    background: var(--ss-surface);
    border: 1px solid var(--ss-line);
    border-radius: var(--radius);
    box-shadow: var(--shadow);
    overflow: hidden;
}
.figure img, .figure video {
    display: block;
    width: 100%;
    height: auto;
}
.figure a { display: block; }
.figure-bar {
    position: relative;
    display: flex;
    align-items: center;
    gap: 0.4rem;
    min-height: 2.1rem;
    padding: 0.55rem 0.85rem;
    background: var(--ss-surface-2);
    border-bottom: 1px solid var(--ss-line);
}
.figure-bar span {
    width: 0.6rem;
    height: 0.6rem;
    border-radius: 50%;
    background: var(--ss-line-strong);
}
.figure-url {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    background: var(--ss-surface);
    border: 1px solid var(--ss-line);
    border-radius: 50rem;
    color: var(--ss-ink-3);
    font-size: 0.72rem;
    line-height: 1;
    padding: 0.3rem 1rem;
    white-space: nowrap;
}
.figure-url .fa-lock { font-size: 0.6rem; color: var(--ss-ok); }
.figure-caption {
    padding: 0.65rem 0.9rem;
    font-size: 0.85rem;
    color: var(--ss-ink-2);
    background: var(--ss-surface-2);
    border-top: 1px solid var(--ss-line);
}
.figure-label {
    display: block;
    padding: 0.5rem 0.85rem;
    font-size: 0.75rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ss-ink-2);
    background: var(--ss-surface-2);
    border-bottom: 1px solid var(--ss-line);
}
.figure--flat { box-shadow: var(--shadow-sm); }
.figure--compare {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1rem;
}
@media (max-width: 575.98px) {
    .figure--compare { grid-template-columns: 1fr; }
}
.figure-note {
    margin-top: 0.75rem;
    font-size: 0.85rem;
    color: var(--ss-ink-2);
    text-align: center;
}

/* Tile: a bounded block of content. Static unless it is a link. */
.tile {
    position: relative;
    height: 100%;
    padding: 1.5rem;
    background: var(--ss-surface);
    border: 1px solid var(--ss-line);
    border-radius: var(--radius);
}
.tile h3 {
    font-size: 1.125rem;
    line-height: 1.3;
    margin: 0 0 0.5rem;
}
.tile h3:has(+ p) { margin-bottom: 0.5rem; }
.tile p { color: var(--ss-ink-2); margin: 0; }
.tile p + p { margin-top: 0.5rem; }
.tile .eyebrow { margin-bottom: 0.35rem; }
.tile-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: var(--radius-sm);
    background: var(--ss-blue-tint);
    color: var(--ss-blue);
    font-size: 1.05rem;
    margin-bottom: 1rem;
}
.tile--link { transition: border-color 0.15s ease, box-shadow 0.15s ease; }
.tile--link:hover, .tile--link:focus-within {
    border-color: var(--ss-blue-line);
    box-shadow: var(--shadow-sm);
}
.tile-links {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem 1.25rem;
    margin-top: 1rem;
}
.tile-links a { font-weight: 600; text-decoration: none; }
.tile-links a:hover { text-decoration: underline; }
.tile--accent { border-top: 3px solid var(--ss-blue); }

/* Feature grid: unboxed features, icon + h3 + p; a hairline between columns on lg. */
.feature-grid {
    display: grid;
    gap: 2rem 2.5rem;
    grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
}
.feature-grid--2 { grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); }
.feature { min-width: 0; }
.feature-icon {
    color: var(--ss-blue);
    font-size: 1.35rem;
    margin-bottom: 0.9rem;
}
.feature h3 {
    font-size: 1.2rem;
    line-height: 1.3;
    margin-bottom: 0.5rem;
}
.feature p { color: var(--ss-ink-2); }
.feature p:last-child { margin-bottom: 0; }
.feature a { font-weight: 600; text-decoration: none; }
.feature a:hover { text-decoration: underline; }
@media (min-width: 992px) {
    .feature-grid--divided { gap: 0; }
    .feature-grid--divided > .feature { padding: 0 2rem; }
    .feature-grid--divided > .feature:first-child { padding-left: 0; }
    .feature-grid--divided > .feature:last-child { padding-right: 0; }
    .feature-grid--divided > .feature + .feature { border-left: 1px solid var(--ss-line); }
}

/* Bento: the module grid. Two large tiles over four small ones at lg. */
.bento {
    display: grid;
    gap: 1rem;
    grid-template-columns: 1fr;
}
@media (min-width: 768px) {
    .bento { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 992px) {
    .bento { grid-template-columns: repeat(12, 1fr); }
    .bento > * { grid-column: span 3; }
    .bento > .span-2 { grid-column: span 6; }
}
.bento .tile h3 { font-size: 1.0625rem; }
.bento .span-2 h3 { font-size: 1.25rem; }
.bento .tile-icon--warn { background: var(--ss-warn-tint); color: var(--ss-warn); }
.bento .tile-icon--ok { background: var(--ss-ok-tint); color: var(--ss-ok); }

/* CTA block: the closing invitation, on the canvas, hairline above. */
.cta-block {
    padding: var(--space-section) 0;
    border-top: 1px solid var(--ss-line);
    text-align: center;
}
.cta-block h2 { margin-bottom: 1rem; }
.cta-block .lead { max-width: 40rem; margin: 0 auto 1.75rem; }
.cta-block .cta-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.75rem;
}
.cta-block .cta-more {
    margin-top: 1.5rem;
    margin-bottom: 0;
    font-size: 0.925rem;
}
.cta-block .cta-more a { font-weight: 600; text-decoration: none; }
.cta-block .cta-more a:hover { text-decoration: underline; }
.cta-block--card {
    padding: 2rem;
    border: 1px solid var(--ss-line);
    border-radius: var(--radius);
    background: var(--ss-surface);
    text-align: left;
}

/* Stat grid: a row of figures. */
.stat-grid {
    display: grid;
    gap: 1.5rem 2rem;
    grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
    padding: 1.75rem 0;
    border-top: 1px solid var(--ss-line);
    border-bottom: 1px solid var(--ss-line);
}
.stat-value {
    font-size: 1.75rem;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.1;
    color: var(--ss-ink);
    font-variant-numeric: tabular-nums;
}
.stat-grid .stat-label {
    font-size: 0.85rem;
    color: var(--ss-ink-2);
    margin-top: 0.25rem;
}

/* Chips and the segmented control. */
.chip-group {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}
.chip {
    display: inline-block;
    padding: 0.3rem 0.85rem;
    border: 1px solid var(--ss-line-strong);
    border-radius: 50rem;
    background: var(--ss-surface);
    color: var(--ss-ink);
    font-size: 0.85rem;
    font-weight: 600;
    line-height: 1.3;
}
.chip--accent {
    background: var(--ss-blue-tint);
    border-color: var(--ss-blue-line);
    color: var(--ss-blue-deep);
}
.chip--ok {
    background: var(--ss-ok-tint);
    border-color: #bfe5cf;
    color: var(--ss-ok);
}
button.chip { cursor: pointer; transition: border-color 0.15s ease, background 0.15s ease; }
button.chip:hover { border-color: var(--ss-blue); color: var(--ss-blue); }
.chip.is-active, .chip.active {
    background: var(--ss-blue);
    border-color: var(--ss-blue);
    color: #fff;
}
.seg {
    display: inline-flex;
    padding: 0.25rem;
    background: var(--ss-surface-2);
    border: 1px solid var(--ss-line);
    border-radius: 50rem;
}
.seg-btn {
    border: 0;
    background: transparent;
    border-radius: 50rem;
    padding: 0.4rem 1.3rem;
    font-weight: 600;
    color: var(--ss-ink-2);
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease;
}
.seg-btn.active {
    background: var(--ss-blue);
    color: #fff;
}

/* ============ 7. Home ============ */

/* The hero: copy left, the teaser loop in a browser figure right (lg+).
   Below lg the hero is copy only (2026-10-06; a phone cut is still to come)
   and the script loads nothing. The poster <img> is under the <video>, which
   fades in only once it is actually playing. */
.masthead-video .masthead-copy { max-width: 36rem; }
.masthead-media {
    pointer-events: none;
}
.masthead-media-box {
    position: relative;
    aspect-ratio: 16 / 9;
    background: #101828;
}
.masthead-media-box img,
.masthead-media-box video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center top;
}
.masthead-media-box video {
    opacity: 0;
    transition: opacity 0.9s ease;
}
.masthead-media-box video.is-playing { opacity: 1; }
@media (max-width: 991.98px) {
    .masthead-media { display: none; }
    .masthead-video .masthead-copy { max-width: none; }
}
@media (prefers-reduced-motion: reduce) {
    .masthead-media-box video { transition: none; }
}

/* Positioning statement + legend under the schematic */
.schematic-legend { font-size: 0.9rem; color: var(--ss-ink-2); }
.schematic-legend strong { color: var(--ss-ink); }
.schematic-legend .sw {
    display: inline-block;
    width: 0.9rem;
    height: 0.9rem;
    border-radius: 3px;
    vertical-align: -2px;
    margin-right: 0.45rem;
    border: 1px solid var(--ss-line-strong);
}
.schematic-legend .sw--blue { background: rgba(var(--ss-blue-rgb), 0.06); border-color: var(--ss-blue); }
.schematic-legend .sw--care { background: #edf3ef; }
.schematic-legend .sw--dashed { border: 2px dashed var(--ss-ink); }

/* ============ 8. Behaviour rules that are not skin ============ */

/* Bootstrap's .container keeps a fixed 12px side padding, but a .g-5 row sets
   --bs-gutter-x: 3rem and pulls -24px margins, so every g-5 row inside a
   container hangs 12px off each edge and gives phones a horizontal scrollbar.
   Drop the wide gutter below lg. */
@media (max-width: 991.98px) {
    .row.g-5 { --bs-gutter-x: 1.5rem; }
}
/* Bootstrap .badge is nowrap, which is wrong for the sentence-length ones that
   serve as eyebrows on the pages not yet rebuilt; wrap below sm. */
@media (max-width: 575.98px) {
    .badge { white-space: normal; max-width: 100%; }
}

/* ============ 9. Schematic + process map (inline SVGs, home/kommun/product) ============ */
.schematic-frame, .schematic-zoom-body {
    --sch-paper: #ffffff;
    --sch-ink: #1c375e;
    --sch-ink-soft: #5b6b84;
    --sch-navy: #0a1930;
    --sch-blue: var(--ss-blue);
    --sch-blue-soft: #eef2fc;
    --sch-blue-line: #b9c9f3;
    --sch-care: #edf3ef;
    --sch-care-line: #b9cfc3;
    --sch-care-ink: #2f5d50;
    --sch-mask: var(--ss-mask);
    --sch-band-fill: rgba(29, 78, 216, 0.05);
}
.schematic-frame {
    position: relative;
    background: var(--ss-surface);
    border: 1px solid var(--ss-line);
    border-radius: var(--radius);
    padding: 1rem;
    box-shadow: var(--shadow-sm);
}
.schematic-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.schematic-zoom-btn {
    position: absolute;
    right: 0.6rem;
    bottom: 0.6rem;
    z-index: 2;
    border: 1px solid var(--ss-blue-line);
    background: var(--ss-surface);
    color: var(--ss-blue);
    font-size: 0.8rem;
    font-weight: 600;
    border-radius: 50rem;
    padding: 0.3rem 0.75rem;
    box-shadow: var(--shadow-sm);
}
@media (max-width: 767.98px) {
    /* right-edge fade: says "there is more" without hiding the drawing */
    .schematic-frame::after {
        content: "";
        position: absolute;
        top: 1px; right: 1px; bottom: 1px;
        width: 3.5rem;
        border-radius: 0 var(--radius) var(--radius) 0;
        background: linear-gradient(90deg, rgba(255, 255, 255, 0), #fff 80%);
        pointer-events: none;
    }
    .schematic-scroll svg { cursor: zoom-in; }
}
/* Fullscreen overlay: the SVG at full width, scroll both ways, pinch to zoom */
.schematic-zoom {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 2000;
    background: var(--ss-navy);
    overflow: auto;
    -webkit-overflow-scrolling: touch;
    padding: 3.25rem 1rem 1.5rem;
}
.schematic-zoom.open { display: block; }
.schematic-zoom-body {
    width: 1180px;
    background: #fff;
    border-radius: 8px;
    padding: 12px;
}
.schematic-zoom-body svg { display: block; width: 1180px; min-width: 0; height: auto; }
.schematic-zoom-close {
    position: fixed;
    top: 0.6rem;
    right: 0.75rem;
    z-index: 2001;
    width: 2.4rem;
    height: 2.4rem;
    border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, 0.35);
    background: rgba(255, 255, 255, 0.12);
    color: #fff;
    font-size: 1.5rem;
    line-height: 1;
}
.schematic-zoom-close:focus-visible { outline: 2px solid var(--ss-blue-line); outline-offset: 2px; }
.positioning-schematic {
    display: block;
    width: 100%;
    min-width: 900px;
    height: auto;
    font-family: var(--ss-font);
}
.positioning-schematic text { fill: var(--sch-ink); letter-spacing: -0.02em; }
/* Process map (product page, 2026-10-22): who × when, same frame and palette */
.process-map {
    display: block;
    width: 100%;
    min-width: 960px;
    height: auto;
    font-family: var(--ss-font);
}
.process-map text { fill: var(--sch-ink); letter-spacing: -0.02em; }
.process-map .pm-lane-a { fill: #f5f6f9; }
.process-map .pm-rule { stroke: #d5dde9; stroke-width: 1; }
.process-map .pm-box { fill: #fff; stroke: var(--sch-ink); stroke-width: 1.1; }
.process-map .pm-box-chain { fill: var(--sch-blue-soft); stroke: var(--sch-blue); stroke-width: 1.8; }
.process-map .pm-head { font-size: 11px; font-weight: 700; letter-spacing: 1.2px; text-transform: uppercase; fill: var(--sch-ink-soft); }
.process-map .pm-lane { font-size: 12.5px; font-weight: 700; }
.process-map .pm-title { font-size: 11.5px; font-weight: 700; }
.process-map .pm-sub { font-size: 9.75px; fill: var(--sch-ink-soft); }
.process-map .pm-edge-t,
.process-map .pm-edge-up-t { font-size: 9.75px; fill: var(--sch-ink-soft); paint-order: stroke; stroke: #fff; stroke-width: 4px; stroke-linejoin: round; }
.process-map .pm-edge-up-t { fill: var(--sch-blue); font-weight: 700; }
.process-map .pm-e { fill: none; stroke: var(--sch-ink); stroke-width: 1.2; }
.process-map .pm-e-up { fill: none; stroke: var(--sch-blue); stroke-width: 1.8; }
.process-map .pm-m { fill: var(--sch-ink); }
.process-map .pm-m-up { fill: var(--sch-blue); }
.positioning-schematic .sch-lbl { font-size: 11.5px; font-weight: 700; letter-spacing: 1.1px; text-transform: uppercase; fill: var(--sch-ink-soft); }
.positioning-schematic .sch-law { font-size: 11.5px; fill: var(--sch-ink-soft); }
.positioning-schematic .sch-role { font-size: 13px; font-weight: 700; }
.positioning-schematic .sch-note { font-size: 12px; }
.positioning-schematic .sch-note-soft { font-size: 12px; fill: var(--sch-ink-soft); }
.positioning-schematic .sch-strong { font-size: 13px; font-weight: 700; }
.positioning-schematic .sch-care-t { fill: var(--sch-care-ink); }
.positioning-schematic .sch-tab { font-size: 12px; font-weight: 800; letter-spacing: 2px; fill: #fff; }
.positioning-schematic .sch-mask-t { fill: var(--sch-mask); font-weight: 700; }
.positioning-schematic .sch-law-sm { font-size: 10.5px; fill: var(--sch-ink-soft); }
.positioning-schematic .sch-tiny { font-size: 10px; }
.positioning-schematic .sch-note-sm { font-size: 11px; }

/* ============ 10. Films (player, reels, cards; PR 3 retunes the pages) ============ */

/* .figure img sets nothing on cursor; a player must not look zoomable either. */
.figure video, .browser-frame video {
    display: block;
    width: 100%;
    height: auto;
    /* The films are 1600×900. Reserving the box keeps the page from jumping
       when the poster arrives, and keeps the reader's place across the
       in-place language switch, whose poster is per language. */
    aspect-ratio: 16 / 9;
    background: var(--ss-navy);
}

.film-eyebrow,
.film-aside-heading {
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ss-ink-2);
    margin-bottom: 0.5rem;
}
.film-aside-heading { margin-bottom: 0.75rem; }
.film-eyebrow-light { color: var(--ss-on-navy-2); }
/* The Skolshield version on /video/: the title attribute says how sure we are. */
.film-version { cursor: help; }

/* Chapter list: flat buttons, so a seek reads as navigation rather than a form */
.film-chapters,
.film-transcript-lines {
    list-style: none;
    margin: 0;
    padding: 0;
}
.film-chapters {
    max-height: 26rem;
    overflow-y: auto;
}
.film-chapter {
    display: flex;
    gap: 0.75rem;
    width: 100%;
    text-align: left;
    background: none;
    border: 0;
    border-left: 2px solid transparent;
    padding: 0.5rem 0.6rem;
    border-radius: 0 0.35rem 0.35rem 0;
    color: inherit;
    transition: background-color 0.15s ease, border-color 0.15s ease;
}
.film-chapter:hover { background: rgba(var(--ss-blue-rgb), 0.07); }
.film-chapter.is-current {
    background: rgba(var(--ss-blue-rgb), 0.1);
    border-left-color: var(--ss-blue);
}
.film-chapter-time {
    flex: 0 0 auto;
    font-variant-numeric: tabular-nums;
    font-size: 0.85rem;
    color: var(--ss-ink-2);
    padding-top: 0.1rem;
}
.film-chapter.is-current .film-chapter-time {
    color: var(--ss-blue);
    font-weight: 600;
}
.film-chapter-title { font-size: 0.95rem; }

.film-transcript {
    border-top: 1px solid var(--ss-line);
    padding-top: 1rem;
}
.film-transcript summary {
    cursor: pointer;
    font-weight: 600;
    color: var(--ss-blue);
    padding: 0.4rem 0;   /* 24px of text is too small to tap */
}
.film-transcript-lines {
    margin-top: 1rem;
    columns: 2;
    column-gap: 2rem;
}
.film-transcript-lines li {
    break-inside: avoid;
    margin-bottom: 0.25rem;
}

/* Play badge over a poster: the still needs its own affordance */
.film-teaser-play {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 4.5rem;
    height: 4.5rem;
    border-radius: 50%;
    background: rgba(var(--ss-blue-rgb), 0.94);
    color: #ffffff;
    font-size: 1.5rem;
    display: flex;
    align-items: center;
    justify-content: center;
    padding-left: 0.3rem; /* optical centring of the triangle */
    box-shadow: 0 0.75rem 2rem rgba(11, 26, 51, 0.45);
    transition: transform 0.15s ease, background-color 0.15s ease;
}
.film-reel-start:hover .film-teaser-play {
    transform: translate(-50%, -50%) scale(1.08);
    background: var(--ss-blue);
}

/* ---- The index: shelves of cards (2026-10-12) ---- */
.film-shelf h2 { letter-spacing: -0.02em; }
.film-shelf-all {
    font-weight: 600;
    text-decoration: none;
}
.film-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    color: inherit;
    text-decoration: none;
    background: var(--ss-surface);
    border: 1px solid var(--ss-line);
    border-radius: var(--radius);
    overflow: hidden;
    box-shadow: var(--shadow-sm);
    transition: box-shadow 0.15s ease, border-color 0.15s ease;
}
.film-card:hover,
.film-card:focus-visible {
    color: inherit;
    border-color: var(--ss-blue-line);
    box-shadow: var(--shadow);
}
.film-card-thumb {
    position: relative;
    aspect-ratio: 16 / 9;
    background: var(--ss-navy);
    overflow: hidden;
}
.film-card-thumb img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.film-card-duration {
    position: absolute;
    right: 0.6rem;
    bottom: 0.6rem;
    padding: 0.2rem 0.5rem;
    border-radius: 0.3rem;
    background: rgba(11, 26, 51, 0.85);
    color: #ffffff;
    font-size: 0.78rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    line-height: 1.2;
}
.film-card-duration .fa-clock { font-size: 0.7rem; }
/* The small play badge: the still needs its affordance even at thumbnail size */
.film-card-play {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    background: rgba(var(--ss-blue-rgb), 0.92);
    color: #ffffff;
    font-size: 1rem;
    display: flex;
    align-items: center;
    justify-content: center;
    padding-left: 0.2rem;
    box-shadow: 0 0.5rem 1.25rem rgba(11, 26, 51, 0.4);
    opacity: 0.9;
    transition: transform 0.15s ease, opacity 0.15s ease;
}
.film-card:hover .film-card-play {
    opacity: 1;
    transform: translate(-50%, -50%) scale(1.08);
}
.film-card-body {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    padding: 1rem 1.1rem 1.15rem;
}
.film-card-eyebrow {
    font-size: 0.72rem;
    margin-bottom: 0.35rem;
}
.film-card-title {
    font-size: 1.05rem;
    font-weight: 600;
    line-height: 1.3;
    margin-bottom: 0.4rem;
    color: var(--ss-ink);
}
.film-card-blurb {
    font-size: 0.9rem;
    line-height: 1.45;
    color: var(--ss-ink-2);
    margin: 0;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
@media (prefers-reduced-motion: reduce) {
    .film-card,
    .film-card-play,
    .film-teaser-play { transition: none; }
}

/* ---- The watch page ---- */
.film-watch-nav {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    border-top: 1px solid var(--ss-line);
    padding-top: 1rem;
}
.film-watch-nav-link {
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    min-width: 0;
    text-decoration: none;
    color: inherit;
}
.film-watch-nav-link:only-child.text-end { margin-left: auto; }
.film-watch-nav-label {
    font-size: 0.75rem;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ss-ink-2);
}
.film-watch-nav-title {
    font-weight: 600;
    color: var(--ss-blue);
}
.film-watch-nav-link:hover .film-watch-nav-title { text-decoration: underline; }

/* ---- The reel: one film in a browser figure with a big start button and
   a chapter strip (_film_reel.html). band--dark for the pitch, band--alt for
   the overview further down the home page. ---- */
.film-reel {
    position: relative;
    padding: var(--space-section-sm) 0 var(--space-section);
}
.film-reel-compact { padding-bottom: var(--space-section-sm); }
.film-reel .container { position: relative; }
.film-reel-lead { font-size: 1.1rem; }
.film-reel.band--dark .film-reel-lead,
.film-reel.band--dark .film-reel-more { color: var(--ss-on-navy); }
.film-reel.band--alt .film-reel-lead,
.film-reel.band--alt .film-reel-more { color: var(--ss-ink-2); }
.film-reel.band--alt .film-eyebrow-light { color: var(--ss-ink-2); }

.film-reel-frame { position: relative; }
.film-reel.band--dark .film-reel-frame .figure {
    border-color: rgba(255, 255, 255, 0.12);
    box-shadow: 0 2.5rem 6rem rgba(0, 0, 0, 0.5);
}
/* The start button sits in the middle of the poster. The script turns the
   native controls off while it shows (Firefox would paint a second play badge
   under it) and on again once the film runs; the button hides on play. */
.film-reel-start {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: none;
    border: 0;
    padding: 3rem 3rem 4.5rem;   /* generous tap target around the badge */
    color: #ffffff;
    cursor: pointer;
}
.film-reel-start .film-teaser-play {
    position: static;
    transform: none;
    margin: 0 auto;
    width: 5.5rem;
    height: 5.5rem;
    font-size: 1.9rem;
}
.film-reel-start:hover .film-teaser-play { transform: scale(1.08); }
.film-reel-start-label {
    display: block;
    margin-top: 1rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.7);
    white-space: nowrap;
}
.film-reel-start[hidden] { display: none; }

/* Chapter strip: the same seek buttons as /video/, laid out as pills */
.film-strip {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.5rem;
    max-height: none;
    overflow: visible;
    margin-top: 1.75rem;
}
.film-strip .film-chapter {
    width: auto;
    align-items: baseline;
    gap: 0.5rem;
    padding: 0.4rem 0.85rem;
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 50rem;
    background: rgba(255, 255, 255, 0.05);
    color: var(--ss-on-navy);
    font-size: 0.9rem;
}
.film-strip .film-chapter:hover {
    background: rgba(var(--ss-blue-rgb), 0.45);
    border-color: rgba(255, 255, 255, 0.5);
}
.film-strip .film-chapter.is-current {
    background: var(--ss-blue);
    border-color: var(--ss-blue);
    color: #ffffff;
}
.film-strip .film-chapter-time {
    font-size: 0.78rem;
    color: var(--ss-on-navy-2);
    padding-top: 0;
}
.film-strip .film-chapter.is-current .film-chapter-time { color: #fff; }
.film-strip .film-chapter-title { font-size: inherit; }
/* Light variant of the strip (the overview reel on the home page) */
.film-strip--light .film-chapter {
    border-color: var(--ss-line-strong);
    background: var(--ss-surface);
    color: var(--ss-ink);
}
.film-strip--light .film-chapter:hover {
    background: var(--ss-blue-tint);
    border-color: var(--ss-blue-line);
}
.film-strip--light .film-chapter-time { color: var(--ss-ink-2); }
.film-strip--light .film-chapter.is-current {
    background: var(--ss-blue);
    border-color: var(--ss-blue);
    color: #fff;
}

/* Pointer from /video/ back to the reel */
.film-hero-link {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px solid currentColor;
}
.film-hero-link:hover { color: var(--ss-blue); }

@media (max-width: 767.98px) {
    .film-reel-start { padding: 1.5rem 1.5rem 2.5rem; }
    .film-reel-start .film-teaser-play {
        width: 4rem;
        height: 4rem;
        font-size: 1.4rem;
    }
    .film-strip .film-chapter { font-size: 0.82rem; padding: 0.3rem 0.7rem; }
    .film-strip .film-chapter-time { display: none; }
}
@media (max-width: 991.98px) {
    .film-chapters { max-height: none; }
    .film-transcript-lines { columns: 1; }
}

/* ============ 11. COMPAT — pages not yet rebuilt on the primitives ============
   PR 2 (product, kommun, pricing) and PR 3 (video, about, contact, dso, faq,
   gdpr, privacy) delete the parts they retire. Everything here is the old
   vocabulary (.browser-frame, .product-hero, .call-to-action, .card.border-0,
   .tour-*, .mfa-*, .calc-*, .fact-*, .stat-*) on the new tokens. */

/* Old card pattern: hairline + flat instead of shadow + hover lift */
.card.border-0 { border: 1px solid var(--ss-line) !important; }
.card.shadow-sm { box-shadow: none !important; }
.card.card-static { transition: none; }

/* .browser-frame → .figure.figure--browser */
.browser-frame {
    position: relative;
    background: var(--ss-surface);
    border: 1px solid var(--ss-line);
    border-radius: var(--radius);
    box-shadow: var(--shadow);
    overflow: hidden;
}
.browser-frame-bar {
    position: relative;
    display: flex;
    align-items: center;
    gap: 0.4rem;
    min-height: 2.1rem;
    padding: 0.55rem 0.85rem;
    background: var(--ss-surface-2);
    border-bottom: 1px solid var(--ss-line);
}
.browser-frame-bar span {
    width: 0.6rem;
    height: 0.6rem;
    border-radius: 50%;
    background: var(--ss-line-strong);
}
.browser-frame-url {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    background: var(--ss-surface);
    border: 1px solid var(--ss-line);
    border-radius: 50rem;
    color: var(--ss-ink-3);
    font-size: 0.72rem;
    line-height: 1;
    padding: 0.3rem 1rem;
    white-space: nowrap;
}
.browser-frame-url .fa-lock { font-size: 0.6rem; color: var(--ss-ok); }
.browser-frame img {
    display: block;
    width: 100%;
    height: auto;
    cursor: zoom-in;
    transition: opacity 0.15s ease;
}

/* Old inner-page heroes (product, kommun, pricing, video, film): flat navy,
   no photo, no glow, no dot grid. The home masthead is a .page-head now. */
header.masthead:not(.page-head) {
    position: relative;
    background: linear-gradient(180deg, var(--ss-navy) 0%, var(--ss-navy-2) 100%);
    color: #fff;
    padding-top: 6rem;
    padding-bottom: 6rem;
    min-height: 22rem;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
header.masthead:not(.page-head) h1, header.masthead:not(.page-head) .h1 { color: #fff; }
header.masthead:not(.page-head) .lead { color: var(--ss-on-navy); }
header.masthead:not(.page-head) .badge.bg-light { background: rgba(255, 255, 255, 0.12) !important; color: #fff !important; }
header.masthead:not(.page-head) .btn-primary { box-shadow: none; }
header.masthead.film-watch-hero {
    padding-top: 4.5rem;
    padding-bottom: 3.5rem;
    min-height: 0;
}
.film-watch-hero h1 { font-size: 2.2rem; }
@media (min-width: 992px) {
    .film-watch-hero h1 { font-size: 2.6rem; }
}
/* Fact strip under the product/pricing hero: fuses with it */
.fact-strip {
    background: var(--ss-navy);
    color: var(--ss-on-navy);
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.fact-strip .text-primary { color: #fff !important; }
.fact-strip .text-muted { color: var(--ss-on-navy-2) !important; }

/* Old closing CTA band (home is rebuilt; the other pages keep it until PR 2/3) */
.call-to-action {
    position: relative;
    background: linear-gradient(180deg, var(--ss-navy) 0%, var(--ss-navy-2) 100%);
    color: #fff;
    padding-top: 5rem;
    padding-bottom: 5rem;
}
.call-to-action h2 { color: #fff; }

/* Demo CTA card (product, pricing): the one dark card on a light section */
.demo-cta-card {
    background: linear-gradient(160deg, var(--ss-navy-2), var(--ss-navy));
    color: #ffffff;
}
.demo-cta-card h2, .demo-cta-card h3 { color: #ffffff; }
.demo-cta-card .text-muted { color: var(--ss-on-navy) !important; }
.demo-cta-card .text-primary { color: #fff !important; }
.demo-cta-card .btn-outline-secondary {
    color: var(--ss-on-navy);
    border-color: rgba(255, 255, 255, 0.35);
}
.demo-cta-card .btn-outline-secondary:hover {
    background: rgba(255, 255, 255, 0.1);
    border-color: #fff;
    color: #ffffff;
}

/* Product tour */
.tour-sticky {
    position: sticky;
    top: 5rem;
}
.tour-steps { counter-reset: tourstep; }
.tour-step {
    counter-increment: tourstep;
    padding: 3.5rem 0 3.5rem 1.5rem;
    border-left: 2px solid var(--ss-line);
    transition: border-color 0.3s ease, opacity 0.3s ease;
    opacity: 0.55;
}
.tour-step.active {
    border-left-color: var(--ss-blue);
    opacity: 1;
}
.tour-step-eyebrow {
    color: var(--ss-blue);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-size: 0.78rem;
    margin-bottom: 0.5rem;
}
.tour-step-eyebrow::before {
    content: counter(tourstep, decimal-leading-zero);
    font-size: 1.4rem;
    font-weight: 700;
    letter-spacing: 0;
    color: var(--ss-line-strong);
    margin-right: 0.6rem;
    vertical-align: -0.12em;
    transition: color 0.3s ease;
}
.tour-step.active .tour-step-eyebrow::before { color: var(--ss-blue); }
.tour-step-img {
    width: 100%;
    height: auto;
    border: 1px solid var(--ss-line);
    border-radius: var(--radius-sm);
    box-shadow: var(--shadow-sm);
    margin-top: 1rem;
    cursor: zoom-in;
}
@media (max-width: 991.98px) {
    .tour-step {
        opacity: 1;               /* no sticky pane to sync with */
        border-left: none;
        padding: 2rem 0;
    }
}

/* Fact chips (product steps) */
ul.fact-chips {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}
ul.fact-chips li {
    background: var(--ss-blue-tint);
    color: var(--ss-blue-deep);
    border: 1px solid var(--ss-blue-line);
    border-radius: 50rem;
    padding: 0.2rem 0.75rem;
    font-size: 0.85rem;
    font-weight: 600;
    white-space: nowrap;
}
@media (max-width: 575.98px) {
    /* a chip longer than the phone must wrap */
    ul.fact-chips li { white-space: normal; }
}

/* Phone frame for the mobile shot */
.phone-frame {
    position: relative;
    max-width: 300px;
    border: 10px solid #1f2733;
    border-radius: 2.2rem;
    overflow: hidden;
    box-shadow: var(--shadow);
    background: #1f2733;
}
.phone-frame img {
    display: block;
    width: 100%;
    height: auto;
    border-radius: 1.5rem;
    cursor: zoom-in;
}
.phone-frame::after {
    content: "";
    position: absolute;
    top: 10px;
    left: 50%;
    transform: translateX(-50%);
    width: 88px;
    height: 16px;
    background: #1f2733;
    border-radius: 50rem;
}

/* Lightbox (product) */
.shot-lightbox {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 2000;
    background: rgba(11, 26, 51, 0.92);
    align-items: center;
    justify-content: center;
    padding: 2rem;
    cursor: zoom-out;
}
.shot-lightbox.open { display: flex; }
.shot-lightbox img {
    max-width: 100%;
    max-height: 100%;
    border-radius: var(--radius-sm);
    box-shadow: 0 2rem 5rem rgba(0, 0, 0, 0.5);
}

/* About: then-vs-now stat callouts */
.stat-then {
    background: var(--ss-surface-2);
    border: 1px solid var(--ss-line) !important;
    color: var(--ss-ink-2);
}
.stat-now {
    background: linear-gradient(160deg, var(--ss-navy-2), var(--ss-navy));
    color: #ffffff;
}
.stat-label {
    font-size: 0.78rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}
.stat-then .stat-label { color: var(--ss-ink-3); }
.stat-now .stat-label { color: var(--ss-on-navy-2); }
.stat-number {
    font-size: 2rem;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
}
.stat-then .stat-number {
    color: var(--ss-ink-3);
    text-decoration: line-through;
    text-decoration-thickness: 3px;
    text-decoration-color: rgba(200, 85, 42, 0.55);
}
.stat-caption { font-size: 0.85rem; }
.stat-then .stat-caption { color: var(--ss-ink-3); }
.stat-now .stat-caption { color: var(--ss-on-navy); }

/* Pricing calculator */
.calc-figure {
    font-size: 1.9rem;
    font-weight: 700;
    letter-spacing: -0.02em;
    color: var(--ss-blue);
    font-variant-numeric: tabular-nums;
}
.calc-badge {
    background: var(--ss-ok-tint);
    color: var(--ss-ok);
    border: 1px solid #bfe5cf;
    font-size: 0.85rem;
    font-weight: 600;
    padding: 0.45rem 1rem;
    white-space: normal;   /* a full sentence; nowrap scrolled phones sideways */
    max-width: 100%;
}
.price-hero { padding-bottom: 9rem !important; }   /* room for the pulled-up calculator */
.price-hero-amount {
    font-size: 4.5rem;
    font-weight: 700;
    letter-spacing: -0.03em;
    line-height: 1;
    color: #fff;
    font-variant-numeric: tabular-nums;
}
.price-hero-unit {
    display: block;
    color: var(--ss-on-navy);
    margin-top: 0.5rem;
}
.price-hero-chip {
    display: inline-block;
    padding: 0.3rem 0.9rem;
    border: 1px solid rgba(255, 255, 255, 0.3);
    border-radius: 50rem;
    background: rgba(255, 255, 255, 0.06);
    color: var(--ss-on-navy);
    font-size: 0.85rem;
    font-weight: 600;
}
.price-pull-up {
    margin-top: -6rem;
    position: relative;
    z-index: 1;
}
.mode-toggle {
    display: inline-flex;
    background: var(--ss-surface-2);
    border: 1px solid var(--ss-line);
    border-radius: 50rem;
    padding: 0.25rem;
}
.mode-btn {
    border: none;
    background: transparent;
    border-radius: 50rem;
    padding: 0.4rem 1.4rem;
    font-weight: 600;
    color: var(--ss-ink-2);
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease;
}
.mode-btn.active {
    background: var(--ss-blue);
    color: #ffffff;
}
.preset-chip {
    padding: 0.35rem 0.9rem;
    border: 1px solid var(--ss-line-strong);
    border-radius: 50rem;
    background: var(--ss-surface);
    color: var(--ss-ink);
    font-size: 0.85rem;
    font-weight: 600;
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease;
}
.preset-chip:hover {
    border-color: var(--ss-blue);
    color: var(--ss-blue);
}
.preset-chip.active {
    background: var(--ss-blue);
    border-color: var(--ss-blue);
    color: #ffffff;
}

/* Two shots of the same incident side by side (kommun keeps the old class) */
.compare-frame {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1rem;
}
.compare-frame figure {
    margin: 0;
    border: 1px solid var(--ss-line);
    border-radius: var(--radius);
    overflow: hidden;
    background: var(--ss-surface);
    box-shadow: var(--shadow);
}
.compare-frame figcaption {
    font-size: 0.75rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--ss-ink-2);
    padding: 0.5rem 0.85rem;
    background: var(--ss-surface-2);
    border-bottom: 1px solid var(--ss-line);
}
.compare-frame img {
    display: block;
    width: 100%;
    height: auto;
}
@media (max-width: 575.98px) {
    .compare-frame { grid-template-columns: 1fr; }
}

/* GDPR statutory-chains table */
.compliance-table th[scope="row"] {
    font-weight: 600;
    white-space: normal;
    min-width: 12rem;
}
.compliance-table td, .compliance-table th { font-size: 0.92rem; }
@media (max-width: 575.98px) {
    .compliance-table thead { display: none; }
    .compliance-table tr, .compliance-table th, .compliance-table td { display: block; }
    .compliance-table th[scope="row"] { min-width: 0; border-bottom: 0; padding-bottom: 0.1rem; }
    .compliance-table td { padding-top: 0; color: var(--ss-ink-2); }
}

/* Sign-in section (product #inloggning): still the dark band until PR 2 */
.mfa-section {
    background: linear-gradient(180deg, var(--ss-navy) 0%, var(--ss-navy-2) 100%);
    color: var(--ss-on-navy);
}
.mfa-section h2, .mfa-section h3 { color: #fff; }
.mfa-badge {
    background: rgba(255, 255, 255, 0.1);
    color: #fff;
    border: 1px solid rgba(255, 255, 255, 0.25);
    font-weight: 600;
    letter-spacing: 0.04em;
    padding: 0.4rem 0.9rem;
}
.mfa-lead { color: var(--ss-on-navy); }
.mfa-caption { color: var(--ss-on-navy-2); }
.mfa-section .browser-frame { border-color: rgba(255, 255, 255, 0.12); box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.45); }
.mfa-ladder {
    list-style: none;
    counter-reset: mfa;
    padding: 0;
    margin: 0;
    position: relative;
}
.mfa-ladder li {
    display: flex;
    gap: 1rem;
    padding: 0 0 1.5rem 0;
    position: relative;
}
.mfa-ladder li:not(:last-child)::before {
    content: "";
    position: absolute;
    left: 1.35rem;
    top: 2.9rem;
    bottom: 0;
    width: 2px;
    background: rgba(255, 255, 255, 0.18);
}
.mfa-ladder li p { color: var(--ss-on-navy); margin: 0; font-size: 0.95rem; }
.mfa-ladder-icon {
    flex: 0 0 2.75rem;
    width: 2.75rem;
    height: 2.75rem;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.18);
    color: #fff;
    font-size: 1.1rem;
    position: relative;
    z-index: 1;
}
.mfa-ladder-icon-hero {
    background: var(--ss-blue);
    border-color: var(--ss-blue);
    color: #fff;
    box-shadow: 0 0 0 6px rgba(var(--ss-blue-rgb), 0.3);
}
.mfa-compare {
    border-radius: var(--radius);
    padding: 1.5rem;
    border: 1px solid rgba(255, 255, 255, 0.12);
    background: rgba(255, 255, 255, 0.04);
}
.mfa-compare p { color: var(--ss-on-navy); font-size: 0.95rem; }
.mfa-compare-label {
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    font-size: 0.78rem;
    margin-bottom: 0.6rem;
    color: var(--ss-on-navy-2);
}
.mfa-compare-us { border-color: rgba(var(--ss-blue-rgb), 0.8); background: rgba(var(--ss-blue-rgb), 0.16); }
.mfa-compare-us .mfa-compare-label { color: #fff; }
.mfa-compare-us p { color: #fff; }
/* Illustration: lock card + phone with the number-matching push */
.mfa-illustration {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 24rem;
    padding: 1rem 0;
}
.mfa-lock-card {
    width: 20rem;
    max-width: 100%;
    background: #fff;
    color: var(--ss-ink);
    border-radius: var(--radius);
    padding: 1.5rem 1.5rem 1.25rem;
    box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.45);
    text-align: center;
    margin-right: 6rem;
}
.mfa-lock-icon { color: var(--ss-blue); font-size: 1.6rem; }
.mfa-lock-title { font-weight: 700; font-size: 1.05rem; margin-top: 0.4rem; }
.mfa-lock-sub { color: var(--ss-ink-2); font-size: 0.8rem; margin: 0.35rem 0 1rem; }
.mfa-lock-btn {
    background: var(--ss-blue);
    color: #fff;
    border-radius: var(--radius-sm);
    padding: 0.55rem;
    font-weight: 600;
    font-size: 0.9rem;
}
.mfa-lock-hint { color: var(--ss-ink-2); font-size: 0.75rem; margin-top: 0.7rem; }
.mfa-lock-number {
    font-size: 2.4rem;
    font-weight: 800;
    letter-spacing: 0.1em;
    color: var(--ss-ink);
    line-height: 1.1;
    margin: 0.25rem 0 0.5rem;
}
.mfa-lock-alt { font-size: 0.75rem; color: var(--ss-blue); text-decoration: underline; }
.mfa-phone {
    position: absolute;
    right: 0;
    bottom: 0;
    width: 12.5rem;
    height: 21rem;
    background: #101828;
    border: 6px solid #1f2733;
    border-radius: 2rem;
    box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.55);
    overflow: hidden;
    background-image: linear-gradient(180deg, #16223a 0%, #0f172a 100%);
}
.mfa-phone-top { height: 1.6rem; display: flex; justify-content: center; align-items: flex-start; }
.mfa-phone-top span { width: 4.5rem; height: 0.9rem; background: #1f2733; border-radius: 0 0 0.6rem 0.6rem; }
.mfa-push {
    margin: 1.5rem 0.55rem 0;
    background: rgba(255, 255, 255, 0.96);
    color: var(--ss-ink);
    border-radius: 0.9rem;
    padding: 0.7rem 0.75rem 0.75rem;
    font-size: 0.72rem;
    box-shadow: 0 0.5rem 1.5rem rgba(0, 0, 0, 0.35);
}
.mfa-push-head {
    display: flex;
    align-items: center;
    font-weight: 600;
    color: var(--ss-ink-2);
    font-size: 0.68rem;
    margin-bottom: 0.35rem;
}
.mfa-push-head span { margin-left: auto; font-weight: 400; }
.mfa-push-title { font-weight: 700; font-size: 0.85rem; }
.mfa-push-text { color: var(--ss-ink-2); margin-top: 0.15rem; }
.mfa-push-input {
    margin: 0.55rem auto 0.6rem;
    width: 4rem;
    border: 2px solid var(--ss-blue);
    border-radius: var(--radius-sm);
    text-align: center;
    font-size: 1.3rem;
    font-weight: 800;
    letter-spacing: 0.15em;
    color: var(--ss-ink);
    padding: 0.15rem 0;
}
.mfa-push-actions { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; }
.mfa-push-deny { color: var(--ss-ink-2); }
.mfa-push-ok {
    background: var(--ss-blue);
    color: #fff;
    border-radius: 0.35rem;
    padding: 0.25rem 0.9rem;
    font-weight: 700;
}
@media (max-width: 575.98px) {
    .mfa-illustration { flex-direction: column; min-height: 0; gap: 1.25rem; }
    .mfa-lock-card { margin-right: 0; }
    .mfa-phone { position: static; height: auto; padding-bottom: 1.5rem; }
}

/* Sales pass 2026-10-24 (contact, dso, about) */
.book-card { border-left: 0.35rem solid var(--ss-blue); }
.fact-card { border-radius: var(--radius); background: var(--ss-surface-2); border: 1px solid var(--ss-line); padding: 1.25rem 1.35rem; height: 100%; }
.fact-card .fact-label { font-size: 0.78rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ss-ink-2); margin-bottom: 0.3rem; }
.fact-card p { margin: 0; }
.dso-table th { white-space: nowrap; width: 11rem; color: var(--ss-ink-2); font-weight: 600; }
@media (max-width: 575.98px) {
    .dso-table th { width: auto; display: block; padding-bottom: 0; border: 0; }
    .dso-table td { display: block; padding-top: 0.25rem; }
}
