:root {
  color-scheme: light;
  --bg: #f2f5f4;
  --surface: #ffffff;
  --surface-2: #e8eeec;
  --surface-3: #dbe5e2;
  --text: #172421;
  --muted: #687773;
  --line: #d3dedb;
  --brand: #176b64;
  --brand-dark: #0d514c;
  --brand-soft: #dcefeb;
  --accent: #b8832f;
  --plum: #183633;
  --success: #19765c;
  --danger: #b53542;
  --solar: #e8a317;
  --shadow: 0 22px 60px rgba(20, 52, 48, .09);
  --shadow-soft: 0 8px 28px rgba(20, 52, 48, .07);
  --radius: 22px;
  --radius-sm: 13px;
  font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  font-synthesis: none;
}

html[data-theme="dark"] {
  color-scheme: dark;
  --bg: #0c1110;
  --surface: #151d1b;
  --surface-2: #202b28;
  --surface-3: #2a3834;
  --text: #f1f6f4;
  --muted: #a9bab5;
  --line: #344440;
  --brand: #58b9ae;
  --brand-dark: #79d4c9;
  --brand-soft: #193a35;
  --accent: #dfb45f;
  --plum: #183633;
  --success: #64c9a9;
  --danger: #ff7d87;
  --solar: #ffc84f;
  --shadow: 0 24px 60px rgba(0, 0, 0, .28);
  --shadow-soft: 0 10px 28px rgba(0, 0, 0, .24);
}

@media (prefers-color-scheme: dark) {
  html[data-theme="auto"] {
    color-scheme: dark;
    --bg: #0c1110;
    --surface: #151d1b;
    --surface-2: #202b28;
    --surface-3: #2a3834;
    --text: #f1f6f4;
    --muted: #a9bab5;
    --line: #344440;
    --brand: #58b9ae;
    --brand-dark: #79d4c9;
    --brand-soft: #193a35;
    --accent: #dfb45f;
    --plum: #183633;
    --success: #64c9a9;
    --danger: #ff7d87;
    --solar: #ffc84f;
    --shadow: 0 24px 60px rgba(0, 0, 0, .28);
    --shadow-soft: 0 10px 28px rgba(0, 0, 0, .24);
  }
}

* { box-sizing: border-box; }
html { min-height: 100%; scroll-behavior: smooth; }
body { min-height: 100vh; margin: 0; background: var(--bg); color: var(--text); line-height: 1.5; }
button, input, select, textarea { font: inherit; }
button, a { -webkit-tap-highlight-color: transparent; }
a { color: inherit; text-decoration: none; }
img { max-width: 100%; }
h1, h2, h3, p { margin-top: 0; }
h1 { margin-bottom: 14px; font-size: clamp(2rem, 4vw, 3.8rem); line-height: 1.1; letter-spacing: -.035em; }
h2 { margin-bottom: 10px; font-size: clamp(1.35rem, 2vw, 2rem); line-height: 1.18; letter-spacing: -.02em; }
h3 { margin-bottom: 6px; font-size: 1.05rem; line-height: 1.28; letter-spacing: -.008em; }
small { color: var(--muted); }
code { padding: .18em .45em; border-radius: 7px; background: var(--surface-2); color: var(--brand-dark); font-size: .88em; overflow-wrap: anywhere; }

.app-header {
  position: sticky; z-index: 50; top: 0; display: grid; grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center; column-gap: clamp(18px, 2vw, 32px); min-height: 76px;
  padding: 9px clamp(20px, 4vw, 64px); border-bottom: 1px solid color-mix(in srgb, var(--line) 76%, transparent);
  background: color-mix(in srgb, var(--bg) 90%, transparent); backdrop-filter: blur(22px);
}
.brand, .account-menu { display: flex; align-items: center; gap: 13px; }
.brand { min-width: 0; }
.brand img { width: 154px; height: auto; padding: 5px 7px; border-radius: 10px; background: #fff; box-shadow: 0 1px 0 rgba(20,52,48,.04); }
.brand > span { display: none; }
.brand strong, .account-menu strong { display: block; line-height: 1.15; }
.brand small, .account-menu small { display: block; margin-top: 3px; font-size: .72rem; }
.app-header nav {
  display: flex; align-items: center; justify-self: end; grid-column: 2; width: max-content; max-width: 100%; gap: 2px;
  padding: 5px; border: 1px solid color-mix(in srgb, var(--line) 82%, transparent); border-radius: 16px;
  background: color-mix(in srgb, var(--surface) 94%, transparent); box-shadow: 0 5px 20px rgba(20,52,48,.055);
}
.nav-link {
  display: inline-flex; align-items: center; min-height: 40px; padding: 9px 14px; border-radius: 11px;
  color: var(--muted); font-size: .86rem; font-weight: 700; letter-spacing: -.01em;
  transition: background-color .16s ease, color .16s ease, box-shadow .16s ease;
}
.nav-link:hover { background: var(--surface-2); color: var(--text); }
.nav-link.is-active { background: var(--brand-soft); color: var(--brand-dark); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--brand) 8%, transparent); }
.nav-link:focus-visible, .nav-group>summary:focus-visible { outline: 3px solid color-mix(in srgb, var(--brand) 28%, transparent); outline-offset: 2px; }
.nav-group { position:relative; }
.nav-group>summary { display:flex;align-items:center;gap:9px;cursor:pointer;list-style:none;white-space:nowrap; }
.nav-group>summary::-webkit-details-marker { display:none; }
.nav-group>summary::after {
  content:""; width:6px; height:6px; margin-top:-3px; border-right:1.5px solid currentColor; border-bottom:1.5px solid currentColor;
  opacity:.72; transform:rotate(45deg); transition:transform .16s ease, margin .16s ease;
}
.nav-group[open]>summary::after { margin-top:3px; transform:rotate(-135deg); }
.nav-group.is-active>summary,.nav-group[open]>summary { background:var(--brand-soft);color:var(--brand-dark); }
.nav-submenu {
  position:absolute;z-index:90;top:calc(100% + 9px);left:0;display:grid;gap:2px;min-width:232px;padding:7px;
  border:1px solid color-mix(in srgb,var(--line) 88%,transparent);border-radius:16px;
  background:color-mix(in srgb,var(--surface) 97%,transparent);box-shadow:0 18px 48px rgba(15,42,38,.16);backdrop-filter:blur(18px);
}
.nav-group:not([open])>.nav-submenu { display:none; }
.nav-submenu .nav-link { position:relative;min-height:42px;padding:10px 13px;border-radius:10px;white-space:nowrap; }
.nav-submenu .nav-link.is-active { padding-left:28px;box-shadow:none; }
.nav-submenu .nav-link.is-active::before { content:"";position:absolute;left:13px;width:6px;height:6px;border-radius:50%;background:var(--brand); }
.account-menu {
  position:relative;z-index:80;justify-self:end;grid-column:3;text-align:right;white-space:nowrap;gap:5px;
  padding:4px;border:1px solid color-mix(in srgb,var(--line) 82%,transparent);border-radius:15px;
  background:color-mix(in srgb,var(--surface) 88%,transparent);box-shadow:0 5px 20px rgba(20,52,48,.045);
}
.account-menu form { display:flex;margin:0; }
.menu-toggle { display:none; }
.logout-button { min-height:40px;padding:8px 12px;border-radius:10px; }
.logout-button strong { display:inline; }
.button-icon { width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round; }
.theme-icon { width:17px;height:17px;border:1.8px solid currentColor;border-radius:50%;background:linear-gradient(90deg,currentColor 50%,transparent 50%); }
.menu-icon { display:grid;width:18px;gap:4px; }
.menu-icon i { display:block;height:1.5px;border-radius:999px;background:currentColor;transition:transform .18s ease,opacity .18s ease; }
.menu-toggle[aria-expanded="true"] .menu-icon i:nth-child(1) { transform:translateY(5.5px) rotate(45deg); }
.menu-toggle[aria-expanded="true"] .menu-icon i:nth-child(2) { opacity:0; }
.menu-toggle[aria-expanded="true"] .menu-icon i:nth-child(3) { transform:translateY(-5.5px) rotate(-45deg); }
.app-main { width: min(1520px, calc(100% - clamp(30px, 7vw, 112px))); margin: 0 auto; padding: clamp(30px, 5vw, 68px) 0 80px; }
.app-main > .panel + .panel { margin-top: 24px; }
.impersonation-bar { display:flex;align-items:center;justify-content:center;gap:18px;padding:8px 18px;background:#b56c18;color:#fff;box-shadow:0 5px 18px rgba(74,39,4,.18);font-size:.86rem; }
.impersonation-bar small { color:rgba(255,255,255,.78); }
.impersonation-bar form { margin:0; }
.impersonation-bar .button { min-height:32px;padding:5px 10px;border-color:rgba(255,255,255,.28);background:rgba(255,255,255,.14);color:#fff; }
.impersonation-bar .button:hover { background:rgba(255,255,255,.24); }
.impersonate-form { margin:0; }

.eyebrow { margin: 0 0 10px; color: var(--brand); font-size: .72rem; font-weight: 800; letter-spacing: .15em; text-transform: uppercase; }
.muted { color: var(--muted); }
.hero { position: relative; display: flex; align-items: end; justify-content: space-between; gap: 32px; margin-bottom: 34px; padding: clamp(28px, 5vw, 58px); overflow: hidden; border-radius: 30px; background: var(--plum); color: #fff; box-shadow: var(--shadow); }
.hero::after { content: ""; position: absolute; inset: auto -6% -85% auto; width: 450px; aspect-ratio: 1; border: 76px solid rgba(255,255,255,.06); border-radius: 50%; }
.hero > * { position: relative; z-index: 1; }
.hero p:not(.eyebrow) { max-width: 640px; margin: 0; color: rgba(255,255,255,.72); font-size: 1.05rem; }
.hero .eyebrow { color: #ffbf4d; }
.hero.compact h1 { font-size: clamp(2.2rem, 4.2vw, 4.6rem); }
.hero .dashboard-greeting { margin-bottom:16px;font-size:clamp(.9rem,1.35vw,1.2rem);letter-spacing:.13em; }
.date-chip { min-width: 126px; padding: 18px 22px; border: 1px solid rgba(255,255,255,.15); border-radius: 19px; background: rgba(255,255,255,.08); text-align: center; backdrop-filter: blur(10px); }
.date-chip span, .date-chip small { display: block; color: rgba(255,255,255,.7); }
.date-chip strong { display: block; margin: -2px 0; font-size: 2.8rem; line-height: 1; }

.feature-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin-bottom: 34px; }
.feature-card { position: relative; min-height: 225px; padding: 25px; overflow: hidden; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); box-shadow: var(--shadow-soft); transition: transform .18s ease, border-color .18s ease; }
.feature-card:hover { transform: translateY(-3px); border-color: color-mix(in srgb, var(--brand) 45%, var(--line)); }
.feature-card::after { content: ""; position: absolute; right: -38px; top: -38px; width: 120px; aspect-ratio: 1; border-radius: 50%; background: var(--brand-soft); }
.feature-card .feature-kicker { display: block; margin-bottom: 16px; color: var(--muted); font-size: .76rem; font-weight: 760; letter-spacing: .08em; text-transform: uppercase; }
.feature-card > strong { font-size: 3.5rem; line-height: .95; letter-spacing: -.07em; }
.feature-card > small { margin-left: 8px; }
.feature-card p { max-width: 340px; margin: 20px 0 10px; color: var(--muted); }
.text-link { color: var(--brand); font-weight: 750; }
.dashboard-church { margin-bottom:34px; }
.dashboard-church-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:18px; }
.feature-card.dashboard-church-card { min-height:0;min-width:0;display:flex;flex-direction:column;gap:12px;padding:22px; }
.dashboard-church-card h3 { position:relative;z-index:1;margin:0;font-size:1.25rem;overflow-wrap:anywhere; }
.dashboard-church-card p { margin:0; }
.dashboard-church-card .text-link { margin-top:auto; }
.content-grid { display: grid; grid-template-columns: minmax(0, 2fr) minmax(280px, .8fr); gap: 20px; }

.panel { padding: 28px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); box-shadow: var(--shadow-soft); }
.panel.quiet { background: var(--surface-2); box-shadow: none; }
/* Companion activities use the same form language on desktop and small screens. */
#linked-rule-list, #linked-targets, #linked-preview, #linked-issues { display: grid; gap: 14px; margin: 16px 0; }
#linked-rule-form fieldset { min-width: 0; margin: 0; padding: 16px; border: 1px solid var(--line); border-radius: 14px; }
#linked-rule-form legend { padding: 0 6px; font-weight: 750; color: var(--muted); }
#linked-weekdays { grid-template-columns: repeat(auto-fit, minmax(68px, 1fr)); gap: 8px; }
#linked-preview .notice, #linked-issues .notice { display: grid; gap: 6px; margin: 0; overflow-wrap: anywhere; }
.linked-rule-intro { display: grid; gap: 8px; }
#linked-rule-form .linked-target-heading { margin: 28px 0 10px; }
.source-event [data-linked-source] { margin-top: 14px; max-width: 100%; white-space: normal; text-overflow: clip; }
.panel-heading, .page-heading, .heading-actions, .planner-toolbar, .drawer-heading, .modal-heading, .modal-actions { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.panel-heading { flex-wrap: wrap; margin-bottom: 22px; }
.panel-heading > div, .page-heading > div, .drawer-heading > div { min-width: 0; }
.panel-heading h2, .page-heading h1, .drawer-heading h2 { overflow-wrap: anywhere; }
.panel-heading h2, .page-heading h1, .drawer-heading h2, .modal-heading h2 { margin-bottom: 0; }
.page-heading { align-items: end; margin-bottom: 28px; }
.page-heading h1 + p { margin-top:clamp(12px,1.2vw,18px); }
.page-heading p:last-child { max-width: 660px; margin-bottom: 0; color: var(--muted); }
.upcoming-list { margin: 0; padding: 0; list-style: none; }
.upcoming-list li { display: flex; align-items: center; gap: 20px; min-height: 65px; padding: 10px 0; border-bottom: 1px solid var(--line); }
.upcoming-list li:last-child { border: 0; }
.upcoming-list time { width: 62px; color: var(--brand); font-weight: 800; font-variant-numeric: tabular-nums; }
.upcoming-list span, .upcoming-list small { display: block; }

.button, .icon-button { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 43px; border: 1px solid transparent; border-radius: 12px; cursor: pointer; font-weight: 750; transition: .16s ease; }
.button { padding: 10px 17px; }
.button.primary { background: var(--brand); color: #fff; box-shadow: 0 8px 20px color-mix(in srgb, var(--brand) 22%, transparent); }
.button.primary:hover { background: var(--brand-dark); transform: translateY(-1px); }
.button.secondary { border-color: var(--line); background: var(--surface); color: var(--text); }
.button.secondary:hover, .button.ghost:hover { border-color: var(--brand); color: var(--brand); }
.button.ghost { border-color: transparent; background: transparent; color: var(--muted); }
.button.danger { color: var(--danger); }
.button.danger-solid { background:var(--danger);color:#fff;box-shadow:0 8px 20px color-mix(in srgb,var(--danger) 20%,transparent); }
.button.danger-solid:hover { filter:brightness(.92);transform:translateY(-1px); }
.button.small { min-height: 34px; padding: 6px 10px; font-size: .8rem; }
.button:disabled { cursor: wait; opacity: .62; }
.account-menu .menu-toggle { display:none; }
.button.microsoft { width: 100%; margin: 18px 0 8px; border-color: #cbc7c9; background: #fff; color: #252122; }
.ms-mark { color: #2f6fed; font-size: 1.3rem; }
.icon-button { width: 43px; padding: 0; border-color: var(--line); background: var(--surface); color: var(--muted); font-size: 1.15rem; }
.icon-button:hover { border-color: var(--brand); color: var(--brand); }
.portal-decision-card { width:min(520px,calc(100vw - 32px));padding:30px; }
.portal-decision-icon { display:grid;width:50px;height:50px;margin-bottom:18px;place-items:center;border-radius:15px;background:var(--brand-soft);color:var(--brand); }
.portal-decision-icon svg { width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round; }
.portal-decision-icon[data-kind="warning"] { background:color-mix(in srgb,var(--danger) 12%,var(--surface));color:var(--danger); }
.portal-decision-icon[data-kind="edit"] { background:color-mix(in srgb,var(--accent) 14%,var(--surface));color:var(--accent); }
.portal-decision-icon[data-kind="confirm"] { background:color-mix(in srgb,var(--success) 13%,var(--surface));color:var(--success); }
.portal-decision-message { margin:18px 0 24px;color:var(--muted);line-height:1.6;white-space:pre-line; }
.portal-decision-input { margin-bottom:22px; }
.portal-decision-card .modal-actions { justify-content:flex-end; }
.grow { flex: 1; }
.hidden { display: none !important; }

.notice { display: flex; align-items: flex-start; gap: 12px; margin: 18px 0; padding: 15px 17px; border-radius: var(--radius-sm); font-size: .9rem; }
.notice.info { border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--line)); background: color-mix(in srgb, var(--accent) 9%, var(--surface)); }
.notice.info span { color: var(--muted); }
.notice.success { border:1px solid color-mix(in srgb,var(--success) 38%,var(--line));background:color-mix(in srgb,var(--success) 10%,var(--surface));color:var(--success);font-weight:750; }
.notice.danger { border: 1px solid color-mix(in srgb, var(--danger) 38%, var(--line)); background: color-mix(in srgb, var(--danger) 9%, var(--surface)); color: var(--danger); }
.save-status { min-width: 120px; margin-left: auto; color: var(--success); font-size: .85rem; text-align: right; }
.save-status.is-error { color: var(--danger); }
.setup-guide { margin-top:22px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2); }
.setup-guide summary { padding:15px 17px;cursor:pointer;color:var(--brand-dark);font-weight:800; }
.setup-guide-content { padding:0 20px 20px; }
.setup-guide-content ol { display:grid;gap:10px;padding-left:24px; }
.setup-guide-content a { color:var(--brand);text-decoration:underline;text-underline-offset:2px; }

label { display: grid; gap: 7px; color: var(--text); font-size: .84rem; font-weight: 700; }
label small { font-weight: 500; }
input, select, textarea { width: 100%; min-height: 44px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px; outline: 0; background: var(--surface); color: var(--text); transition: border-color .16s, box-shadow .16s; }
textarea { resize: vertical; }
input:focus, select:focus, textarea:focus { border-color: var(--brand); box-shadow: 0 0 0 3px color-mix(in srgb, var(--brand) 13%, transparent); }
.form-grid { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px; }
.form-grid>* { min-width:0; }
.audit-filters { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin-bottom:18px; }
.audit-filters>label { min-width:0;align-content:start; }
.audit-filters .heading-actions { align-self:end;flex-wrap:wrap; }
.audit-pagination { display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin:20px 0; }
.audit-table table { width:100%; min-width:850px; table-layout:fixed; }
.audit-table th,.audit-table td { overflow-wrap:anywhere; }
.audit-column-filters th { vertical-align:top; padding-top:0; }
.audit-column-filters input,.audit-column-filters select { width:100%; min-width:0; padding:9px 10px; font-size:13px; }
.audit-column-filters label { display:grid; gap:4px; font-size:11px; margin-bottom:7px; text-transform:none; }
#audit-status { min-height:1.5em; }
@media(max-width:700px) { .audit-filters { grid-template-columns:1fr; } }
.monitoring-panel + .monitoring-panel { margin-top:24px; }
.monitoring-panel .section-intro { margin-bottom:22px; }
.monitoring-recipients { min-width:0; padding:18px; border:1px solid var(--line); border-radius:var(--radius-sm); }
.monitoring-recipients legend { padding:0 8px; font-weight:750; }
.monitoring-recipients>p { margin:0 0 16px; }
.monitoring-thresholds { min-width:0; padding:18px; border:1px solid var(--line); border-radius:var(--radius-sm); }
.monitoring-thresholds legend { padding:0 8px; font-weight:750; }
.monitoring-thresholds>p { margin:0 0 16px; }
.monitoring-threshold-list { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr)); gap:12px 24px; }
.monitoring-form .monitoring-threshold-row { display:flex; align-items:center; justify-content:space-between; gap:12px; min-width:0; padding:12px 0; border-bottom:1px solid var(--line); }
.monitoring-threshold-row>span:first-child { min-width:0; overflow-wrap:anywhere; }
.monitoring-form .monitoring-minutes { display:flex; align-items:center; gap:10px; flex:0 0 auto; }
.monitoring-form .monitoring-minutes input { width:8rem; min-width:0; }
.monitoring-minutes>span { font-weight:400; color:var(--muted); }
.monitoring-default small { max-width:72ch; }
@media (max-width:480px) {
  .monitoring-form .monitoring-threshold-row { flex-direction:column; align-items:stretch; gap:8px; }
}
.monitoring-recipient span { min-width:0; overflow-wrap:anywhere; }
.monitoring-form .switch-row input { flex:0 0 18px; }
.monitoring-form>.modal-actions { justify-content:flex-start; flex-wrap:wrap; gap:12px; }
.monitoring-form>.modal-actions .button { white-space:nowrap; }
.monitoring-explanation { padding-left:22px; }
.monitoring-explanation li + li { margin-top:10px; }
.monitoring-incidents { display:grid; gap:14px; }
.monitoring-incident { min-width:0; padding:18px; border:1px solid var(--line); border-radius:var(--radius-sm); background:var(--surface-2); }
.monitoring-incident-heading { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:8px 20px; }
.monitoring-incident-heading h3 { margin:0; overflow-wrap:anywhere; }
.monitoring-incident-heading>span { color:var(--muted); font-size:.9rem; }
.monitoring-times { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr)); gap:14px; margin:18px 0 0; }
.monitoring-times>div { min-width:0; }
.monitoring-times dt { color:var(--muted); font-size:.82rem; }
.monitoring-times dd { margin:4px 0 0; font-weight:650; overflow-wrap:anywhere; }
.form-section-intro { margin-top:4px;padding:14px 16px;border:1px solid var(--line);border-radius:13px;background:var(--surface-2); }
.form-section-intro p { margin:0; }
.form-section-intro .eyebrow { margin-bottom:5px; }
.page-heading-actions { display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:10px; }
.submission-seasons { display:grid;gap:20px; }
.submission-seasons>.panel-heading { margin:0; }
.submission-season-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px; }
.submission-season-card { display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;align-items:center;gap:18px;padding:16px 18px;border:1px solid var(--line);border-radius:15px;background:var(--surface-2); }
.submission-season-card div { display:grid;gap:3px; }
.submission-season-card span,.submission-season-card small { color:var(--muted);font-size:.72rem; }
.submission-season-card strong { font-size:1.05rem; }
.submission-season-card b { font-size:1.15rem;font-variant-numeric:tabular-nums; }
.submission-season-card .season-in-use { padding:.42rem .65rem;border-radius:999px;background:var(--surface);font-weight:700;white-space:nowrap; }
.submission-links-heading { align-items:end; }
.submission-links-heading label { display:grid;min-width:220px;gap:5px;color:var(--muted);font-size:.7rem;font-weight:800; }
.submission-links-heading select { min-height:42px;padding:8px 34px 8px 11px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2);color:var(--text);font:inherit; }
.submission-url { display:inline-flex;align-items:center;min-height:36px;padding:7px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--accent);font-size:.76rem;font-weight:800;text-decoration:none;white-space:nowrap; }
.submission-url:hover,.submission-url:focus-visible { border-color:var(--accent);background:var(--accent-soft); }
.season-label { display:inline-flex;padding:5px 9px;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:.75rem;font-weight:800;white-space:nowrap; }
.wide-modal { width:min(900px,calc(100vw - 28px)); }
.bulk-selection-toolbar { display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0 8px; }
.bulk-selection-toolbar label { display:flex;align-items:center;gap:8px;font-weight:800; }
.bulk-submission-list { display:grid;max-height:min(46vh,520px);overflow:auto;border:1px solid var(--line);border-radius:14px;background:var(--surface-2); }
.bulk-submission-row { display:grid;grid-template-columns:auto minmax(180px,1fr) minmax(220px,1fr);align-items:center;gap:14px;padding:13px 15px;border-bottom:1px solid var(--line);cursor:pointer; }
.bulk-submission-row:last-child { border-bottom:0; }
.bulk-submission-row:has(input:checked) { background:var(--accent-soft); }
.bulk-submission-row:has(input:disabled) { opacity:.55;cursor:not-allowed; }
.bulk-submission-row span { display:grid;gap:2px; }
.bulk-submission-row small { color:var(--muted); }
.bulk-mail-options { margin-top:15px; }
.climate-problem { display:grid;gap:3px;margin-top:14px;padding:12px 14px;border:1px solid color-mix(in srgb,var(--danger) 55%,var(--line));border-radius:12px;background:color-mix(in srgb,var(--danger) 10%,var(--surface));color:var(--danger); }
.climate-problem span { overflow-wrap:anywhere;font-size:.78rem; }
.climate-insights { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin-top:14px; }
.climate-insight { display:grid;gap:3px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2); }
.climate-insight span,.climate-insight small { color:var(--muted);font-size:.68rem; }
.climate-insight strong { font-size:1.05rem;font-variant-numeric:tabular-nums; }
.climate-capabilities { display:grid;gap:10px;margin-top:14px;padding-top:14px;border-top:1px solid var(--line); }
.fan-speed-control,.job-mode-control { display:grid;grid-template-columns:max-content minmax(150px,190px);align-items:center;justify-content:start;gap:12px;font-size:.78rem;font-weight:800; }
.fan-speed-control select,.job-mode-control select { width:100%;min-height:40px; }
.climate-feature-toggles { display:flex;flex-wrap:wrap;gap:7px; }
.climate-capability.is-active { border-color:var(--accent);background:var(--accent-soft);color:var(--accent); }
.refresh-climate-energy { margin-left:auto; }
.span-2 { grid-column: span 2; }
.stack { display: grid; gap: 17px; }
.or { display: flex; align-items: center; gap: 12px; margin: 9px 0; color: var(--muted); font-size: .78rem; }
.or::before, .or::after { content: ""; flex: 1; height: 1px; background: var(--line); }

