/* /assets/blake-enterprise.css — Blake Wire "Enterprise Clean" design system (Phase A, Oct 2026)
   Opt-in only: a page links this file and sets <html data-bwe="<page>">. Pages without data-bwe are untouched.
   Screen only: every rule (tokens included) sits inside @media screen (plus one print rule that hides injected chrome), so printed pages, travelers, labels,
   certificates and audit records keep their own print layout.
   Linked with ?v=<sha1 prefix> and served "immutable": change the file -> update the ?v= in the pages
   (assets/test/enterprise.test.js fails when they drift).
   Public before login (the sign-in page uses it): nothing here may describe data or internal routes. */
@media screen {
:root[data-bwe] {
  --bwe-brand:#2557a7; --bwe-brand-700:#1b4486; --bwe-brand-50:#edf2fb; --bwe-brand-100:#d6e2f6;
  --bwe-navy:#0c2149; --bwe-navy-2:#12305f; --bwe-logo:#365eab;
  --bwe-bg:#f3f3f3; --bwe-surface:#fff; --bwe-surface2:#fafaf9; --bwe-surface3:#f3f4f6;
  --bwe-border:#dddbda; --bwe-border-strong:#c9c7c5;
  --bwe-text:#181818; --bwe-text2:#3e3e3c; --bwe-muted:#5c5c5c; --bwe-subtle:#757371;
  --bwe-danger:#b91c1c; --bwe-danger-bg:#fef2f2; --bwe-danger-bd:#fecaca;
  --bwe-warn:#92400e;   --bwe-warn-bg:#fffbeb;   --bwe-warn-bd:#fde68a;
  --bwe-ok:#15803d;     --bwe-ok-bg:#f0fdf4;     --bwe-ok-bd:#bbf7d0;
  --bwe-info:#1d4ed8;   --bwe-info-bg:#eff6ff;   --bwe-info-bd:#bfdbfe;
  --bwe-font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --bwe-mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --bwe-r:4px; --bwe-r-lg:6px;
  --bwe-sh-1:0 1px 1px rgba(0,0,0,.06); --bwe-sh-2:0 2px 6px rgba(0,0,0,.10); --bwe-sh-3:0 16px 40px -12px rgba(0,0,0,.28);
  --bwe-ring:0 0 0 2px #fff,0 0 0 4px var(--bwe-brand);
  --bwe-side-w:232px; --bwe-rail-w:60px; --bwe-head-h:60px;
}
:root[data-bwe] body { font-family:var(--bwe-font); background:var(--bwe-bg); color:var(--bwe-text); -webkit-font-smoothing:antialiased; }
:root[data-bwe] :focus-visible { outline:none; box-shadow:var(--bwe-ring) !important; border-radius:var(--bwe-r); }
.bwe-sr { position:absolute !important; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }

/* ── Shell: sidebar (#bwe-side). Wide by default; body.bwe-rail = icon rail; phone = drawer ── */
:root[data-bwe]:not([data-embedded]) body.bwe-has-side { padding-left:var(--bwe-side-w); }
:root[data-bwe]:not([data-embedded]) body.bwe-has-side.bwe-rail { padding-left:var(--bwe-rail-w); }
#bwe-side { position:fixed; left:0; top:0; bottom:0; width:var(--bwe-side-w); background:var(--bwe-navy); z-index:900;
  display:flex; flex-direction:column; font-family:var(--bwe-font); color:#c3cfe6; }
:root[data-embedded] #bwe-side, :root[data-embedded] .bwe-menu-btn { display:none !important; }
body.bwe-rail #bwe-side { width:var(--bwe-rail-w); }
#bwe-side .s-scroll { flex:1; overflow-y:auto; overflow-x:hidden; padding:12px 9px; display:flex; flex-direction:column; gap:2px; scrollbar-width:thin; scrollbar-color:#2b4170 transparent; }
#bwe-side .s-brand { display:flex; align-items:center; gap:10px; color:#fff; text-decoration:none; margin:0 0 12px; padding:0 1px; min-height:40px; }
#bwe-side .s-logo { width:40px; height:40px; border-radius:8px; flex-shrink:0; display:block; }
#bwe-side .s-name { font-size:13.5px; font-weight:700; line-height:1.15; white-space:nowrap; }
#bwe-side .s-name small { display:block; font-size:11px; font-weight:500; color:#9fb2d6; }
#bwe-side .s-sec { font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#8ea3c9; margin:12px 10px 4px; white-space:nowrap; }
#bwe-side .s-item { position:relative; display:flex; align-items:center; gap:11px; min-height:38px; padding:0 11px; border-radius:7px;
  color:#c3cfe6; text-decoration:none; font-size:13.5px; font-weight:600; white-space:nowrap; background:none; border:0; width:100%;
  text-align:left; font-family:inherit; cursor:pointer; transition:background .15s,color .15s; }
