/* PlaneCharts admin shell, shared by every tool page that carries body.pc-shell.
   Slim 56px top bar, a fixed 232px dark sidebar (the tool's icon and pages,
   the current page's sections, the client's other tools), a light grey canvas
   with white hairline cards, compact stat cards, dense tables and 32px
   controls. A tool loads this after its own stylesheet and before
   /planecharts-ui.css, so it owns the chrome and the component finish while
   the tool keeps its layouts, maps, charts and data ink. Introduced with the
   BOS catchment redesign (bc29) and extended to the BOS tools on 2026-09-27. */

body.pc-shell{--sb:232px;--hdr:56px;--pcbar-h:56px;--radius:10px;--shadow:0 1px 2px rgba(16,24,40,.04);font-size:13px;line-height:1.5}
body.pc-shell.light{--bg:#F4F6FA;--bg2:#EDF0F5;--panel:#FFFFFF;--panel2:#F7F9FC;--panel3:#EEF2F7;--border:#E3E8EF;--border2:#CBD3DE;--text:#1B2536;--text2:#4B5769;--text3:#6C7889;--acc:#2457B5;--acc2:#1B4592;--btn:#2457B5;--btnh:#1B4592;--grid:#E6EAF0;--side:#111A2B;--side-text:#C9D3E3;--side-muted:#8E9BB0;--side-line:rgba(255,255,255,.08);background:var(--bg);color:var(--text)}
body.pc-shell:not(.light){--bg:#0F1621;--bg2:#131B28;--panel:#182130;--panel2:#1C2635;--panel3:#243043;--border:#28344A;--border2:#3A4860;--text:#EEF2F7;--text2:#B8C3D3;--text3:#8E9BB0;--acc:#7FAAF0;--acc2:#9DBFF3;--btn:#2F66C9;--btnh:#3B74D8;--grid:#28344A;--side:#0B1220;--side-text:#C9D3E3;--side-muted:#7F8CA1;--side-line:rgba(255,255,255,.07);background:var(--bg);color:var(--text)}
body.pc-shell::before{display:none}
body.pc-shell #pcsw{display:none!important}

/* ---- top bar: one bar, one size, on every tool. body.pc-bar is the bar-only mode
   (no sidebar, no component restyle) for a tool whose page keeps its own layout,
   with the bar's palette pinned so the tool's tokens cannot recolour it. ---- */
body.pc-shell .pcbar,body.pc-bar .pcbar{position:sticky;top:0;z-index:1200;display:flex;align-items:center;flex-wrap:nowrap;gap:10px;font-size:13px;line-height:1.4;height:var(--hdr);min-height:var(--hdr);padding:0 16px 0 18px;background:var(--panel);border-bottom:1px solid var(--border);backdrop-filter:none;box-shadow:none;flex:0 0 auto}
body.pc-shell .pc-brand,body.pc-bar .pc-brand{display:flex;align-items:center;gap:10px;text-decoration:none;flex-shrink:0;color:inherit}
body.pc-shell .pc-mark,body.pc-bar .pc-mark{width:28px;height:28px;flex:0 0 auto}
body.pc-shell .pc-word,body.pc-bar .pc-word{font-weight:800;font-size:17px;letter-spacing:-.02em;color:var(--text);white-space:nowrap}
body.pc-shell .pc-word b,body.pc-bar .pc-word b{color:#4C8DE8;font-weight:800}
body.pc-shell .pc-div,body.pc-bar .pc-div{width:1px;height:22px;background:var(--border2);margin:0 2px;flex:none}
body.pc-shell .pc-tool,body.pc-bar .pc-tool{font-size:12.5px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text3);white-space:nowrap;max-width:none;line-height:1.3}
body.pc-shell .pc-tool b,body.pc-bar .pc-tool b{color:var(--text);font-weight:600}
body.pc-shell .pc-badge,body.pc-bar .pc-badge{font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:none;color:var(--text2);background:var(--panel3);border:1px solid var(--border);padding:4px 9px;border-radius:999px;white-space:nowrap}
body.pc-shell .pc-sp,body.pc-bar .pc-sp{flex:1}
body.pc-shell .pcbar .pc-btn,body.pc-bar .pcbar .pc-btn,body.pc-shell .pcbar .ui-menu>summary,body.pc-bar .pcbar .ui-menu>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;height:32px;padding:6px 12px;border-radius:6px;font-size:12.5px;font-weight:500;line-height:1;background:var(--panel);color:var(--text2);border:1px solid var(--border2);box-shadow:none;text-decoration:none;white-space:nowrap;cursor:pointer}
body.pc-shell .pcbar .pc-btn:hover,body.pc-bar .pcbar .pc-btn:hover,body.pc-shell .pcbar .ui-menu>summary:hover,body.pc-bar .pcbar .ui-menu>summary:hover{background:var(--panel3);color:var(--text);border-color:var(--border2)}
body.pc-shell .pcbar .pc-btn.pri,body.pc-bar .pcbar .pc-btn.pri{background:var(--btn);border-color:var(--btn);color:#fff;font-weight:600}
body.pc-shell .pcbar .pc-btn.pri:hover,body.pc-bar .pcbar .pc-btn.pri:hover{background:var(--btnh);border-color:var(--btnh)}
body.pc-shell .pcbar .pc-btn.icon,body.pc-bar .pcbar .pc-btn.icon{width:32px;padding:0;justify-content:center}
body.pc-shell .pcbar .pc-btn.icon svg,body.pc-bar .pcbar .pc-btn.icon svg{width:14px;height:14px}
.side-toggle{display:none;width:32px;height:32px;border:1px solid var(--border2);border-radius:6px;background:var(--panel);color:var(--text2);align-items:center;justify-content:center;cursor:pointer;flex:none;padding:0}
.side-toggle svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round}

/* ---- frame: fixed sidebar, content inset ---- */
body.pc-shell{padding-left:var(--sb)}
/* The bar spans the full width even when a tool nests it inside its app wrapper: shift it left over the sidebar column and widen it by the same amount. */
body.pc-shell .pcbar{position:fixed;top:0;left:0;right:0;width:auto;max-width:none;margin:0;box-sizing:border-box}
/* The bar is fixed, so whatever used to hold it in flow gets a 56px top inset:
   a tool's own app wrapper when the bar is nested there, else the body. */
body.pc-shell:has(> .pcbar),body.pc-shell :has(> .pcbar){padding-top:var(--hdr)}
body.pc-shell>.pcbar~*{--pc-bar-inset:1}
body.pc-shell .app-frame{display:block}
.app-side{position:fixed;left:0;top:var(--hdr);bottom:0;width:var(--sb);overflow:auto;background:var(--side);color:var(--side-text);display:flex;flex-direction:column;gap:4px;padding:14px 12px 12px;z-index:1150;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.18) transparent}
.side-tool{display:flex;align-items:center;gap:10px;padding:6px 8px 14px;margin-bottom:6px;border-bottom:1px solid var(--side-line);text-decoration:none;color:inherit}
.side-tool img,.side-tool i{display:block;width:36px;height:36px;border-radius:9px;flex:none;box-shadow:0 1px 2px rgba(0,0,0,.35)}
.side-tool i{display:grid;place-items:center;background:rgba(255,255,255,.08);color:#fff;font-style:normal;font-weight:700;font-size:12px}
.side-tool b{display:block;font-size:13px;font-weight:600;color:#fff;line-height:1.25}
.side-tool span{display:block;font-size:11.5px;color:var(--side-muted);line-height:1.3}
.side-label{font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--side-muted);padding:10px 10px 4px}
.app-side .workspace-nav,.app-side .side-nav{display:block;padding:0;border:0;background:none;box-shadow:none;position:static;margin:0}
.app-side .workspace-nav>div,.app-side .side-nav>div{display:flex;flex-direction:column;gap:2px;width:100%}
.app-side .workspace-nav a,.app-side .side-nav a{display:flex;align-items:center;gap:10px;min-height:38px;padding:9px 10px;border-radius:8px;color:var(--side-text);font-size:13px;font-weight:500;line-height:1.3;white-space:normal;text-decoration:none;box-shadow:none;background:none;border:0}
.app-side .workspace-nav a svg,.app-side .side-nav a svg{width:18px;height:18px;flex:none;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.85}
.app-side .workspace-nav a img,.app-side .side-nav a img{width:18px;height:18px;border-radius:5px;flex:none}
.app-side .workspace-nav a:hover,.app-side .side-nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.app-side .workspace-nav a[aria-current],.app-side .side-nav a[aria-current]{background:var(--btn);color:#fff;font-weight:600}
.app-side .workspace-nav a[aria-current] svg{opacity:1}
.side-sections:empty{display:none}
.side-sections{padding:2px 0 6px}.side-sections-nested{padding:0 0 4px}
body.pc-shell .side-sections .section-nav{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:1px;margin:4px 0 0;padding:0;border:0;border-radius:0;background:none;box-shadow:none;overflow:visible;position:static;width:100%;text-align:left;backdrop-filter:none}
body.pc-shell .side-sections .section-nav a{display:block;width:auto;margin:0;text-align:left;min-height:0;padding:6px 10px 6px 30px;font-size:12px;font-weight:500;color:var(--side-muted);border:0;border-radius:6px;position:relative;background:none;box-shadow:none;flex-shrink:1;white-space:normal;line-height:1.35;text-decoration:none;letter-spacing:0;text-transform:none}
body.pc-shell .side-sections .section-nav a::before{content:'';position:absolute;left:16px;top:50%;width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.55;transform:translateY(-50%)}
body.pc-shell .side-sections .section-nav a:hover{color:#fff;background:rgba(255,255,255,.05)}
body.pc-shell .side-sections .section-nav a.active,body.pc-shell .side-sections .section-nav a[aria-current]{color:#fff;background:rgba(255,255,255,.07);font-weight:600}
body.pc-shell .side-sections .section-nav a.active::before{opacity:1;background:var(--acc)}
body.pc-shell main .section-nav,body.pc-shell .wrap>.section-nav{display:none}
.side-foot{margin-top:auto;padding:12px 8px 2px;font-size:11px;line-height:1.55;color:var(--side-muted);border-top:1px solid var(--side-line)}
.side-foot b{color:var(--side-text);font-weight:600}
.side-foot a{color:var(--side-text);text-decoration:none;display:inline-block;margin-top:6px;font-weight:500}
.side-foot a:hover{color:#fff;text-decoration:underline}
.side-backdrop{display:none}

/* Every shared sidebar supports desktop collapse through the shared script.
   The header toggle remains visible so the sidebar can always be restored. */
body.pc-shell.pc-side-collapsible .side-toggle{display:inline-flex}
.side-minimize{display:none}
@media(min-width:961px){
  body.pc-shell.pc-side-collapsible.side-minimized{padding-left:0}
  body.pc-shell.pc-side-collapsible.side-minimized .app-side{display:none}
  body.pc-shell.pc-side-collapsible .side-minimize{display:flex;align-items:center;gap:8px;width:100%;min-height:34px;margin:0 0 8px;padding:7px 10px;border:1px solid var(--side-line);border-radius:7px;background:transparent;color:var(--side-text);font-family:inherit;font-size:12px;font-weight:500;line-height:1.4;text-align:left;cursor:pointer}
  body.pc-shell.pc-side-collapsible .side-minimize:hover{background:rgba(255,255,255,.07);color:#fff}
  body.pc-shell.pc-side-collapsible .side-minimize:focus-visible{outline:2px solid #7FAAF0;outline-offset:2px}
  body.pc-shell.pc-side-collapsible .side-minimize svg{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
}

/* ---- canvas, page head, hero ---- */
body.pc-shell .wrap{padding:20px 24px 56px}
body.pc-shell .hero{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px 16px;margin:0 0 16px;padding:0;background:none;border:0;box-shadow:none}
body.pc-shell .hero>div:first-child{min-width:0}
body.pc-shell .hero h1{margin:0;font-size:20px;line-height:1.25;font-weight:650;letter-spacing:-.02em;color:var(--text)}
body.pc-shell .eyebrow{font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text3);margin:0 0 2px}
body.pc-shell .hero .sub,body.pc-shell .hero-note{font-size:12.5px;line-height:1.45;color:var(--text3);margin:3px 0 0;max-width:80ch;letter-spacing:0}
body.pc-shell .hero-right,body.pc-shell .hero-cta{margin:0;gap:8px;align-items:center;flex-direction:row;flex-wrap:wrap}
.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px 16px;flex-wrap:wrap;margin:0 0 16px}
.page-title{min-width:0}
.page-title h1{margin:0;font-size:20px;line-height:1.25;font-weight:650;letter-spacing:-.02em;color:var(--text)}
.page-title p{margin:3px 0 0;font-size:12.5px;line-height:1.45;color:var(--text3);max-width:80ch}

/* ---- stat cards ---- */
body.pc-shell .kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:16px;padding:0;border:0;margin:0 0 16px}
body.pc-shell .kpi{position:relative;display:grid;grid-template-rows:auto auto auto;align-content:start;gap:2px;margin:0;padding:14px 16px 12px;min-height:92px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
body.pc-shell .kpi::before,body.pc-shell .kpi::after{display:none}
body.pc-shell .kpi .l{grid-row:1;font-size:12px;font-weight:500;color:var(--text3);letter-spacing:0;text-transform:none;padding-right:24px;line-height:1.4;margin:0}
body.pc-shell .kpi .v{grid-row:2;font-size:24px;line-height:1.2;font-weight:650;letter-spacing:-.02em;color:var(--text);padding-top:4px;font-variant-numeric:tabular-nums}
body.pc-shell .kpi .v small{font-size:12px;font-weight:500;color:var(--text3);letter-spacing:0;margin-left:2px}
body.pc-shell .kpi:first-child .v{color:var(--acc);font-weight:700}
body.pc-shell .kpi .kpi-definition,body.pc-shell .kpi .d{grid-row:3;font-size:11.5px;line-height:1.4;color:var(--text3);margin:2px 0 0;max-width:none}
body.pc-shell .kpi>.ui-help{position:absolute;right:10px;top:10px}
body.pc-shell .kpi .ui-help-button{width:20px;height:20px;min-height:20px;font-size:11px}

/* ---- cards, sections, notes ---- */
body.pc-shell .card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:14px}
body.pc-shell .card-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:0;border-bottom:0}
body.pc-shell .card-head h3,body.pc-shell .card-head h2,body.pc-shell .card-title,body.pc-shell .cardbar h2{font-size:13.5px;font-weight:600;letter-spacing:-.005em;text-transform:none;color:var(--text);margin:0}
body.pc-shell .sec,body.pc-shell .secthead{display:flex;align-items:center;gap:8px;margin:22px 0 12px;font-size:15px;font-weight:650;letter-spacing:-.015em;text-transform:none;color:var(--text)}
body.pc-shell .sec::before,body.pc-shell .secthead::before{display:none}
body.pc-shell .sec h2{font-size:15px;font-weight:650;letter-spacing:-.015em;text-transform:none;color:var(--text);margin:0}
body.pc-shell .sec .note,body.pc-shell .secthead .note{font-size:12px;font-weight:400;color:var(--text3);letter-spacing:0;text-transform:none}
body.pc-shell .note{font-size:12px;line-height:1.5;color:var(--text3)}
body.pc-shell .subtle{font-size:12px;color:var(--text3)}

/* ---- controls ---- */
body.pc-shell .pc-btn,body.pc-shell .bc-mini,body.pc-shell .ui-button,body.pc-shell .ui-menu>summary{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:6px 12px;border-radius:6px;font-size:12.5px;font-weight:500;line-height:1.3;background:var(--panel);color:var(--text2);border:1px solid var(--border2);box-shadow:none;text-decoration:none;cursor:pointer;font-family:inherit}
body.pc-shell .pc-btn:hover,body.pc-shell .bc-mini:hover,body.pc-shell .ui-button:hover,body.pc-shell .ui-menu>summary:hover{background:var(--panel3);color:var(--text)}
body.pc-shell .pc-btn.pri,body.pc-shell .bc-mini.pri,body.pc-shell .bc-mini.on,body.pc-shell .ui-menu.primary>summary{background:var(--btn);color:#fff;border-color:var(--btn);font-weight:600}
body.pc-shell .pc-btn.pri:hover,body.pc-shell .ui-menu.primary>summary:hover{background:var(--btnh);border-color:var(--btnh);color:#fff}
body.pc-shell .pc-btn.icon{width:32px;height:32px;padding:0;justify-content:center}
body.pc-shell .pc-btn.sm{min-height:28px;padding:4px 10px;font-size:12px}
/* Segmented controls come in two markups across the tools: a `.seg` CONTAINER
   holding plain buttons, and a `.seg-wrap` container holding `button.seg`
   segments. The container rule must never land on a button (it did, and every
   segment grew its own border and radius inside the wrapper's border), so the
   container style is scoped to non-buttons and both markups share one look:
   a quiet well, borderless segments, the pressed one filled. A `button.seg`
   on its own, outside any wrapper, is an ordinary secondary button. */
body.pc-shell .seg:not(button),body.pc-shell .seg-wrap{display:inline-flex;align-items:center;padding:3px;border-radius:7px;gap:3px;border:1px solid var(--border);background:var(--panel2);overflow:visible;box-shadow:none}
body.pc-shell .seg button,body.pc-shell .seg-wrap>.seg{min-height:28px;padding:4px 10px;border-radius:5px;font-size:12px;font-weight:500;line-height:1.3;letter-spacing:0;color:var(--text2);background:none;border:0;box-shadow:none;cursor:pointer;font-family:inherit;transition:background-color .12s ease,color .12s ease}
body.pc-shell .seg button:hover,body.pc-shell .seg-wrap>.seg:hover{background:var(--panel3);color:var(--text);box-shadow:none}
body.pc-shell .seg button.on,body.pc-shell .seg button[aria-pressed=true],body.pc-shell .seg-wrap>.seg.on,body.pc-shell .seg-wrap>.seg[aria-pressed=true],body.pc-shell .seg-wrap>.seg.on:hover,body.pc-shell .seg-wrap>.seg[aria-pressed=true]:hover{background:var(--btn);border-color:var(--btn);color:#fff;font-weight:600;box-shadow:none}
body.pc-shell button.seg:not(.seg-wrap>.seg){display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:6px 12px;border-radius:6px;font-size:12.5px;font-weight:500;line-height:1.3;letter-spacing:0;background:var(--panel);color:var(--text2);border:1px solid var(--border2);box-shadow:none;cursor:pointer;font-family:inherit}
body.pc-shell button.seg:not(.seg-wrap>.seg):hover{background:var(--panel3);color:var(--text)}
body.pc-shell button.seg:not(.seg-wrap>.seg).on,body.pc-shell button.seg:not(.seg-wrap>.seg)[aria-pressed=true]{background:var(--btn);border-color:var(--btn);color:#fff;font-weight:600}
body.pc-shell select,body.pc-shell input[type=text],body.pc-shell input[type=search],body.pc-shell input[type=number],body.pc-shell input[type=time],body.pc-shell input[type=date]{min-height:34px;padding:6px 10px;border-radius:6px;font-size:13px;font-family:inherit;border:1px solid var(--border2);background:var(--panel);color:var(--text)}
body.pc-shell .tabs{position:sticky;top:var(--hdr);z-index:1100;display:flex;align-items:center;gap:2px;padding:6px 24px;background:var(--bg);border-bottom:1px solid var(--border);backdrop-filter:none}
body.pc-shell .tabs [role=tab],body.pc-shell .tabs button[data-tab]{min-height:32px;padding:6px 12px;border-radius:6px;font-size:12.5px;font-weight:500;color:var(--text2);background:none;border:1px solid transparent;font-family:inherit;cursor:pointer}
body.pc-shell .tabs [role=tab]:hover{background:var(--panel3);color:var(--text)}
body.pc-shell .tabs [role=tab].on,body.pc-shell .tabs [role=tab][aria-selected=true]{background:var(--panel);color:var(--acc);border-color:var(--border2);font-weight:600}

/* ---- tables ---- */
body.pc-shell table th{background:var(--panel2);font-size:11.5px;font-weight:600;color:var(--text3);letter-spacing:0;text-transform:none;padding:9px 10px;border-bottom:1px solid var(--border)}
body.pc-shell table td{font-size:12.5px;padding:9px 10px;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums;line-height:1.45}
body.pc-shell tbody tr:hover{background:var(--panel2)}

/* ---- footer ---- */
body.pc-shell .pcfoot{background:var(--panel);border-top:1px solid var(--border);color:var(--text3);font-size:11px;padding:8px 24px;font-family:inherit;letter-spacing:0;text-transform:none}
body.pc-shell .pcfoot b,body.pc-shell .pcfoot a{color:var(--text2)}

/* ---- presentation and print ---- */
body.presenting .app-side,body.presenting .side-toggle{display:none!important}
body.presenting.pc-shell{padding-left:0}
@media print{.app-side,.side-toggle,.side-backdrop,.page-head{display:none!important}body.pc-shell{padding-left:0!important}body.pc-shell .pcbar{position:static}body.pc-shell:has(> .pcbar),body.pc-shell :has(> .pcbar){padding-top:0}body.pc-shell .wrap{padding:0!important}}

/* ---- responsive ---- */
@media(max-width:1100px){body.pc-shell .pc-tool{display:none}body.pc-shell .pc-div{display:none}}
@media(max-width:960px){
  .side-toggle{display:inline-flex}
  body.pc-shell{padding-left:0}
  .app-side{width:min(84vw,280px);transform:translateX(-102%);transition:transform .2s ease;box-shadow:0 12px 32px rgba(0,0,0,.35)}
  body.side-open .app-side{transform:none}
  body.side-open .side-backdrop{display:block;position:fixed;inset:var(--hdr) 0 0 0;background:rgba(10,16,28,.45);z-index:1140}
  body.pc-shell .wrap{padding:16px 16px 48px}
  body.pc-shell .tabs{padding:6px 16px}
}
@media(max-width:640px){body.pc-shell .kpi .v{font-size:22px}.page-title h1,body.pc-shell .hero h1{font-size:18px}}
@media(max-width:520px){
  body.pc-shell .kpis{grid-template-columns:minmax(0,1fr);gap:8px}
  body.pc-shell .kpi{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;align-items:center;column-gap:12px;min-height:0;padding:10px 40px 10px 14px}
  body.pc-shell .kpi .l{grid-column:1;grid-row:1;padding-right:0}
  body.pc-shell .kpi .v{grid-column:2;grid-row:1/3;font-size:22px;padding-top:0;text-align:right}
  body.pc-shell .kpi .kpi-definition,body.pc-shell .kpi .d{grid-column:1;grid-row:2;margin:0}
  body.pc-shell .kpi>.ui-help{right:8px;top:50%;transform:translateY(-50%)}
  body.pc-shell .pcbar{padding:0 12px}body.pc-shell .pcbar .pc-badge{display:none}
  body.pc-shell .pcbar>a.pc-btn[href="/"],body.pc-shell .pcbar>a[href="https://www.planecharts.com/"],body.pc-shell .pcbar>a[href="settings.html"]{display:none}body.pc-shell .pcbar .pc-word{display:none}
}
@media(prefers-reduced-motion:reduce){.app-side{transition:none}}

/* ---- tool-specific class aliases (same finish, their own class names) ---- */
body.pc-shell .an-kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:16px;margin:0 0 16px}
body.pc-shell .an-kpi{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px 16px 12px;min-height:92px}
body.pc-shell .an-kpi-l{font-size:12px;font-weight:500;color:var(--text3);letter-spacing:0;text-transform:none;margin:0 0 4px}
body.pc-shell .an-kpi-v{font-size:24px;line-height:1.2;font-weight:650;letter-spacing:-.02em;color:var(--text);font-variant-numeric:tabular-nums}
body.pc-shell .an-kpi-d{font-size:11.5px;color:var(--text3);margin-top:4px}
body.pc-shell .an-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
body.pc-shell .an-ctrlbar{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px}
body.pc-shell .an-tabbar{background:var(--bg);border:0;border-bottom:1px solid var(--border);border-radius:0;padding:8px 0 10px;backdrop-filter:none;top:0}
body.pc-shell .an-tab{font-size:12.5px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text2);border-radius:6px;padding:6px 12px;min-height:32px}
body.pc-shell .an-tab.on{color:var(--acc);background:var(--panel);border-color:var(--border2);font-weight:600}
body.pc-shell .an-tabgrp,body.pc-shell .an-ctrl-label{font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--text3)}
body.pc-shell .cal-overlay,body.pc-shell .an-overlay{background:var(--bg)}

/* ---- in-card headings and eyebrows keep the same scale as the page ---- */
body.pc-shell .card h2,body.pc-shell .an-card h2{font-size:17px;font-weight:650;letter-spacing:-.015em;line-height:1.3;text-transform:none}
body.pc-shell .card .eyebrow,body.pc-shell .card .kicker{font-size:11.5px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text3)}
body.pc-shell .side-sections .section-nav a[href$=".html"]{display:none}
body.pc-shell .an-secthead{font-size:15px;font-weight:650;letter-spacing:-.015em;text-transform:none;color:var(--text);margin:22px 0 12px}
body.pc-shell .an-secthead::before{display:none}

/* ---- no drafting-grid canvases under the shell ---- */
body.pc-shell .wrap,body.pc-shell .main,body.pc-shell .qf-shell,body.pc-shell .cal-overlay,body.pc-shell .an-overlay{background-image:none}
body.pc-shell .wrap::before,body.pc-shell main::before,body.pc-shell .main::before,body.pc-shell .app::before{display:none}

/* ---- a tool's own module rail, hosted in the sidebar (data-rail) ---- */
.app-side .side-sections .rail{display:flex;flex-direction:column;gap:1px;width:auto;min-width:0;max-width:none;padding:0;margin:4px 0 0;border:0;background:none;box-shadow:none;position:static;height:auto;overflow:visible}
.app-side .side-sections .nav-sec{font-size:10.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--side-muted);margin:10px 10px 4px;opacity:1}
.app-side .side-sections .nav-btn{display:block;width:100%;text-align:left;padding:7px 10px 7px 30px;border-radius:6px;font-size:12.5px;font-weight:500;line-height:1.35;color:var(--side-muted);background:none;border:0;cursor:pointer;font-family:inherit;position:relative;transition:none}
.app-side .side-sections .nav-btn::before{content:'';position:absolute;left:16px;top:50%;width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.55;transform:translateY(-50%)}
.app-side .side-sections .nav-btn:hover{color:#fff;background:rgba(255,255,255,.05)}
.app-side .side-sections .nav-btn.active,.app-side .side-sections .nav-btn.on{color:#fff;background:rgba(255,255,255,.07);font-weight:600}
.app-side .side-sections .nav-btn.active::before{opacity:1;background:var(--acc)}

/* ---- bar-only mode: pinned palette, no sidebar inset ---- */
body.pc-shell .pcbar,body.pc-bar .pcbar{--hdr:56px;--panel:#FFFFFF;--panel3:#EEF2F7;--border:#E3E8EF;--border2:#CBD3DE;--text:#1B2536;--text2:#4B5769;--text3:#6C7889;--btn:#2457B5;--btnh:#1B4592;box-sizing:border-box;font-family:var(--pc-font);color:var(--text);letter-spacing:0;text-transform:none;text-align:left;border-radius:0;isolation:isolate}
body.pc-bar .pcbar{margin:0;width:100%;line-height:1.4}
/* A bar-only tool names its dark theme itself (body.dark); an absent .light class is not dark here. */
body.pc-shell:not(.light) .pcbar,body.pc-bar.dark .pcbar,body.pc-portal:not(.light) .pcbar{--panel:#182130;--panel3:#243043;--border:#28344A;--border2:#3A4860;--text:#EEF2F7;--text2:#B8C3D3;--text3:#8E9BB0;--btn:#2F66C9;--btnh:#3B74D8}
body.pc-bar .side-toggle{display:none}

/* ---- sticky in-page bars must sit flush under the top bar and be opaque ----
   The analytics family scrolls inside .cal-overlay, whose 22px top padding left
   a see-through strip above the stuck tab ribbon. Move that padding onto the
   first child so the ribbon sticks at the scroller's edge. */
body.pc-shell .cal-overlay.an-overlay{padding-top:0}
body.pc-shell .cal-overlay.an-overlay>:first-child{margin-top:20px}
body.pc-shell .an-tabbar{background:var(--bg);box-shadow:0 6px 12px -8px rgba(16,24,40,.25);margin-bottom:20px}
body.pc-shell .tabs,body.pc-shell .section-nav:not(.side-sections .section-nav),body.pc-shell .an-ctrlbar{backdrop-filter:none}
body.pc-shell .cal-overlay{padding-top:0}
body.pc-shell .cal-overlay>:first-child{margin-top:20px}
body.pc-shell .asd-sticky,body.pc-shell .hs-sticky{background:var(--bg);padding-bottom:2px}
body.pc-shell .ga-nav{background:var(--bg);backdrop-filter:none}
body.pc-shell thead{background:var(--panel2)}
/* Scrolling wrappers keep their top inset on the first child, not as padding, so a
   sticky bar inside them stops flush under the top bar instead of 20px below it. */
body.pc-shell .wrap{padding-top:0}
body.pc-shell .wrap>:first-child{margin-top:20px}
body.pc-shell .ga-nav{top:0}
body.pc-shell .ago-tabs{top:var(--hdr);background:var(--bg);backdrop-filter:none}
body.pc-shell main.shell{padding-top:0}body.pc-shell main.shell>:first-child{margin-top:18px}body.pc-shell main.shell>.tabs{top:0}
body.pc-shell .s-app{grid-template-rows:1fr;box-sizing:border-box}
body.pc-shell .pcbar .pc-brand{flex:0 0 auto;width:auto;margin:0}body.pc-shell .pcbar #pcThemeBtn{position:static;top:auto;right:auto;transform:none}body.pc-shell .pcbar .pc-sp{display:block;flex:1 1 auto;min-width:8px}
@media(max-width:960px){body.pc-shell .pcbar .s-header-actions{flex:1 1 auto;min-width:0;overflow-x:auto;scrollbar-width:none}}

/* Navbar contract: local component and button defaults cannot change the chrome. */
body.pc-shell .pcbar *,body.pc-bar .pcbar *{box-sizing:border-box}
body.pc-shell .pcbar .pc-brand,body.pc-bar .pcbar .pc-brand{width:auto;min-width:0;margin:0;padding:0;border:0;background:none;box-shadow:none;line-height:1.4}
body.pc-shell .pcbar .pc-mark,body.pc-bar .pcbar .pc-mark{display:block;min-width:28px;max-width:28px;min-height:28px;margin:0;overflow:visible}
body.pc-shell .pcbar .pc-word,body.pc-bar .pcbar .pc-word{font-family:var(--pc-font);line-height:1.4;text-transform:none}
body.pc-shell .pcbar .pc-btn,body.pc-bar .pcbar .pc-btn,body.pc-shell .pcbar .ui-menu>summary,body.pc-bar .pcbar .ui-menu>summary{width:auto;max-width:none;flex-shrink:0;margin:0;font-family:var(--pc-font);letter-spacing:0;text-transform:none;text-align:center;transform:none}
body.pc-shell .pcbar .pc-btn.icon,body.pc-bar .pcbar .pc-btn.icon{width:32px;min-width:32px}
body.pc-shell .pcbar .side-toggle{margin:0;box-shadow:none;min-height:32px;flex-shrink:0}
body.pc-shell .pcbar .pc-sp,body.pc-bar .pcbar .pc-sp{min-width:0}
/* Both shell modes have the same responsive brand and action visibility. */
@media(max-width:1100px){body.pc-bar .pc-tool,body.pc-bar .pc-div{display:none}}
@media(max-width:520px){
  body.pc-shell .pcbar,body.pc-bar .pcbar{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
  body.pc-bar .pcbar .pc-word,body.pc-bar .pcbar .pc-badge,body.pc-bar .pcbar>a.pc-btn[href="/"],body.pc-bar .pcbar>a.pc-btn[href="https://www.planecharts.com/"]{display:none}
}
/* Touch controls grow together, inside the unchanged 56px bar. */
@media(pointer:coarse){
  body.pc-shell .pcbar .pc-btn,body.pc-bar .pcbar .pc-btn,body.pc-shell .pcbar .ui-menu>summary,body.pc-bar .pcbar .ui-menu>summary,body.pc-shell .pcbar .side-toggle{height:44px;min-height:44px}
  body.pc-shell .pcbar .pc-btn.icon,body.pc-bar .pcbar .pc-btn.icon,body.pc-shell .pcbar .side-toggle{width:44px;min-width:44px}
  body.pc-shell .pcbar .pc-brand,body.pc-bar .pcbar .pc-brand{min-height:44px;min-width:44px}
  .app-side .side-nav a,.app-side .workspace-nav a,.app-side .side-sections .section-nav a{min-height:44px}
}
