/* Loaded only by the web portal. Shared mobile/terminal components retain their own theme. */
html[data-portal-theme]{--pt-bg:#edf2f4;--pt-panel:#fff;--pt-soft:#edf3f6;--pt-text:#20323f;--pt-muted:#4d6370;--pt-border:#97acb8;--pt-accent:#086b78;--pt-accent-text:#fff;--pt-sidebar:#97b49c;--pt-side-text:#172c20;--pt-side-active:#254d37;--pt-hover:#dcebf1;--pt-danger:#882637;--pt-danger-bg:#fff0f1;--pt-ok:#176237;--pt-ok-bg:#e0f4e8;--pt-warn:#775008;--pt-warn-bg:#fff1d7;--pt-scheme:light;--pt-link:#075d85}
html[data-portal-theme=classic]{--pt-sidebar:#13202a;--pt-side-text:#e3edf3;--pt-side-active:#086b78}
html[data-portal-theme=blue]{--pt-bg:#e9f3fa;--pt-soft:#e3f0f9;--pt-sidebar:#a7cfe9;--pt-side-text:#16364d;--pt-side-active:#20587b;--pt-accent:#205e87;--pt-hover:#cee5f5;--pt-border:#85a7bd}
html[data-portal-theme=dark]{--pt-bg:#0f1921;--pt-panel:#192934;--pt-soft:#233a49;--pt-text:#edf5fa;--pt-muted:#b5c9d5;--pt-border:#6c889a;--pt-accent:#9bdee6;--pt-accent-text:#102e37;--pt-sidebar:#10212b;--pt-side-text:#e3edf3;--pt-side-active:#28576b;--pt-hover:#314e60;--pt-danger:#ffd0d7;--pt-danger-bg:#532634;--pt-ok:#acf1ca;--pt-ok-bg:#1d4738;--pt-warn:#ffe0a0;--pt-warn-bg:#4d3d20;--pt-link:#9cdaff;--pt-scheme:dark}
html[data-portal-theme] :is(body,.app,.main,dialog,.modalback,.business-ui){--bg:var(--pt-bg);--panel:var(--pt-panel);--panel2:var(--pt-soft);--text:var(--pt-text);--ink:var(--pt-text);--muted:var(--pt-muted);--line:var(--pt-border);--light:var(--pt-bg);color-scheme:var(--pt-scheme)}
html[data-portal-theme] :is(body,.app,.main){background:var(--pt-bg);color:var(--pt-text)}
html[data-portal-theme] :is(dialog,.modalback .modal,.card,.mini,.planner-item,.message-row,.loginbox,.setupbox,.duty-summary>div,.filebox){background:var(--pt-panel);color:var(--pt-text);border-color:var(--pt-border)}
html[data-portal-theme] :is(dialog,.modal) :is(p,h2,h3,td,legend){color:var(--pt-text)}
html[data-portal-theme] :is(label,th,.muted,small,.small,.empty,.message-meta,.tm-result small,.tm-table small){color:var(--pt-muted)}
html[data-portal-theme] :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]),select,textarea){background:var(--pt-panel);color:var(--pt-text);border-color:var(--pt-border);caret-color:var(--pt-text)}
html[data-portal-theme] :is(input,textarea)::placeholder{color:var(--pt-muted);opacity:1}
html[data-portal-theme] :is(.btn,.webbtn,.subtab,.tm-result,.tm-stop-name){background:var(--pt-soft);color:var(--pt-text);border-color:var(--pt-border)}
html[data-portal-theme] :is(.btn,.webbtn,.subtab,.tm-result):hover:not(:disabled){background:var(--pt-hover);color:var(--pt-text)}
html[data-portal-theme] :is(.btn,.webbtn,.subtab):is(.primary,.active){background:var(--pt-accent);color:var(--pt-accent-text);border-color:var(--pt-accent)}
html[data-portal-theme] :is(.btn,.webbtn).danger{background:var(--pt-danger-bg);color:var(--pt-danger);border-color:var(--pt-danger)}
html[data-portal-theme] :is(.btn,.webbtn,input,select,textarea):disabled{opacity:1;background:var(--pt-soft);color:var(--pt-muted);border-color:var(--pt-border)}
html[data-portal-theme] :is(.error,.danger-note,.df-error,[role=alert]:not(:empty)){color:var(--pt-danger);background:var(--pt-danger-bg)}
html[data-portal-theme] :is(.ok,.df-success){color:var(--pt-ok);background:var(--pt-ok-bg)}
html[data-portal-theme] .green{color:var(--pt-ok)}
html[data-portal-theme] .red{color:var(--pt-danger)}
html[data-portal-theme] .amber{color:var(--pt-warn)}
html[data-portal-theme] :is(.notice,.system-note,.pill,.message-row.unread){background:var(--pt-soft);color:var(--pt-text);border-color:var(--pt-border)}
html[data-portal-theme] :is(.pill.warn,.warning){background:var(--pt-warn-bg);color:var(--pt-warn)}
html[data-portal-theme] :is(.pill.admin,.pill.dispatch){background:var(--pt-ok-bg);color:var(--pt-ok)}
html[data-portal-theme] :is(td,th,.dashboard-row,.sl-row,.planner-item,.duty-builder details){border-color:var(--pt-border)}
html[data-portal-theme] :is(.charter-workspace>header,.duty-builder footer,.control-defect-dialog>header,.control-defect-dialog .card){background:var(--pt-panel);color:var(--pt-text)}
html[data-portal-theme] .app aside{background:var(--pt-sidebar);color:var(--pt-side-text)}
html[data-portal-theme] .app aside :is(.nav,.brand span,.muted,.portal-links a,.nav-group-title){color:var(--pt-side-text)}
html[data-portal-theme] .app aside .nav{background:transparent}
html[data-portal-theme] .app aside .nav:hover{background:#ffffff22}
html[data-portal-theme] .app aside .nav.active{background:var(--pt-side-active);color:#fff}
html[data-portal-theme] .app aside .portal-logo{background:var(--pt-sidebar)}
html[data-portal-theme=dark] .app aside .portal-logo,html[data-portal-theme=classic] .app aside .portal-logo{background:#97b49c}
html[data-portal-theme] a:not(.leaflet-container a){color:var(--pt-link)}
html[data-portal-theme] :is(button,input,select,textarea,a):focus-visible{outline:3px solid var(--pt-accent);outline-offset:3px}
html[data-portal-theme] dialog::backdrop{background:#0b1627aa;backdrop-filter:blur(3px)}
html[data-portal-theme] .center{background:var(--pt-bg)}
html[data-portal-theme] #employee-time-status{background:var(--pt-soft)!important;color:var(--pt-text)!important;border-bottom:1px solid var(--pt-border)}
html[data-portal-theme] #employee-time-status button{background:var(--pt-accent)!important;color:var(--pt-accent-text)!important;border-color:var(--pt-accent)!important}
html[data-portal-theme] .portal-theme-picker{display:flex;align-items:center;gap:8px;margin:0;font-size:14px;color:var(--pt-muted)}
.portal-theme-picker select{border:1px solid var(--pt-border);border-radius:7px;padding:7px;max-width:190px}
/* Keep foreground and background paired when legacy dialog hover rules apply. */
html[data-portal-theme] :is(.main,dialog,.modalback) :is(.btn,.webbtn,.subtab):is(.primary,.active):hover:not(:disabled){background:var(--pt-accent);color:var(--pt-accent-text);border-color:var(--pt-accent)}

html[data-portal-theme=custom] .app aside .nav.active{color:var(--pt-accent-text)}

/* Authentication screens: pair labels with their panel and keep the logo legible. */
html[data-portal-theme] :is(.setupbox,.loginbox) .brand span{color:var(--pt-muted);font-size:13px}
html[data-portal-theme] :is(.setupbox,.loginbox) label{color:var(--pt-muted);font-size:14px}
html[data-portal-theme] :is(.setupbox,.loginbox){box-shadow:0 14px 42px #10203026}
html[data-portal-theme] :is(.setupbox,.loginbox) .portal-logo{margin:0 auto 12px;height:82px;max-width:300px;content:url('/assets/logo-on-light.svg')}
html[data-portal-theme=dark] :is(.setupbox,.loginbox) .portal-logo{content:url('/assets/logo-on-dark.svg')}
html[data-portal-theme=custom] :is(.setupbox,.loginbox) .portal-logo{content:var(--pt-auth-logo,url('/assets/logo-on-light.svg'))}
