/* 6.32 component system. Map glyphs/cameras and data colors are not styled here. */
:root{--ui-radius-control:10px;--ui-radius-card:16px;--ui-radius-nested:12px;--ui-radius-check:4px;--ui-control-height:44px;--ui-icon:18px;--ui-body:15px;--ui-label:13px;--ui-caption:12px;--ui-button:14px;--ui-h1:26px;--ui-h2:18px;--ui-h3:16px;--ui-line:1.5;--ui-gap:8px;--ui-card-pad:16px;--ui-field-pad:12px;--radius:16px;--text-body:15px;--text-secondary:13px;--text-heading:18px}
body[data-theme]{--rail-width:0px;font-size:var(--ui-body);line-height:var(--ui-line)}
body h1{font-size:var(--ui-h1);line-height:1.25;font-weight:600}body h2{font-size:var(--ui-h2);line-height:1.3;font-weight:600}body h3{font-size:var(--ui-h3);line-height:1.35;font-weight:600}
body button,body input:not([type=checkbox]):not([type=radio]),body select,body textarea{font-family:var(--ui-font);font-size:var(--ui-button)!important;font-weight:500;line-height:1.3;border-radius:var(--ui-radius-control)!important;min-height:var(--ui-control-height)!important;border-width:1px;box-shadow:none;transition:background-color 120ms ease,border-color 120ms ease,color 120ms ease,transform 80ms ease;-webkit-tap-highlight-color:transparent}
body button{padding:10px var(--ui-field-pad)!important;display:inline-flex;align-items:center;justify-content:center;gap:var(--ui-gap)}
body input:not([type=checkbox]):not([type=radio]),body select,body textarea{padding:10px var(--ui-field-pad)!important;background:var(--surface);color:var(--text);border-color:var(--divider)}
body input[type=checkbox],body input[type=radio]{width:18px;height:18px;min-height:0;accent-color:var(--section-accent)}body input[type=checkbox]{border-radius:var(--ui-radius-check)}
body label.check{min-height:44px;align-items:center;gap:8px;font-size:var(--ui-label)}
body button:hover:not(:disabled){border-color:var(--section-accent)}body button:active:not(:disabled),body .toolMenu>summary:active{transform:scale(.97)}
body button:focus-visible,body input:focus-visible,body select:focus-visible,body textarea:focus-visible,body summary:focus-visible{outline:2px solid var(--section-accent);outline-offset:3px;box-shadow:none!important}
body button:disabled,body select:disabled,body input:disabled{opacity:.45;cursor:default;transform:none}
body button>svg,body summary>svg{width:var(--ui-icon);height:var(--ui-icon);flex:none}
body .analysisCard,body .statCard,body .threeContextCard,body .worldPointCard,body .mapAnalysisWindow,body .floatingAnalysis,body dialog{border-radius:var(--ui-radius-card)!important;border-color:var(--divider);padding:var(--ui-card-pad);font-size:var(--ui-body);line-height:var(--ui-line)}
body .analysisCard,body .statCard,body .threeContextCard{border:1px solid var(--divider);box-shadow:none}
body .metricCard{border-radius:var(--ui-radius-nested)!important;padding:12px;font-size:var(--ui-label)}
body .mapAnalysisWindow,body .floatingAnalysis{padding:0;overflow:auto}
body .mapAnalysisWindow .worldPointCard{border-radius:0!important;padding:var(--ui-card-pad)!important}
body .floatWindowBar{padding:8px;gap:8px}body .floatWindowBar button{border-radius:var(--ui-radius-control)!important}
body dialog{padding:20px;max-width:calc(100vw - 24px)}
body .analysisNote,body .listHint,body .profileStatus{font-size:var(--ui-caption)!important;line-height:1.45}
body .toolMenu>summary,body .profileMenu>summary{border-radius:var(--ui-radius-control)!important;min-height:var(--ui-control-height)!important;padding:10px 12px!important;font-size:var(--ui-button)!important;font-weight:500;line-height:1.3;display:flex;align-items:center;justify-content:center;gap:8px}
body .toolMenuItems,body .stationSearchResults{border-radius:var(--ui-radius-card)!important;padding:8px!important;border:1px solid var(--divider);box-shadow:0 12px 36px #0002;overflow:auto;overscroll-behavior:contain}
body .toolMenuItems button,body .stationSearchResults button{border-radius:var(--ui-radius-control)!important;min-height:44px!important;justify-content:flex-start;text-align:left}
body .toolMenu[open]>.toolMenuItems{animation:portalMenuIn 130ms ease-out}@keyframes portalMenuIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}
/* Bind the tokens at component boundaries so historical ID rules cannot diverge. */
body[data-theme] :is(#inspectionBar,#navigatorPanel,#inspectorPanel,#mapAnalysisWindow,#analysisWorkspace,dialog) :is(button,input:not([type=checkbox]):not([type=radio]),select,textarea){font-size:var(--ui-button)!important;border-radius:var(--ui-radius-control)!important;min-height:var(--ui-control-height)!important}
body[data-theme] :is(#analysisWorkspace,#exploreWorkspace,dialog) label{font-size:var(--ui-label)!important;line-height:1.45;font-weight:500}
body[data-theme] #mapAnalysisWindow,body[data-theme] #floatingAnalysis{border-radius:var(--ui-radius-card)!important}
/* Shell defaults are touch/tablet. Desktop is determined by input capability. */
body[data-theme] #portalHeader{display:grid!important;grid-template-columns:40px minmax(0,1fr) auto auto;grid-template-rows:auto auto;gap:8px 12px;width:100%!important;max-width:100%!important;height:auto!important;min-height:0!important;margin-left:0!important;left:0!important;right:auto!important;padding:10px 16px 8px!important;position:sticky;top:0;z-index:70;align-items:center;background:var(--surface);border-bottom:1px solid var(--divider)}
body #portalHeader .railBrand{grid-column:1;grid-row:1;width:40px;height:40px;border-radius:var(--ui-radius-control);position:static!important;inset:auto!important;margin:0!important}
body #portalHeader .portalHeading{grid-column:2;grid-row:1;min-width:0}body #portalHeader .portalHeading h1{font-size:21px;line-height:1.2;margin:0;letter-spacing:-.4px}body #portalHeader .portalHeading>span{font-size:11px;line-height:1.4;color:var(--muted);white-space:nowrap}
body #portalHeader .brand{display:none!important}body #portalHeader .headerActions{grid-column:3/5!important;grid-row:1!important;position:static!important;display:flex;gap:8px;align-items:center;margin:0}
body[data-theme] #portalHeader .workspaceTabs{grid-column:1/-1;grid-row:2;position:static!important;inset:auto!important;display:flex!important;flex-direction:row!important;align-items:stretch;justify-content:flex-start;flex-wrap:nowrap!important;gap:4px;margin:0!important;padding:4px!important;border-radius:var(--ui-radius-nested);background:var(--bg);width:100%!important;min-width:0;height:auto!important;max-height:none!important;overflow-x:auto;scrollbar-width:none}
body #portalHeader .workspaceTabs::-webkit-scrollbar{display:none}
body[data-theme] #portalHeader .workspaceTabs button[data-workspace]{flex:1 1 0!important;min-width:0!important;width:auto!important;height:auto!important;min-height:48px!important;padding:8px!important;border:0!important;border-radius:var(--ui-radius-control)!important;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:12px!important;color:var(--muted)!important;background:transparent!important;box-shadow:none!important}
body[data-theme] #portalHeader .workspaceTabs button[data-workspace].active{background:var(--surface)!important;color:var(--text)!important;box-shadow:0 1px 4px #0001!important}
body #portalHeader .workspaceTabs svg{width:20px;height:20px}body #portalHeader .workspaceTabs .railCredit{display:none}
body.portalDesktop[data-theme]{--rail-width:104px}
body.portalDesktop[data-theme] #portalHeader{width:calc(100% - var(--rail-width))!important;max-width:calc(100% - var(--rail-width))!important;margin-left:var(--rail-width)!important;left:var(--rail-width)!important;grid-template-columns:minmax(0,1fr) auto auto;grid-template-rows:auto;padding:12px 20px!important}
body.portalDesktop #portalHeader .railBrand{position:fixed!important;left:34px!important;top:18px!important;width:36px;height:36px;z-index:82}
body.portalDesktop #portalHeader .portalHeading{grid-column:1;grid-row:1}body.portalDesktop #portalHeader .brand{display:flex!important;grid-column:2;grid-row:1;max-width:300px;gap:10px}body.portalDesktop #portalHeader .headerActions{grid-column:3!important}
body.portalDesktop[data-theme] #portalHeader .workspaceTabs{position:fixed!important;inset:0 auto 0 0!important;width:var(--rail-width)!important;height:100dvh!important;display:flex!important;flex-direction:column!important;justify-content:flex-start;align-items:center;padding:82px 8px 30px!important;margin:0!important;border-radius:0;background:var(--bg);border-right:1px solid var(--divider);overflow-x:hidden;overflow-y:auto;z-index:80}
body.portalDesktop[data-theme] #portalHeader .workspaceTabs button[data-workspace]{flex:none!important;width:100%!important;min-width:0!important;height:68px!important;min-height:68px!important;padding:8px 4px!important;font-size:12px!important}
body.portalDesktop #portalHeader .workspaceTabs .railCredit{display:block;position:absolute;bottom:10px;left:0;width:100%;text-align:center;font-size:10px;color:var(--muted)}
.portalMenuIcon{display:none}
/* One selector card, one map toolbar, no empty result card. */
body[data-analysis] #analysisWorkspace{padding-top:20px}body[data-analysis] .analysisPageHeading{margin-bottom:16px;align-items:center}body[data-analysis] .analysisPageHeading h1{font-size:var(--ui-h1)!important}
body[data-analysis=capacity] .journeyLayout{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(320px,.75fr);gap:16px;align-items:start}
body[data-analysis=capacity] .journeySide{display:flex;flex-direction:column;gap:16px;min-width:0}
body[data-analysis=capacity] .tripSelectorCard{padding:16px!important;margin:0}
body[data-analysis=capacity] .tripEndpoints{display:grid;grid-template-columns:44px minmax(0,1fr);grid-template-rows:auto auto;gap:8px;align-items:stretch}
body[data-analysis=capacity] .tripSwap{grid-column:1;grid-row:1/3;line-height:1;padding:0!important;align-self:stretch}
body[data-analysis=capacity] .tripEndpointRow{display:grid;grid-template-columns:34px minmax(0,1fr);gap:8px;align-items:center;min-width:0;font-size:var(--ui-label)}
body[data-analysis=capacity] .tripEndpointRow:nth-of-type(1){grid-column:2;grid-row:1}body[data-analysis=capacity] .tripEndpointRow:nth-of-type(2){grid-column:2;grid-row:2}
body[data-analysis=capacity] .tripEndpointRow select{width:100%;height:44px;margin:0;min-width:0;max-width:100%}
body[data-analysis=capacity] .tripEndpointRow[data-active=true] select{border-color:var(--section-accent)}
body[data-analysis=capacity] .tripSelectorFooter{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;min-height:0}
body[data-analysis=capacity] #stationPickStatus{font-size:var(--ui-caption);color:var(--muted);line-height:1.45;min-width:0}
body[data-analysis=capacity] .tripSelectorFooter button{margin-left:auto;flex:none}
#journeySummary{display:none!important}#journeyResults[hidden]{display:none!important}
body[data-analysis=capacity] .schematicPanel{top:calc(var(--portal-top-height,70px) + 12px);padding:16px!important}
body[data-analysis=capacity] .schematicHeading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}body[data-analysis=capacity] .schematicHeading h2{font-size:var(--ui-h2)!important;margin:0!important}
body[data-analysis=capacity] .mapViewControls{display:flex;gap:8px}body[data-analysis=capacity] .mapViewControls button{min-width:44px}
body[data-analysis=capacity] #schematicHost{height:clamp(420px,58dvh,700px);min-height:420px;border-radius:var(--ui-radius-nested)!important}
body[data-analysis=capacity] .mapFooter{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;font-size:var(--ui-caption)}
body[data-analysis=capacity] .mapSourceNotes{margin-top:12px;border-top:1px solid var(--divider);padding-top:10px}
body[data-analysis=capacity] .journeyOption{min-height:68px!important;justify-content:space-between;text-align:left;margin-bottom:8px}
body[data-analysis=capacity] .journeyOption.selectedIssue{border-color:var(--section-accent);background:var(--selection)}
@media(max-width:1100px){body.portalDesktop[data-theme]{--rail-width:88px}body.portalDesktop #portalHeader .railBrand{left:26px!important}body.portalDesktop #portalHeader .brand{display:none!important}body.portalDesktop #portalHeader .headerActions{grid-column:2/4!important}body[data-analysis=capacity] .journeyLayout{grid-template-columns:1fr}body[data-analysis=capacity] .journeySide{display:contents}body[data-analysis=capacity] .tripSelectorCard{order:-2}body[data-analysis=capacity] .schematicPanel{order:-1;position:relative;top:auto}body[data-analysis=capacity] #journeyResults{order:0}}
@media(max-width:600px){body[data-theme] #portalHeader{padding:10px 12px 6px!important;gap:8px;grid-template-columns:36px minmax(0,1fr) auto auto}body #portalHeader .railBrand{width:36px;height:36px}body #portalHeader .railBrand img{width:28px;height:28px}body #portalHeader .portalHeading h1{font-size:17px}body #portalHeader .portalHeading>span{font-size:10px}body #portalHeader .headerActions{gap:6px}body #portalHeader .headerActions>button,body #portalHeader .headerActions>.toolMenu>summary{min-width:44px;font-size:12px!important;padding:8px!important}body:not(.portalDesktop)[data-theme] #portalHeader .workspaceTabs{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));overflow:visible;gap:3px}body #portalHeader .workspaceTabs svg{width:18px;height:18px}.portalMenuCaption{display:none}.portalMenuIcon{display:inline;font-size:22px;line-height:1}body[data-analysis] #analysisWorkspace{padding:16px 12px 24px}body[data-analysis=capacity] .tripSelectorCard,body[data-analysis=capacity] .schematicPanel{padding:12px!important}body[data-analysis=capacity] #schematicHost{height:clamp(340px,48dvh,520px);min-height:340px}body[data-analysis=capacity] .tripEndpointRow{grid-template-columns:30px minmax(0,1fr);gap:6px}body[data-analysis=capacity] .mapViewControls{gap:6px}}
@media(prefers-reduced-motion:reduce){body button,body input,body select,body summary{transition:none!important}body .toolMenu[open]>.toolMenuItems{animation:none!important}}
/* List rows remain vertically readable, with the same control surface tokens. */
body .issueRowButton{display:flex!important;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:4px;width:100%;text-align:left}
/* Stable field typography, including legacy ID rules. Touch fields use 16px to avoid browser focus zoom. */
body[data-theme] :is(button,input:not([type=checkbox]):not([type=radio]),select,textarea){font-weight:500!important;line-height:1.3!important}
body:not(.portalDesktop)[data-theme] :is(input:not([type=checkbox]):not([type=radio]),select,textarea){font-size:16px!important}
body:not(.portalDesktop)[data-theme] :is(#inspectionBar,#navigatorPanel,#inspectorPanel,#mapAnalysisWindow,#analysisWorkspace,dialog) :is(input:not([type=checkbox]):not([type=radio]),select,textarea){font-size:16px!important}
