/* Shared semantic palette. Loaded after component CSS, before map-specific CSS. */
:root {
  color-scheme:light;
  --bg:#f7f9f8; --paper:#ffffff; --soft:#eef4ef; --sidebar:#f1f5f1;
  --topbar:#ffffff; --ink:#203d34; --body:#344e43; --muted:#52695c;
  --placeholder:#64766b; --line:#d5dfd7; --control-border:#82968b;
  --accent:#116d59; --accent-dark:#0a5544; --on-accent:#ffffff;
  --link:#0b6b58; --selected:#dfede3; --selected-ink:#24523a;
  --mint:#eaf3ec; --focus:#0969b4; --focus-halo:#0969b421;
  --success:#246044; --success-bg:#e5f2e8; --success-border:#7fa58c;
  --warning:#755110; --warning-bg:#fcf2dc; --warning-border:#b39450;
  --danger:#a03530; --danger-bg:#fff0ec; --danger-border:#ce8c82;
  --info:#315e85; --info-bg:#eaf1fa; --info-border:#8daac6;
  --selection:#c8e2d5; --scrim:#10251c80;
  --shadow:0 2px 4px #173a2505,0 10px 28px #173a2507;--sidebar-width:14.25rem;
}
:root[data-theme=dark] {
  color-scheme:dark;
  --bg:#14231f; --paper:#1c2e27; --soft:#243a30; --sidebar:#182a23;
  --topbar:#1a2d25; --ink:#eef6f0; --body:#d4e2d8; --muted:#a9beb0;
  --placeholder:#9ab0a1; --line:#40594b; --control-border:#738f7e;
  --accent:#96d5b7; --accent-dark:#b5e8cd; --on-accent:#102b20;
  --link:#a2dfc2; --selected:#2c4b39; --selected-ink:#d0f2dd;
  --mint:#243c2f; --focus:#8fc8ff; --focus-halo:#8fc8ff28;
  --success:#ade3bf; --success-bg:#203e2d; --success-border:#668e72;
  --warning:#f3d59a; --warning-bg:#3c3321; --warning-border:#9d875b;
  --danger:#ffb9ac; --danger-bg:#422b28; --danger-border:#b88076;
  --info:#b5d8fc; --info-bg:#26394a; --info-border:#7896b5;
  --selection:#3c634d; --scrim:#000000a3;
  --shadow:0 2px 5px #00000014,0 12px 30px #00000016;
}
html {font-family:'Segoe UI Variable','Segoe UI',system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:100%;line-height:1.55;background:var(--bg);color:var(--body);scroll-padding-block:24px}
body {font-size:1rem;letter-spacing:0;background:var(--bg);color:var(--body)}
h1 {font-size:2.125rem;line-height:1.2;letter-spacing:-.8px}
h2 {font-size:1.25rem;letter-spacing:-.35px}
h3 {font-size:1.125rem;letter-spacing:-.2px}
::selection {background:var(--selection);color:var(--ink)}
::placeholder {color:var(--placeholder);opacity:1}
:is(a,button,input,select,textarea,summary,[tabindex]):focus-visible {outline:3px solid var(--focus);outline-offset:3px}
:is(.input,.select,.textarea):focus {border-color:var(--focus);box-shadow:0 0 0 3px var(--focus-halo)}
.search-input:focus-within {outline:3px solid var(--focus);outline-offset:5px;border-radius:4px}
.skip-link {background:var(--paper);color:var(--ink);border:1px solid var(--control-border)}
.muted,.form-note,.label-note {font-size:0.8125rem;color:var(--muted);line-height:1.65}
.panel-copy {font-size:0.9375rem;color:var(--muted);margin-bottom:18px}
.panel-copy:last-child {margin-bottom:0}
.brand-name small {font-size:0.6875rem;letter-spacing:1.1px}
.brand-name {font-size:1.25rem}
.brand img {width:2.0625rem;height:2.0625rem}
.app-shell {grid-template-columns:var(--sidebar-width) minmax(0,1fr)}
.sidebar {width:var(--sidebar-width)}
.sidebar>* {flex-shrink:0}
.workspace-switch {margin-bottom:24px;min-height:64px}
.workspace-switch>span:nth-child(2) {min-width:0;flex:1}
.workspace-switch strong {font-size:0.875rem;max-width:100%}
.workspace-switch .avatar {font-size:0.8125rem}
.workspace-switch .avatar {width:2rem;height:2rem}
.workspace-switch small {font-size:0.8125rem;line-height:1.4;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;overflow-wrap:normal;word-break:normal}
.nav-label {font-size:0.8125rem;letter-spacing:1px;margin-bottom:7px}
.nav-item {font-size:0.9375rem;min-height:44px;line-height:1.4}
button.nav-item {border:0;background:transparent;text-align:left}
button.nav-item:hover {background:var(--soft)}
.nav-group {margin-bottom:20px}
.local-note {font-size:0.8125rem;line-height:1.6}
.sidebar {overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}
.sidebar-bottom {padding-top:8px}
.topbar {height:auto;min-height:80px;padding-block:16px;flex-wrap:wrap;gap:12px 20px}
.breadcrumbs {font-size:0.875rem;flex-wrap:wrap;min-width:0;gap:8px}
.breadcrumbs strong {font-weight:600}
.topbar-actions {gap:10px;flex-wrap:wrap;min-width:0;max-width:100%}
.top-search {font-size:0.875rem;min-height:44px;color:var(--body);border-radius:8px;padding:8px 10px}
.top-search:hover,.status-chip:hover {background:var(--soft)}
.shortcut {font-size:0.8125rem;padding:1px 5px;color:var(--muted)}
.topbar .status-chip,.status-chip {font-size:0.875rem;min-height:44px;padding:8px;white-space:normal;text-align:left;line-height:1.45;color:var(--body);max-width:100%}
.status-chip .dot {width:8px;height:8px;flex-shrink:0;background:var(--success)}
.status-chip.offline .dot {background:var(--warning)}
.status-chip.error .dot {background:var(--danger)}
.profile-button {width:40px;height:40px;font-size:0.9375rem;flex-shrink:0}
.icon-button {min-width:44px;min-height:44px}
.eyebrow {font-size:0.8125rem;letter-spacing:1.25px}
.subtitle,.hero p,.section-heading p,.module-card p,.module-settings-card p,.soft-tip p {font-size:0.9375rem;line-height:1.65}
.heading-actions {flex-shrink:1}
.heading-actions .button {max-width:100%}
.button,.page-heading .heading-actions .button {font-size:0.875rem;min-height:44px;line-height:1.45;padding:10px 15px;white-space:normal}
/* Theme changes must update foreground and background together. */
.button,.nav-item,.profile-button,.status-chip,.icon-button,.segment,.filter-pill {transition:box-shadow .15s,transform .15s}
.button.small {font-size:0.875rem;min-height:36px;padding:7px 11px}
.text-link,.module-card .module-open,.module-open,.brand-preview-link {font-size:0.875rem;line-height:1.5}
.text-link,.module-open {min-height:36px}
.hero-label {font-size:0.8125rem}
.stat-label,.stat-note {font-size:0.8125rem;line-height:1.5}
.stat-value {font-size:1.875rem;font-variant-numeric:tabular-nums}
.stat-symbol {color:var(--muted)}
.section-heading {gap:16px;flex-wrap:wrap}
.section-heading h2 {font-size:1.25rem}
.module-card {min-width:0}
.module-card h3 {font-size:1.25rem}
.module-card p {max-width:none}
.module-card .pill,.pill {font-size:0.8125rem;line-height:1.4;white-space:normal}
.module-card-top {gap:10px;flex-wrap:wrap}
.module-card .module-price {font-size:0.8125rem}
.module-settings-card .price small,.locked-cost small {font-size:0.875rem}
.module-banner {font-size:0.875rem;flex-wrap:wrap}
.module-icon {background:var(--mint)}
.module-icon.hire {background:var(--warning-bg)}
.module-icon.ready {background:var(--success-bg)}
.module-icon.crew {background:var(--info-bg)}
.module-icon.site {background:var(--danger-bg)}
.panel-header h2 {font-size:1.125rem}
.panel-header p {font-size:0.875rem}
.panel-body {font-size:0.9375rem}
.panel,.card,.stat,.module-card,.module-settings-card,.search-result,.auth-card {background:var(--paper)}
.activity-row strong,.activity-row p,.list-row .muted,.fault-copy p {font-size:0.875rem;line-height:1.5}
.activity-row time {font-size:0.8125rem;white-space:normal;flex-shrink:0;max-width:28%;text-align:right}
.list-row strong {font-size:0.9375rem}
.soft-tip h3 {font-size:1.125rem}
.filter-pill {font-size:0.875rem;min-height:40px;padding:8px 12px}
.toolbar {flex-wrap:wrap}
.search-input {min-width:0;max-width:100%;gap:10px;color:var(--muted)}
.search-input input {font-size:0.9375rem;min-height:40px;max-width:100%;color:var(--body)}
.search-input input::placeholder {color:var(--placeholder)}
.data-table {font-size:0.875rem;line-height:1.55}
.data-table th {font-size:0.8125rem;font-weight:600}
.data-table td>.muted,.data-table td>strong+.muted,.asset-link .muted,.person-cell .muted {font-size:0.8125rem;line-height:1.5}
.asset-link>strong,.person-cell strong {font-size:0.875rem}
.data-table td,.data-table th {overflow-wrap:anywhere}
.table-wrap[tabindex]:focus-visible {outline:3px solid var(--focus);outline-offset:-3px}
.asset-link {max-width:100%;overflow-wrap:anywhere}
.avatar {font-size:0.8125rem;background:var(--selected);color:var(--selected-ink)}
.field {font-size:0.875rem;font-weight:600}
.input,.select,.textarea {font-size:1rem;min-height:44px;background:var(--paper);color:var(--body);border-color:var(--control-border)}
.form-error {font-size:0.875rem;line-height:1.6}
.checkbox-row {font-size:0.875rem}
.hint,.callout,.callout.warning {font-size:0.875rem;line-height:1.65}
.segment,.step {font-size:0.875rem;min-height:44px}
.segmented,.steps {max-width:100%;flex-wrap:wrap}
.step {min-width:100px;flex-basis:100px}
.hire-meta,.hire-meta strong {font-size:0.875rem}
.photo-placeholder {font-size:0.8125rem}
.empty-state {padding:36px 24px}
.empty-state h3 {font-size:1.125rem}
.empty-state p {font-size:0.875rem;max-width:54ch;line-height:1.6}
.empty-state p:last-child {margin-bottom:0}
.empty-icon {color:var(--muted);background:var(--soft)}
.handover-content {padding:18px 24px}
.handover-content>.form-note {margin-bottom:12px}
.handover-content .list-row {padding-inline:0}
.handover-panel .empty-state {padding:12px 16px 10px}
.handover-panel .empty-icon {width:40px;height:40px;border-radius:12px;margin-bottom:10px}
.handover-panel .empty-state h3 {font-size:1.062rem;margin-bottom:4px}
.handover-panel .empty-state p {margin-bottom:0}
.detail-grid dt {font-size:0.8125rem}
.detail-grid dd {font-size:0.9375rem;color:var(--body);overflow-wrap:anywhere}
.modal {background:var(--paper);border-color:var(--line);box-shadow:0 20px 80px #00000033}
.modal-scrim {background:var(--scrim)}
.modal-heading p,.dialog-message {font-size:0.875rem;line-height:1.65}
.modal-heading h2 {font-size:1.375rem}
.modal-footer,.form-actions {flex-wrap:wrap}
.feature-list li {font-size:0.9375rem}
.plan-line,.plan-total,.check-row,.check-actions button {font-size:0.875rem;line-height:1.6}
.plan-total,.locked-cost,.check-row,.hire-report-button,.hire-status {flex-wrap:wrap;gap:16px}
.result-card small,.result-card p {font-size:0.875rem}
.search-result strong {font-size:0.9375rem}
.search-result small {font-size:0.8125rem}
.footer-line {font-size:0.8125rem;gap:16px;flex-wrap:wrap}
.footer-line span {flex-wrap:wrap}
.toast {font-size:0.9375rem;line-height:1.55;background:var(--paper);color:var(--body);border-color:var(--control-border);overflow-wrap:anywhere}
.toast.error {color:var(--danger);border-color:var(--danger-border)}
.toast.info {color:var(--info);border-color:var(--info-border)}
details {border-color:var(--line)}
summary {font-size:0.875rem;color:var(--body);min-height:32px}
.chip {font-size:0.8125rem;line-height:1.5}
.auth-card {border-color:var(--line)}
.auth-intro>p {color:var(--muted)}
:root[data-theme=dark] .auth-logo {background:#fff;padding:8px;border-radius:8px}
.auth-tool-list strong,.auth-tool-list small,.auth-card .auth-account-note {font-size:0.875rem}
.auth-card>p {font-size:0.9375rem}
.appearance-page {max-width:650px}
.settings-grid {grid-template-columns:repeat(auto-fit,minmax(min(100%,24rem),1fr))}
.compact-nav {display:none}
.appearance-field {max-width:360px}
.appearance-feedback {min-height:1.65em}
.support-report-technical pre {font-size:0.8125rem;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere;background:var(--soft);color:var(--body);border:1px solid var(--line);border-radius:8px;padding:14px}
.problem-report-panel p {margin:0}
.problem-report-panel [data-problem-report-feedback]:empty {display:none}
.toast:has(.button) {flex-wrap:wrap;align-items:flex-start}
.toast:has(.button)>span {flex-basis:100%}
.toast .button {flex:1}
.appearance-start {display:none;max-width:450px;padding:24px;margin:0 auto 40px;background:var(--paper);border:1px solid var(--line);border-radius:14px}
body:has(.auth-page,.error-page) .appearance-start {display:block}
body:has(.auth-page) .auth-page {padding-bottom:28px}
/* Report preview is a paper proof. Exported PDFs use their separate print CSS. */
.report-preview,.qr-label-grid {
  color-scheme:light;--paper:#fff;--soft:#eef4ef;--ink:#203d34;--body:#344e43;
  --muted:#52695c;--line:#d5dfd7;--control-border:#82968b;--accent:#116d59;
  --accent-dark:#0a5544;--on-accent:#fff;--focus:#0969b4;
  --link:#0b6b58;--mint:#eaf3ec;--success:#246044;--success-bg:#e5f2e8;
  --warning:#755110;--warning-bg:#fcf2dc;--danger:#a03530;--danger-bg:#fff0ec;
  --info:#315e85;--info-bg:#eaf1fa;--selected:#dfede3;--selected-ink:#24523a;
  background:#fff;color:#344e43;
}
.report-preview :is(h1,h2,h3,h4) {color:#203d34}
.report-preview .muted,.report-preview figcaption,.report-preview .report-meta {color:#52695c}
.qr-label {background:#fff;color:#203d34}
.qr-label small {color:#52695c}
@media(max-width:1150px) {
  :root {--sidebar-width:12.25rem}
  .nav-item {font-size:0.9375rem;padding:10px}
  .main-content {padding-inline:28px}
}
@media(max-width:800px) {
  .compact-nav {display:block;margin:0;padding:12px 20px;border:0;border-bottom:1px solid var(--line);border-radius:0;background:var(--paper)}
  .compact-nav>summary {font-size:0.875rem;min-height:44px;padding:10px 4px;font-weight:600}
  .compact-nav[open]>summary {margin-bottom:12px}
  .compact-nav nav {display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:6px}
  .compact-nav .nav-item {margin:0}
  .topbar {min-height:72px;padding:12px 20px;align-items:flex-start}
  .topbar .status-chip {font-size:0.875rem}
  .topbar-actions {gap:8px}
  .topbar .top-search {padding:8px}
  .breadcrumbs {font-size:0.875rem}
  .main-content {padding-bottom:125px}
  .hero p,.module-card p {font-size:0.9375rem}
  .stat-label,.stat-note,.module-card .pill {font-size:0.8125rem}
  .module-card .module-open {font-size:0.875rem}
  .mobile-nav {background:var(--paper);border-color:var(--line);grid-template-columns:repeat(6,minmax(0,1fr));gap:2px;padding-inline:4px}
  .mobile-nav a {font-size:0.8125rem;min-height:56px;color:var(--muted)}
  .mobile-nav a.active {color:var(--link);background:var(--selected);border-radius:8px}
  .panel-header,.panel-body {padding:20px}
  .handover-content {padding:16px 20px}
  .auth-card {padding:26px}
  .list-row {flex-wrap:wrap}
  .activity-row {flex-wrap:wrap}
  #toast-root {bottom:96px}
}
@media(max-width:480px) {
  h1,.page-heading h1 {font-size:1.75rem;overflow-wrap:anywhere}
  .main-content {padding:24px 16px 125px}
  .topbar {padding:12px 16px}
  .topbar-actions {width:100%;justify-content:flex-start}
  .topbar .top-search {display:inline-flex;min-width:44px}
  .topbar .status-chip {max-width:none;flex:1;font-size:0.875rem}
  .topbar .icon-button {width:44px;height:44px}
  .hero h2 {font-size:1.625rem}
  .hero p,.module-card p {font-size:0.9375rem}
  .module-card .pill {font-size:0.8125rem}
  .module-card .module-open,.page-heading .heading-actions .button {font-size:0.875rem}
  .step {font-size:0.875rem;min-width:100px}
  .panel-header,.panel-body {padding:18px}
  .handover-content {padding:16px 18px}
  .field-grid,.detail-grid,.card-grid {grid-template-columns:minmax(0,1fr)}
  .form-actions .button,.modal-footer .button {flex:1 1 120px}
  .inline-fields,.heading-actions {min-width:0}
  .empty-state {padding:28px 18px}
  .settings-grid {min-width:0}
  .auth-page,.error-page {padding-inline:16px}
  .appearance-start {margin:0 16px 24px;padding:20px}
}
@media(forced-colors:active) {
  :is(.button,.icon-button,.profile-button,.status-chip,.filter-pill,.nav-item.active,.mobile-nav a.active) {border:1px solid ButtonText}
  .status-chip .dot {border:1px solid CanvasText}
}
@media print {
  :root,:root[data-theme=dark] {color-scheme:light;--bg:#fff;--paper:#fff;--soft:#f3f6f3;--ink:#203d34;--body:#344e43;--muted:#52695c;--line:#d5dfd7;--accent:#116d59;--on-accent:#fff;--link:#0b6b58;--selected:#dfede3;--selected-ink:#24523a;--success:#246044;--success-bg:#e5f2e8;--warning:#755110;--warning-bg:#fcf2dc;--danger:#a03530;--danger-bg:#fff0ec;--info:#315e85;--info-bg:#eaf1fa}
  :root,:root[data-theme=dark] {--sidebar:#fff;--topbar:#fff;--control-border:#82968b;--accent-dark:#0a5544;--mint:#eaf3ec;--placeholder:#64766b;--focus:#0969b4;--success-border:#7fa58c;--warning-border:#b39450;--danger-border:#ce8c82;--info-border:#8daac6;--shadow:none}
  html,body {background:#fff;color:#203d34}
  .appearance-start,.appearance-panel,.mobile-nav {display:none!important}
}

/* Screen proof only. Native PDF pagination and photo limits are separate. */
@media screen {
  .report-preview figure.report-route-map > img {
    display:block;width:100%;height:auto!important;max-height:none!important;object-fit:contain;
  }
}

/* New square station-area preview only; photo and legacy route rules unchanged. */
.report-preview:has(.site-area-report)>.report-header{margin-bottom:10px;padding-bottom:10px}.report-preview:has(.site-area-report)>.report-header h2,.report-preview:has(.site-area-report)>.report-header p{margin:2px 0}.report-preview:has(.site-area-report)>.report-header img{max-height:52px}
.report-preview .site-area-report .site-area-map>img{display:block;width:100%;height:auto!important;max-height:none!important}.report-preview .site-area-report .site-area-band-legend{display:flex;flex-wrap:wrap;gap:12px}.report-preview .site-area-report .site-area-band-dot{display:inline-block;width:12px;height:12px;margin-right:5px}.report-preview .site-area-report .site-area-map figcaption{font-size:14px;line-height:1.5}.report-preview .site-area-report .site-area-settings{border-top:1px solid var(--line);padding-top:12px}