.login-body .app-main { width: 100%; padding: 0; }
.login-layout { display: grid; grid-template-columns: minmax(420px, 1.15fr) minmax(420px, .85fr); min-height: 100vh; }
.login-visual { position: relative; min-height: 100%; background: linear-gradient(180deg, rgba(41,17,29,.05), rgba(41,17,29,.82)), url('/static/images/kerk.jpg') center/cover; }
.login-visual::before { content: ""; position: absolute; inset: 0; background: linear-gradient(110deg, transparent 45%, rgba(198,45,65,.2)); }
.login-overlay { position: absolute; left: clamp(36px, 6vw, 90px); bottom: clamp(42px, 8vw, 110px); max-width: 640px; color: #fff; }
.login-overlay h1 { font-size: clamp(3.3rem, 7vw, 7.7rem); }
.login-overlay p:last-child { max-width: 520px; color: rgba(255,255,255,.78); font-size: 1.12rem; }
.login-panel { display: grid; place-items: center; padding: 42px; background: var(--bg); }
.login-card { width: min(440px, 100%); padding: 38px; border: 1px solid var(--line); border-radius: 26px; background: var(--surface); box-shadow: var(--shadow); }
.login-logo { width: 224px; margin-bottom: 42px; padding: 7px; border-radius: 10px; background: #fff; }
.login-card h2 { font-size: 2.1rem; }
.login-foot { margin: 25px 0 0; color: var(--muted); font-size: .75rem; text-align: center; }
.totp-card { width:min(680px,100%); }
.totp-setup { display:grid;grid-template-columns:220px minmax(0,1fr);gap:24px;align-items:center;margin:22px 0; }
.totp-qr { padding:10px;border-radius:14px;background:#fff; }
.totp-qr svg { display:block;width:100%;height:auto; }
.totp-secret { display:block;margin:8px 0;padding:12px;overflow-wrap:anywhere;font-size:1rem;letter-spacing:.06em; }

.planner-toolbar { justify-content: flex-start; margin-bottom: 18px; padding: 12px 15px; border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--surface); }
.date-control { display: flex; align-items: center; gap: 9px; }
.date-control input { width: 160px; }
.planner { display: grid; grid-template-columns: 310px minmax(0, 1fr); gap: 18px; align-items: start; }
.source-drawer { position: sticky; top: 98px; max-height: calc(100vh - 122px); padding: 20px; overflow: auto; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); box-shadow: var(--shadow-soft); }
.count-badge, .room-card header > span { display: grid; min-width: 31px; height: 31px; place-items: center; border-radius: 999px; background: var(--brand-soft); color: var(--brand); font-size: .78rem; font-weight: 800; }
.source-events { display: grid; gap: 10px; }
.import-last-sync { display:block;margin-top:5px;font-size:.67rem;line-height:1.4; }
.source-event { padding: 14px; border: 1px solid var(--line); border-left: 4px solid var(--accent); border-radius: 12px; background: var(--surface-2); cursor: grab; }
.source-event:active { cursor: grabbing; }
.source-event time, .source-event strong, .source-event small, .source-event span { display: block; }
.source-event strong { line-height:1.35;letter-spacing:-.006em; }
.source-event time { margin-bottom: 4px; color: var(--brand); font-size: .78rem; font-weight: 800; }
.source-event small { margin-top: 5px; }
.source-event .source-assignment { display: flex; align-items: flex-start; gap: 7px; margin-top: 11px; color: var(--muted); font-size: .72rem; font-weight: 700; line-height: 1.35; }
.source-assignment i { flex: 0 0 8px; width: 8px; height: 8px; margin-top: 2px; border-radius: 50%; background: var(--muted); }
.source-event.is-assigned .source-assignment { color: var(--brand); }
.source-event.is-assigned .source-assignment i { background: var(--brand); box-shadow: 0 0 0 3px color-mix(in srgb, var(--brand) 16%, transparent); }
.source-event .drag-hint { margin-top: 10px; color: var(--muted); font-size: .66rem; font-weight: 750; letter-spacing: .04em; text-transform: uppercase; }
.room-grid { display: grid; gap: 25px; }
.floor-section-title { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.floor-section-title > span { display: grid; width: 42px; height: 42px; place-items: center; border-radius: 12px; background: var(--plum); color: #fff; font-weight: 850; }
.floor-section-title h2 { margin: 0; }
.room-cards { display: grid; grid-template-columns: repeat(3, minmax(220px, 1fr)); gap: 12px; }
.room-card { display: flex; min-height: 210px; flex-direction: column; padding: 17px; border: 1px solid var(--line); border-radius: 17px; background: var(--surface); transition: .16s ease; }
.room-card.is-drop-target { border-color: var(--brand); background: var(--brand-soft); transform: scale(1.012); }
.room-card header { display: flex; justify-content: space-between; gap: 12px; padding-bottom: 13px; border-bottom: 1px solid var(--line); }
.room-card header small { display: block; margin-bottom: 3px; font-size: .66rem; text-transform: uppercase; }
.room-card header h3 { overflow-wrap:anywhere; }
.room-bookings { display: grid; gap: 8px; padding: 12px 0; }
.booking-block { width: 100%; padding: 10px 11px; border: 0; border-radius: 11px; background: var(--brand-soft); color: var(--text); text-align: left; cursor: grab; }
.booking-block:hover { outline: 1px solid var(--brand); }
.booking-entry { position: relative; min-width: 0; }
.booking-entry:has(.booking-quick-remove) .booking-block { padding-right: 42px; }
.booking-quick-remove { position: absolute; top: 3px; right: 3px; width: 32px; height: 32px; padding: 0; border: 0; border-radius: 8px; background: transparent; color: var(--text); font-size: 22px; cursor: pointer; }
.booking-quick-remove:hover, .booking-quick-remove:focus-visible { background: var(--surface); outline: 2px solid var(--brand); }
.source-event.is-unplanned { border-left: 5px solid #e7ac39; background: color-mix(in srgb, #e7ac39 12%, var(--surface)); }
.source-event.is-unplanned .source-assignment { font-weight: 800; }
.source-event.is-unplanned .source-assignment i { background: #e7ac39; }
.booking-block span, .booking-block strong, .booking-block small { display: block; }
.booking-block span { color: var(--brand); font-size: .72rem; font-weight: 800; }
.booking-block small { margin-top: 3px; font-size: .66rem; }
.room-empty { display: grid; min-height: 72px; place-items: center; color: var(--muted); font-size: .82rem; }
.room-add { width: 100%; margin-top: auto; padding: 8px; border: 1px dashed var(--line); border-radius: 10px; background: transparent; color: var(--muted); cursor: pointer; }
.room-add:hover { border-color: var(--brand); color: var(--brand); }
.skeleton-block { height: 120px; border-radius: 12px; background: linear-gradient(100deg, var(--surface-2) 20%, var(--surface-3) 40%, var(--surface-2) 60%); background-size: 200% 100%; animation: shimmer 1.4s infinite; }
.skeleton-block.wide { height: 320px; }
@keyframes shimmer { to { background-position-x: -200%; } }

@media (min-width: 1280px) {
  .room-grid { grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:18px; }
  .floor-section { min-width:0; }
  .floor-section-title { margin-bottom:10px; }
  .floor-section-title > span { width:38px;height:38px;border-radius:10px;font-size:.78rem; }
  .floor-section-title h2 { font-size:1.5rem; }
  .room-cards { grid-template-columns:repeat(2,minmax(0,1fr));gap:10px; }
  .room-card { min-height:148px;padding:13px; }
  .room-card header { padding-bottom:9px; }
  .room-card header h3 { margin:0;font-size:.92rem;line-height:1.25; }
  .room-bookings { gap:6px;padding:8px 0; }
  .room-empty { min-height:35px;font-size:.75rem; }
  .room-add { padding:6px;font-size:.76rem; }
  .booking-block { padding:7px 9px; }
}

.modal { width:min(680px,calc(100% - 28px));max-height:calc(100vh - 28px);padding:0;overflow-x:hidden;overflow-y:auto;border:0;border-radius:23px;background:transparent;color:var(--text);box-shadow:var(--shadow); }
.modal.wide-modal { width:min(900px,calc(100vw - 28px)); }
.modal::backdrop { background: rgba(21, 13, 18, .62); backdrop-filter: blur(5px); }
.modal-card { padding: 27px; background: var(--surface); }
.modal-heading { margin-bottom: 24px; }
.modal-actions { margin-top: 26px; }
.permissions { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 15px; border: 1px solid var(--line); border-radius: 13px; }
.permissions legend { padding: 0 8px; font-size: .8rem; font-weight: 800; }
.permission-groups-panel { margin-top:22px; }
.permission-groups-panel>.panel-heading { display:flex;align-items:center;justify-content:space-between;gap:18px; }
.permission-group-choices { border-color:color-mix(in srgb,var(--brand) 30%,var(--line));background:color-mix(in srgb,var(--brand-soft) 42%,var(--surface)); }
.permission-check, .switch-row { display: flex; grid-template-columns: auto 1fr; align-items: flex-start; gap: 10px; padding: 10px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface-2); }
.permission-check input, .switch-row input { width: 18px; min-height: 18px; margin-top: 2px; accent-color: var(--brand); }
.permission-check strong, .permission-check small, .switch-row strong, .switch-row small { display: block; }
.permission-check small, .switch-row small { margin-top: 3px; font-weight: 500; }
.copy-field { display: flex; gap: 9px; }

.table-panel { padding: 0; overflow: auto; }
.table-panel > .panel-heading { margin: 0; padding: 26px 28px 20px; }
.table-panel > .section-intro { padding: 0 28px; }
.wallboard-overview table { min-width: 1000px; }
.wallboard-overview .copy-field { min-width: 220px; }
.wallboard-overview .copy-field input { min-width: 0; }
.wallboard-overview .status-dot { white-space: nowrap; }
.wallboard-manage-actions { display: flex; flex-wrap: wrap; gap: 6px; min-width: 155px; }
.wallboard-manage-actions .button { white-space: normal; }
.wallboard-overview .wallboard-summary-row td { border-bottom: 0; vertical-align: top; padding-bottom: 12px; }
.wallboard-overview .wallboard-diagnostics-row td { padding-top: 0; }
.wallboard-connection-details { display: flex; flex-wrap: wrap; gap: 16px 36px; padding: 14px 16px; border-radius: 12px; background: var(--surface-2); }
.wallboard-connection-details > div { display: grid; gap: 4px; }
.wallboard-connection-details strong { font-size: .73rem; color: var(--muted); }
.wallboard-connection-details span { font-size: .8rem; overflow-wrap: anywhere; }
table { width: 100%; min-width: 700px; border-collapse: collapse; }
th, td { padding: 16px 19px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: middle; }
th { color: var(--muted); font-size: .7rem; letter-spacing: .08em; text-transform: uppercase; }
td { font-size: .88rem; }
td strong, td small { display: block; }
.user-last-login { display: block; white-space: nowrap; font-variant-numeric: tabular-nums; }
.user-last-login small { color: var(--muted); margin-top: 3px; }
tr:last-child td { border-bottom: 0; }
.role-pill, .status-dot { display: inline-flex; align-items: center; gap: 7px; padding: 5px 9px; border-radius: 999px; background: var(--surface-2); font-size: .73rem; font-weight: 750; }
.status-dot::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--muted); }
.status-dot.on::before { background: var(--success); box-shadow: 0 0 0 3px color-mix(in srgb, var(--success) 15%, transparent); }
.status-dot.off::before { background: var(--danger); }
.status-dot.pending::before { background: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 15%, transparent); }
.table-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; }
.submission-link-actions { display:grid;grid-template-columns:max-content max-content;align-items:start;gap:8px;min-width:235px; }
.submission-action-menu { min-width:0; }
.submission-action-menu>summary { list-style:none;cursor:pointer;white-space:nowrap; }
.submission-action-menu>summary::-webkit-details-marker { display:none; }
.submission-action-menu[open]>summary { border-color:color-mix(in srgb,var(--brand) 42%,var(--line));background:var(--brand-soft);color:var(--brand-dark); }
.submission-action-list { grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin-top:8px;padding:9px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);box-shadow:var(--shadow-soft); }
.submission-action-list .button { justify-content:flex-start;width:100%;min-height:36px;text-align:left; }
.submission-action-list .delete-submission-link { grid-column:1/-1; }
.submission-history-list { display:grid;gap:10px;max-height:min(58vh,620px);overflow:auto;padding:2px; }
.submission-history-card { display:grid;grid-template-columns:minmax(0,1fr) minmax(145px,auto) auto;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2); }
.submission-history-card>div { display:grid;gap:3px;min-width:0; }
.submission-history-card strong { overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.submission-history-card small,.submission-history-card time { color:var(--muted);font-size:.72rem; }
.submission-history-action { color:var(--brand);font-size:.67rem;font-weight:850;letter-spacing:.05em;text-transform:uppercase; }
.submission-history-meta { justify-items:end;text-align:right; }
.mail-tone-picker { display:flex;align-items:center;gap:7px;padding:6px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2); }
.empty-state { padding: 25px !important; color: var(--muted); text-align: center; }
.empty-state.compact { padding: 16px !important; font-size: .8rem; }

