/* ───────────────────────────────────────────────────────────────────────────
   SmartSuli Admin — Indigo Pulse shell
   The deep-indigo sidebar layout chosen from the admin-shell prototype
   (dev-planning/assets/designs/admin-shell-prototype.html, variant B with
   variant C's gradient headers). Layered after site.css; tokens live there.
   body.ss-shell = authenticated app shell, body.ss-plain = logged-out pages.
   ─────────────────────────────────────────────────────────────────────────── */

/* ── Shell layout ───────────────────────────────────────────────────────── */
body.ss-shell {
    display: flex;
    min-height: 100vh;
    margin-bottom: 0;
}

.ss-main {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    /* the dark frame continues under the topbar; the plate's rounded
       corner reveals it */
    background: var(--ss-deep-2);
}

/* the light work surface set into the dark frame (header-blend prototype,
   variant A). Rounded inner corner + a soft glow against the frame.
   NOT .ss-plate — that name is taken by the exam sheet progress bars. */
.ss-shell-plate {
    flex: 1;
    border-top-left-radius: 1.35rem;
    background-color: var(--ss-bg);
    /* faint grid paper near the top, like the site hero; the first gradient
       fades it back into the plain background so tables lower down stay calm */
    background-image:
        linear-gradient(to bottom, rgba(0,0,0,0) 0, var(--ss-bg) 30rem),
        linear-gradient(var(--ss-border-light) 1px, transparent 1px),
        linear-gradient(90deg, var(--ss-border-light) 1px, transparent 1px);
    background-size: auto, 44px 44px, 44px 44px;
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.06),
        0 0 34px -8px rgba(0, 0, 0, 0.4);
}

.ss-content {
    width: 100%;
    max-width: 1280px;
    margin: 0 auto;
    padding: 1.9rem 1.9rem 3.5rem;
    /* wide tables scroll inside the content column instead of clipping at
       the plate edge or stretching the whole shell */
    overflow-x: auto;
}

/* Billing review is intentionally a dense, all-columns-at-once workspace. Let it use the
   complete shell width instead of forcing its table into the generic reading-width cap. The
   table-responsive wrapper remains available below the desktop breakpoint for genuinely narrow
   viewports. */
.ss-content--billing-details {
    max-width: none;
}

/* ── Sidebar ────────────────────────────────────────────────────────────── */
.ss-side {
    width: 250px;
    flex: none;
    position: sticky;
    top: 0;
    height: 100vh;
    height: 100dvh;
    overflow-y: auto;
    z-index: var(--ss-z-navbar);
    background: linear-gradient(170deg, var(--ss-deep), var(--ss-deep-2) 60%, var(--ss-deep-3));
    color: var(--ss-on-deep);
    padding: 0 0 2.5rem;
    scrollbar-width: thin;
    scrollbar-color: rgba(255, 255, 255, 0.25) transparent;
}

.ss-side-logo {
    display: block;
    /* same height as .ss-top so the two dark surfaces read as one frame */
    height: 60px;
    line-height: 1.2;
    padding: 0.55rem 1.5rem 0;
    font-family: var(--ss-serif);
    font-size: 1.35rem;
    font-weight: 700;
    color: var(--ss-on-deep);
    letter-spacing: -0.01em;
    text-decoration: none;
}
.ss-side-logo:hover { color: #fff; }
.ss-side-logo em { color: var(--ss-accent-cyan); font-style: normal; }
.ss-side-logo small {
    display: block;
    font-family: var(--bs-body-font-family, inherit);
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--ss-on-deep-soft);
    margin-top: 0.1rem;
}

/* carded groups (sidebar-readability prototype, variant B): each category
   is a rounded card with an iconed header; links hang from an indent guide
   so groups stay readable even when skimming fast */
.ss-side-group {
    margin: 10px 12px 0;
    border-radius: 14px;
    background: rgba(255, 255, 255, 0.045);
    border: 1px solid rgba(255, 255, 255, 0.07);
    padding: 8px 0;
}
.ss-side-group.is-hidden { display: none; }
.ss-side-group h3 {
    display: flex;
    align-items: center;
    gap: 10px;
    font-family: inherit;
    font-size: 0.82rem;
    font-weight: 700;
    letter-spacing: 0.01em;
    text-transform: none;
    color: var(--ss-on-deep);
    padding: 6px 16px 6px 14px;
    margin: 0;
}

.ss-side-icn {
    width: 17px;
    height: 17px;
    flex: none;
    stroke: var(--ss-accent-cyan);
    fill: none;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}
.ss-side-icn .knob { fill: var(--ss-accent-cyan); stroke: none; }

.ss-side-links {
    margin-left: 23px;
    border-left: 1px solid rgba(255, 255, 255, 0.13);
}

