/* ADM-14-03 admin refresh. Every rule is scoped to the admin palette (html[data-palette=neutral]) so the parent web and
   the landing page never change. Same language as the landing page: its navy ink (#1B1F3B) for the rail, its blue
   (mode.blue.edge #1E3FCC) as the one accent, cool canvas, soft cards, pressable buttons with a 3px edge.
   test/web-accessibility-audit.test.mjs reads the palette block below and measures every text/edge pair. */
html[data-palette=neutral]{--tb-color-web-canvas:#F4F6FB;--tb-color-web-subtle:#EAEFF8;--tb-color-web-primary:#1E3FCC;--tb-color-web-focus:#1E3FCC;--web-primary-hover:#1733A8;--web-primary-edge:#142C8F;--web-card-border:#DCE3F5}
html[data-palette=neutral] body{background:var(--tb-color-web-canvas)}

/* Rail: navy, light text; the current page has a lighter fill, a blue edge and bold text (never colour alone). */
.shell-admin .rail{background:#1B1F3B;color:#E8ECFA;border-color:#1B1F3B}
.shell-admin .brand-name{color:#FFFFFF}.shell-admin .brand-sub{color:#A9AED0}
.shell-admin .brand-head .slot{width:44px;height:44px;border-radius:12px;background:#FFFFFF;padding:2px}
.shell-admin .site-nav .nav-group-title{color:#A9AED0;font-size:.75rem;margin-top:8px}
.shell-admin .site-nav a{gap:10px;color:#E8ECFA;font-size:.9375rem;padding:8px 12px}
.shell-admin .site-nav a:hover{background:#2A3060}
.shell-admin .site-nav a[aria-current=page]{background:#2A3060;border-left-color:#8FA6FF;color:#FFFFFF;font-weight:700}
.shell-admin .rail :focus-visible{outline-color:#FFE58F}
.shell-admin .menu-toggle{background:#2A3060;color:#FFFFFF;border-color:#8FA6FF}
.nav-icon{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.nav-soon{display:flex;align-items:center;gap:10px;min-height:40px;padding:6px 8px 6px 16px;color:#A9AED0;font-size:.875rem;white-space:nowrap}
.soon-tag{margin-left:auto;padding:0 8px;border:1px solid #A9AED0;border-radius:999px;font-size:.75rem;white-space:nowrap}
@media(min-width:1024px){html[data-palette=neutral] .shell{grid-template-columns:264px minmax(0,1fr)}.shell-admin .rail{padding:20px 16px}}

/* Page header: breadcrumbs, title, one sentence; the page's main action on the right. */
html[data-palette=neutral] .canvas{max-width:1320px}
html[data-palette=neutral] .page-head{padding-bottom:20px;border-bottom:1px solid #DCE3F5;margin-bottom:24px}
html[data-palette=neutral] h1{margin:6px 0 8px;font-size:1.875rem;line-height:2.375rem}
.breadcrumbs ol{display:flex;flex-wrap:wrap;align-items:center;gap:4px;list-style:none;margin:0;padding:0;font-size:.875rem;color:var(--tb-color-web-muted)}
.breadcrumbs li+li::before{content:'›';margin-right:4px;color:var(--tb-color-web-muted)}
.breadcrumbs a{display:inline-flex;align-items:center;min-height:32px;font-weight:600}
.breadcrumbs [aria-current=page]{color:var(--tb-color-web-ink);font-weight:600}
html[data-palette=neutral] .page-head .action-row{margin-top:0}

/* Cards: white, soft edge and shadow, spaced; a card inside a card is flat on the canvas tone; empty shells vanish. */
html[data-palette=neutral] .canvas .panel{border-color:#DCE3F5;border-radius:16px;padding:20px 24px;box-shadow:0 1px 2px #1b1f3b0f,0 12px 28px -18px #1b1f3b33}
html[data-palette=neutral] .canvas .panel+.panel,html[data-palette=neutral] .canvas .panel+div>.panel:first-child{margin-top:20px}
html[data-palette=neutral] .canvas .grid>.panel{margin:0}
html[data-palette=neutral] .canvas .panel .panel{background:var(--tb-color-web-canvas);box-shadow:none;padding:16px 20px}
html[data-palette=neutral] .canvas .panel:empty{display:none}
html[data-palette=neutral] .canvas .panel h2{font-size:1.1875rem;margin-bottom:8px}
html[data-palette=neutral] .canvas .panel>h2+.note,html[data-palette=neutral] .canvas .panel>h2+p{margin-top:-2px}

/* Controls: one look for every input, select and textarea, labelled or bare; long text fields keep full width. */
html[data-palette=neutral] .canvas :is(input:not([type=checkbox],[type=radio],[type=file],[type=search]),select,textarea),
html[data-palette=neutral] .canvas input[type=search]{border:1.5px solid var(--tb-color-web-line);border-radius:10px;background:#FFFFFF;color:var(--tb-color-web-ink);padding:9px 12px}
html[data-palette=neutral] .canvas :is(input,select,textarea):hover{border-color:var(--tb-color-web-primary)}
html[data-palette=neutral] .canvas :is(input:not([type=checkbox],[type=radio],[type=file]),select){height:44px}
html[data-palette=neutral] .canvas .field:not(:has(textarea)){max-width:44rem}
html[data-palette=neutral] :is(.item-open-line,.curriculum-create,.import-lookup) input{flex:0 1 32rem}
html[data-palette=neutral] .canvas .panel>label,html[data-palette=neutral] .canvas .release-queue>label{display:block;font-weight:700;margin:12px 0 6px}
html[data-palette=neutral] .canvas .panel>:is(input,select):not([type=checkbox],[type=file]){width:min(100%,26rem);vertical-align:middle}
html[data-palette=neutral] .canvas .panel>:is(input,select)+button{margin-left:8px;vertical-align:middle}
html[data-palette=neutral] .canvas input[type=checkbox]{width:20px;height:20px;min-height:0;margin:0;flex:none;accent-color:var(--tb-color-web-primary)}
html[data-palette=neutral] .canvas label:has(>input[type=checkbox]),.check-row{display:flex;align-items:center;gap:10px;margin:12px 0;font-weight:600}
html[data-palette=neutral] .canvas input[type=file]{display:block;width:100%;padding:10px;border:1.5px dashed var(--tb-color-web-line);border-radius:12px;background:var(--tb-color-web-canvas)}
html[data-palette=neutral] .canvas input[type=file]::file-selector-button{margin-right:12px;padding:8px 14px;border:1.5px solid var(--tb-color-web-primary);border-radius:10px;background:#FFFFFF;color:var(--tb-color-web-primary);font:inherit;font-weight:700;cursor:pointer}

/* Buttons (same scale as the parent web): primary has a 3px darker edge and sinks on press; outlined secondary;
   destructive actions are outlined in the error colour; bare buttons look secondary. */
html[data-palette=neutral] .button{border-radius:10px;font-weight:700;gap:8px}
html[data-palette=neutral] .button:hover{filter:none}
html[data-palette=neutral] .button:not(.secondary):not([disabled]){box-shadow:0 3px 0 var(--web-primary-edge)}
html[data-palette=neutral] .button:not(.secondary):not([disabled]):hover{background:var(--web-primary-hover);border-color:var(--web-primary-hover)}
html[data-palette=neutral] .button:active{transform:translateY(2px);box-shadow:none}
html[data-palette=neutral] .button.secondary:not([disabled]):hover{background:var(--tb-color-web-subtle)}
html[data-palette=neutral] .button.danger:not([disabled]){border-color:var(--tb-color-web-error);color:var(--tb-color-web-error)}
html[data-palette=neutral] .canvas button:not([class]){display:inline-flex;align-items:center;padding:8px 16px;border:2px solid var(--tb-color-web-primary);border-radius:10px;background:#FFFFFF;color:var(--tb-color-web-primary);font-weight:700;cursor:pointer}
html[data-palette=neutral] .canvas button:not([class])[disabled]{border-color:var(--tb-color-web-line);background:var(--tb-color-web-subtle);color:var(--tb-color-web-muted);cursor:not-allowed}
html[data-palette=neutral] .action-row{gap:10px;align-items:center}

/* Banners and filters. */
html[data-palette=neutral] .banner{border-radius:0 12px 12px 0;background:var(--tb-color-web-subtle);color:var(--tb-color-web-ink)}
html[data-palette=neutral] .banner.error{background:#FFFFFF;border:1px solid var(--tb-color-web-error);border-left-width:4px}
.filters{display:flex;flex-wrap:wrap;align-items:end;gap:12px 16px;margin:8px 0 16px}.filters .field{flex:1 1 12rem;max-width:18rem;margin:0}
.filter-panel{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,13rem),1fr));gap:0 16px;align-items:end}
.filter-panel>:is(h2,p,.banner,.button,button){grid-column:1/-1;justify-self:start}.filter-panel>.button{margin-top:8px}

/* Tables: quiet header, row hover, sortable columns, quick filter toolbar. */
html[data-palette=neutral] .table-scroll{border-color:#DCE3F5;border-radius:12px;background:#FFFFFF}
html[data-palette=neutral] th{font-size:.8125rem;font-weight:700;color:var(--tb-color-web-muted);background:var(--tb-color-web-subtle);border-bottom-color:#DCE3F5}
html[data-palette=neutral] td{border-bottom-color:#DCE3F5;vertical-align:middle}
html[data-palette=neutral] tbody tr:hover>td{background:#F7F9FF}
.sort-button{display:inline;min-height:0;padding:4px 0;border:0;background:none;color:inherit;font:inherit;font-weight:700;text-align:left;cursor:pointer}
.sort-mark{margin-left:4px;font-size:.875rem}td .button{white-space:nowrap}th[aria-sort] .sort-mark{font-size:0}
th[aria-sort=ascending] .sort-mark::after{content:'↑';font-size:.875rem}th[aria-sort=descending] .sort-mark::after{content:'↓';font-size:.875rem}
.table-toolbar{display:flex;flex-wrap:wrap;align-items:end;justify-content:space-between;gap:8px 16px;margin:4px 0 12px}
.table-filter{display:grid;gap:4px;flex:0 1 20rem}.table-filter label{font-weight:700;font-size:.875rem}.table-count{margin:0;font-size:.875rem}
@media(max-width:767px){html[data-palette=neutral] .table-scroll:has(.table-cards){background:transparent}html[data-palette=neutral] .table-cards tr{border-color:#DCE3F5}}

/* Item bank and Pilot lists: compact cards, ids in a mono face, two columns on wide screens. */
.item-bank-rows{display:grid;gap:12px;margin-top:16px}
html[data-palette=neutral] .item-bank-rows>.panel+.panel{margin-top:0}
.item-bank-rows h3{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9375rem;line-height:1.4;margin:0 0 8px}
.item-bank-rows .panel p{margin:4px 0;font-size:.875rem}.item-bank-rows .action-row{margin-top:12px}
@media(min-width:1280px){.item-bank-rows{grid-template-columns:repeat(2,minmax(0,1fr))}.item-bank-rows>:not(.panel){grid-column:1/-1}}
.pilot-preview,.pilot-list{display:grid;gap:8px;padding-left:20px}.pilot-list li{overflow-wrap:anywhere}

/* ADM-14-05 codes and licences: the one-time code reads large and copyable; summaries and checklist cards wrap on phones. */
.premium-code{margin:12px 0;font:600 1.5rem/1.3 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.06em;overflow-wrap:anywhere;user-select:all}
.premium-code-reveal textarea{display:block;width:100%;max-width:44rem;min-height:15rem;margin:4px 0 8px;font-size:.9375rem;line-height:1.5}.premium-code-reveal label{display:block;margin-top:16px;font-weight:600}
.premium-checklist-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(10rem,1fr));gap:12px;margin:8px 0 12px}.premium-checklist-cards .metric-card{min-height:0}
.premium-summary{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 16px;margin:12px 0}.premium-summary dt{font-weight:600;color:var(--tb-color-web-muted)}.premium-summary dd{margin:0;overflow-wrap:anywhere}
.premium-confirm{margin:12px 0;border-left:4px solid var(--tb-color-web-primary)}
:is(.premium-codes,.premium-licences,.premium-licence) .status-chip{white-space:normal;max-width:100%;height:auto;overflow-wrap:anywhere}
html[data-palette=neutral] .canvas :is(.premium-codes,.premium-licences,.premium-audit,.premium-licence) .filters .field{max-width:18rem}

/* Phones: the rail is a navy top bar; cards breathe less. */
@media(max-width:767px){html[data-palette=neutral] .canvas .panel{padding:16px}html[data-palette=neutral] h1{font-size:1.5rem;line-height:2rem}}
/* ADM-14-09 contact inbox: visitor text keeps its line breaks, long words wrap. */
.contact-message{white-space:pre-wrap;overflow-wrap:anywhere;max-width:48rem;padding:12px 16px;border-radius:12px;background:var(--tb-color-web-surface-muted,#F5F7FB);margin:12px 0}
.contact-inbox td{overflow-wrap:anywhere}.contact-inbox .status-chip{white-space:nowrap}
.contact-detail .action-row{margin-bottom:12px}
html[data-palette=neutral] .canvas .contact-inbox .filters .field,.contact-inbox .filters .field{max-width:18rem}