#bwe-side .s-item svg { width:18px; height:18px; flex-shrink:0; }
#bwe-side .s-item .s-lbl { overflow:hidden; text-overflow:ellipsis; flex:1; }
#bwe-side .s-item .s-chev { width:14px; height:14px; opacity:.6; transition:transform .15s; }
#bwe-side .s-item[aria-expanded="true"] .s-chev { transform:rotate(90deg); }
#bwe-side .s-item:hover { background:rgba(255,255,255,.08); color:#fff; }
#bwe-side .s-item.cur { background:var(--bwe-logo); color:#fff; }
#bwe-side .s-item.cur::before { content:''; position:absolute; left:-9px; top:8px; bottom:8px; width:3px; border-radius:0 3px 3px 0; background:#7fb0ff; }
#bwe-side .s-item.open-folder:not(.cur) { color:#fff; background:rgba(255,255,255,.05); }
#bwe-side .s-sub { display:flex; flex-direction:column; gap:1px; margin:2px 0 6px 20px; padding-left:10px; border-left:1px solid #2b4170; }
#bwe-side .s-sub .s-item { min-height:32px; font-size:12.5px; font-weight:500; padding:0 9px; }
#bwe-side .s-sub .s-item.cur::before { left:-11px; }
#bwe-side .s-foot { border-top:1px solid #1d3463; padding:8px 9px; display:flex; flex-direction:column; gap:2px; }
#bwe-side .tip { display:none; }
body.bwe-rail #bwe-side .s-name, body.bwe-rail #bwe-side .s-sec, body.bwe-rail #bwe-side .s-lbl,
body.bwe-rail #bwe-side .s-chev, body.bwe-rail #bwe-side .s-sub { display:none; }
body.bwe-rail #bwe-side .s-item { justify-content:center; padding:0; }
body.bwe-rail #bwe-side .tip { display:block; position:fixed; left:64px; background:#181818; color:#fff; font-size:12px; padding:5px 9px;
  border-radius:4px; opacity:0; pointer-events:none; transition:opacity .12s; z-index:1000; }
body.bwe-rail #bwe-side .s-item:hover .tip, body.bwe-rail #bwe-side .s-item:focus-visible .tip { opacity:1; }
body.bwe-rail #bwe-side .s-collapse svg { transform:rotate(180deg); }
.bwe-scrim { display:none; }

/* ── Shell: top bar / page header ── */
.bwe-head { display:flex; align-items:center; gap:14px; min-height:var(--bwe-head-h); padding:8px 24px; background:#fff;
  border-bottom:1px solid var(--bwe-border); box-shadow:0 2px 2px -1px rgba(0,0,0,.05); }