.settings-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-bottom: 24px; }
.settings-link { transition:transform .16s ease,border-color .16s ease,box-shadow .16s ease; }
.settings-link:hover { transform:translateY(-2px);border-color:color-mix(in srgb,var(--brand) 42%,var(--line));box-shadow:var(--shadow); }
.settings-link::after { content:"→";position:absolute;right:20px;top:18px;color:var(--brand);font-size:1.2rem; }
.setting-card { position:relative; }
.settings-page .settings-section { display:none; }
.settings-page:not(.settings-overview) .settings-grid { display:none; }
.settings-page.settings-entra .settings-entra,
.settings-page.settings-grafana .settings-grafana,
.settings-page.settings-mail .settings-mail,
.settings-page.settings-solaredge .settings-solaredge,
.settings-page.settings-thinq .settings-thinq,
.settings-page.settings-wallboard .settings-wallboard,
.settings-page.settings-jevents .settings-jevents,
.settings-page.settings-submissions .settings-submissions { display:block; }
.settings-page.settings-security .settings-security { display:block; }
.api-network-form { display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,.72fr);gap:18px 22px;align-items:start; }
.api-network-form>* { min-width:0; }
.api-network-form>.switch-row,.api-network-form>label { grid-column:1/-1; }
.api-network-note { display:grid;grid-template-columns:minmax(150px,.34fr) minmax(0,1fr);gap:12px 20px;padding:15px 17px;border:1px solid color-mix(in srgb,var(--accent) 35%,var(--line));border-radius:var(--radius-sm);background:color-mix(in srgb,var(--accent) 9%,var(--surface));font-size:.86rem;line-height:1.5; }
.api-network-note span { color:var(--muted); }
.api-network-actions { display:flex;align-items:center;justify-content:flex-end; }
.api-network-actions .button { min-width:190px; }
.settings-jevents .copy-field { display:grid;grid-template-columns:minmax(120px,160px) minmax(0,1fr) auto;align-items:center;gap:12px;margin-bottom:10px; }
.settings-jevents .copy-field > span { font-weight:800; }
.settings-jevents .copy-field code { min-width:0;overflow-wrap:anywhere; }
@media (max-width: 720px) { .settings-jevents .copy-field { grid-template-columns:1fr; } }
.settings-page .settings-section + .settings-section { margin-top:24px; }
.booking-climate-settings { padding:16px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2); }
.booking-climate-settings legend { padding:0 7px;color:var(--brand-dark);font-weight:800; }
.booking-climate-settings > .switch-row { margin-bottom:12px; }
.settings-grid + .thinq-settings, .climate-admin-table { margin-bottom: 24px; }
.setting-card { min-height: 145px; padding: 22px; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); }
.setting-card span, .setting-card strong, .setting-card small { display: block; }
.setting-card span { margin-bottom: 18px; color: var(--muted); font-size: .74rem; text-transform: uppercase; }
.setting-card strong { margin-bottom: 7px; font-size: 1.3rem; }
.help-layout { display: grid; grid-template-columns: 230px minmax(0, 820px); gap: clamp(28px, 6vw, 90px); align-items: start; }
.help-toc { position: sticky; top: 104px; display: grid; gap: 5px; padding: 17px; border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--surface); }
.help-toc strong { margin-bottom: 8px; font-size: .76rem; text-transform: uppercase; }
.help-toc a { padding: 8px 9px; border-radius: 8px; color: var(--muted); font-size: .85rem; }
.help-toc a:hover { background: var(--brand-soft); color: var(--brand); }
.help-content { display: grid; gap: 17px; }
.help-article { padding: clamp(24px, 4vw, 42px); border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); scroll-margin-top:100px; }
.help-article li { margin-bottom: 8px; }
.help-article h3 { margin:1.8em 0 .6em;line-height:1.35; }
.help-article dt { margin:1.1em 0 .3em;font-weight:750; }
.help-article dd { margin:0 0 .8em;line-height:1.7; }
.error-card { width: min(600px, 100%); margin: 10vh auto; padding: 48px; border: 1px solid var(--line); border-radius: 25px; background: var(--surface); text-align: center; box-shadow: var(--shadow); }
.error-card img { width: 210px; margin-bottom: 40px; }
.section-intro { margin: 0 0 18px; color: var(--muted); }
.inline-settings { display: flex; align-items: end; flex-wrap: wrap; gap: 14px; margin: 20px 0; }
.inline-settings > label { min-width: 120px; }
.inline-settings > .grow { flex: 1 1 280px; }
.thinq-settings { margin-bottom: 22px; }
.thinq-settings .save-status { min-height: 24px; margin: 6px 0 0; text-align: left; }
.climate-bulk-control { display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:18px;padding:22px 24px; }
.climate-bulk-control h2 { margin-bottom:5px;font-size:1.35rem; }
.climate-bulk-control p:not(.eyebrow) { margin:0;color:var(--muted);font-size:.88rem; }
.climate-bulk-actions { display:grid;gap:9px;min-width:min(100%,510px); }
.climate-bulk-control form { display:grid;grid-template-columns:minmax(145px,180px) auto;align-items:end;gap:10px 12px; }
.climate-bulk-power { display:flex;justify-content:flex-end;gap:9px; }
.climate-bulk-control .save-status { width:100%;min-height:18px;margin:0;font-size:.76rem;text-align:right; }
.climate-control-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.climate-control-card { position: relative; padding: 24px; overflow: hidden; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); box-shadow: var(--shadow-soft); transition: background .2s ease, border-color .2s ease, box-shadow .2s ease; }
.climate-control-card.is-powered-on { border-color: color-mix(in srgb, #2878d0 58%, var(--line)); box-shadow: inset 5px 0 #2878d0, var(--shadow-soft); }
.climate-control-card.is-powered-off { background: color-mix(in srgb, var(--surface-2) 86%, var(--bg)); border-color: color-mix(in srgb, var(--muted) 25%, var(--line)); box-shadow: inset 5px 0 color-mix(in srgb, var(--muted) 45%, var(--line)); }
.climate-control-card.is-powered-off::before { opacity: .2; filter: grayscale(1); }
.climate-control-card.is-powered-off .temperature-panel { opacity: .68; }
.climate-control-card::before { content: ""; position: absolute; top: -90px; right: -90px; width: 210px; aspect-ratio: 1; border-radius: 50%; background: var(--brand-soft); opacity: .65; }
.climate-card-header { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 13px; }
.climate-card-header h2 { margin: 2px 0 0; font-size: 1.35rem; }
.climate-card-header small { display: block; font-size: .67rem; font-weight: 750; letter-spacing: .07em; text-transform: uppercase; }
.floor-badge { display: grid; width: 43px; aspect-ratio: 1; place-items: center; border-radius: 12px; background: var(--plum); color: #fff; font-size: .8rem; font-weight: 850; }
.climate-state { display: inline-flex; align-items: center; gap: 7px; padding: 6px 10px; border-radius: 999px; background: var(--surface-2); color: var(--muted); font-size: .72rem; font-weight: 760; white-space: nowrap; }
.climate-state::before { content: ""; width: 7px; aspect-ratio: 1; border-radius: 50%; background: var(--muted); }
.climate-state.on { background: #2878d0; color: #fff; }
.climate-state.on::before { background: #fff; box-shadow: 0 0 0 3px rgba(255,255,255,.18); }
.climate-state.off { border: 1px solid var(--line); background: var(--surface-3); color: var(--muted); }
.temperature-panel { position: relative; display: grid; grid-template-columns: .82fr 1.18fr; gap: 12px; margin: 22px 0; }
.temperature-reading { min-height: 150px; padding: 17px; border: 1px solid var(--line); border-radius: 17px; background: var(--surface-2); }
.temperature-reading.climate-history-open { width:100%;color:var(--text);font:inherit;text-align:left;cursor:pointer;transition:border-color .18s ease,background .18s ease,transform .18s ease; }
.temperature-reading.climate-history-open:hover { border-color:var(--brand);background:color-mix(in srgb,var(--brand) 7%,var(--surface-2)); }
.temperature-reading.climate-history-open:focus-visible { outline:3px solid color-mix(in srgb,var(--brand) 28%,transparent);outline-offset:3px; }
.temperature-reading.climate-history-open:active { transform:translateY(1px); }
.temperature-reading > span, .temperature-reading > small { display: block; color: var(--muted); font-size: .7rem; font-weight: 700; }
.temperature-reading > strong { display: block; margin: 14px 0 10px; font-size: clamp(2.8rem, 5vw, 4.3rem); line-height: .8; letter-spacing: -.07em; font-variant-numeric: tabular-nums; }
.temperature-reading.target { display: flex; flex-direction: column; }
.temperature-adjust { display: grid; grid-template-columns: 43px minmax(80px, 1fr) 43px; gap: 8px; margin: 12px 0; }
.temperature-adjust input { padding-inline: 6px; text-align: center; font-size: 1.3rem; font-weight: 800; font-variant-numeric: tabular-nums; }
.temperature-reading .apply-temperature { width: 100%; margin-top: auto; }
.climate-card-actions { position: relative; display: flex; flex-wrap: wrap; gap: 9px; }
.climate-card-actions .climate-config { margin-left: auto; }
.climate-message { position: relative; min-height: 22px; margin: 14px 0 0; color: var(--muted); font-size: .78rem; }
.climate-message.is-error { color: var(--danger); }
.climate-schedules { margin-bottom:24px; }
.climate-schedules .panel-heading { align-items:flex-start;gap:24px; }
.climate-schedules .panel-heading p:not(.eyebrow) { max-width:720px;margin:7px 0 0;color:var(--muted); }
.climate-schedule-list { display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:12px;margin-top:20px; }
.climate-schedule-card { display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:15px;padding:15px;border:1px solid var(--line);border-radius:18px;background:var(--surface-2); }
.climate-schedule-card.is-disabled { opacity:.58; }
.climate-schedule-time { display:grid;place-items:center;min-width:68px;padding:9px;border-radius:14px;background:color-mix(in srgb,var(--brand) 13%,var(--surface)); }
.climate-schedule-time strong { font-size:1.15rem;font-variant-numeric:tabular-nums; }
.climate-schedule-time small { color:var(--brand);font-size:.68rem;font-weight:800;text-transform:uppercase; }
.climate-schedule-card h3,.climate-schedule-card p { margin:0; }
.climate-schedule-card p,.climate-schedule-card>div>small { color:var(--muted);font-size:.76rem; }
.climate-schedule-card p { margin:4px 0 2px;font-weight:700;text-transform:capitalize; }
.climate-schedule-empty { grid-column:1/-1;min-height:110px; }
.climate-schedule-empty,.climate-rule-empty { display:grid;place-items:center;align-content:center;gap:8px; }
.climate-schedule-empty strong,.climate-schedule-empty span,.climate-rule-empty strong,.climate-rule-empty span { display:block; }
.weekday-picker { display:flex;flex-wrap:wrap;gap:8px;border:0;padding:0;margin:0; }
.weekday-picker legend { width:100%;margin-bottom:7px;font-size:.78rem;font-weight:750; }
.weekday-picker label { cursor:pointer; }
.weekday-picker input { position:absolute;opacity:0;pointer-events:none; }
.weekday-picker span { display:grid;place-items:center;width:44px;height:40px;border:1px solid var(--line);border-radius:12px;background:var(--surface-2);font-size:.76rem;font-weight:800; }
.weekday-picker input:checked+span { border-color:var(--brand);background:var(--brand);color:#fff; }
.weekday-picker input:focus-visible+span { outline:3px solid color-mix(in srgb,var(--brand) 28%,transparent);outline-offset:2px; }
.schedule-temperature.is-disabled,.schedule-operation-mode.is-disabled,.schedule-fan-auto.is-disabled { opacity:.5; }
.climate-automation-settings { position:relative;margin-top:12px;border-top:1px solid var(--line);padding-top:12px; }
.climate-automation-settings summary { color:var(--brand);font-size:.78rem;font-weight:800;cursor:pointer; }
.climate-automation-form { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px; }
.climate-automation-form .switch-row { grid-column:1/-1; }
.climate-automation-form .save-status { align-self:center;margin:0; }
.job-mode-control small { display:block;grid-column:1/-1;margin-top:-6px;color:var(--muted);font-size:.68rem; }
.climate-rules { margin-bottom:24px; }
.climate-rules .panel-heading { align-items:flex-start;gap:24px; }
.climate-rules .panel-heading p:not(.eyebrow) { max-width:780px;margin:7px 0 0;color:var(--muted); }
.climate-rule-list { display:grid;grid-template-columns:repeat(auto-fit,minmax(310px,1fr));gap:12px;margin-top:20px; }
.climate-rule-card { display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:14px;padding:17px;border:1px solid var(--line);border-radius:18px;background:var(--surface-2); }
.climate-rule-card.is-disabled { opacity:.6; }
.climate-rule-card>div { display:grid;gap:5px; }
.climate-rule-card h3,.climate-rule-card p { margin:0; }
.climate-rule-card p,.climate-rule-card small { color:var(--muted);font-size:.76rem;line-height:1.45; }
.climate-rule-empty { grid-column:1/-1;min-height:110px; }
.climate-history-modal { width:min(980px,100%); }
.climate-history-toolbar { display:flex;align-items:end;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:14px; }
.climate-history-toolbar>label { width:min(210px,100%); }
.climate-history-range { display:flex;flex-wrap:wrap;gap:6px; }
.history-chart-actions { display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:7px; }
.history-series-legend { display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 12px; }
.history-series-legend button { display:inline-flex;align-items:center;gap:7px;padding:6px 9px;border:1px solid var(--line);border-radius:999px;background:var(--surface-2);color:var(--text);font:inherit;font-size:.76rem;font-weight:750;cursor:pointer; }
.history-series-legend button i { width:10px;height:10px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 2px color-mix(in srgb,var(--brand) 18%,transparent); }
.history-series-legend button[data-climate-series="target_temperature"] i { background:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 18%,transparent); }
.history-series-legend button.is-muted { opacity:.4; }
.history-series-legend button.is-active { border-color:var(--brand);background:var(--brand-soft); }
.climate-history-chart { position:relative;min-height:330px;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--surface-2); }
#climate-history-chart { display:block;width:100%;height:430px;max-height:52vh;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none; }
.climate-history-chart .chart-tooltip { position:absolute;z-index:2;max-width:240px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);box-shadow:var(--shadow-soft);color:var(--text);font-size:.72rem;font-weight:750;pointer-events:none; }
.history-drag-selection { position:absolute;z-index:1;top:20px;bottom:36px;border:1px solid var(--brand);background:color-mix(in srgb,var(--brand) 18%,transparent);pointer-events:none; }
.climate-history-modal:fullscreen { gap:12px; }
.climate-history-modal:fullscreen .climate-history-chart { display:flex;min-height:0;flex:1 1 auto; }
.climate-history-modal:fullscreen #climate-history-chart { height:100%;max-height:none; }
.floor-editor-toolbar { display:flex;align-items:end;flex-wrap:wrap;gap:12px;margin-bottom:12px; }
.floor-editor-toolbar label { min-width:180px; }
.floor-editor-toolbar .size-control { flex:0 1 135px;min-width:115px; }
.floor-editor-stage { position:relative;width:min(100%,1200px);margin:18px auto 0;overflow:hidden;border:1px solid var(--line);border-radius:16px;background:var(--surface-2);touch-action:none;user-select:none; }
.floor-editor-stage>img { position:absolute;z-index:3;inset:0;width:100%;height:100%;pointer-events:none; }
.editor-zone { position:absolute;z-index:1;cursor:move;touch-action:none; }
.editor-zone-fill { position:absolute;inset:0;background:color-mix(in srgb,var(--brand) 32%,transparent); }
.editor-zone-edge { position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none; }
.editor-zone-edge polygon { fill:none;stroke:var(--brand);stroke-width:2;vector-effect:non-scaling-stroke; }
.editor-zone.corner-editing { z-index:7;pointer-events:none; }
.editor-corner { position:absolute;transform:translate(-50%,-50%);width:26px;height:26px;min-height:0;padding:0;border:2px solid var(--text);border-radius:50%;background:var(--accent);cursor:crosshair;touch-action:none;pointer-events:auto; }
.editor-corner:focus-visible { outline:3px solid var(--brand);outline-offset:3px; }
.editor-corner.is-active { box-shadow:0 0 0 3px var(--brand); }
.editor-add-point { position:absolute;transform:translate(-50%,-50%);width:24px;height:24px;min-height:0;padding:0;border:1px solid var(--brand);border-radius:5px;background:var(--surface);color:var(--text);font-size:18px;line-height:1;pointer-events:auto;touch-action:manipulation;cursor:pointer; }
.floor-editor-toolbar .corner-snap-control { display:flex;align-items:center;gap:8px;min-width:0; }
.corner-snap-control input { width:18px;height:18px;min-height:0;padding:0; }
.floor-shape-help { margin:12px 0;max-width:85ch; }
.editor-zone.selected { outline:3px solid var(--accent);outline-offset:2px; }
.editor-text { position:absolute;z-index:5;display:grid;min-height:0;padding:5px;place-items:center;overflow:hidden;border:2px dashed var(--accent);border-radius:8px;background:var(--surface);color:var(--text);font-size:.72rem;font-weight:800;text-align:center;cursor:grab;touch-action:none; }
.editor-text.selected { box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 25%,transparent); }
.editor-resize-handle { position:absolute;right:-1px;bottom:-1px;width:17px;height:17px;border:1px solid rgba(255,255,255,.8);border-radius:6px 0 0 0;background:var(--accent);box-shadow:0 0 0 1px rgba(0,0,0,.18);cursor:nwse-resize;touch-action:none; }
.wallboard-settings { margin-bottom:24px; }
.submission-logo { width:min(220px,30vw);max-height:110px;object-fit:contain; }
.submission-heading-actions { display:flex;align-items:center;justify-content:flex-end;gap:12px; }
.submission-heading-actions .icon-button { flex:0 0 auto; }
.submission-list { display:grid;gap:10px; }
.news-stats { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:20px; }
.news-stats article { display:flex;align-items:center;justify-content:space-between;gap:15px;padding:17px 19px;border:1px solid var(--line);border-radius:15px;background:var(--surface);box-shadow:var(--shadow-soft); }
.news-stats article>strong { font-size:1.8rem;line-height:1;font-variant-numeric:tabular-nums; }
.news-admin-grid { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px; }
.news-admin-card { display:flex;min-height:225px;padding:21px;flex-direction:column;border:1px solid var(--line);border-radius:18px;background:var(--surface);box-shadow:var(--shadow-soft); }
.news-admin-card>header,.news-admin-card>footer { display:flex;align-items:center;justify-content:space-between;gap:10px; }
.news-admin-card>header>small { font-size:.72rem;font-weight:700; }
.news-admin-card>p { margin:21px 0;font-size:1.08rem;font-weight:720;line-height:1.45;overflow-wrap:anywhere; }
.news-admin-card dl { display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:auto 0 18px; }
.news-admin-card dl div { padding:10px 12px;border-radius:10px;background:var(--surface-2); }
.news-admin-card dt { color:var(--muted);font-size:.66rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase; }
.news-admin-card dd { margin:3px 0 0;font-size:.8rem;font-weight:700; }
.news-admin-card>footer { justify-content:flex-end;padding-top:15px;border-top:1px solid var(--line); }
.news-empty { grid-column:1/-1;text-align:center; }
.submission-card { display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:12px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2); }
.submission-card strong,.submission-card small { display:block; }
.public-submission { max-width:1240px;padding-top:40px; }
.public-submission>.panel { margin-bottom:20px; }
.submission-contact-form { display:grid;grid-template-columns:minmax(140px,.6fr) minmax(115px,.45fr) minmax(180px,.75fr) minmax(280px,1.15fr) auto;gap:12px;align-items:end;margin-top:20px; }
.submission-list { gap:18px; }
.calendar-overview-stats { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px; }
.calendar-overview-stats article { display:flex;align-items:center;justify-content:space-between;gap:14px;padding:16px 18px;border:1px solid var(--line);border-radius:15px;background:var(--surface);box-shadow:var(--shadow-soft); }
.calendar-overview-stats span { color:var(--muted);font-size:.78rem;font-weight:750; }
.calendar-overview-stats strong { font-size:1.7rem;font-variant-numeric:tabular-nums; }
.calendar-overview-toolbar { display:flex;align-items:end;gap:14px;margin-bottom:4px;padding:18px;border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:var(--shadow-soft); }
.calendar-overview-toolbar label:first-child { min-width:min(520px,65vw); }
.calendar-view-tabs { display:inline-flex;gap:5px;margin-bottom:18px;padding:5px;border:1px solid var(--line);border-radius:14px;background:var(--surface);box-shadow:var(--shadow-soft); }
.calendar-view-tabs .button { border-color:transparent; }
.calendar-view-tabs .is-active { background:var(--brand);color:#fff; }
.calendar-visual { padding:22px; }
.calendar-visual-toolbar { display:flex;align-items:end;justify-content:space-between;gap:18px;margin-bottom:18px; }
.calendar-visual-toolbar h2 { margin:0;text-transform:none; }
.calendar-month-actions { display:flex;align-items:center;gap:7px; }
.calendar-category-legend { display:flex;flex-wrap:wrap;gap:8px 14px;margin:-6px 0 15px;color:var(--muted);font-size:.68rem;font-weight:750; }
.calendar-category-filters { margin:0 0 18px;gap:7px; }
.calendar-category-legend .category-filter { display:flex;align-items:center;gap:6px;min-height:34px;padding:7px 11px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--muted);font:inherit;cursor:pointer;transition:border-color .15s ease,background .15s ease,color .15s ease,box-shadow .15s ease; }
.calendar-category-legend .category-filter:hover { border-color:color-mix(in srgb,var(--brand) 50%,var(--line));color:var(--text); }
.calendar-category-legend .category-filter.is-active { border-color:color-mix(in srgb,var(--brand) 54%,var(--line));background:var(--brand-soft);color:var(--brand-dark);box-shadow:0 0 0 2px color-mix(in srgb,var(--brand) 9%,transparent); }
.calendar-category-legend i { width:9px;height:9px;border-radius:50%;background:var(--brand); }
.calendar-category-legend .category-1 i { background:#7a4fc3; }
.calendar-category-legend .category-2 i { background:#16836e; }
.calendar-category-legend .category-3 i { background:#3579bd; }
.calendar-category-legend .category-4 i { background:#ad7622; }
.calendar-category-legend .category-5 i { background:#c14f6f; }
.calendar-category-filters .category-6 i { background:#788da5; }
#calendar-visual-view .calendar-event.category-6 { border-left-color:#788da5;background:color-mix(in srgb,#788da5 14%,var(--surface)); }
#calendar-visual-view .calendar-day>div { gap:8px; }
#calendar-visual-view .calendar-event { width:100%;max-width:100%;min-height:44px; }
#calendar-visual-view .calendar-event strong,#calendar-visual-view .calendar-event small { white-space:normal;overflow-wrap:anywhere; }
#calendar-loose-dialog dl { display:grid;gap:8px; }
#calendar-loose-dialog dt { font-weight:800;margin-top:10px; }
#calendar-loose-dialog dd { margin:0;overflow-wrap:anywhere; }
#calendar-visual-status:not(:empty) { display:block;margin:0 0 12px; }
#calendar-visual-retry { margin-bottom:12px; }
.calendar-weekdays,.calendar-month-grid { display:grid;grid-template-columns:repeat(7,minmax(0,1fr)); }
.calendar-weekdays { border:1px solid var(--line);border-bottom:0;border-radius:14px 14px 0 0;overflow:hidden;background:var(--surface-2); }
.calendar-weekdays span { padding:9px;color:var(--muted);font-size:.68rem;font-weight:850;letter-spacing:.08em;text-align:center;text-transform:uppercase; }
.calendar-month-grid { overflow:hidden;border:1px solid var(--line);border-radius:0 0 14px 14px;background:var(--line);gap:1px; }
.calendar-day { min-width:0;min-height:132px;padding:9px;background:var(--surface); }
.calendar-day>header { display:flex;align-items:center;justify-content:space-between;margin-bottom:7px; }
.calendar-day>header span { display:grid;width:27px;height:27px;place-items:center;border-radius:9px;font-size:.78rem;font-weight:850; }
.calendar-day>header small { display:none; }
.calendar-day.is-outside { background:color-mix(in srgb,var(--surface-2) 58%,var(--surface));opacity:.55; }
.calendar-day.is-today>header span { background:var(--brand);color:#fff; }
.calendar-day>div { display:grid;gap:5px; }
.calendar-event { min-width:0;padding:6px 7px;border:0;border-left:3px solid var(--brand);border-radius:7px;background:var(--brand-soft);color:var(--text);text-align:left;cursor:pointer; }
.calendar-event time,.calendar-event strong,.calendar-event small { display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.calendar-event time { color:var(--brand-dark);font-size:.59rem;font-weight:850;font-variant-numeric:tabular-nums; }
.calendar-event strong { margin-top:1px;font-size:.68rem;line-height:1.25;letter-spacing:-.005em; }
.calendar-event small { margin-top:1px;font-size:.57rem; }
.calendar-event:hover { outline:2px solid color-mix(in srgb,var(--brand) 35%,transparent); }
.calendar-event.category-1 { border-left-color:#7a4fc3;background:color-mix(in srgb,#7a4fc3 12%,var(--surface)); }
.calendar-event.category-2 { border-left-color:#16836e;background:color-mix(in srgb,#16836e 12%,var(--surface)); }
.calendar-event.category-3 { border-left-color:#3579bd;background:color-mix(in srgb,#3579bd 12%,var(--surface)); }
.calendar-event.category-4 { border-left-color:#ad7622;background:color-mix(in srgb,#ad7622 12%,var(--surface)); }
.calendar-event.category-5 { border-left-color:#c14f6f;background:color-mix(in srgb,#c14f6f 12%,var(--surface)); }
.calendar-event.is-pending { opacity:.62; }
.calendar-event.is-imported { border-right:1px dashed color-mix(in srgb,var(--brand) 35%,var(--line)); }
.calendar-series { transition:border-color .16s ease,transform .16s ease; }
.calendar-series:hover { border-color:color-mix(in srgb,var(--brand) 35%,var(--line)); }
.submission-series { overflow:hidden;border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:var(--shadow-soft); }
.submission-series>header { display:grid;grid-template-columns:minmax(180px,1fr) auto;gap:12px 18px;align-items:center;padding:18px 20px;border-bottom:1px solid var(--line); }
.submission-series>header strong,.submission-series>header small { display:block; }
.submission-series>header small { margin-top:4px;color:var(--muted); }
.submission-series>header .table-actions { grid-column:1 / -1; }
.occurrence-list { margin:0;padding:0;list-style:none; }
.review-feedback { margin:16px 20px 4px;padding:14px 16px;border:1px solid color-mix(in srgb,var(--danger) 36%,var(--line));border-radius:12px;background:color-mix(in srgb,var(--danger) 8%,var(--surface)); }
.review-feedback strong { display:block;color:var(--danger);font-size:.78rem;letter-spacing:.04em;text-transform:uppercase; }
.review-feedback p { margin:4px 0 0;white-space:pre-wrap; }
.series-history-note { margin:14px 20px 0;padding:10px 12px;border-radius:10px;background:var(--surface-2);color:var(--muted);font-size:.72rem;line-height:1.5; }
.occurrence-row { display:grid;grid-template-columns:minmax(220px,.9fr) auto minmax(360px,1.5fr);gap:18px;align-items:center;padding:14px 20px;border-bottom:1px solid var(--line);transition:background .14s ease; }
.occurrence-row:nth-child(odd) { background:color-mix(in srgb,var(--surface-2) 38%,var(--surface)); }
.occurrence-row:nth-child(even) { background:var(--surface); }
.occurrence-row:hover { background:var(--brand-soft); }
.occurrence-row:last-child { border-bottom:0; }
.occurrence-row time strong,.occurrence-row time small { display:block;font-variant-numeric:tabular-nums; }
.occurrence-row time small { margin-top:3px;color:var(--muted); }
.occurrence-row.is-skipped { opacity:.58; }
.occurrence-row.is-skipped time { text-decoration:line-through; }
.occurrence-state { justify-self:start;white-space:nowrap;text-transform:none; }
.occurrence-actions { justify-content:flex-end; }
.occurrence-list.is-readonly .occurrence-row { grid-template-columns:minmax(220px,1fr) auto; }
.occurrence-list.is-readonly .occurrence-actions { display:none; }
.button.action-edit { border-color:color-mix(in srgb,var(--brand) 35%,var(--line));background:var(--brand-soft);color:var(--brand-dark); }
.button.action-copy { color:var(--brand); }
.button.action-skip { margin-left:4px; }
.series-actions { justify-content:flex-start; }
.is-disabled { opacity:.55; }
.recurrence-dates-field.is-disabled { display:none; }
.submission-review-pending { border-top:4px solid var(--brand); }
.submission-review-section .panel-heading h2 { display:flex;align-items:center;flex-wrap:wrap;gap:12px; }
.submission-review-count { display:inline-flex;align-items:center;justify-content:center;min-width:2em;padding:4px 10px;border-radius:999px;background:var(--surface-2);color:var(--text);font-size:1rem;line-height:1.5;font-variant-numeric:tabular-nums; }
.submission-review-pending .submission-review-count { background:var(--brand-soft);color:var(--brand); }
.submission-review-empty { margin:0;padding:0 28px 26px;color:var(--muted); }
.submission-review-table { min-width:920px;table-layout:fixed; }
.submission-review-table col.status-column { width:130px; }
.submission-review-table col.actions-column { width:285px; }
.submission-review-table tbody tr:nth-child(even) { background:color-mix(in srgb,var(--surface-2) 42%,transparent); }
.submission-review-table tbody tr:hover { background:var(--brand-soft); }
.review-details { min-width:0; }
.review-details summary { position:relative;display:grid;gap:3px;padding:3px 38px 3px 0;cursor:pointer;list-style:none; }
.review-details summary strong { font-size:1rem; }
.review-details summary small { line-height:1.4; }
.review-details summary::-webkit-details-marker { display:none; }
.review-details summary::after { content:"＋";position:absolute;right:0;top:50%;display:grid;width:28px;height:28px;place-items:center;border-radius:9px;background:var(--brand-soft);color:var(--brand);font-weight:900;transform:translateY(-50%); }
.review-details[open] summary::after { content:"−"; }
.review-content { margin-top:16px;padding:18px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2); }
.review-content dl { display:grid;grid-template-columns:130px minmax(0,1fr);gap:8px 15px;margin:0 0 15px; }
.review-content dt { color:var(--muted);font-weight:750; }
.review-content dd { margin:0;white-space:pre-wrap; }
.review-moments { display:grid;gap:8px;max-height:420px;margin:18px 0 0;padding:0;overflow:auto;list-style:none; }
.review-moment { display:grid;grid-template-columns:minmax(180px,1fr) 105px auto;gap:12px;align-items:center;padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:var(--surface); }
.review-moment:nth-child(even) { background:color-mix(in srgb,var(--surface-3) 42%,var(--surface)); }
.review-moment time strong,.review-moment time small { display:block;font-variant-numeric:tabular-nums; }
.review-moment time small { margin-top:2px; }
.review-moment.is-skipped time { text-decoration:line-through;opacity:.65; }
.review-moment .button { justify-self:end; }
.review-actions { align-items:stretch; }
.review-target { margin:0 0 18px;padding:12px 14px;border-radius:11px;background:var(--surface-2);font-weight:800; }
.danger-text { color:var(--danger); }
.facility-grid { display:grid;gap:24px; }
.facility-floor { position:relative;overflow:hidden; }
.facility-canvas { position:relative;width:100%;overflow:hidden;border:1px solid var(--line);border-radius:14px;background:var(--surface-2);container-type:inline-size; }
.facility-view .facility-floor,.facility-live .facility-floor,.facility-view .facility-canvas,.facility-live .facility-canvas { overflow:visible; }
.facility-view .facility-floor:hover,.facility-live .facility-floor:hover { z-index:40; }
.facility-view .facility-floor:has(.is-expanded),.facility-live .facility-floor:has(.is-expanded) { z-index:100; }
.facility-canvas.facility-ground { aspect-ratio:1536 / 1024; }
.facility-canvas.facility-first { aspect-ratio:1795 / 876; }
.facility-canvas>img { position:absolute;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none; }
.facility-widget {
  position:absolute;z-index:2;display:grid;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:8px;
  width:clamp(112px,10vw,148px);padding:7px 9px;border:1.5px solid color-mix(in srgb,var(--brand) 74%,var(--line));
  border-radius:12px;background:color-mix(in srgb,var(--surface) 95%,transparent);color:var(--text);
  box-shadow:0 6px 18px rgba(20,52,48,.11);text-align:left;transform:translate(-50%,-50%);
  touch-action:none;cursor:default;transition:border-color .18s ease,background-color .18s ease,box-shadow .18s ease;
}
.facility-edit .facility-widget { cursor:grab; }
.facility-widget.is-dragging { z-index:5;cursor:grabbing;box-shadow:var(--shadow); }
.facility-widget:hover,.facility-widget:focus-visible,.facility-widget.is-expanded { z-index:12;border-color:var(--brand);box-shadow:0 10px 28px rgba(20,52,48,.18);outline:0; }
.facility-icon-value { display:none; }
.facility-widget.has-error { border-color:var(--danger); }
.facility-widget.has-error .facility-value { overflow-wrap:anywhere;white-space:normal;font-size:clamp(.64rem,.75vw,.82rem);line-height:1.05;letter-spacing:-.02em; }
.facility-widget.has-error .facility-device { background:color-mix(in srgb,var(--danger) 10%,var(--surface));color:var(--danger); }
.facility-widget.is-powered-on { border-color:#2878d0;background:color-mix(in srgb,#2878d0 7%,var(--surface)); }
.facility-widget.is-powered-off { border-color:color-mix(in srgb,var(--muted) 35%,var(--line));background:color-mix(in srgb,var(--surface-2) 72%,var(--surface)); }
.facility-device { position:relative;display:grid;width:34px;height:34px;place-items:center;border-radius:9px;background:var(--brand-soft);color:var(--brand-dark); }
.facility-device svg { width:30px;height:25px;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round; }
.facility-device b { position:absolute;right:2px;bottom:1px;padding:0 2px;border-radius:3px;background:var(--surface);color:var(--muted);font-size:.4rem;line-height:1.4;letter-spacing:.03em; }
.facility-widget.is-powered-on .facility-device { background:#2878d0;color:#fff; }
.facility-widget.is-powered-off .facility-device { background:var(--surface-3);color:var(--muted); }
.facility-widget-body { display:grid;min-width:0;line-height:1.1; }
.facility-room { overflow:hidden;color:var(--muted);font-size:clamp(.55rem,.65vw,.68rem);font-weight:720;text-overflow:ellipsis;white-space:nowrap; }
.facility-value { margin:3px 0 4px;font-size:clamp(1rem,1.25vw,1.3rem);font-variant-numeric:tabular-nums;letter-spacing:-.04em;white-space:nowrap; }
.facility-power { display:flex;align-items:center;gap:5px;color:var(--muted);font-size:clamp(.48rem,.56vw,.6rem);font-weight:750;white-space:nowrap; }
.facility-power i { width:6px;height:6px;flex:none;border-radius:50%;background:var(--muted); }
.facility-widget.is-powered-on .facility-power { color:#2167b3; }
.facility-widget.is-powered-on .facility-power i { background:#2878d0;box-shadow:0 0 0 3px color-mix(in srgb,#2878d0 14%,transparent); }
.facility-widget.is-powered-off .facility-power i { background:var(--muted); }
.facility-target {
  position:absolute;top:calc(100% + 7px);left:50%;z-index:10;width:max-content;max-width:170px;padding:6px 9px;
  border:1px solid var(--line);border-radius:8px;background:var(--text);color:var(--surface);box-shadow:var(--shadow-soft);
  font-size:.64rem;font-weight:650;line-height:1.2;opacity:0;pointer-events:none;transform:translate(-50%,-4px);
  transition:opacity .15s ease,transform .15s ease;
}
.facility-target strong { font-size:inherit;font-variant-numeric:tabular-nums; }
.facility-widget:hover .facility-target,.facility-widget:focus-visible .facility-target { opacity:1;transform:translate(-50%,0); }
.facility-widget:has(.facility-climate-popover) .facility-target { display:none; }
.facility-view .facility-widget,.facility-live .facility-widget,.facility-view .automation-facility-widget,.facility-live .automation-facility-widget,.facility-view .qbus-facility-widget,.facility-live .qbus-facility-widget,.facility-view .church-temperature-facility-widget,.facility-live .church-temperature-facility-widget { touch-action:manipulation; }
.facility-view .facility-widget,.facility-live .facility-widget { display:block;width:4.6%;min-width:0;aspect-ratio:1;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none; }
.facility-view .facility-widget:hover,.facility-live .facility-widget:hover,.facility-view .facility-widget:focus-visible,.facility-live .facility-widget:focus-visible,.facility-view .facility-widget.is-expanded,.facility-live .facility-widget.is-expanded { border:0;background:transparent;box-shadow:none; }
.facility-view .facility-widget>.facility-device,.facility-live .facility-widget>.facility-device { width:100%;height:100%;border:1.5px solid currentColor;border-radius:22%;box-shadow:0 3px 8px rgba(12,30,28,.2); }
.facility-view .facility-widget>.facility-device svg,.facility-live .facility-widget>.facility-device svg { width:76%;height:67%; }
.facility-view .facility-widget>.facility-widget-body,.facility-live .facility-widget>.facility-widget-body { display:none; }
.facility-view .facility-widget>.facility-icon-value,.facility-live .facility-widget>.facility-icon-value { position:absolute;right:-4%;bottom:-5%;display:block;min-width:45%;padding:.15em .24em;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--text);font-size:1.05cqw;line-height:1.1;text-align:center; }
.facility-view .facility-widget>.facility-device b,.facility-live .facility-widget>.facility-device b { display:none; }
.facility-popover {
  position:absolute;top:calc(100% + 8px);left:50%;z-index:150;display:grid;width:max-content;min-width:210px;max-width:min(270px,80vw);gap:5px;
  padding:10px;border:1px solid var(--line);border-radius:11px;background:var(--surface);color:var(--text);box-shadow:var(--shadow);
  font-size:.7rem;line-height:1.25;opacity:0;pointer-events:none;transform:translate(-50%,-5px);transition:opacity .15s ease,transform .15s ease;
}
.popover-above>.facility-popover { top:auto;bottom:calc(100% + 8px);transform:translate(-50%,5px); }
.facility-popover>strong { font-size:.78rem; }
.facility-popover>small,.facility-popover>span { color:var(--muted); }
.facility-popover b { color:var(--text);font-size:inherit; }
.facility-device-metrics { display:flex;flex-wrap:wrap;gap:4px!important; }
.facility-device-metrics>span { padding:3px 5px;border-radius:6px;background:var(--surface-2);color:var(--text);font-size:.62rem;font-weight:700; }
.facility-widget:hover .facility-popover,.facility-widget:focus-within .facility-popover,.facility-widget.is-expanded .facility-popover,
.automation-facility-widget:hover .facility-popover,.automation-facility-widget:focus-within .facility-popover,.automation-facility-widget.is-expanded .facility-popover {
  opacity:1;pointer-events:auto;transform:translate(-50%,0);
}
.qbus-facility-widget:hover .facility-popover,.qbus-facility-widget:focus-within .facility-popover,.qbus-facility-widget.is-expanded .facility-popover,
.church-temperature-facility-widget:hover .facility-popover,.church-temperature-facility-widget:focus-within .facility-popover,.church-temperature-facility-widget.is-expanded .facility-popover {
  opacity:1;pointer-events:auto;transform:translate(-50%,0);
}
.facility-device-actions { display:flex;flex-wrap:wrap;gap:5px;margin-top:3px; }
.facility-device-actions button { min-height:28px;padding:5px 8px;border:1px solid var(--line);border-radius:7px;background:var(--surface-2);color:var(--text);font:inherit;font-weight:760;cursor:pointer; }
.facility-device-actions button:hover,.facility-device-actions button:focus-visible { border-color:var(--brand);background:var(--brand-soft);outline:0; }
.facility-device-actions button:disabled { cursor:wait;opacity:.55; }
.facility-control-feedback { min-height:1em;color:var(--muted);font-size:.62rem; }
.facility-control-feedback.is-error { color:var(--danger); }
.automation-facility-widget {
  position:absolute;z-index:3;display:flex;align-items:center;gap:7px;min-width:72px;min-height:46px;padding:6px 8px;
  border:1.5px solid var(--line);border-radius:11px;background:color-mix(in srgb,var(--surface) 94%,transparent);color:var(--text);
  box-shadow:0 5px 15px rgba(12,30,28,.12);text-align:left;transform:translate(-50%,-50%);overflow:hidden;touch-action:none;
}
.automation-facility-widget.is-zone {
  min-width:0;min-height:0;padding:4px;border-width:2px;border-radius:8px;background:color-mix(in srgb,var(--surface) 58%,transparent);
}
.automation-facility-widget.is-zone .automation-device-icon { position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:5px;font-size:.6rem; }
.automation-facility-widget.is-zone>.automation-facility-summary { width:100%;padding:2px 3px 2px 20px; }
.automation-facility-widget.is-zone small { display:none; }
.automation-facility-widget.is-zone strong,.automation-facility-widget.is-zone em { font-size:clamp(.42rem,.6vw,.62rem); }
.facility-edit .automation-facility-widget { cursor:grab; }
.automation-facility-widget.is-dragging { z-index:9;cursor:grabbing;box-shadow:var(--shadow); }
.automation-device-icon { display:grid;width:27px;height:27px;flex:none;place-items:center;border-radius:8px;background:var(--surface-3);font-weight:900; }
.automation-facility-summary { display:grid;min-width:0;line-height:1.1; }
.automation-facility-widget strong,.automation-facility-widget small,.automation-facility-widget em { overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.automation-facility-widget strong { font-size:clamp(.56rem,.7vw,.72rem); }
.automation-facility-widget small,.automation-facility-widget em { color:var(--muted);font-size:clamp(.45rem,.54vw,.58rem);font-style:normal; }
.automation-facility-widget.integration-ajax { border-color:#e04b55; }
.automation-facility-widget.integration-ajax .automation-device-icon { background:color-mix(in srgb,#e04b55 15%,var(--surface));color:#d23845; }
.automation-facility-widget.integration-gira { border-color:#d2a22a; }
.automation-facility-widget.integration-tahoma { border-color:#397dd1; }
.automation-facility-widget.is-compact-device { width:3.5%;min-width:0;height:auto;min-height:0;aspect-ratio:1;padding:0;border:0;border-radius:7px;background:transparent;box-shadow:none;overflow:visible;cursor:pointer; }
.automation-facility-widget.is-compact-device .automation-device-icon { width:100%;height:100%;border-radius:0;background:transparent;font-size:.68rem; }
.automation-facility-widget.is-compact-device .automation-facility-summary { display:none; }
.automation-facility-widget.is-compact-device:hover,.automation-facility-widget.is-compact-device:focus-within { z-index:60;outline:0;box-shadow:0 9px 24px rgba(12,30,28,.22); }
.automation-facility-widget.is-compact-device,
.automation-facility-widget.is-compact-device.is-active,
.automation-facility-widget.is-compact-device.has-error,
.automation-facility-widget.is-compact-device:hover,
.automation-facility-widget.is-compact-device:focus-within,
.automation-facility-widget.is-compact-device.is-expanded { border:0;background:transparent;box-shadow:none; }
.automation-facility-widget.is-active { background:color-mix(in srgb,var(--brand) 10%,var(--surface)); }
.automation-facility-widget.has-alarm { border-color:var(--danger);background:color-mix(in srgb,var(--danger) 15%,var(--surface));animation:alarm-pulse 1.4s ease-in-out infinite; }
.automation-facility-widget.has-error { opacity:.72;border-style:dashed; }
@keyframes alarm-pulse { 50% { box-shadow:0 0 0 7px color-mix(in srgb,var(--danger) 16%,transparent); } }
.facility-live .app-header { display:none; }
.facility-live .app-main { width:100%;padding:18px; }
.facility-live-toolbar { position:sticky;z-index:20;top:0;display:flex;align-items:center;justify-content:space-between;gap:20px;margin:-18px -18px 18px;padding:16px 20px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(18px); }
.facility-live-toolbar h1 { margin:0;font-size:clamp(1.7rem,3vw,3rem); }
.facility-live-toolbar .eyebrow { margin-bottom:4px; }
.facility-live-grid { grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:18px; }
.facility-live-grid .facility-floor { padding:18px; }
.facility-live-grid .panel-heading { margin-bottom:14px; }
.analytics-grid { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px; }
.automation-dashboard-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:18px; }
.automation-card { display:grid;gap:16px;padding:22px;border:1px solid var(--line);border-radius:18px;background:var(--surface);box-shadow:var(--shadow-soft); }
.automation-card header { display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:13px; }
.automation-card header small,.automation-card p small { color:var(--muted); }
.automation-card h2,.automation-card p { margin:0; }
.automation-card-icon { display:grid;width:44px;height:44px;place-items:center;border-radius:12px;background:var(--brand-soft);color:var(--brand-dark);font-size:1.2rem;font-weight:900; }
.automation-card-badges { display:flex;align-items:flex-end;flex-direction:column;gap:7px; }
.battery-status { display:inline-flex;align-items:center;gap:5px;padding:5px 8px;border:1px solid var(--line);border-radius:999px;background:var(--surface-2);color:var(--muted);font-size:.76rem;white-space:nowrap; }
.battery-status b { color:var(--text); }
.battery-status.is-low { border-color:color-mix(in srgb,var(--danger) 45%,var(--line));color:var(--danger); }
.automation-metrics { display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px; }
.automation-metric { display:grid;gap:3px;min-width:0;padding:12px;border:1px solid var(--line);border-radius:13px;background:var(--surface-2);color:var(--text);text-align:left; }
button.automation-metric { width:100%;font:inherit;cursor:pointer;transition:border-color .18s ease,background .18s ease,transform .18s ease; }
button.automation-metric:hover { border-color:var(--brand);background:color-mix(in srgb,var(--brand) 8%,var(--surface-2)); }
.automation-metric span,.automation-metric small { color:var(--muted);font-size:.74rem; }
.automation-metric strong { overflow:hidden;text-overflow:ellipsis;font-size:1rem;white-space:nowrap; }
.shading-controls { display:flex;align-items:end;flex-wrap:wrap;gap:10px;padding-top:14px;border-top:1px solid var(--line); }
.shading-position { display:grid;grid-template-columns:auto minmax(110px,1fr) auto;align-items:center;gap:9px;min-width:min(100%,240px);margin:0; }
.shading-position span,.shading-position output { color:var(--muted);font-size:.82rem;font-weight:800; }
.shading-feedback { flex-basis:100%;min-height:1.3em;color:var(--muted);font-size:.82rem; }
.shading-feedback.is-error,.text-danger { color:var(--danger); }
.low-speed-command { border-style:dashed; }
.shading-icon-grid { grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));align-items:stretch;gap:18px; }
.automation-card.shading-icon-card { display:block;min-width:0;padding:16px;border:1px solid var(--line);border-radius:18px;background:linear-gradient(145deg,var(--surface),color-mix(in srgb,var(--brand-soft) 18%,var(--surface)));box-shadow:var(--shadow-soft); }
.shading-detail-open { display:grid;width:100%;min-height:190px;grid-template-rows:auto auto auto auto;align-content:center;justify-items:center;gap:7px;padding:12px;border:0;border-radius:14px;background:transparent;color:var(--text);font:inherit;text-align:center;cursor:pointer;transition:background .18s ease,transform .18s ease; }
.shading-detail-open:hover { background:color-mix(in srgb,var(--brand-soft) 72%,transparent);transform:translateY(-2px); }
.shading-detail-open:focus-visible { outline:3px solid color-mix(in srgb,var(--brand) 38%,transparent);outline-offset:3px; }
.shading-detail-open>strong { width:100%;overflow-wrap:anywhere;font-size:1rem;line-height:1.3; }
.shading-detail-open>small { width:100%;overflow:hidden;color:var(--muted);font-size:.72rem;text-overflow:ellipsis;white-space:nowrap; }
.shading-detail-open .status-dot { max-width:100%;overflow:hidden;padding:3px 7px;font-size:.67rem;text-overflow:ellipsis;white-space:nowrap; }
.facility-mode-icon { position:absolute;left:-7px;top:-9px;display:grid;place-items:center;width:25px;height:25px;border:1px solid color-mix(in srgb,currentColor 30%,transparent);border-radius:50%;background:color-mix(in srgb,var(--surface) 88%,transparent);color:var(--brand);box-shadow:0 3px 9px rgba(12,30,28,.18);font-size:19px;font-weight:900;line-height:1;pointer-events:none; }
/* A status badge must shrink with its airco, not cover it on a narrow floor plan. */
.facility-view .facility-mode-icon,.facility-live .facility-mode-icon { left:-8%;top:-8%;width:42%;height:auto;max-width:20px;aspect-ratio:1;font-size:min(1.25cqw,14px);box-shadow:0 1px 3px rgba(12,30,28,.18); }
@media (any-pointer:coarse) { .facility-view .facility-widget::before,.facility-live .facility-widget::before { content:"";position:absolute;left:50%;top:50%;width:max(100%,24px);height:max(100%,24px);transform:translate(-50%,-50%); } }
.facility-mode-icon[hidden] { display:none; }
.facility-mode-icon.is-cooling { color:#278cce;background:color-mix(in srgb,#dff4ff 90%,var(--surface));animation:facility-mode-turn 7s linear infinite; }
.facility-mode-icon.is-heating { color:#dc7417;background:color-mix(in srgb,#fff0d8 90%,var(--surface));animation:facility-mode-heat 1.8s ease-in-out infinite; }
.facility-view .facility-mode-icon.is-heating,.facility-live .facility-mode-icon.is-heating { animation-name:facility-mode-heat-compact; }
@keyframes facility-mode-heat-compact { 0%,100% { opacity:.78;transform:scale(.94); } 50% { opacity:1;transform:scale(1.04); } }
@keyframes facility-mode-turn { to { transform:rotate(360deg); } }
@keyframes facility-mode-heat { 0%,100% { opacity:.78;transform:translateY(1px) scale(.92); } 50% { opacity:1;transform:translateY(-2px) scale(1.08);box-shadow:0 4px 13px color-mix(in srgb,#dc7417 34%,transparent); } }
.automation-facility-widget.is-compact-device .live-shade-icon { width:100%;height:100%;background:transparent;border-radius:0;color:#397dd1; }
.live-shade-icon svg { width:100%; height:100%; }
.live-shade-frame { fill:none; stroke:currentColor; stroke-width:3; stroke-linecap:round; stroke-linejoin:round; }
.live-shade-panel { fill:color-mix(in srgb,#397dd1 76%,transparent);stroke:currentColor;stroke-width:2; }
.live-shade-percent { fill:var(--text);stroke:var(--surface);stroke-width:3px;paint-order:stroke fill;font-size:14px;font-weight:900;text-anchor:middle;dominant-baseline:middle; }
.live-shade-icon.position-unknown { opacity:.45; }
.live-shade-icon.position-unknown .live-shade-panel { visibility:hidden; }
.live-shade-icon.position-unknown .live-shade-percent { font-size:18px; }
@media (prefers-reduced-motion:reduce) { .facility-mode-icon { animation:none !important; } }
.qbus-facility-widget { position:absolute;z-index:5;width:2.8%;min-width:0;aspect-ratio:1;transform:translate(-50%,-50%);color:#7b8582;cursor:pointer;touch-action:none; }
.facility-edit .qbus-facility-widget { cursor:grab; }
.qbus-facility-widget.is-dragging { z-index:20;cursor:grabbing; }
.qbus-lamp-icon { display:block;width:100%;height:100%;filter:drop-shadow(0 2px 3px rgba(12,30,28,.2));transition:color .18s ease,filter .18s ease,transform .18s ease; }
.qbus-lamp-icon svg { display:block;width:100%;height:100%;overflow:visible; }
.qbus-spot-housing { fill:color-mix(in srgb,currentColor 12%,var(--surface));stroke:currentColor;stroke-width:2.6;stroke-linejoin:round; }
.qbus-spot-lens { fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round; }
.qbus-spot-beam { fill:color-mix(in srgb,currentColor 8%,transparent);stroke:currentColor;stroke-width:1.7;stroke-linejoin:round;opacity:.34;transition:fill .18s ease,opacity .18s ease; }
.qbus-spot-percent { fill:var(--text);stroke:var(--surface);stroke-width:3px;paint-order:stroke fill;font-size:10px;font-weight:900;text-anchor:middle;dominant-baseline:middle; }
.qbus-facility-widget.is-on { color:var(--qbus-lamp-color,#f0b72e); }
.qbus-facility-widget.is-on .qbus-spot-housing { fill:color-mix(in srgb,var(--qbus-lamp-color,#f0b72e) 52%,white); }
.qbus-facility-widget.is-on .qbus-spot-beam { fill:color-mix(in srgb,var(--qbus-lamp-color,#f0b72e) 52%,transparent);opacity:.92; }
.qbus-facility-widget.is-on .qbus-lamp-icon { filter:drop-shadow(0 0 6px color-mix(in srgb,var(--qbus-lamp-color,#f0b72e) 72%,transparent)); }
.qbus-facility-widget.has-error { opacity:1; }
.qbus-facility-widget:hover .qbus-lamp-icon,.qbus-facility-widget:focus-visible .qbus-lamp-icon,.qbus-facility-widget.is-expanded .qbus-lamp-icon { transform:scale(1.14); }
.qbus-facility-popover { min-width:225px; }
.qbus-facility-color { display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:5px;color:var(--muted); }
.qbus-facility-color input { width:48px;height:32px;padding:2px;border:1px solid var(--line);border-radius:7px;background:var(--surface-2);cursor:pointer; }
.qbus-facility-dimmer { display:grid;grid-template-columns:1fr auto;gap:5px;margin-top:4px;color:var(--muted); }
.qbus-facility-dimmer input { grid-column:1/-1;width:100%; }
.qbus-facility-apply { min-height:30px;padding:5px 9px;border:1px solid var(--line);border-radius:7px;background:var(--brand);color:#fff;font:inherit;font-weight:800;cursor:pointer; }
.church-temperature-facility-widget { position:absolute;z-index:6;width:3.25%;min-width:0;aspect-ratio:1;transform:translate(-50%,-50%);color:#258b83;cursor:pointer;touch-action:none; }
.facility-edit .church-temperature-facility-widget { cursor:grab; }
.church-temperature-facility-widget.is-dragging { z-index:20;cursor:grabbing; }
.church-temperature-sensor-icon { display:block;width:100%;height:100%;filter:drop-shadow(0 3px 5px rgba(12,30,28,.22));transition:filter .18s ease,transform .18s ease; }
.church-temperature-sensor-icon svg { display:block;width:100%;height:100%;overflow:visible; }
.temperature-sensor-body { fill:color-mix(in srgb,var(--surface) 88%,transparent);stroke:currentColor;stroke-width:2.6; }
.temperature-sensor-mark { fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round; }
.church-temperature-value { fill:var(--text);font-size:11px;font-weight:900;text-anchor:middle;dominant-baseline:middle; }
.church-temperature-unit { fill:var(--muted);font-size:7px;font-weight:800;text-anchor:middle;dominant-baseline:middle; }
.church-temperature-facility-widget:hover .church-temperature-sensor-icon,.church-temperature-facility-widget:focus-visible .church-temperature-sensor-icon,.church-temperature-facility-widget.is-expanded .church-temperature-sensor-icon { filter:drop-shadow(0 5px 9px rgba(12,30,28,.3));transform:scale(1.12); }
.church-temperature-facility-widget.has-error { opacity:.82; }
.church-temperature-popover { min-width:190px; }
.facility-view :is(.facility-widget,.automation-facility-widget,.qbus-facility-widget,.church-temperature-facility-widget):hover,
.facility-live :is(.facility-widget,.automation-facility-widget,.qbus-facility-widget,.church-temperature-facility-widget):hover,
.facility-view :is(.facility-widget,.automation-facility-widget,.qbus-facility-widget,.church-temperature-facility-widget):focus-within,
.facility-live :is(.facility-widget,.automation-facility-widget,.qbus-facility-widget,.church-temperature-facility-widget):focus-within { z-index:60; }
.facility-view :is(.facility-widget,.automation-facility-widget,.qbus-facility-widget,.church-temperature-facility-widget).is-expanded,
.facility-live :is(.facility-widget,.automation-facility-widget,.qbus-facility-widget,.church-temperature-facility-widget).is-expanded { z-index:140; }
.shading-device-icon { display:grid;width:62px;height:62px;place-items:center;color:var(--brand-dark); }
.shading-device-icon svg { display:block;width:100%;height:100%;overflow:visible; }
.shading-device-icon .shade-frame { fill:color-mix(in srgb,var(--surface-2) 78%,transparent);stroke:currentColor;stroke-width:3; }
.shading-device-icon .shade-line { fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round; }
.shading-device-icon .shade-fill { fill:color-mix(in srgb,var(--brand) 42%,transparent);stroke:currentColor;stroke-width:3;stroke-linejoin:round; }
.shading-device-icon .shade-moving-panel { transform:scaleY(var(--shade-closed,.5));transform-box:fill-box;transform-origin:center top;transition:transform .7s cubic-bezier(.2,.72,.28,1); }
.shading-device-icon .shade-moving-panel>* { vector-effect:non-scaling-stroke; }
.shading-device-icon .shade-slats { stroke-width:2.2; }
.shading-device-dialog { width:min(680px,calc(100vw - 24px)); }
.shading-device-dialog>.modal-card { gap:20px; }
.shading-detail-summary { display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:16px;padding:14px;border-radius:16px;background:var(--surface-2); }
.shading-detail-summary .shading-device-icon.large { width:72px;height:72px; }
.shading-detail-summary>div { display:grid;gap:4px;min-width:0; }
.shading-detail-summary>div>small { color:var(--muted); }
#tahoma-history-chart { display:block;width:100%;height:430px;max-height:52vh;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none; }
.tahoma-mode-fields { display:grid;gap:14px;margin:0;padding:0;border:0; }
.tahoma-mode-fields[hidden] { display:none!important; }
.edge-pairing { display:flex;align-items:center;flex-wrap:wrap;gap:12px; }
.edge-token { display:block;max-width:100%;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);overflow-wrap:anywhere;user-select:all; }
.edge-token[hidden] { display:none!important; }
.qbus-picker { display:grid;gap:14px;margin-top:28px;padding-top:24px;border-top:1px solid var(--line); }
.qbus-picker h2,.qbus-picker p { margin-bottom:5px; }
.qbus-output-list { display:grid;gap:10px; }
.qbus-fixed-field { display:grid;grid-template-columns:minmax(0,1fr) minmax(150px,.45fr);gap:10px;padding:12px;border:1px solid var(--line);border-radius:13px;background:var(--surface-2); }
.qbus-output-row { display:grid;grid-template-columns:minmax(118px,.4fr) minmax(190px,.9fr) minmax(150px,.55fr) minmax(220px,1.1fr);align-items:end;gap:12px;padding:13px;border:1px solid var(--line);border-radius:13px;background:var(--surface-2); }
.qbus-output-row>div { display:grid;align-self:center;gap:3px;min-width:0; }
.qbus-output-row>div strong,.qbus-output-row>div small { overflow-wrap:anywhere; }
.qbus-output-row>div small { color:var(--muted); }
.qbus-output-row.is-unavailable { border-style:dashed; }
@media(max-width:760px) {
  .qbus-output-row,.qbus-fixed-field { grid-template-columns:1fr;align-items:stretch; }
  .qbus-output-row .switch-row { min-height:44px; }
}
.church-light-section { display:grid;gap:16px;margin-top:28px; }
.church-light-section>div>p { max-width:760px; }
.church-light-card { display:grid;align-content:start;gap:12px; }
.church-light-card h3,.church-light-card p { margin:0; }
.church-light-card-compact { padding:15px; }
.church-light-card-compact h3 { font-size:.96rem; }
.church-light-card-compact label { gap:7px; }
.integration-status-detail { display:grid;gap:6px;margin-top:14px;color:var(--muted);font-size:.9rem; }
.tahoma-direct-sync { margin-top:14px; }
.automation-safety-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;margin:18px 0; }
.automation-safety-grid article { display:grid;gap:5px;padding:15px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2); }
.automation-safety-grid span { color:var(--muted);font-size:.88rem;line-height:1.55; }
.analytics-card-wide { grid-column:1/-1; }
.analytics-actions { display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-bottom:12px;min-height:36px; }
.graph-preview { display:block;width:100%;padding:0;border:1px solid var(--line);border-radius:13px;background:var(--surface-2);cursor:zoom-in;overflow:hidden; }
.graph-preview:hover { border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft); }
.graph-preview:focus-visible { outline:3px solid color-mix(in srgb,var(--brand) 34%,transparent);outline-offset:3px; }
.graph-preview img { display:block;width:100%;min-height:260px;border:0;background:var(--surface-2);object-fit:contain; }
.graph-status { color:var(--muted);font-size:.82rem; }
.graph-dialog { width:calc(100vw - 24px);height:calc(100dvh - 24px);max-width:none;max-height:none;overflow:hidden;border-radius:18px; }
.graph-dialog-card { display:grid;grid-template-rows:auto minmax(0,1fr);height:100%;padding:14px;background:var(--surface); }
.graph-dialog-toolbar { display:flex;align-items:center;justify-content:flex-end;gap:10px;padding-bottom:12px; }
.graph-dialog-toolbar .graph-status { margin-right:auto; }
.graph-dialog-stage { display:grid;min-height:0;overflow:auto;place-items:center;border:1px solid var(--line);border-radius:13px;background:var(--surface-2); }
.graph-dialog-stage img { display:block;width:100%;height:100%;object-fit:contain; }

.solar-settings-actions { display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:22px; }
.solar-settings-actions form { margin:0; }
.solar-api-usage { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:18px 0; }
.solar-api-card { min-width:0;padding:19px;border:1px solid var(--line);border-radius:16px;background:var(--surface-2); }
.solar-api-card header { display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:19px; }
.solar-api-card header div>span { display:block;margin-bottom:4px;color:var(--muted);font-size:.65rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase; }
.solar-api-card h3 { margin:0;font-size:1rem;letter-spacing:-.02em; }
.solar-api-badge { display:inline-flex;align-items:center;flex:none;min-height:27px;padding:5px 9px;border-radius:999px;background:var(--surface);color:var(--muted);font-size:.65rem;font-weight:800;white-space:nowrap; }
.solar-api-badge.is-live { background:color-mix(in srgb,var(--success) 12%,var(--surface));color:var(--success); }
.solar-api-total { display:flex;align-items:baseline;gap:9px;margin-bottom:17px; }
.solar-api-total strong { font-size:clamp(2rem,4vw,3rem);font-variant-numeric:tabular-nums;letter-spacing:-.06em;line-height:.9; }
.solar-api-total span { color:var(--muted);font-size:.78rem;font-weight:700; }
.solar-api-card footer { display:flex;flex-wrap:wrap;gap:8px; }
.solar-api-chip { display:inline-flex;align-items:center;gap:4px;padding:6px 9px;border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--muted);font-size:.7rem;font-weight:700; }
.solar-api-chip b { color:var(--text);font-variant-numeric:tabular-nums; }
.solar-api-chip.is-ok { border-color:color-mix(in srgb,var(--success) 30%,var(--line));background:color-mix(in srgb,var(--success) 7%,var(--surface)); }
.solar-api-chip.is-error { border-color:color-mix(in srgb,var(--danger) 30%,var(--line));background:color-mix(in srgb,var(--danger) 7%,var(--surface)); }
.solar-quota-grid { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px; }
.solar-quota-grid>div { min-width:0;padding:12px;border-radius:11px;background:var(--surface); }
.solar-quota-grid span,.solar-quota-grid strong { display:block; }
.solar-quota-grid span { margin-bottom:7px;color:var(--muted);font-size:.66rem;font-weight:750;line-height:1.3; }
.solar-quota-grid strong { font-size:1.35rem;font-variant-numeric:tabular-nums; }
.solar-api-empty { margin:0;color:var(--muted);font-size:.78rem;line-height:1.5; }
.solar-hero { position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:35px;margin-bottom:24px;padding:clamp(28px,5vw,60px);overflow:hidden;border:1px solid color-mix(in srgb,var(--solar) 34%,var(--line));border-radius:30px;background:linear-gradient(135deg,color-mix(in srgb,var(--solar) 15%,var(--surface)),var(--surface) 58%);box-shadow:var(--shadow-soft); }
.solar-hero::after { content:"";position:absolute;right:-9%;bottom:-58%;width:430px;aspect-ratio:1;border-radius:50%;background:color-mix(in srgb,var(--solar) 18%,transparent);filter:blur(2px); }
.solar-hero>div { position:relative;z-index:1; }
.solar-hero h1 { max-width:760px;margin-bottom:13px;font-size:clamp(2.6rem,6vw,5.8rem); }
.solar-hero p:not(.eyebrow) { max-width:700px;margin:0;color:var(--muted);font-size:clamp(1rem,1.5vw,1.22rem); }
.solar-hero-status { display:grid;grid-template-columns:auto minmax(230px,1fr);align-items:stretch;gap:10px; }
.solar-weather { display:grid;min-width:125px;padding:15px 18px;border:1px solid color-mix(in srgb,var(--solar) 28%,var(--line));border-radius:18px;background:color-mix(in srgb,var(--surface) 86%,transparent);place-content:center;text-align:center;backdrop-filter:blur(15px); }
.solar-weather>span { font-size:1.55rem;line-height:1; }
.solar-weather strong { margin:6px 0 2px;font-size:1.45rem;font-variant-numeric:tabular-nums; }
.solar-weather small { color:var(--muted);font-size:.68rem; }
.solar-forecast-panel { margin:0 0 22px; }
.solar-forecast-panel>.panel-heading { align-items:start; }
.solar-forecast-panel>.panel-heading>small { color:var(--muted);font-size:.72rem; }
.solar-forecast-kpis { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:18px 0; }
.solar-forecast-kpis article { min-width:0;padding:15px 17px;border-radius:14px;background:var(--surface-2); }
.solar-forecast-kpis span,.solar-forecast-kpis strong,.solar-forecast-kpis small { display:block; }
.solar-forecast-kpis span { margin-bottom:7px;color:var(--muted);font-size:.69rem;font-weight:800; }
.solar-forecast-kpis strong { font-size:clamp(1.15rem,2vw,1.65rem);font-variant-numeric:tabular-nums; }
.solar-forecast-kpis small { margin-top:5px;color:var(--muted);font-size:.7rem; }
.solar-forecast-hours { display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));gap:8px;overflow-x:auto;padding:2px 1px 7px;scrollbar-width:thin; }
.solar-forecast-hours article { display:grid;min-width:110px;gap:4px;padding:12px;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--surface-2) 68%,transparent); }
.solar-forecast-hours time { color:var(--muted);font-size:.68rem;font-weight:800; }
.solar-forecast-hours strong { font-size:1.15rem; }
.solar-forecast-hours span { color:var(--solar);font-size:.75rem;font-weight:800; }
.solar-forecast-hours small { color:var(--muted);font-size:.65rem;white-space:nowrap; }
.solar-live { min-width:250px;padding:20px 23px;border:1px solid color-mix(in srgb,var(--solar) 38%,var(--line));border-radius:18px;background:color-mix(in srgb,var(--surface) 86%,transparent);backdrop-filter:blur(15px); }
.solar-live>span:not(.solar-pulse),.solar-live strong,.solar-live small { display:block; }
.solar-live>span:not(.solar-pulse) { margin-left:18px;color:var(--muted);font-size:.75rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase; }
.solar-live strong { margin:9px 0 3px;font-size:clamp(2.1rem,4vw,3.8rem);line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.06em; }
.solar-pulse { position:absolute;width:10px;height:10px;margin-top:4px;border-radius:50%;background:var(--solar);box-shadow:0 0 0 6px color-mix(in srgb,var(--solar) 16%,transparent); }
.solar-kpis { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:22px; }
.solar-kpis article { position:relative;min-height:155px;padding:23px;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface); }
.solar-kpis article::after { content:"";position:absolute;right:-30px;top:-30px;width:85px;aspect-ratio:1;border-radius:50%;background:color-mix(in srgb,var(--solar) 12%,transparent); }
.solar-kpis span,.solar-kpis strong,.solar-kpis small { display:block; }
.solar-kpis span { margin-bottom:20px;color:var(--muted);font-size:.73rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em; }
.solar-kpis strong { margin-bottom:5px;font-size:clamp(1.6rem,2.6vw,2.65rem);line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.055em; }
.solar-grid-section { margin:32px 0; }
.solar-grid-kpis { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px; }
.solar-grid-kpis article { padding:18px 20px;border:1px solid var(--line);border-radius:16px;background:var(--surface); }
.solar-grid-kpis span,.solar-grid-kpis strong,.solar-grid-kpis small { display:block; }
.solar-grid-kpis span { margin-bottom:9px;color:var(--muted);font-size:.7rem;font-weight:800;letter-spacing:.055em;text-transform:uppercase; }
.solar-grid-kpis strong { margin-bottom:3px;font-size:clamp(1.35rem,2.2vw,2rem);font-variant-numeric:tabular-nums;letter-spacing:-.04em; }
.solar-grid-kpis small { color:var(--muted);font-size:.7rem; }
.solar-grid-flow-line { fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round; }
.solar-grid-flow-line.is-import { stroke:#ef7f72; }
.solar-grid-flow-line.is-export { stroke:#58c7af; }
.solar-grid-flow-line.is-consumption { stroke:#7296ff;stroke-dasharray:7 4; }
.solar-grid-legend.is-consumption,.solar-grid-hover-point.is-consumption { fill:#7296ff; }
.solar-grid-data-point.is-consumption { fill:#7296ff; }
.solar-grid-data-point.is-import { fill:#ef7f72; }
.solar-grid-data-point.is-export { fill:#58c7af; }
.solar-grid-legend { font-family:inherit;font-size:12px;font-weight:800;cursor:pointer;user-select:none;transition:opacity .15s ease; }
.solar-grid-legend:hover,.solar-grid-legend:focus-visible { text-decoration:underline;outline:none; }
.solar-grid-legend.is-muted { opacity:.28; }
.solar-series-hit { fill:none;stroke:transparent;stroke-width:16;pointer-events:stroke;cursor:pointer; }
.solar-grid-legend.is-import { fill:#ef7f72; }
.solar-grid-legend.is-export { fill:#58c7af; }
.solar-grid-hover-point { stroke:var(--surface);stroke-width:3;pointer-events:none; }
.solar-grid-hover-point.is-import { fill:#ef7f72; }
.solar-grid-hover-point.is-export { fill:#58c7af; }
.solar-grid-meters { display:grid;grid-template-columns:1fr;gap:16px; }
.solar-grid-meter { border-left:5px solid var(--line); }
.solar-grid-meter.is-online { border-left-color:#58c7af; }
.solar-grid-meter.is-clickable { cursor:pointer;transition:border-color .18s ease,transform .18s ease,box-shadow .18s ease; }
.solar-grid-meter.is-clickable:hover,.solar-grid-meter.is-clickable:focus-visible { border-color:var(--solar);box-shadow:var(--shadow-soft);transform:translateY(-1px);outline:none; }
.solar-grid-meter header { display:flex;align-items:flex-start;justify-content:space-between;gap:15px; }
.solar-grid-meter header span:not(.status-dot) { color:var(--muted);font-size:.68rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase; }
.solar-grid-meter h3 { margin:3px 0;font-size:1.45rem; }
.solar-grid-meter header small,.solar-grid-meter footer { color:var(--muted);font-size:.72rem; }
.solar-grid-phase-list { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:19px 0 15px; }
.solar-grid-phase-list>div { min-width:0;padding:13px;border-radius:12px;background:var(--surface-2); }
.solar-grid-phase-list span,.solar-grid-phase-list strong,.solar-grid-phase-list small { display:block; }
.solar-grid-phase-list span { margin-bottom:5px;color:var(--muted);font-size:.68rem;font-weight:800; }
.solar-grid-phase-list strong { font-size:clamp(1.25rem,2vw,1.75rem);font-variant-numeric:tabular-nums; }
.solar-grid-phase-list small { margin-top:3px;color:var(--muted);font-size:.68rem; }
.solar-grid-meter-details { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px 14px;margin:0 0 15px;padding:13px;border-radius:12px;background:color-mix(in srgb,var(--surface-2) 72%,transparent); }
.solar-grid-meter-details>div { display:flex;min-width:0;align-items:baseline;justify-content:flex-start;gap:12px; }
.solar-grid-meter-details span { color:var(--muted);font-size:.68rem;font-weight:700; }
.solar-grid-meter-details strong { font-size:.76rem;text-align:right;font-variant-numeric:tabular-nums; }
.solar-tariff-info { margin:0 0 15px;padding:11px 13px;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--surface-2) 55%,transparent); }
.solar-tariff-info summary { cursor:pointer;color:var(--muted);font-size:.73rem;font-weight:800; }
.solar-tariff-info p { max-width:84ch;margin:9px 0 2px;color:var(--muted);font-size:.74rem;line-height:1.55; }
.solar-insights { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:-8px 0 22px; }
.solar-insights article { padding:17px 19px;border:1px solid color-mix(in srgb,var(--solar) 20%,var(--line));border-radius:16px;background:color-mix(in srgb,var(--solar) 6%,var(--surface)); }
.solar-insights span,.solar-insights strong,.solar-insights small { display:block; }
.solar-insights span { margin-bottom:8px;color:var(--muted);font-size:.69rem;font-weight:800;letter-spacing:.055em;text-transform:uppercase; }
.solar-insights strong { margin-bottom:4px;font-size:clamp(1.2rem,2vw,1.7rem);font-variant-numeric:tabular-nums;letter-spacing:-.035em; }
.solar-insights small { color:var(--muted);font-size:.72rem; }
.solar-chart-panel { margin-bottom:32px; }
.solar-range { display:flex;flex-wrap:wrap;gap:6px;padding:5px;border-radius:12px;background:var(--surface-2); }
.solar-chart-tools { display:flex;align-items:end;flex-wrap:wrap;justify-content:flex-end;gap:10px; }
.solar-chart-tools label { display:grid;gap:4px;color:var(--muted);font-size:.67rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase; }
.solar-chart-tools input { min-height:39px;padding:7px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);font:inherit;font-size:.78rem;letter-spacing:0;text-transform:none; }
.solar-fullscreen-button { white-space:nowrap; }
.solar-range .button { border-color:transparent; }
.solar-range .is-active { background:var(--text);color:var(--surface); }
.solar-chart-wrap { position:relative;min-height:330px; }
[data-marker-chart],[data-marker-chart] * { -webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none; }
[data-marker-chart] { touch-action:none;overscroll-behavior:contain; }
[data-marker-chart] svg { display:block;touch-action:none;cursor:crosshair; }
[data-marker-chart] svg * { pointer-events:none; }
[data-marker-chart] svg .solar-grid-legend,
[data-marker-chart] svg .solar-series-hit { pointer-events:auto; }
#solar-chart { display:block;width:100%;min-height:250px;overflow:visible;touch-action:none; }
.solar-gridline { stroke:var(--line);stroke-width:1;stroke-dasharray:3 7; }
.solar-axis,.solar-empty { fill:var(--muted);font-family:inherit;font-size:13px;font-weight:650; }
.solar-line { fill:none;stroke:var(--solar);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 4px 7px color-mix(in srgb,var(--solar) 24%,transparent)); }
.solar-point { fill:var(--surface);stroke:var(--solar);stroke-width:2.5; }
.solar-hover-guide { stroke:color-mix(in srgb,var(--solar) 68%,var(--text));stroke-width:2;stroke-dasharray:5 5;pointer-events:none; }
.solar-hover-point { fill:var(--solar);stroke:var(--surface);stroke-width:3;pointer-events:none;filter:drop-shadow(0 3px 6px color-mix(in srgb,var(--solar) 40%,transparent)); }
.solar-comparison { stroke:var(--muted);stroke-width:2;stroke-dasharray:10 8;opacity:.58; }
.solar-comparison-label { fill:var(--muted);font-family:inherit;font-size:12px;font-weight:800; }
.solar-area { fill:url(#solar-area-gradient); }
.solar-tooltip { position:absolute;z-index:4;padding:8px 11px;border-radius:9px;background:var(--text);color:var(--surface);box-shadow:var(--shadow-soft);font-size:.76rem;font-weight:750;pointer-events:none;white-space:nowrap; }
.solar-tooltip::after { content:"";position:absolute;left:18px;bottom:-6px;width:12px;height:12px;background:var(--text);transform:rotate(45deg); }
.solar-zoom-selection { fill:color-mix(in srgb,var(--accent) 20%,transparent);stroke:var(--accent);stroke-width:1.5;stroke-dasharray:5 4;pointer-events:none; }
.solar-zoom-reset { position:static;flex:0 0 auto;white-space:nowrap; }
.solar-zoom-reset[hidden] { display:none; }
.section-heading { display:flex;align-items:end;justify-content:space-between;margin:0 0 15px; }
.solar-inverters { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px; }
.solar-inverter { border-left:5px solid var(--line); }
.solar-inverter.is-online { border-left-color:var(--solar); }
.solar-inverter-top { display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:15px; }
.solar-inverter-top>div>span { color:var(--muted);font-size:.7rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase; }
.solar-inverter-top h3 { margin:2px 0;font-size:1.3rem; }
.solar-inverter-icon { display:grid;width:54px;aspect-ratio:1;border-radius:14px;background:linear-gradient(135deg,var(--solar),#f3c75f);color:#392700;font-size:.88rem;font-weight:900;place-items:center;box-shadow:inset 0 0 0 1px rgba(57,39,0,.12); }
.solar-inverter-metrics { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:22px; }
.solar-inverter-metrics>div { padding:17px;border-radius:14px;background:var(--surface-2); }
.solar-inverter-metrics span,.solar-inverter-metrics strong { display:block; }
.solar-inverter-metrics span { margin-bottom:7px;color:var(--muted);font-size:.72rem;font-weight:750; }
.solar-inverter-metrics strong { font-size:1.65rem;font-variant-numeric:tabular-nums;letter-spacing:-.04em; }
.solar-inverter-metrics .solar-metric-electrical { min-width:0; }
.solar-inverter-metrics .solar-electrical-list { display:flex;align-items:baseline;flex-wrap:wrap;gap:3px 9px;font-size:clamp(.9rem,1.1vw,1.15rem);line-height:1.16;letter-spacing:-.025em; }
.solar-electrical-list b { display:block;font:inherit;white-space:nowrap; }
.solar-inverter-metrics .solar-phase-list { display:grid;gap:4px;letter-spacing:0; }
.solar-phase-list b { display:block;font-size:.84rem;font-weight:800;line-height:1.25;white-space:nowrap; }
.solar-grid-voltage { grid-column:1/-1;margin-top:18px; }
.solar-voltage-heading { display:flex;align-items:end;justify-content:space-between;gap:14px;margin-bottom:10px; }
.solar-voltage-heading span { display:block;color:var(--muted);font-size:.63rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase; }
.solar-voltage-heading h3 { margin:2px 0 3px;font-size:1.25rem; }
.solar-voltage-heading small { display:block; }
.solar-voltage-legend { display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:7px 11px; }
.solar-voltage-legend span,
.solar-voltage-legend button { display:flex;align-items:center;gap:5px;letter-spacing:0;text-transform:none; }
.solar-voltage-legend button { border:0;background:transparent;color:inherit;font:inherit;padding:4px 5px;border-radius:7px;cursor:pointer; }
.solar-voltage-legend span::before,
.solar-voltage-legend button::before { content:"";width:8px;height:8px;border-radius:50%;background:currentColor; }
.solar-voltage-legend .is-muted { opacity:.34; }
.solar-voltage-legend [role="button"]:focus-visible,
.solar-voltage-legend button:focus-visible { outline:2px solid var(--accent);outline-offset:2px; }
.solar-voltage-actions { display:grid;justify-items:end;gap:9px; }
.solar-voltage-tools { display:flex;align-items:end;justify-content:flex-end;gap:9px; }
.solar-voltage-tools label { display:grid;gap:4px;color:var(--muted);font-size:.63rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase; }
.solar-voltage-tools input { min-height:38px;padding:7px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);font:inherit;font-size:.76rem;letter-spacing:0;text-transform:none; }
.solar-voltage-wrap { position:relative;min-height:0; }
.solar-voltage-svg { display:block;width:100%;height:auto;overflow:visible; }
.solar-voltage-axis { fill:var(--muted);font-family:inherit;font-size:12px;font-weight:700; }
.solar-voltage-line { fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round; }
.voltage-series-1,.solar-voltage-legend .voltage-series-1 { color:#f2b84b;stroke:#f2b84b; }
.voltage-series-2,.solar-voltage-legend .voltage-series-2 { color:#4fc3a8;stroke:#4fc3a8; }
.voltage-series-3,.solar-voltage-legend .voltage-series-3 { color:#7296ff;stroke:#7296ff; }
.voltage-series-4 { color:#db79ce;stroke:#db79ce; }
.voltage-series-5 { color:#f58c63;stroke:#f58c63; }
.voltage-series-6 { color:#64b8eb;stroke:#64b8eb; }
.voltage-series-7 { color:#a4c967;stroke:#a4c967; }
.voltage-series-8 { color:#bd8cf0;stroke:#bd8cf0; }
.solar-voltage-hover-point { fill:var(--surface);stroke-width:3;pointer-events:none; }
.solar-voltage-tooltip { max-width:calc(100% - 16px);white-space:normal; }
.solar-inverter>p { margin:17px 0 0;color:var(--muted);font-size:.78rem; }
.solar-skeleton { min-height:220px;background:linear-gradient(100deg,var(--surface) 30%,var(--surface-2) 45%,var(--surface) 60%);background-size:250% 100%;animation:solar-loading 1.5s ease infinite; }
@keyframes solar-loading { to { background-position:-150% 0; } }

html.chart-fullscreen-active { overflow:hidden; }
.climate-plan-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,360px),1fr));gap:22px;margin-top:22px; }
.climate-plan-card { min-width:0;display:flex;flex-direction:column;gap:16px; }
.climate-plan-card h2 { font-size:1.25rem;line-height:1.3; }
.climate-plan-card .panel-heading { margin:0;gap:12px; }
.climate-plan-card .form-grid>label { align-content:start; }
.climate-plan-select { display:flex;align-items:center;gap:7px;font-size:.8rem; }
.climate-plan-select input { width:auto; }
.climate-plan-state { background:var(--surface-2);padding:12px;border-radius:10px;color:var(--muted);line-height:1.5; }
.climate-plan-card details .form-grid { margin-top:14px; }
.climate-plan-card details { border-top:1px solid var(--line);padding-top:12px; }
.climate-plan-card summary { cursor:pointer;font-weight:700;line-height:1.5; }
.climate-plan-card details .section-intro { margin:12px 0 0; }
.climate-plan-card .modal-actions { margin-top:auto; }
.climate-plan-bulk { display:flex;align-items:end;gap:12px;flex-wrap:wrap;margin-top:20px; }
.climate-plan-bulk label { flex:1 1 240px; }
.climate-plan-message { flex:1;line-height:1.5; }
[data-chart-fullscreen]:fullscreen,
[data-chart-fullscreen].is-chart-fullscreen {
  position:fixed;inset:0;z-index:140;display:flex;width:100vw;height:100dvh;max-width:none;margin:0;padding:clamp(12px,2vw,28px);overflow:hidden;border:0;border-radius:0;background:var(--bg);flex-direction:column;
}
[data-chart-fullscreen]:fullscreen .panel-heading,
[data-chart-fullscreen].is-chart-fullscreen .panel-heading,
[data-chart-fullscreen]:fullscreen .solar-voltage-heading,
[data-chart-fullscreen].is-chart-fullscreen .solar-voltage-heading { flex:0 0 auto; }
[data-chart-fullscreen]:fullscreen .solar-chart-wrap,
[data-chart-fullscreen].is-chart-fullscreen .solar-chart-wrap,
[data-chart-fullscreen]:fullscreen .solar-voltage-wrap,
[data-chart-fullscreen].is-chart-fullscreen .solar-voltage-wrap { display:flex;min-height:0;flex:1 1 auto; }
[data-chart-fullscreen]:fullscreen #solar-chart,
[data-chart-fullscreen].is-chart-fullscreen #solar-chart,
[data-chart-fullscreen]:fullscreen .solar-voltage-svg,
[data-chart-fullscreen].is-chart-fullscreen .solar-voltage-svg,
[data-chart-fullscreen]:fullscreen .solar-chart-wrap>svg,
[data-chart-fullscreen].is-chart-fullscreen .solar-chart-wrap>svg { width:100%;height:100%;min-height:0; }

@media (min-width: 861px) and (max-width: 1120px) {
  .app-header { column-gap:10px;padding-inline:14px; }
  .brand img { width:112px; }
  .app-header nav { gap:1px;padding:4px; }
  .nav-link { min-height:38px;padding:8px 10px;font-size:.78rem;line-height:1; }
  .logout-button { width:43px;padding:0; }
  .logout-button strong { display:none; }
}

@media (max-width: 1180px) {
  .solar-insights { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .solar-inverter-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .solar-forecast-kpis { grid-template-columns:repeat(2,minmax(0,1fr)); }
}

@media (max-width: 860px) {
  .app-header { grid-template-columns: 1fr auto;column-gap:10px; }
  .app-header nav { position:fixed;top:76px;right:max(10px,env(safe-area-inset-right));left:max(10px,env(safe-area-inset-left));z-index:70;display:none;width:auto;max-height:calc(100dvh - 88px);padding:12px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:var(--shadow); }
  .app-header nav.is-open { display:grid; }
  .app-header nav .nav-link { width:100%;min-width:0;padding:12px 14px;white-space:normal;overflow-wrap:anywhere; }
  .nav-group { width:100%; }
  .nav-group>summary { justify-content:space-between; }
  .nav-submenu { position:static;width:100%;min-width:0;max-width:100%;margin:3px 0 7px;padding:5px 5px 5px 13px;overflow:hidden;border:0;border-left:2px solid var(--line);border-radius:0;background:transparent;box-shadow:none; }
  .nav-submenu .nav-link { white-space:normal; }
  .account-menu { grid-column:2;padding:3px; }
  .account-menu .menu-toggle { display:inline-flex; }
  .logout-button strong { display:none; }
  .planner { grid-template-columns: 260px 1fr; }
  .room-cards { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 780px) {
  .app-header { min-height: 68px; padding: 8px 18px; }
  .impersonation-bar { align-items:flex-start;justify-content:space-between;flex-direction:column;gap:7px;padding:10px 18px; }
  .brand img { width: 126px; }
  .app-main { width: min(100% - 28px, 720px); padding-top: 26px; }
  .app-header nav { top:68px;max-height:calc(100dvh - 78px);justify-content:flex-start; }
  .hero { align-items: flex-start; flex-direction: column; }
  .date-chip { display: none; }
  .feature-grid, .content-grid, .settings-grid, .climate-control-grid { grid-template-columns: 1fr; }
  .news-stats,.news-admin-grid,.calendar-overview-stats { grid-template-columns:1fr; }
  .calendar-overview-toolbar { align-items:stretch;flex-direction:column; }
  .calendar-overview-toolbar label:first-child { width:100%;min-width:0; }
  .calendar-view-tabs { display:flex; }
  .calendar-view-tabs .button { flex:1; }
  .calendar-visual { padding:16px; }
  .calendar-visual-toolbar { align-items:flex-start;flex-direction:column; }
  .calendar-weekdays { display:none; }
  .calendar-month-grid { display:grid;gap:9px;border:0;border-radius:0;background:transparent; }
  #calendar-visual-view .calendar-month-grid { grid-template-columns:minmax(0,1fr); }
  .calendar-day { display:grid;grid-template-columns:64px minmax(0,1fr);min-height:0;padding:12px;border:1px solid var(--line);border-radius:13px; }
  .calendar-day.is-outside,.calendar-day.is-empty { display:none; }
  .calendar-day>header { align-content:start;justify-content:start;flex-direction:column;margin:0; }
  .calendar-day>header span { font-size:1.1rem; }
  .calendar-day>header small { display:block;margin-top:3px;text-transform:capitalize; }
  .calendar-event { padding:9px 10px; }
  .calendar-event time { font-size:.68rem; }
  .calendar-event strong { font-size:.82rem; }
  .news-admin-card dl { grid-template-columns:1fr; }
  .climate-bulk-control { align-items:stretch;flex-direction:column; }
  .climate-bulk-actions { min-width:0; }
  .climate-bulk-control form { grid-template-columns:1fr; }
  .climate-bulk-power { display:grid;grid-template-columns:1fr 1fr; }
  .climate-bulk-control .save-status { text-align:left; }
  .climate-schedules .panel-heading { align-items:stretch;flex-direction:column; }
  .climate-rules .panel-heading { align-items:stretch;flex-direction:column; }
  .climate-schedule-card { grid-template-columns:auto minmax(0,1fr); }
  .climate-schedule-card>.button { grid-column:1/-1; }
  .climate-rule-list { grid-template-columns:1fr; }
  .climate-rule-card { grid-template-columns:1fr; }
  .climate-rule-card>.button { justify-self:start; }
  .climate-automation-form { grid-template-columns:1fr; }
  .climate-automation-form .switch-row { grid-column:auto; }
  .climate-history-toolbar { align-items:stretch;flex-direction:column; }
  .climate-history-toolbar>label { width:100%; }
  .climate-history-range { display:grid;width:100%;grid-template-columns:repeat(3,minmax(0,1fr)); }
  .climate-history-range .button { min-width:0;padding-inline:8px; }
  .history-chart-actions { display:grid;width:100%;grid-template-columns:1fr 1fr; }
  .climate-history-chart { min-height:270px; }
  #climate-history-chart { height:330px; }
  .feature-card { min-height: 195px; }
  .page-heading { align-items: flex-start; flex-direction: column; }
  .planner { grid-template-columns: 1fr; }
  .source-drawer { position: static; max-height: 310px; }
  .room-cards { grid-template-columns: 1fr; }
  .form-grid, .permissions { grid-template-columns: 1fr; }
  .span-2 { grid-column: span 1; }
  .api-network-form,.api-network-note { grid-template-columns:1fr; }
  .api-network-actions { justify-content:stretch; }
  .api-network-actions .button { width:100%; }
  .login-layout { grid-template-columns: 1fr; }
  .login-visual { display: none; }
  .login-panel { min-height: 100vh; padding: 18px; }
  .login-card { padding: 26px; }
  .totp-setup { grid-template-columns:1fr; }
  .totp-qr { width:min(250px,100%);margin:auto; }
  .help-layout { grid-template-columns: 1fr; }
  .help-toc { position: static; }
  .copy-field { flex-direction: column; }
  .planner-toolbar { flex-wrap: wrap; }
  .save-status { width: 100%; text-align: left; }
  .climate-card-header { grid-template-columns: auto minmax(0, 1fr); }
  .climate-state { grid-column: 1 / -1; justify-self: start; }
  .temperature-panel { grid-template-columns: 1fr; }
  .submission-contact-form { grid-template-columns:1fr; }
  .public-submission .submission-heading-actions { width:100%;justify-content:space-between; }
  .public-submission .submission-logo { width:min(220px,65vw); }
  .submission-series>header,.occurrence-row { grid-template-columns:1fr; }
  .occurrence-row { gap:8px;padding:16px; }
  .occurrence-list.is-readonly .occurrence-row { grid-template-columns:1fr auto; }
  .occurrence-row .table-actions { margin-top:5px; }
  .analytics-grid { grid-template-columns:1fr; }
  .solar-hero { grid-template-columns:1fr;padding:28px 23px; }
  .solar-hero-status { grid-template-columns:1fr 1.6fr; }
  .solar-live { min-width:0; }
  .solar-kpis { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .solar-forecast-kpis { grid-template-columns:1fr 1fr; }
  .solar-grid-kpis { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .solar-grid-meters { grid-template-columns:1fr; }
  .solar-inverters { grid-template-columns:1fr; }
  .solar-api-usage { grid-template-columns:1fr; }
  .solar-chart-panel { padding:18px 12px; }
  .solar-chart-panel .panel-heading { align-items:flex-start;flex-direction:column; }
  .solar-chart-tools { width:100%;align-items:stretch;justify-content:flex-start;flex-direction:column; }
  .solar-chart-tools label,.solar-chart-tools input { width:100%; }
  .solar-range { display:grid;width:100%;grid-template-columns:repeat(3,minmax(0,1fr)); }
  .solar-range .button { min-width:0;padding-inline:7px; }
  .solar-fullscreen-button { align-self:flex-start; }
  .solar-chart-wrap { min-height:0; }
  #solar-chart { height:auto;min-height:0; }
  .solar-voltage-heading { align-items:flex-start;flex-direction:column; }
  .solar-voltage-actions { width:100%;justify-items:start; }
  .solar-voltage-tools { width:100%;align-items:stretch;justify-content:flex-start;flex-direction:column; }
  .solar-voltage-tools label,.solar-voltage-tools input { width:100%; }
  .solar-voltage-tools .solar-range { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .solar-voltage-legend { justify-content:flex-start; }
  .review-details { min-width:0; }
  .review-content dl,.review-moment { grid-template-columns:1fr; }
  .review-moment .button { justify-self:start; }
  .facility-live-grid { grid-template-columns:1fr; }
  .facility-live-toolbar { align-items:flex-start;flex-direction:column; }
  .submission-season-card { grid-template-columns:1fr auto; }
  .submission-season-card>a { grid-column:1/-1; }
  .bulk-submission-row { grid-template-columns:auto minmax(0,1fr); }
  .bulk-submission-row>span:last-child { grid-column:2; }
  .submission-history-card { grid-template-columns:1fr;align-items:start; }
  .submission-history-meta { justify-items:start;text-align:left; }
  .submission-history-card>.button { justify-self:start; }
}

@media (max-width: 860px) and (orientation: landscape) {
  [data-chart-fullscreen]:fullscreen .panel-heading,
  [data-chart-fullscreen].is-chart-fullscreen .panel-heading,
  [data-chart-fullscreen]:fullscreen .solar-voltage-heading,
  [data-chart-fullscreen].is-chart-fullscreen .solar-voltage-heading { align-items:end;flex-direction:row;gap:14px; }
  [data-chart-fullscreen]:fullscreen .solar-chart-tools,
  [data-chart-fullscreen].is-chart-fullscreen .solar-chart-tools { width:auto;align-items:end;flex-direction:row;flex-wrap:nowrap; }
  .solar-chart-panel:fullscreen .solar-chart-tools label,
  .solar-chart-panel.is-chart-fullscreen .solar-chart-tools label { display:none; }
  [data-chart-fullscreen]:fullscreen .solar-chart-tools input,
  [data-chart-fullscreen].is-chart-fullscreen .solar-chart-tools input { width:150px; }
  [data-chart-fullscreen]:fullscreen .solar-range,
  [data-chart-fullscreen].is-chart-fullscreen .solar-range { display:flex;width:auto;flex-wrap:nowrap; }
  [data-chart-fullscreen]:fullscreen .solar-voltage-actions,
  [data-chart-fullscreen].is-chart-fullscreen .solar-voltage-actions { width:auto;justify-items:end; }
  [data-chart-fullscreen]:fullscreen .solar-voltage-tools,
  [data-chart-fullscreen].is-chart-fullscreen .solar-voltage-tools { width:auto;align-items:end;flex-direction:row; }
  [data-chart-fullscreen]:fullscreen .solar-voltage-tools label,
  [data-chart-fullscreen].is-chart-fullscreen .solar-voltage-tools label { width:auto; }
  [data-chart-fullscreen]:fullscreen .solar-voltage-tools input,
  [data-chart-fullscreen].is-chart-fullscreen .solar-voltage-tools input { width:150px; }
}

@media (orientation: landscape) and (max-height: 600px) {
  [data-chart-fullscreen]:fullscreen .solar-chart-tools label,
  [data-chart-fullscreen].is-chart-fullscreen .solar-chart-tools label,
  [data-chart-fullscreen]:fullscreen .solar-voltage-tools label,
  [data-chart-fullscreen].is-chart-fullscreen .solar-voltage-tools label { display:none; }
  [data-chart-fullscreen]:fullscreen .section-intro,
  [data-chart-fullscreen].is-chart-fullscreen .section-intro { display:none; }
}

@media (max-width: 460px) {
  .solar-kpis { grid-template-columns:1fr; }
  .solar-insights { grid-template-columns:1fr; }
  .solar-inverter-top { grid-template-columns:auto minmax(0,1fr); }
  .solar-hero-status { grid-template-columns:1fr; }
  .solar-inverter-top>.status-dot { grid-column:1/-1;justify-self:start; }
  .solar-grid-kpis { grid-template-columns:1fr; }
  .solar-grid-meter header { align-items:flex-start;flex-direction:column; }
  .solar-grid-phase-list { grid-template-columns:1fr; }
  .solar-grid-meter-details { grid-template-columns:1fr; }
  .fan-speed-control,.job-mode-control { grid-template-columns:1fr;gap:7px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .001ms !important; transition-duration: .001ms !important; }
}
.measurement-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr)); gap:24px; margin-top:24px; }
.measurement-grid.wallboard-health-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }
.wallboard-health-grid .measurement-card > header { flex-direction:column;align-items:flex-start;gap:12px; }
.wallboard-health-grid .measurement-card h2 { font-size:1.4rem; }
.measurement-reset[hidden] { display:none !important; }
@media(max-width:1100px) { .measurement-grid.wallboard-health-grid { grid-template-columns:minmax(0,1fr); } }
.measurement-controls { display:flex; align-items:end; flex-wrap:wrap; gap:20px; }
.measurement-controls > label { flex:1 1 220px; max-width:380px; }
.measurement-controls > p { flex:1 1 340px;margin:0 0 11px;color:var(--muted);font-size:.86rem;line-height:1.55; }
.measurement-channel-editor fieldset { border:1px solid var(--line); padding:20px; border-radius:14px; margin:20px 0; min-width:0; }
.measurement-channel-editor fieldset .button { margin-top:16px; }
.liturgy-layout { display:grid; grid-template-columns:1fr 2fr; gap:24px; margin-bottom:24px; align-items:start; }
.liturgy-layout > * { min-width:0; }
.liturgy-workspace { display:grid; grid-template-columns:minmax(0,1.08fr) minmax(0,1fr); gap:24px; align-items:start; }
.liturgy-workspace > * { min-width:0; }
.liturgy-services { margin-bottom:24px; }
.liturgy-services summary, .liturgy-tools summary { cursor:pointer; font-weight:700; padding:8px 0; line-height:1.5; }
#liturgy-list { display:flex; flex-wrap:wrap; gap:10px; max-height:170px; overflow:auto; padding-top:12px; }
.liturgy-panel-heading { margin-bottom:20px; }
.liturgy-panel-heading h2 { margin:6px 0 0; }
.liturgy-standards { margin:20px 0 22px; padding:16px; border:1px solid var(--line); border-radius:16px; background:linear-gradient(145deg,var(--surface-2),color-mix(in srgb,var(--brand-soft) 38%,var(--surface))); }
.liturgy-standards > header { display:flex; align-items:center; justify-content:space-between; gap:14px; margin-bottom:6px; }
.liturgy-standards h3 { margin:3px 0 0; font-size:1.08rem; }
.liturgy-standards > p { margin:0 0 14px; color:var(--muted); font-size:.78rem; line-height:1.5; }
.liturgy-standard-items { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.liturgy-standard-items section { min-width:0; }
.liturgy-standard-items h4 { margin:0 0 6px; color:var(--muted); font-size:.68rem; letter-spacing:.07em; text-transform:uppercase; }
.liturgy-standard-items section > div { display:flex; flex-wrap:wrap; gap:6px; }
.liturgy-standard-button { display:flex; align-items:center; justify-content:space-between; gap:8px; min-height:38px; max-width:100%; padding:8px 10px; border:1px solid var(--line); border-radius:10px; background:var(--surface); color:var(--text); font:inherit; font-size:.74rem; font-weight:700; text-align:left; cursor:grab; transition:border-color .15s ease,background .15s ease,transform .15s ease; }
.liturgy-standard-button:hover { border-color:var(--brand); background:var(--brand-soft); transform:translateY(-1px); }
.liturgy-standard-button:active { cursor:grabbing; transform:none; }
.liturgy-standard-button.is-recommended { border-color:color-mix(in srgb,var(--brand) 50%,var(--line)); }
.liturgy-standard-button small { padding:2px 5px; border-radius:999px; background:var(--brand-soft); color:var(--brand-dark); font-size:.58rem; font-weight:850; text-transform:uppercase; }
.liturgy-source-tabs,.liturgy-mobile-tabs { display:flex; gap:6px; padding:6px; border:1px solid var(--line); border-radius:14px; background:var(--surface-2); margin-bottom:24px; }
.liturgy-source-tabs button,.liturgy-mobile-tabs button { flex:1; border:0; border-radius:10px; padding:12px 16px; min-height:44px; background:transparent; color:var(--text); font:inherit; font-weight:700; cursor:pointer; }
.liturgy-source-tabs [aria-selected=true],.liturgy-mobile-tabs [aria-pressed=true] { background:var(--brand-soft); color:var(--text); box-shadow:inset 0 0 0 1px var(--brand),0 2px 8px #0001; }
.liturgy-mobile-tabs { display:none; }
.liturgy-add-row { display:flex; align-items:end; gap:12px; margin-top:20px; }
.liturgy-add-row label { flex:1; min-width:0; }
.liturgy-savebar { display:flex; justify-content:space-between; align-items:center; gap:16px; padding:18px 0; }
.liturgy-savebar output { margin:0!important; }
.liturgy-tools { border-top:1px solid var(--line); padding-top:12px; margin-top:12px; }
#liturgy-mail-status { white-space:pre-line; overflow-wrap:anywhere; }
#liturgy-versions { display:flex; flex-wrap:wrap; gap:10px; margin-top:12px; }
.liturgy-sources [role=tabpanel] > .button { margin:12px 12px 12px 0; }
#liturgy-items:empty::before { content:'Klik op een vast onderdeel, voeg een lied of Bijbellezing toe, of kies de voorgestelde volgorde.'; display:block; border:1px dashed var(--line); border-radius:12px; padding:24px 18px; line-height:1.7; color:var(--muted); }
@media(max-width:900px) {
 .liturgy-workspace { grid-template-columns:1fr; }
 .liturgy-mobile-tabs { display:flex; }
 #liturgy-app[data-workspace=editor] .liturgy-sources,#liturgy-app[data-workspace=sources] .liturgy-editor { display:none; }
 .liturgy-standard-items { grid-template-columns:1fr; }
 .liturgy-standard-button { min-height:44px; cursor:pointer; }
 .liturgy-add-row { flex-wrap:wrap; }
 .liturgy-add-row label { flex-basis:100%; }
 .liturgy-item-actions button { min-height:44px; }
}
.liturgy-preview { white-space:pre-wrap; max-height:480px; overflow:auto; line-height:1.75; margin:20px 0; }
#liturgy-items { min-height:64px; margin-top:8px; padding-left:24px; border-radius:12px; }
#liturgy-items:empty { padding-left:0; }
#liturgy-items li { padding:14px 8px; border-bottom:1px solid var(--line); transition:opacity .12s ease,background .12s ease,box-shadow .12s ease; }
#liturgy-items li[draggable=true] { cursor:grab; }
#liturgy-items li.is-dragging { opacity:.45; }
#liturgy-items li.is-drop-target { background:var(--brand-soft); box-shadow:inset 0 3px 0 var(--brand); }
#liturgy-items.is-drop-zone:empty::before { border-color:var(--brand); background:var(--brand-soft); color:var(--brand-dark); }
#liturgy-items small { display:block; color:var(--muted); margin-top:5px; }
.liturgy-item-actions { display:flex; gap:8px; margin-top:8px; }
.liturgy-item-actions button { min-width:36px; min-height:36px; }
.liturgy-item-actions { flex-wrap:wrap; }
.liturgy-item-actions button { border:1px solid var(--line); border-radius:9px; background:var(--surface-2); color:var(--text); padding:7px 11px; cursor:pointer; }
.liturgy-item-actions button:disabled { opacity:.4; cursor:default; }
#liturgy-app .form-actions { display:flex; flex-wrap:wrap; align-items:center; gap:10px; margin-top:18px; }
#liturgy-app .form-actions > input, #liturgy-app .form-actions > label, #liturgy-versions, #liturgy-mail-status { flex-basis:100%; }
#liturgy-app output { display:block; margin-top:12px; line-height:1.6; }
#liturgy-app section > .button { margin:8px 8px 8px 0; }
#liturgy-app dialog { max-width:min(560px,92vw); width:100%; border:1px solid var(--line); border-radius:20px; padding:0; background:var(--surface); color:var(--text); }
#liturgy-app dialog::backdrop { background:rgb(0 0 0 / .5); backdrop-filter:blur(4px); }
.liturgy-search-result { display:block; width:100%; text-align:left; padding:12px; background:var(--surface-2); color:var(--text); border:1px solid var(--line); border-radius:8px; margin-top:8px; }
.liturgy-search-result span { display:block; }
#song-results { max-height:360px; overflow:auto; }
.library-upload label, .library-upload output { display:block; margin:12px 0; }
@media(max-width:900px) { .liturgy-layout { grid-template-columns:1fr; } }
.measurement-card { min-width:0; }
.measurement-card > header { display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:12px; }
.measurement-card > header h2 { margin:2px 0 0; }
.measurement-card-actions { display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px; }
.measurement-series-legend { display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 12px; }
.measurement-series-legend.is-single { display:none; }
.measurement-series-legend button { display:inline-flex;align-items:center;gap:7px;padding:6px 9px;border:1px solid var(--line);border-radius:999px;background:var(--surface-2);color:var(--text);font:inherit;font-size:.78rem;font-weight:750;cursor:pointer; }
.measurement-series-legend button i { width:10px;height:10px;border-radius:50%;background:var(--series-color);box-shadow:0 0 0 2px color-mix(in srgb,var(--series-color) 20%,transparent); }
.measurement-series-legend button.is-muted { opacity:.42; }
.measurement-series-legend button.is-active { border-color:var(--series-color);background:color-mix(in srgb,var(--series-color) 10%,var(--surface)); }
.measurement-chart-wrap { position:relative;min-width:0;overflow:hidden;border:1px solid var(--line);border-radius:13px;background:var(--surface-2); }
.measurement-card canvas { display:block;width:100%;height:330px;user-select:none;touch-action:pan-y; }
.measurement-selection { position:absolute;z-index:2;top:18px;bottom:38px;border:1px solid var(--brand);background:color-mix(in srgb,var(--brand) 18%,transparent);pointer-events:none; }
.measurement-card output { display:block; min-height:3em; color:var(--muted); font-size:.85rem; }
.measurement-channel-heading { display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:12px; }
.measurement-channel-heading h2,.measurement-channel-heading p { margin-bottom:4px; }
.measurement-card:fullscreen { display:flex;flex-direction:column;width:100vw;height:100vh;max-width:none;padding:22px;border:0;border-radius:0;background:var(--surface); }
.measurement-card:fullscreen .measurement-chart-wrap { flex:1;min-height:0; }
.measurement-card:fullscreen canvas { height:100%; }
@media(max-width:700px) {
 .measurement-card { padding:16px; }
 .measurement-card > header { align-items:stretch;flex-direction:column;gap:10px; }
 .measurement-card-actions { justify-content:flex-start; }
 .measurement-card canvas { height:270px; }
}
.watts-actions { display:flex; flex-wrap:wrap; gap:12px; margin-top:20px; }
.watts-summary { margin-top:24px; }
.watts-card { min-width:0; display:flex; flex-direction:column; gap:12px; }
.watts-card h2, .watts-card p { margin:0; line-height:1.45; overflow-wrap:anywhere; }
.watts-card form { margin-top:auto; padding-top:12px; }
.watts-card [hidden] { display:none!important; }
.watts-card label { display:flex; flex-direction:column; gap:8px; min-width:0; }
.watts-card select, .watts-card input { width:100%; min-width:0; min-height:44px; }
.watts-temperature { font-size:clamp(1.8rem,3vw,2.5rem); font-weight:750; line-height:1.2; padding:8px 0; }
.watts-card output { display:block; margin-top:12px; line-height:1.5; }
.watts-history-link { display:inline-flex;align-items:center;align-self:flex-start;font-size:.86rem; }
.watts-quick-modes { display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px; }
.watts-quick-modes button { min-height:36px;padding:7px 11px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);color:var(--text);font:inherit;font-size:.78rem;font-weight:760;cursor:pointer; }
.watts-quick-modes button:hover,.watts-quick-modes button:focus-visible { border-color:var(--brand);background:var(--brand-soft);outline:0; }
#watts-status { display:block; margin-bottom:20px; line-height:1.5; }
.wallboard-upcoming-settings { min-width:0; margin:16px 0 0; padding:22px; border:1px solid var(--line); border-radius:18px; }
.wallboard-upcoming-settings legend { padding:0 8px; font-weight:800; font-size:1.15rem; }
.wallboard-upcoming-settings > p { margin:0 0 20px; line-height:1.6; }
[data-upcoming-categories][hidden] { display:none; }
@media(max-width:600px) { .watts-card .form-grid { grid-template-columns:1fr; } .watts-actions .button { flex:1 1 auto; } }
/* Gedeelde zonweringsgroepen: bediening en beheer naast elkaar, ook op mobiel. */
.shading-shortcuts { margin-bottom: 24px; }
.shading-shortcuts .panel-heading { align-items: flex-start; gap: 20px; flex-wrap: wrap; }
.shading-shortcuts .panel-heading p:not(.eyebrow) { max-width: 68ch; margin-top: 12px; }
.shading-group-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(min(100%,310px),1fr)); gap: 16px; }
.shading-group-card,.shading-group-empty { min-width: 0; padding: 22px; border: 1px solid var(--line); border-radius: 18px; background: var(--surface); }
.shading-schedules { margin-block:24px; }
.shading-schedule-card { min-width:0;padding:22px;border:1px solid var(--line);border-radius:18px;background:var(--surface); }
.shading-schedule-card.is-paused { border-style:dashed; }
.shading-schedule-card header { display:flex;gap:16px;justify-content:space-between;align-items:start; }
.shading-schedule-card h3 { margin:0;overflow-wrap:anywhere; }
.shading-schedule-card .eyebrow { margin-top:0; }
.shading-schedule-time { font-size:1.8rem;font-variant-numeric:tabular-nums;white-space:nowrap; }
.shading-schedule-targets,.shading-schedule-card li { overflow-wrap:anywhere; }
.shading-schedule-card details { margin-block:16px; }
#shading-schedule-form { display:grid;gap:20px;min-width:0; }
#shading-schedule-form .form-grid>label { align-content:start; }
#shading-schedule-form .shading-members { min-width:0;border:1px solid var(--line);border-radius:12px;padding:14px; }
.shading-schedule-days { display:flex;gap:10px;flex-wrap:wrap;border:1px solid var(--line);border-radius:12px;padding:14px;min-width:0; }
.shading-schedule-days label,.shading-schedule-enabled,#shading-schedule-members label { display:flex;align-items:center;gap:9px; }
.shading-schedule-days input,.shading-schedule-enabled input,#shading-schedule-members input { width:20px;min-height:20px;height:20px;flex:0 0 20px;padding:0;accent-color:var(--brand); }
.shading-schedule-days label { padding:6px; }
#shading-schedule-form-status { color:var(--danger);margin:0; }
#shading-schedule-form .modal-actions { flex-wrap:wrap; }
#shading-schedule-form .modal-actions .button { flex:1 1 auto; }
.shading-group-card:first-child { border-color: var(--brand); }
.shading-group-card header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 20px; }
.shading-group-card h3,.shading-group-empty h3 { margin: 0 0 6px; overflow-wrap: anywhere; }
.shading-group-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.shading-group-actions .button { flex: 1 0 auto; }
.shading-members { margin: 22px 0; min-width: 0; }
#shading-members { max-height: 320px; overflow-y: auto; margin-top: 12px; }
#shading-group-results li { margin-block: 8px; }
#shading-group-form-status { color: var(--danger); }
#shading-group-form .modal-actions { flex-wrap: wrap; }
#shading-group-form .modal-actions .grow { display: none; }
#shading-group-form .modal-actions .button { flex: 1 1 auto; }

/* TV status is measured, never inferred from the last command. */
.tv-settings-panel { margin-block:24px; }
.tv-card-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:18px;margin-top:20px; }
.tv-card { min-width:0;padding:20px;border:1px solid var(--line);border-radius:16px;background:var(--surface-2); }
.tv-card-heading { display:flex;align-items:center;gap:14px; }
.tv-card-heading h3 { margin:0;overflow-wrap:anywhere; }
.tv-icon { display:block;position:relative;width:58px;flex:none;color:var(--muted); }
.tv-icon svg { display:block;width:100%;fill:none;stroke:currentColor;stroke-width:2; }
.tv-screen { fill:var(--surface); }
.tv-glint { opacity:0; }
.tv-led { fill:var(--muted);stroke:none; }
.tv-badge { position:absolute;right:-3%;bottom:-5%;padding:.1em .35em;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--muted);font-size:11px;font-weight:800;line-height:1.3; }
[data-power='on'] .tv-icon { color:var(--brand); }
[data-power='on'] .tv-screen { fill:color-mix(in srgb,var(--brand) 28%,var(--surface)); }
[data-power='on'] .tv-glint { opacity:.9; }
[data-power='on'] .tv-led { fill:var(--brand); }
[data-power='on'] .tv-badge { background:var(--brand);color:var(--surface); }
[data-power='unknown'] .tv-icon,[data-power='transitioning'] .tv-icon { color:#b99233; }
.tv-state { font-weight:800;margin:14px 0 6px; }
.tv-detail,.tv-feedback,.tv-hint { color:var(--muted);font-size:.85rem;line-height:1.5;overflow-wrap:anywhere; }
.tv-actions { display:flex;flex-wrap:wrap;gap:8px;margin-top:14px; }
.tv-actions .button:disabled { cursor:not-allowed; }
.tv-actions .button[aria-busy='true'] { cursor:progress; }
.tv-feedback { min-height:1.5em; }
.tv-layout-form { display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px 16px;border-top:1px solid var(--line);padding-top:16px;margin-top:18px; }
.tv-layout-form > label:not(.switch-row) { flex:0 1 240px;min-width:0;max-width:100%; }
.tv-layout-form > .switch-row { flex:0 1 auto;max-width:100%;min-height:44px;align-items:center;margin:0; }
.tv-layout-form > .switch-row input { flex:none; }
.tv-layout-form > button { flex:0 1 auto;width:auto;max-width:100%; }
.tv-facility-widget { position:absolute;z-index:4;width:3.5%;min-width:0;transform:translate(-50%,-50%);cursor:pointer;touch-action:manipulation; }
.tv-facility-widget .tv-icon { width:100%; }
.tv-facility-widget .tv-badge { font-size:.9cqw; }
.tv-facility-widget:focus-visible { outline:2px solid var(--brand);outline-offset:4px;border-radius:4px; }
.tv-facility-widget.is-editable { touch-action:none;cursor:move; }
.tv-popover { position:fixed;inset:auto;margin:0;padding:10px;width:300px;max-width:calc(100vw - 16px);max-height:calc(100dvh - 16px);overflow:auto;border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--text);box-shadow:var(--shadow); }
.tv-popover .tv-card { padding:6px;border:0;background:transparent; }
.tv-popover .tv-icon { width:42px; }
.tv-popover h3 { font-size:1rem; }
.tv-popover .tv-detail,.tv-popover .tv-feedback { font-size:.78rem; }
.tv-popover::backdrop { background:transparent;pointer-events:none; }