.ss-side-link {
    display: block;
    padding: 0.32rem 0.9rem;
    margin-left: -2px;
    font-size: 0.84rem;
    color: var(--ss-on-deep-soft);
    text-decoration: none;
    border-left: 3px solid transparent;
    transition: color 0.15s ease, background 0.15s ease;
}
.ss-side-link:hover {
    color: var(--ss-on-deep);
    background: rgba(255, 255, 255, 0.05);
}
.ss-side-link.current {
    color: var(--ss-on-deep);
    border-left-color: var(--ss-accent-cyan);
    background: rgba(255, 255, 255, 0.07);
    font-weight: 600;
}
.ss-side-link.is-hidden { display: none; }

/* Primary teacher controls: Home is a real icon button and the live lesson card sits directly
   below it, before the grouped navigation. */
.ss-side-primary {
    margin: 4px 12px 0;
    display: grid;
    gap: 8px;
}

.ss-side-home {
    display: flex;
    align-items: center;
    gap: 0.65rem;
    margin-left: 0;
    padding: 0.48rem 0.65rem;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    background: rgba(255, 255, 255, 0.04);
    color: var(--ss-on-deep);
    font-size: 0.88rem;
    font-weight: 700;
}
.ss-side-home:hover {
    border-color: rgba(48, 213, 200, 0.28);
    background: rgba(255, 255, 255, 0.075);
}
.ss-side-home.current {
    border-left-color: rgba(255, 255, 255, 0.08);
    background: rgba(255, 255, 255, 0.10);
}
.ss-side-home-icon {
    display: grid;
    width: 29px;
    height: 29px;
    flex: none;
    place-items: center;
    border: 1px solid rgba(48, 213, 200, 0.34);
    border-radius: 9px;
    background: linear-gradient(145deg, rgba(48, 213, 200, 0.18), rgba(115, 105, 225, 0.2));
    color: var(--ss-accent-cyan);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
.ss-side-home-icon svg {
    width: 16px;
    height: 16px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.ss-side-live {
    position: relative;
    overflow: hidden;
    border: 1px solid rgba(255, 255, 255, 0.12);
    border-radius: 15px;
    background:
        radial-gradient(circle at 100% 0, rgba(48, 213, 200, 0.15), transparent 48%),
        linear-gradient(145deg, rgba(255, 255, 255, 0.085), rgba(255, 255, 255, 0.035));
    box-shadow: 0 16px 34px -25px rgba(0, 0, 0, 0.85), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.ss-side-live-link {
    display: block;
    padding: 0.8rem 0.85rem 0.75rem;
    color: var(--ss-on-deep);
    text-decoration: none;
}
.ss-side-live-link:hover { color: #fff; }
.ss-side-live-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
}
.ss-side-live-eyebrow {
    color: var(--ss-accent-cyan);
    font-size: 0.61rem;
    font-weight: 800;
    letter-spacing: 0.11em;
}
.ss-side-live-dot {
    width: 7px;
    height: 7px;
    flex: none;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.42);
}
.ss-side-live[data-mode="current"] .ss-side-live-dot {
    background: var(--ss-accent-cyan);
    box-shadow: 0 0 0 4px rgba(48, 213, 200, 0.13), 0 0 12px rgba(48, 213, 200, 0.55);
    animation: ss-side-live-pulse 2.2s ease-in-out infinite;
}
.ss-side-live[data-mode="next"] .ss-side-live-dot { background: #8D85ED; }
.ss-side-live-student,
.ss-side-live-detail,
.ss-side-live-next { display: block; }
.ss-side-live-student {
    overflow: hidden;
    margin-top: 0.3rem;
    font-family: var(--ss-serif);
    font-size: 1.03rem;
    line-height: 1.2;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ss-side-live-detail {
    margin-top: 0.15rem;
    color: rgba(255, 255, 255, 0.72);
    font-size: 0.72rem;
    font-variant-numeric: tabular-nums;
}
.ss-side-live-track {
    display: block;
    overflow: hidden;
    height: 6px;
    margin-top: 0.65rem;
    border-radius: 999px;
    background: rgba(5, 5, 35, 0.35);
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.28);
}
.ss-side-live-fill {
    display: block;
    width: 0;
    height: 100%;
    border-radius: inherit;
    background: linear-gradient(90deg, #21C6B1, #7369E1);
    box-shadow: 0 0 10px rgba(48, 213, 200, 0.45);
    transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}
.ss-side-live-fill[data-state="warning"] {
    background: linear-gradient(90deg, #F2B84B, #EB715A);
    box-shadow: 0 0 10px rgba(242, 184, 75, 0.45);
}
.ss-side-live-next {
    overflow: hidden;
    min-height: 1rem;
    margin-top: 0.55rem;
    padding-top: 0.5rem;
    border-top: 1px solid rgba(255, 255, 255, 0.09);
    color: rgba(255, 255, 255, 0.58);
    font-size: 0.66rem;
    line-height: 1.35;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ss-side-live[data-mode="done"] .ss-side-live-track,
.ss-side-live[data-mode="done"] .ss-side-live-next { display: none; }

@keyframes ss-side-live-pulse {
    0%, 100% { transform: scale(1); opacity: 1; }
    50% { transform: scale(0.82); opacity: 0.7; }
}

@media (prefers-reduced-motion: reduce) {
    .ss-side-live-dot,
    .ss-side-live-fill { animation: none; transition: none; }
}

/* ── Topbar: part of the dark frame, not a second light bar ─────────────── */
.ss-top {
    position: sticky;
    top: 0;
    z-index: var(--ss-z-navbar);
    display: flex;
    align-items: center;
    gap: 1rem;
    height: 60px;
    padding: 0 1.9rem;
    background: linear-gradient(90deg, var(--ss-deep-2), var(--ss-deep-3));
    color: var(--ss-on-deep);
}
/* the plate's rounded inner corner, pinned to the sticky bar so the curve
   stays put while the plate scrolls underneath it */
.ss-top::after {
    content: "";
    position: absolute;
    left: 0;
    top: 100%;
    width: 1.35rem;
    height: 1.35rem;
    background: radial-gradient(circle at 100% 100%,
        transparent 1.35rem, var(--ss-deep-2) calc(1.35rem + 0.5px));
    pointer-events: none;
}
.ss-top .dropdown-menu { z-index: var(--ss-z-dropdown); }

.ss-top-crumb {
    font-size: 0.875rem;
    color: var(--ss-on-deep-soft);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.ss-jump {
    margin-left: auto;
    width: min(300px, 34vw);
    font-size: 0.85rem;
    color: var(--ss-on-deep);
    background: rgba(255, 255, 255, 0.08);
    border: 1.5px solid rgba(255, 255, 255, 0.14);
    border-radius: 999px;
    padding: 0.42rem 1rem;
    outline: none;
    transition: border-color 0.2s, background 0.2s;
}
.ss-jump::placeholder { color: var(--ss-on-deep-soft); }
.ss-jump:focus {
    border-color: var(--ss-accent-cyan);
    background: rgba(255, 255, 255, 0.12);
}

/* the topbar's stock controls (sync button, avatar) sit on indigo now */
.ss-top .btn-outline-secondary {
    --bs-btn-color: var(--ss-on-deep-soft);
    --bs-btn-border-color: rgba(255, 255, 255, 0.2);
    --bs-btn-hover-color: var(--ss-on-deep);
    --bs-btn-hover-bg: rgba(255, 255, 255, 0.1);
    --bs-btn-hover-border-color: rgba(255, 255, 255, 0.35);
    --bs-btn-active-color: var(--ss-on-deep);
    --bs-btn-active-bg: rgba(255, 255, 255, 0.14);
    --bs-btn-active-border-color: rgba(255, 255, 255, 0.35);
}
.ss-top .ss-avatar-name { color: var(--ss-on-deep); }
.ss-top .ss-avatar-btn:hover {
    background: rgba(255, 255, 255, 0.08);
    border-color: rgba(255, 255, 255, 0.14);
}

.ss-side-toggle {
    display: none;
    background: none;
    border: 1.5px solid rgba(255, 255, 255, 0.25);
    border-radius: 0.6rem;
    color: var(--ss-on-deep);
    font-size: 1rem;
    line-height: 1;
    padding: 0.4rem 0.6rem;
    cursor: pointer;
}

/* ── Gradient serif page headers (prototype variant C) ──────────────────── */
.ss-shell main h1,
.ss-shell .ss-page-title {
    font-family: var(--ss-serif);
    font-weight: 600;
    letter-spacing: -0.01em;
    line-height: 1.12;
    font-size: clamp(1.9rem, 2.6vw, 2.6rem);
    color: var(--ss-primary);                 /* fallback when clip unsupported */
    background: var(--ss-grad-brand);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    padding-bottom: 0.08em;                   /* keep descenders inside the clip box */
}
.ss-shell main h2,
.ss-shell main h3 {
    font-family: var(--ss-serif);
    font-weight: 600;
    letter-spacing: -0.01em;
}
.ss-shell .ss-page-eyebrow { color: #0F8577; }
@media (prefers-color-scheme: dark) {
    .ss-shell .ss-page-eyebrow { color: var(--ss-accent-cyan); }
}

/* ── Site-language controls ─────────────────────────────────────────────── */
.ss-shell .btn-primary,
.ss-shell .btn-outline-primary {
    border-radius: 999px;
    padding-left: 1.2rem;
    padding-right: 1.2rem;
}
/* grouped controls need flat shared edges — undo the pill there */
.ss-shell .input-group .btn,
.ss-shell .btn-group .btn {
    border-radius: var(--ss-radius);
}

/* ── Indigo links (Bootstrap defaults are the old blue) ─────────────────── */
.ss-shell {
    --bs-link-color: var(--ss-primary);
    --bs-link-hover-color: var(--ss-primary-strong);
    --bs-link-color-rgb: 64, 56, 168;
    --bs-link-hover-color-rgb: 51, 44, 134;
}
@media (prefers-color-scheme: dark) {
    .ss-shell {
        --bs-link-color-rgb: 157, 151, 242;
        --bs-link-hover-color-rgb: 182, 177, 246;
    }
}

/* ── Modern tables: the site-language plate ─────────────────────────────────
   Bare Bootstrap .table becomes a rounded card plate: soft small-caps header,
   airy rows, indigo hover tint, no harsh grid lines. Tables that already sit
   inside a styled plate/card keep their host's chrome instead. */
.ss-shell .table {
    --bs-table-bg: transparent;
    --bs-table-striped-bg: color-mix(in srgb, var(--ss-bg-alt) 45%, transparent);
    --bs-table-hover-bg: color-mix(in srgb, var(--ss-primary) 5%, transparent);
    --bs-table-border-color: var(--ss-border-light);
    background: var(--ss-surface);
    border-collapse: separate;
    border-spacing: 0;
    border: 1px solid var(--ss-border);
    border-radius: var(--ss-radius-lg);
    box-shadow: var(--ss-shadow-card);
}
.ss-shell .table thead th {
    background: var(--ss-bg-alt);
    color: var(--ss-text-muted);
    font-size: 0.70rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    border-bottom: 1px solid var(--ss-border);
    padding: 0.7rem 1rem;
}
.ss-shell .table thead.table-light {
    --bs-table-bg: var(--ss-bg-alt);
    --bs-table-color: var(--ss-text-muted);
}
.ss-shell .table td {
    padding: 0.75rem 1rem;
    vertical-align: middle;
}
.ss-shell .table tbody tr:last-child td { border-bottom-width: 0; }
.ss-shell .table thead th:first-child { border-top-left-radius: calc(var(--ss-radius-lg) - 1px); }
.ss-shell .table thead th:last-child { border-top-right-radius: calc(var(--ss-radius-lg) - 1px); }
.ss-shell .table tbody tr:last-child td:first-child { border-bottom-left-radius: calc(var(--ss-radius-lg) - 1px); }
.ss-shell .table tbody tr:last-child td:last-child { border-bottom-right-radius: calc(var(--ss-radius-lg) - 1px); }
.ss-shell .table tbody a { font-weight: 600; text-decoration: none; }

/* already-plated hosts: don't double-frame the inner table */
.ss-shell :is(.ss-table-plate, .ss-table-shell, .card, .ss-card) .table {
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
}

/* ── Status badges: soft tinted pills instead of solid Bootstrap blocks ─── */
.ss-shell .badge {
    border-radius: 999px;
    font-weight: 600;
    letter-spacing: 0.01em;
    padding: 0.34em 0.8em;
}
.ss-shell .badge.bg-success   { background: color-mix(in srgb, var(--ss-accent-cyan) 16%, transparent) !important; color: #0F8577 !important; }
.ss-shell .badge.bg-warning   { background: color-mix(in srgb, var(--ss-accent-yellow) 22%, transparent) !important; color: #8A5A00 !important; }
.ss-shell .badge.bg-info      { background: color-mix(in srgb, #3D87D8 16%, transparent) !important; color: #2563A8 !important; }
.ss-shell .badge.bg-danger    { background: color-mix(in srgb, var(--ss-danger) 15%, transparent) !important; color: #B4373B !important; }
.ss-shell .badge.bg-primary   { background: var(--ss-primary-soft) !important; color: var(--ss-primary) !important; }
.ss-shell .badge.bg-secondary { background: color-mix(in srgb, var(--ss-muted) 14%, transparent) !important; color: var(--ss-text-muted) !important; }
.ss-shell .badge.bg-light     { background: var(--ss-surface-soft) !important; color: var(--ss-text-muted) !important; }
@media (prefers-color-scheme: dark) {
    .ss-shell .badge.bg-success { color: var(--ss-accent-cyan) !important; }
    .ss-shell .badge.bg-warning { color: #FFC85C !important; }
    .ss-shell .badge.bg-info    { color: #7FB5EA !important; }
    .ss-shell .badge.bg-danger  { color: #F08A7A !important; }
}

/* ── Quiet row actions: small outline buttons become ghost pills ────────── */
.ss-shell .btn-sm {
    border-radius: 999px;
    padding: 0.28rem 0.85rem;
    font-size: 0.78rem;
}
.ss-shell .btn-outline-secondary {
    --bs-btn-color: var(--ss-text-muted);
    --bs-btn-border-color: var(--ss-border);
    --bs-btn-hover-color: var(--ss-primary);
    --bs-btn-hover-bg: var(--ss-primary-soft);
    --bs-btn-hover-border-color: var(--ss-accent-border);
    --bs-btn-active-color: var(--ss-primary);
    --bs-btn-active-bg: var(--ss-primary-soft);
    --bs-btn-active-border-color: var(--ss-accent-border);
}
.ss-shell .btn-outline-warning {
    --bs-btn-color: #8A5A00;
    --bs-btn-border-color: color-mix(in srgb, var(--ss-accent-yellow) 45%, transparent);
    --bs-btn-hover-color: #6E4700;
    --bs-btn-hover-bg: color-mix(in srgb, var(--ss-accent-yellow) 20%, transparent);
    --bs-btn-hover-border-color: var(--ss-accent-yellow);
    --bs-btn-active-color: #6E4700;
    --bs-btn-active-bg: color-mix(in srgb, var(--ss-accent-yellow) 26%, transparent);
    --bs-btn-active-border-color: var(--ss-accent-yellow);
}
.ss-shell .btn-outline-success {
    --bs-btn-color: #0F8577;
    --bs-btn-border-color: color-mix(in srgb, var(--ss-accent-cyan) 45%, transparent);
    --bs-btn-hover-color: #0B6459;
    --bs-btn-hover-bg: color-mix(in srgb, var(--ss-accent-cyan) 16%, transparent);
    --bs-btn-hover-border-color: var(--ss-accent-cyan);
    --bs-btn-active-color: #0B6459;
    --bs-btn-active-bg: color-mix(in srgb, var(--ss-accent-cyan) 22%, transparent);
    --bs-btn-active-border-color: var(--ss-accent-cyan);
}
@media (prefers-color-scheme: dark) {
    .ss-shell .btn-outline-warning { --bs-btn-color: #FFC85C; --bs-btn-hover-color: #FFD98A; }
    .ss-shell .btn-outline-success { --bs-btn-color: var(--ss-accent-cyan); --bs-btn-hover-color: #7CE8DA; }
}

/* ── Filter controls in the site language ───────────────────────────────── */
.ss-shell .form-control,
.ss-shell .form-select {
    border-radius: 0.8rem;
    border-color: var(--ss-border);
}
.ss-shell .form-control:focus,
.ss-shell .form-select:focus {
    border-color: var(--ss-primary);
    box-shadow: 0 0 0 3px var(--ss-primary-soft);
}
.ss-shell input[type="search"].form-control { border-radius: 999px; }

/* ── Calendar sync: elevated, calm control room ───────────────────────── */
.ss-sync-shell {
    max-width: 1120px;
    margin: 0 auto;
}

.ss-sync-breadcrumb {
    margin-bottom: 1rem;
    font-size: 0.78rem;
}
.ss-sync-breadcrumb .breadcrumb-item + .breadcrumb-item::before { opacity: 0.45; }

.ss-sync-hero {
    position: relative;
    isolation: isolate;
    display: grid;
    grid-template-columns: minmax(0, 1.45fr) minmax(260px, 0.75fr);
    gap: 2rem;
    align-items: center;
    overflow: hidden;
    padding: clamp(1.7rem, 4vw, 3rem);
    border: 1px solid color-mix(in srgb, var(--ss-primary) 14%, var(--ss-border));
    border-radius: 1.65rem;
    background:
        radial-gradient(circle at 9% 0%, color-mix(in srgb, var(--ss-accent-cyan) 20%, transparent), transparent 32%),
        radial-gradient(circle at 100% 100%, color-mix(in srgb, var(--ss-primary) 18%, transparent), transparent 42%),
        linear-gradient(145deg, color-mix(in srgb, var(--ss-surface) 97%, white), var(--ss-surface));
    box-shadow:
        0 26px 70px -44px rgba(31, 25, 111, 0.72),
        0 10px 26px -20px rgba(31, 25, 111, 0.34),
        inset 0 1px 0 rgba(255,255,255,0.74);
}
.ss-sync-hero::before {
    content: "";
    position: absolute;
    z-index: -1;
    width: 18rem;
    height: 18rem;
    right: -8rem;
    top: -10rem;
    border: 1px solid color-mix(in srgb, var(--ss-primary) 16%, transparent);
    border-radius: 50%;
    box-shadow: 0 0 0 3rem color-mix(in srgb, var(--ss-primary) 4%, transparent),
                0 0 0 6rem color-mix(in srgb, var(--ss-primary) 2%, transparent);
}
.ss-sync-kicker,
.ss-sync-step {
    display: inline-block;
    margin-bottom: 0.55rem;
    color: var(--ss-primary);
    font-size: 0.69rem;
    font-weight: 800;
    letter-spacing: 0.13em;
    text-transform: uppercase;
}
.ss-sync-hero h1 {
    max-width: 16ch;
    margin: 0 0 0.75rem;
}
.ss-sync-hero-copy > p {
    max-width: 58ch;
    margin: 0;
    color: var(--ss-text-muted);
    font-size: 0.98rem;
    line-height: 1.65;
}
.ss-sync-flow {
    display: grid;
    grid-template-columns: 1fr 42px 1fr;
    align-items: center;
    gap: 0.35rem;
    padding: 1rem;
    border: 1px solid color-mix(in srgb, var(--ss-primary) 12%, var(--ss-border));
    border-radius: 1.15rem;
    background: color-mix(in srgb, var(--ss-surface) 80%, transparent);
    box-shadow: 0 12px 32px -26px rgba(31, 25, 111, 0.9), inset 0 1px 0 rgba(255,255,255,0.7);
    backdrop-filter: blur(14px);
}
.ss-sync-flow svg {
    width: 100%;
    fill: none;
    stroke: var(--ss-primary);
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}
.ss-sync-flow-node {
    display: grid;
    min-height: 3.2rem;
    place-items: center;
    padding: 0.5rem;
    border: 1px solid var(--ss-border);
    border-radius: 0.85rem;
    background: var(--ss-surface);
    color: var(--ss-ink);
    font-size: 0.74rem;
    font-weight: 750;
    text-align: center;
    box-shadow: var(--ss-shadow-xs);
}
.ss-sync-flow-node.is-destination {
    border-color: color-mix(in srgb, var(--ss-primary) 36%, var(--ss-border));
    background: var(--ss-primary-soft);
    color: var(--ss-primary);
}
.ss-sync-flow small {
    grid-column: 1 / -1;
    margin-top: 0.4rem;
    color: var(--ss-text-muted);
    font-size: 0.68rem;
    text-align: center;
}

.ss-sync-result {
    --sync-result-color: var(--ss-success);
    position: relative;
    overflow: hidden;
    margin-top: 1.25rem;
    padding: 1.35rem;
    border: 1px solid color-mix(in srgb, var(--sync-result-color) 44%, var(--ss-border));
    border-radius: 1.35rem;
    background: linear-gradient(145deg,
        color-mix(in srgb, var(--sync-result-color) 7%, var(--ss-surface)),
        var(--ss-surface) 55%);
    box-shadow: 0 18px 46px -36px color-mix(in srgb, var(--sync-result-color) 70%, black);
}
.ss-sync-result.is-warning { --sync-result-color: var(--ss-warning); }
.ss-sync-result.is-error { --sync-result-color: var(--ss-danger); }
.ss-sync-result::before {
    content: "";
    position: absolute;
    inset: 0 auto 0 0;
    width: 4px;
    background: var(--sync-result-color);
}
.ss-sync-result-head,
.ss-sync-result-head > div {
    display: flex;
    align-items: center;
}
.ss-sync-result-head { justify-content: space-between; gap: 1rem; margin-bottom: 1rem; }
.ss-sync-result-mark {
    width: 0.65rem;
    height: 0.65rem;
    margin-right: 0.65rem;
    border-radius: 50%;
    background: var(--sync-result-color);
    box-shadow: 0 0 0 5px color-mix(in srgb, var(--sync-result-color) 14%, transparent);
}
.ss-sync-result h2 { margin: 0; font-size: 1rem; }
.ss-sync-result-state {
    padding: 0.35rem 0.75rem;
    border-radius: 999px;
    background: color-mix(in srgb, var(--sync-result-color) 12%, transparent);
    color: color-mix(in srgb, var(--sync-result-color) 78%, var(--ss-ink));
    font-size: 0.7rem;
    font-weight: 750;
}
.ss-sync-metrics {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.75rem;
}
.ss-sync-metric {
    min-width: 0;
    padding: 0.9rem 1rem;
    border: 1px solid var(--ss-border-light);
    border-radius: 1rem;
    background: color-mix(in srgb, var(--ss-surface) 88%, transparent);
    box-shadow: 0 8px 22px -22px rgba(20, 16, 75, 0.9), inset 0 1px 0 rgba(255,255,255,0.7);
}
.ss-sync-metric span { display: block; color: var(--ss-text-muted); font-size: 0.72rem; }
.ss-sync-metric strong { display: block; margin-top: 0.15rem; font-size: 1.55rem; line-height: 1; }
.ss-sync-metric.is-created strong { color: var(--ss-success); }
.ss-sync-metric.is-updated strong { color: var(--ss-primary); }
.ss-sync-metric.is-skipped strong { color: var(--ss-warning); }
.ss-sync-metric.is-errors strong { color: var(--ss-danger); }
.ss-sync-messages { margin: 1rem 0 0; padding-left: 1.15rem; color: var(--ss-text-muted); font-size: 0.78rem; }
.ss-sync-reconnect {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    margin-top: 1rem;
    padding: 0.85rem 1rem;
    border-radius: 0.9rem;
    background: color-mix(in srgb, var(--ss-warning) 14%, transparent);
}
.ss-sync-reconnect p { margin: 0.2rem 0 0; font-size: 0.75rem; }

.ss-sync-workspace {
    display: grid;
    grid-template-columns: minmax(0, 1.72fr) minmax(270px, 0.78fr);
    gap: 1.25rem;
    align-items: start;
    margin-top: 1.25rem;
}
.ss-sync-form-card,
.ss-sync-guide {
    border: 1px solid var(--ss-border);
    border-radius: 1.4rem;
    box-shadow: 0 20px 58px -44px rgba(31, 25, 111, 0.8), inset 0 1px 0 rgba(255,255,255,0.7);
}
.ss-sync-form-card {
    padding: clamp(1.25rem, 3vw, 2rem);
    background: linear-gradient(155deg, var(--ss-surface), color-mix(in srgb, var(--ss-surface) 91%, var(--ss-primary-soft)));
}
.ss-sync-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 1.5rem;
    padding-bottom: 1rem;
    border-bottom: 1px solid var(--ss-border-light);
}
.ss-sync-card-head h2 { margin: 0; font-size: 1.35rem; }
.ss-sync-ready-dot {
    width: 0.7rem;
    height: 0.7rem;
    border-radius: 50%;
    background: var(--ss-accent-cyan);
    box-shadow: 0 0 0 6px color-mix(in srgb, var(--ss-accent-cyan) 14%, transparent);
}
.ss-sync-field { margin-bottom: 1.15rem; }
.ss-sync-field .form-label,
.ss-sync-advanced .form-label,
.ss-sync-period .form-label {
    color: var(--ss-ink);
    font-size: 0.78rem;
    font-weight: 750;
}
.ss-sync-empty-calendar,
.ss-sync-self-note {
    padding: 0.75rem 0.9rem;
    border: 1px dashed color-mix(in srgb, var(--ss-primary) 24%, var(--ss-border));
    border-radius: 0.85rem;
    background: var(--ss-primary-soft);
    color: var(--ss-text-muted);
    font-size: 0.78rem;
}
.ss-sync-self-note { display: flex; align-items: center; gap: 0.55rem; margin-bottom: 1.2rem; }
.ss-sync-self-note span { color: var(--ss-success); font-weight: 800; }
.ss-sync-advanced {
    margin: 0.2rem 0 1.35rem;
    border: 1px solid var(--ss-border-light);
    border-radius: 0.95rem;
    background: color-mix(in srgb, var(--ss-bg-alt) 55%, transparent);
}
.ss-sync-advanced summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.8rem 0.95rem;
    color: var(--ss-text-muted);
    font-size: 0.78rem;
    font-weight: 700;
    cursor: pointer;
    list-style: none;
}
.ss-sync-advanced summary::-webkit-details-marker { display: none; }
.ss-sync-advanced summary::after { content: "+"; color: var(--ss-primary); font-size: 1rem; }
.ss-sync-advanced[open] summary::after { content: "−"; }
.ss-sync-advanced summary small { margin-left: auto; font-size: 0.65rem; font-weight: 550; opacity: 0.75; }
.ss-sync-advanced-body { padding: 0 0.95rem 0.95rem; }
.ss-sync-period { margin: 0; padding: 0; border: 0; }
.ss-sync-period legend { margin-bottom: 0.65rem; color: var(--ss-ink); font-size: 0.78rem; font-weight: 750; }
.ss-sync-date-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.85rem; }
.ss-sync-actions { display: flex; flex-wrap: wrap; gap: 0.7rem; margin-top: 1.5rem; }
.ss-sync-primary-action {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    border-radius: 999px;
    padding-inline: 1.15rem;
    box-shadow: 0 10px 24px -14px color-mix(in srgb, var(--ss-primary) 75%, black);
}
.ss-sync-primary-action svg { width: 1rem; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }

.ss-sync-guide {
    position: sticky;
    top: 78px;
    overflow: hidden;
    padding: 1.5rem;
    border-color: rgba(255,255,255,0.1);
    background:
        radial-gradient(circle at 100% 0%, rgba(61, 218, 200, 0.18), transparent 36%),
        linear-gradient(155deg, var(--ss-deep-3), var(--ss-deep));
    color: var(--ss-on-deep);
    box-shadow: 0 24px 50px -34px rgba(22, 17, 85, 0.95);
}
.ss-sync-guide-icon {
    display: grid;
    width: 2.75rem;
    height: 2.75rem;
    place-items: center;
    margin-bottom: 1.2rem;
    border: 1px solid rgba(255,255,255,0.14);
    border-radius: 0.9rem;
    background: rgba(255,255,255,0.08);
    color: var(--ss-accent-cyan);
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.12);
}
.ss-sync-guide-icon svg { width: 1.4rem; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.ss-sync-guide h2 { margin: 0 0 0.6rem; color: #fff; font-family: inherit; font-size: 1.05rem; }
.ss-sync-guide p,
.ss-sync-guide li { color: var(--ss-on-deep-soft); font-size: 0.78rem; line-height: 1.55; }
.ss-sync-guide ul { display: grid; gap: 0.55rem; margin: 1rem 0 1.35rem; padding-left: 1.1rem; }
.ss-sync-guide li::marker { color: var(--ss-accent-cyan); }
.ss-sync-guide-link { color: #fff; font-size: 0.78rem; font-weight: 700; text-decoration: none; }
.ss-sync-guide-link:hover { color: var(--ss-accent-cyan); }

/* topbar quick action and its short-lived result */
.ss-quick-sync-form { margin: 0; }
.ss-quick-sync-btn {
    display: grid;
    width: 2.25rem;
    height: 2.25rem;
    place-items: center;
    padding: 0;
    border: 1px solid rgba(255,255,255,0.18);
    border-radius: 50%;
    background: rgba(255,255,255,0.08);
    color: var(--ss-on-deep);
    cursor: pointer;
    transition: background 150ms ease, border-color 150ms ease, transform 150ms ease;
}
.ss-quick-sync-btn:hover { border-color: rgba(255,255,255,0.34); background: rgba(255,255,255,0.14); transform: translateY(-1px); }
.ss-quick-sync-btn:disabled { cursor: wait; opacity: 0.82; }
.ss-quick-sync-icon { width: 1.05rem; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.ss-quick-sync-btn.is-loading .ss-quick-sync-icon { animation: ss-quick-sync-spin 800ms linear infinite; }
@keyframes ss-quick-sync-spin { to { transform: rotate(360deg); } }
.ss-quick-sync-status {
    position: fixed;
    z-index: calc(var(--ss-z-dropdown) + 10);
    top: 4.35rem;
    right: 1.4rem;
    display: flex;
    align-items: center;
    gap: 0.55rem;
    max-width: min(30rem, calc(100vw - 2rem));
    padding: 0.72rem 0.85rem;
    border: 1px solid var(--ss-border);
    border-radius: 0.9rem;
    background: color-mix(in srgb, var(--ss-surface) 94%, transparent);
    color: var(--ss-ink);
    font-size: 0.78rem;
    font-weight: 650;
    box-shadow: 0 18px 46px -24px rgba(17, 13, 69, 0.65);
    backdrop-filter: blur(18px);
    animation: ss-status-enter 180ms ease-out both;
}
.ss-quick-sync-status[hidden] { display: none; }
.ss-quick-sync-status.is-leaving { opacity: 0; transform: translateY(-5px); transition: 180ms ease; }
.ss-quick-sync-status-dot { width: 0.55rem; height: 0.55rem; flex: none; border-radius: 50%; background: var(--ss-primary); }
.ss-quick-sync-status.is-running .ss-quick-sync-status-dot { box-shadow: 0 0 0 5px var(--ss-primary-soft); animation: ss-status-pulse 1s ease-in-out infinite; }
.ss-quick-sync-status.is-success .ss-quick-sync-status-dot { background: var(--ss-success); }
.ss-quick-sync-status.is-error .ss-quick-sync-status-dot { background: var(--ss-danger); }
.ss-quick-sync-status a { margin-left: 0.2rem; white-space: nowrap; }
@keyframes ss-status-enter { from { opacity: 0; transform: translateY(-7px); } }
@keyframes ss-status-pulse { 50% { transform: scale(0.72); opacity: 0.7; } }

/* A failed remote/local avatar never leaves the browser's broken-image glyph. */
.ss-avatar-image { width: 100%; height: 100%; display: block; object-fit: cover; }
.ss-avatar > [data-ss-avatar-fallback] { line-height: 1; }

@media (prefers-color-scheme: dark) {
    .ss-sync-hero,
    .ss-sync-form-card { box-shadow: 0 24px 60px -40px rgba(0,0,0,0.95), inset 0 1px 0 rgba(255,255,255,0.05); }
    .ss-sync-flow,
    .ss-sync-metric { box-shadow: inset 0 1px 0 rgba(255,255,255,0.05); }
    .ss-sync-result-state { color: var(--sync-result-color); }
    .ss-quick-sync-status { background: color-mix(in srgb, var(--ss-surface) 94%, transparent); }
}

@media (max-width: 820px) {
    .ss-sync-hero,
    .ss-sync-workspace { grid-template-columns: 1fr; }
    .ss-sync-flow { max-width: 28rem; }
    .ss-sync-guide { position: static; }
}

@media (max-width: 560px) {
    .ss-sync-hero { padding: 1.35rem; border-radius: 1.25rem; }
    .ss-sync-flow { grid-template-columns: 1fr 30px 1fr; padding: 0.75rem; }
    .ss-sync-metrics { grid-template-columns: 1fr 1fr; }
    .ss-sync-result-head,
    .ss-sync-reconnect { align-items: flex-start; flex-direction: column; }
    .ss-sync-date-grid { grid-template-columns: 1fr; }
    .ss-sync-actions { flex-direction: column; }
    .ss-sync-actions .btn { width: 100%; justify-content: center; }
    .ss-quick-sync-status { left: 1rem; right: 1rem; }
}

/* ── Logged-out (plain) pages ───────────────────────────────────────────── */
body.ss-plain { margin-bottom: 0; }
.ss-plain-top {
    display: flex;
    justify-content: center;
    padding: 1.4rem 0 0.4rem;
}
.ss-plain-logo {
    font-family: var(--ss-serif);
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--ss-ink);
    text-decoration: none;
}
.ss-plain-logo em { color: var(--ss-primary); font-style: normal; }
.ss-plain-logo:hover { color: var(--ss-ink); }

/* ── Mobile: sidebar becomes an off-canvas drawer ───────────────────────── */
.ss-backdrop {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(16, 18, 35, 0.5);
    z-index: 2005;
}
.ss-backdrop.is-open { display: block; }

@media (max-width: 991px) {
    .ss-side {
        position: fixed;
        left: 0;
        top: 0;
        bottom: 0;
        transform: translateX(-100%);
        transition: transform 0.25s cubic-bezier(0.2, 0.8, 0.2, 1);
        z-index: 2010;
        box-shadow: 0 0 60px rgba(0, 0, 0, 0.35);
    }
    .ss-side.is-open { transform: none; }
    .ss-side-toggle { display: inline-flex; }
    .ss-top { padding: 0 1rem; }
    .ss-content { padding: 1.4rem 1rem 3rem; }
}