.bwe-hgroup { display:flex; flex-direction:column; gap:2px; min-width:0; flex:1; }
.bwe-crumbs { display:flex; align-items:center; gap:6px; font-size:11.5px; color:var(--bwe-muted); min-width:0; flex-wrap:wrap; }
.bwe-crumbs a, .bwe-crumbs button { color:var(--bwe-brand); text-decoration:none; font-weight:600; background:none; border:0; padding:0; font:inherit; font-weight:600; cursor:pointer; }
.bwe-crumbs a:hover, .bwe-crumbs button:hover { text-decoration:underline; }
.bwe-crumbs .sep { color:var(--bwe-subtle); }
.bwe-title { font-size:18px; font-weight:700; color:var(--bwe-text); letter-spacing:-.01em; line-height:1.2; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bwe-icon-btn { display:inline-flex; align-items:center; justify-content:center; gap:6px; height:34px; min-width:34px; padding:0 9px; border-radius:var(--bwe-r);
  border:1px solid var(--bwe-border-strong); background:#fff; color:var(--bwe-text2); font:600 12.5px var(--bwe-font); cursor:pointer; text-decoration:none; }
.bwe-icon-btn:hover { background:var(--bwe-brand-50); color:var(--bwe-brand-700); }
.bwe-icon-btn svg { width:16px; height:16px; }
.bwe-icon-btn.bwe-menu-btn { display:none; }

/* ── Components ── */
.bwe-panel { background:#fff; border:1px solid var(--bwe-border); border-radius:var(--bwe-r-lg); box-shadow:var(--bwe-sh-1); }
.bwe-kpis { display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); background:#fff; border:1px solid var(--bwe-border);
  border-radius:var(--bwe-r-lg); box-shadow:var(--bwe-sh-1); overflow:hidden; }
.bwe-kpi { padding:12px 16px; border:0; border-right:1px solid var(--bwe-border); background:none; text-align:left; font-family:inherit; color:inherit; }
.bwe-kpi:last-child { border-right:none; }
button.bwe-kpi { cursor:pointer; } button.bwe-kpi:hover { background:#f7f9fc; }
.bwe-kpi .l { font-size:10.5px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--bwe-muted); }
.bwe-kpi .v { font-size:24px; font-weight:300; margin-top:2px; font-variant-numeric:tabular-nums; color:var(--bwe-text); }
.bwe-kpi .v.red { color:var(--bwe-danger); } .bwe-kpi .v.amber { color:var(--bwe-warn); } .bwe-kpi .v.green { color:var(--bwe-ok); }
.bwe-kpi .s { font-size:11.5px; color:var(--bwe-muted); margin-top:1px; }
.bwe-pill { display:inline-flex; align-items:center; gap:4px; padding:1px 8px; border-radius:999px; font-size:11.5px; font-weight:700; border:1px solid var(--bwe-border); background:var(--bwe-surface3); color:var(--bwe-text2); }
.bwe-pill.danger { background:var(--bwe-danger-bg); border-color:var(--bwe-danger-bd); color:var(--bwe-danger); }
.bwe-pill.warn { background:var(--bwe-warn-bg); border-color:var(--bwe-warn-bd); color:var(--bwe-warn); }
.bwe-pill.ok { background:var(--bwe-ok-bg); border-color:var(--bwe-ok-bd); color:var(--bwe-ok); }
.bwe-pill.info { background:var(--bwe-info-bg); border-color:var(--bwe-info-bd); color:var(--bwe-info); }

/* ── Mappings for class names existing pages already use (opted-in pages only) ── */
:root[data-bwe] .btn { border-radius:var(--bwe-r); font-weight:600; font-family:var(--bwe-font); }
:root[data-bwe] .btn-primary { background:var(--bwe-brand) !important; color:#fff !important; border:1px solid var(--bwe-brand) !important; }
:root[data-bwe] .btn-primary:hover { background:var(--bwe-brand-700) !important; }
:root[data-bwe] .btn-secondary, :root[data-bwe] .btn-outline { background:#fff !important; color:var(--bwe-brand) !important; border:1px solid var(--bwe-border-strong) !important; }
:root[data-bwe] .btn-secondary:hover, :root[data-bwe] .btn-outline:hover { background:var(--bwe-brand-50) !important; }
:root[data-bwe] .btn-danger { background:var(--bwe-danger) !important; color:#fff !important; }
:root[data-bwe] .modal { border-radius:8px !important; border:1px solid var(--bwe-border); box-shadow:var(--bwe-sh-3) !important; }
:root[data-bwe] .modal-bg { background:rgba(24,24,24,.45) !important; }
:root[data-bwe] .toast { border-radius:6px !important; box-shadow:var(--bwe-sh-3) !important; font-weight:600; }
:root[data-bwe] table th { font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--bwe-muted); font-weight:700; }
:root[data-bwe] input[type=text], :root[data-bwe] input[type=search], :root[data-bwe] input[type=password], :root[data-bwe] input[type=date],
:root[data-bwe] select, :root[data-bwe] textarea { font-family:var(--bwe-font); border-radius:var(--bwe-r); }
:root[data-bwe] input:focus, :root[data-bwe] select:focus, :root[data-bwe] textarea:focus { border-color:var(--bwe-brand) !important; box-shadow:0 0 0 3px rgba(37,87,167,.15) !important; outline:none; }

/* ── Sign-in pages (body.bwe-auth): navy brand panel + card ── */
:root[data-bwe] body.bwe-auth { display:grid !important; grid-template-columns:minmax(380px,44%) 1fr; min-height:100vh; padding:0 !important; margin:0; background:var(--bwe-bg) !important; align-items:stretch !important; justify-content:stretch !important; }
.bwe-auth-art { background:radial-gradient(900px 500px at 20% 0%,rgba(54,94,171,.55),transparent 60%),linear-gradient(160deg,#0c2149,#12305f 60%,#1a3f74);
  color:#fff; display:flex; flex-direction:column; justify-content:space-between; padding:44px 48px; }
.bwe-auth-art .a-logo { height:34px; width:auto; filter:brightness(0) invert(1); align-self:flex-start; }
.bwe-auth-art h2 { font-size:30px; font-weight:700; letter-spacing:-.02em; line-height:1.15; max-width:420px; margin:0; }
.bwe-auth-art p { color:#c4d0e8; font-size:14px; margin:10px 0 0; max-width:420px; line-height:1.5; }
.bwe-auth-art small { color:#a9b8d6; font-size:12px; }
:root[data-bwe] body.bwe-auth .card { align-self:center; justify-self:center; width:min(400px,calc(100% - 40px)) !important; border-radius:8px !important;
  box-shadow:var(--bwe-sh-2) !important; border:1px solid var(--bwe-border) !important; padding:32px !important; }
:root[data-bwe] body.bwe-auth .brand-sub { color:var(--bwe-muted) !important; }
:root[data-bwe] body.bwe-auth .card label { color:var(--bwe-text2) !important; font-size:12.5px !important; }
:root[data-bwe] body.bwe-auth .card input { min-height:40px; border:1px solid var(--bwe-border-strong) !important; }
:root[data-bwe] body.bwe-auth .btn { background:var(--bwe-brand) !important; min-height:42px; }
:root[data-bwe] body.bwe-auth .btn:hover { background:var(--bwe-brand-700) !important; }
:root[data-bwe] body.bwe-auth .btn:disabled { background:#7d8fae !important; }
:root[data-bwe] body.bwe-auth .footer { color:var(--bwe-subtle) !important; }

/* ── Phone ── */
/* ── App pages (Phase B): one header contract for every opted-in app ──
   Framed (html[data-embedded], set by blake-shell.js in <head>): the portal shell's breadcrumb + title replace the
   page's own logo / "← Dashboard" / title, so those hide; mark anything else data-bwe-framed="hide". Toolbars stay.
   Standalone: <html data-bwe-side="auto"> mounts the sidebar (Home = the way back). blake-shell.js puts a
   "Portal › …" breadcrumb into [data-bwe-crumbs="Folder=/folder/|Page"] and a phone menu button into [data-bwe-head];
   the old back links and logos hide only once the sidebar is actually up (body.bwe-has-side). */
:root[data-bwe][data-embedded] :is(.back-link,.back-home,.header-back,.topbar-logo,.header-logo,.header-divider,.bwe-app-crumbs,[data-bwe-framed="hide"]) { display:none !important; }
:root[data-bwe] body.bwe-has-side :is(.back-link,.back-home,.header-back,.topbar-logo,.header-logo,.header-divider,[data-bwe-standalone="hide"]) { display:none !important; }
:root[data-bwe] .bwe-app-crumbs { margin:0 0 1px; font-weight:400; }
:root[data-bwe] [data-bwe-head] > .bwe-menu-btn { flex-shrink:0; }
:root[data-bwe] .bwe-empty { padding:40px 20px; text-align:center; color:var(--bwe-muted); font-size:13px; }
:root[data-bwe] .bwe-loading::after { content:""; display:inline-block; width:12px; height:12px; margin-left:8px; vertical-align:-2px; border-radius:50%;
  border:2px solid var(--bwe-brand-100); border-top-color:var(--bwe-brand); animation:bwe-spin .8s linear infinite; }
@keyframes bwe-spin { to { transform:rotate(360deg); } }

/* Data tables in opted-in apps: quiet header row, row hover, numbers aligned */
:root[data-bwe] table.bwe-table, :root[data-bwe] .bwe-tables table { border-collapse:collapse; }
:root[data-bwe] :is(table.bwe-table,.bwe-tables table) th { background:var(--bwe-surface2); border-bottom:1px solid var(--bwe-border) !important; text-align:left; }
:root[data-bwe] :is(table.bwe-table,.bwe-tables table) td { border-bottom:1px solid #ecebea; }
:root[data-bwe] :is(table.bwe-table,.bwe-tables table) tbody tr:hover td { background:#f7f9fc; }

@media (max-width:768px) {
  :root[data-bwe]:not([data-embedded]) body.bwe-has-side, :root[data-bwe]:not([data-embedded]) body.bwe-has-side.bwe-rail { padding-left:0; }
  #bwe-side { width:min(300px,86vw) !important; transform:translateX(-105%); transition:transform .2s ease; box-shadow:var(--bwe-sh-3); }
  body.bwe-drawer-open #bwe-side { transform:none; }
  body.bwe-rail #bwe-side .s-name, body.bwe-rail #bwe-side .s-sec, body.bwe-rail #bwe-side .s-lbl, body.bwe-rail #bwe-side .s-chev { display:revert; }
  body.bwe-rail #bwe-side .s-sub { display:flex; }
  body.bwe-rail #bwe-side .s-item { justify-content:flex-start; padding:0 11px; }
  body.bwe-rail #bwe-side .tip, #bwe-side .s-collapse { display:none !important; }
  body.bwe-drawer-open .bwe-scrim { display:block; position:fixed; inset:0; background:rgba(12,33,73,.45); z-index:899; }
  body.bwe-drawer-open { overflow:hidden; }
  .bwe-icon-btn.bwe-menu-btn { display:inline-flex; }
  .bwe-head { padding:8px 12px; min-height:52px; gap:10px; }
  .bwe-crumbs { display:none; }
  :root[data-bwe] [data-bwe-head] { gap:8px; }
  .bwe-title { font-size:16px; }
  .bwe-kpis { grid-auto-flow:row; grid-template-columns:1fr 1fr; }
  .bwe-kpi:nth-child(2n) { border-right:none; }
  .bwe-kpi:nth-child(-n+2) { border-bottom:1px solid var(--bwe-border); }
  :root[data-bwe] body.bwe-auth { grid-template-columns:1fr; grid-template-rows:auto 1fr; }
  .bwe-auth-art { padding:20px; }
  .bwe-auth-art h2, .bwe-auth-art p, .bwe-auth-art small { display:none; }
  :root[data-bwe] body.bwe-auth .card { align-self:start; margin-top:24px; padding:26px 22px !important; }
}
@media (prefers-reduced-motion:reduce) { #bwe-side, #bwe-side * { transition:none !important; } }
} /* end @media screen */
/* The one print rule: chrome that blake-shell.js injects must never reach paper (pages keep their own print CSS). */
@media print { #bwe-side, .bwe-scrim, .bwe-menu-btn, .bwe-app-crumbs { display:none !important; } }
