:root{color-scheme:light;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:15px;line-height:1.5;color:#111827;background:#f6f8fb;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--bg: #f6f8fb;--surface: #ffffff;--surface-2: #f8fafc;--line: #dbe3ea;--line-soft: #e8eef4;--text: #111827;--muted: #64748b;--teal: #0ea5a3;--blue: #2563eb;--amber: #f59e0b;--coral: #f97366;--danger: #ef4444;--shadow: 0 10px 30px rgba(15, 23, 42, .07)}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:var(--bg)}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}.app-shell{display:grid;grid-template-columns:220px 1fr;min-height:100vh}.sidebar{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:24px;padding:20px 16px;border-right:1px solid var(--line);background:var(--surface)}.brand{display:flex;align-items:center;gap:12px;padding:6px 4px 14px;border-bottom:1px solid var(--line-soft)}.brand-mark{display:grid;width:38px;height:38px;place-items:center;border-radius:8px;color:#fff;background:var(--teal)}.brand strong,.brand span{display:block}.brand span{margin-top:2px;color:var(--muted);font-size:12px}.sidebar nav{display:flex;flex-direction:column;gap:6px}.sidebar nav button{display:flex;align-items:center;gap:11px;min-height:42px;padding:0 12px;color:#334155;border:0;border-radius:8px;background:transparent;text-align:left}.sidebar nav button:hover,.sidebar nav button.active{color:#0f766e;background:#e8f8f6}.sidebar-footer{display:flex;align-items:center;gap:9px;margin-top:auto;padding-top:16px;color:var(--muted);border-top:1px solid var(--line-soft);font-size:13px}.main{min-width:0}.topbar{position:sticky;top:0;z-index:5;display:flex;flex-wrap:wrap;align-items:center;gap:18px;min-height:72px;padding:14px 28px;border-bottom:1px solid var(--line);background:#fffffff2;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}label{display:grid;gap:7px;color:#334155;font-size:13px;font-weight:650}input,select,textarea{min-height:38px;padding:0 12px;border:1px solid var(--line);border-radius:8px;color:var(--text);background:#fff;outline:none}textarea{min-height:88px;padding:10px 12px;resize:vertical}input:focus,select:focus,textarea:focus{border-color:var(--teal);box-shadow:0 0 0 3px #0ea5a324}.topbar label{grid-auto-flow:column;align-items:center;gap:10px;font-size:14px}.topbar select{min-width:180px}.date-range-filter{position:relative;flex:0 1 366px}.date-range-trigger{display:grid;grid-template-columns:auto 1fr auto;align-items:center;width:100%;min-height:42px;padding:0 12px;gap:10px;border:1px solid var(--line);border-radius:8px;color:var(--text);background:#fff;text-align:left}.date-range-trigger:hover,.date-range-trigger[aria-expanded=true]{border-color:var(--teal);box-shadow:0 0 0 3px #0ea5a31f}.date-range-trigger span{color:#475569;font-size:13px;font-weight:700}.date-range-trigger strong{min-width:0;font-size:14px;font-weight:750;white-space:nowrap}.date-range-trigger i{padding:0 4px;color:var(--muted);font-style:normal}.date-range-trigger svg{color:var(--muted)}.date-range-popover{position:absolute;top:calc(100% + 10px);left:0;z-index:30;display:grid;grid-template-columns:116px minmax(0,1fr);width:min(820px,calc(100vw - 280px));min-width:680px;border:1px solid var(--line);border-radius:8px;background:var(--surface);box-shadow:0 18px 50px #0f172a2e;overflow:hidden}.date-presets{display:grid;align-content:start;padding:12px 8px;border-right:1px solid var(--line-soft);background:var(--surface-2)}.date-presets button{min-height:38px;padding:0 12px;border:0;border-radius:6px;color:#334155;background:transparent;text-align:left}.date-presets button:hover{color:#0f766e;background:#e8f8f6}.date-range-main{min-width:0;padding:12px 16px 14px}.date-range-nav{display:grid;grid-template-columns:36px 1fr 36px;align-items:center;margin-bottom:10px}.date-range-nav span{color:var(--muted);font-size:12px;text-align:center}.date-range-nav button{display:grid;width:34px;height:34px;padding:0;place-items:center;border:1px solid var(--line-soft);border-radius:6px;color:#334155;background:#fff}.date-range-nav button:hover{color:#0f766e;border-color:#0ea5a373;background:#f6fffd}.date-range-inputs{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:end;gap:10px;margin-bottom:12px}.date-range-inputs>span{padding-bottom:9px;color:var(--muted);font-size:12px}.date-range-inputs label{gap:5px;font-size:12px}.date-range-inputs input{width:100%}.date-range-calendars{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.date-month{min-width:0}.date-month h3{min-height:28px;text-align:center;font-size:14px}.date-weekdays,.date-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.date-weekdays span{display:grid;height:28px;place-items:center;color:var(--muted);font-size:12px}.date-days button{display:grid;min-width:0;height:34px;padding:0;place-items:center;border:0;border-radius:0;color:#334155;background:transparent;font-size:13px}.date-days button:hover:not(:disabled){color:#0f766e;background:#e8f8f6}.date-days button.outside{color:#aeb8c5}.date-days button.in-range{color:#0f766e;background:#e8f8f6}.date-days button.range-edge{border-radius:6px;color:#fff;background:var(--teal);font-weight:800}.date-days button:disabled{color:#cbd5e1;background:transparent}.date-range-actions{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line-soft)}.date-range-actions>span{color:var(--muted);font-size:12px}.date-range-actions .primary-button,.date-range-actions .secondary-button{min-height:34px;padding:0 12px}.topbar-status{display:flex;align-items:center;gap:7px;margin-left:auto;color:#059669;font-size:13px}.primary-button,.secondary-button,.danger-button,.text-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:38px;padding:0 14px;border-radius:8px;border:1px solid transparent;font-weight:700}.primary-button{color:#fff;background:var(--teal);box-shadow:0 8px 22px #0ea5a333}.secondary-button{color:#0f766e;border-color:var(--line);background:#fff}.danger-button{color:var(--danger);border-color:#fecaca;background:#fff7f7}.text-button{min-height:auto;padding:0;color:var(--blue);background:transparent}.login-page{display:grid;min-height:100vh;place-items:center;padding:28px;background:linear-gradient(135deg,#0ea5a31a,#2563eb14),var(--bg)}.login-card{display:grid;width:min(100%,420px);gap:16px;padding:28px;border:1px solid var(--line);border-radius:8px;background:var(--surface);box-shadow:var(--shadow)}.login-card h1{font-size:26px}.login-card p{margin-top:6px;color:var(--muted)}.login-card .brand-mark{width:44px;height:44px}.login-card .primary-button{width:100%}.login-error{margin:0;padding:10px 12px;border-radius:8px;color:#b91c1c;background:#fef2f2;font-size:13px}.page-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px;padding:24px 28px 36px}.page-title{grid-column:1 / -1;display:flex;align-items:flex-start;justify-content:space-between;gap:16px}h1,h2,h3,p{margin:0}h1{font-size:28px;line-height:1.18}h2{font-size:16px;line-height:1.35}h3{font-size:14px}.page-title p,.panel-header p{margin-top:5px;color:var(--muted);font-size:13px}.kpi-grid{grid-column:1 / -1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.kpi-card,.panel{border:1px solid var(--line);border-radius:8px;background:var(--surface);box-shadow:var(--shadow)}.kpi-card{display:flex;align-items:center;gap:16px;min-height:116px;padding:20px}.kpi-icon{display:grid;flex:0 0 auto;width:52px;height:52px;place-items:center;border-radius:8px;color:#fff}.kpi-icon.teal{background:var(--teal)}.kpi-icon.blue{background:var(--blue)}.kpi-icon.amber{background:var(--amber)}.kpi-icon.coral{background:var(--coral)}.kpi-card p{color:#475569;font-size:13px}.kpi-card>div:last-child{min-width:0}.kpi-card strong{display:block;margin-top:4px;font-size:28px;line-height:1.1;overflow-wrap:anywhere}.kpi-card span{display:block;margin-top:8px;color:var(--coral);font-size:13px}.panel{min-width:0;padding:18px}.panel.wide{grid-column:1 / -1}.panel.half{grid-column:span 6}.panel.quarter{grid-column:span 3}.panel.form-panel{grid-column:span 4}.panel.summary-table{grid-column:span 8}.panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.mode-pill,.suggestion{display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:999px;color:#0f766e;background:#e7f7f4;font-size:12px;font-style:normal;font-weight:700}.suggestion.warn{color:#b45309;background:#fff7ed}.suggestion.good{color:#047857;background:#ecfdf5}.suggestion.bad{color:#b91c1c;background:#fef2f2}.chart-large{height:280px}.chart-medium{height:320px}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:12px 10px;border-bottom:1px solid var(--line-soft);text-align:left;white-space:nowrap}th{color:#475569;background:var(--surface-2);font-weight:750}td{color:#1f2937}td strong{display:block;font-weight:750}td small{display:block;margin-top:4px;color:var(--muted);font-size:12px;line-height:1.35;white-space:normal}.empty-cell{padding:28px 12px;color:var(--muted);text-align:center;white-space:normal}.rank-dot,.medal{display:inline-grid;width:22px;height:22px;margin-right:8px;place-items:center;border-radius:6px;color:#fff;background:var(--teal);font-size:12px;font-weight:800}.leader-list,.product-stack{display:grid;gap:10px}.leader-row,.product-row{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;min-height:54px;padding-bottom:10px;border-bottom:1px solid var(--line-soft)}.leader-row:last-child,.product-row:last-child{border-bottom:0;padding-bottom:0}.leader-row p,.product-row p{margin-top:2px;color:var(--muted);font-size:12px}.leader-row b{color:var(--teal);font-size:18px}.product-row span{color:var(--coral);font-weight:800}.product-row em{color:var(--teal);font-style:normal;font-weight:700}.review-columns{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.review-column{padding-left:14px;border-left:3px solid var(--teal)}.review-column.amber{border-left-color:var(--amber)}.review-column.blue{border-left-color:var(--blue)}.review-column ul,.report-doc ul{margin:10px 0 0;padding-left:18px}.review-column li,.report-doc li{margin:7px 0;color:#334155}.import-panel{display:grid;gap:18px}.import-actions,.upload-row,.status-strip{display:flex;align-items:center;gap:16px;justify-content:space-between}.import-actions p{margin-top:4px;color:var(--muted)}.upload-row{flex-wrap:wrap;justify-content:flex-start}.upload-row label:not(.file-drop){min-width:190px}.file-drop{position:relative;display:flex;align-items:center;justify-content:center;gap:12px;min-width:280px;min-height:76px;padding:16px;border:1px dashed #9fb2c5;border-radius:8px;color:#0f766e;background:#f8fffe}.file-drop input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0}.status-strip{justify-content:flex-start;min-height:44px;padding:0 12px;border-radius:8px;color:#047857;background:#ecfdf5}.template-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.template-card{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;min-height:74px;padding:14px;border:1px solid var(--line);border-radius:8px;color:#334155;background:var(--surface-2);text-decoration:none}.template-card:hover{border-color:#0ea5a373;background:#f6fffd}.template-card>svg:first-child{color:var(--teal)}.template-card span,.template-card strong,.template-card em{display:block;min-width:0}.template-card strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.template-card em{margin-top:2px;color:var(--muted);font-size:12px;font-style:normal}.warning-list{display:grid;gap:10px}.warning-list p{display:flex;align-items:center;gap:8px;color:#b45309}.empty-hint{display:grid;min-height:148px;place-items:center;padding:20px;color:var(--muted);border:1px dashed var(--line);border-radius:8px;background:var(--surface-2);text-align:center}.timeline-panel{overflow-x:auto}.legend-row{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:18px;color:#475569;font-size:13px}.legend-row span{display:inline-flex;align-items:center;gap:7px}.legend-row i,.host-dot{display:inline-block;width:10px;height:10px;border-radius:999px}.legend-row .untagged{background:#cbd5e1}.time-axis{position:relative;min-width:920px;height:30px;margin-left:128px}.time-axis span{position:absolute;transform:translate(-50%);color:var(--muted);font-size:12px}.timeline-rows{display:grid;gap:12px;min-width:1060px}.timeline-row{display:grid;grid-template-columns:128px 1fr;align-items:stretch;min-height:92px}.timeline-room{display:grid;align-content:center;gap:4px;padding-right:12px}.timeline-room span{color:var(--muted);font-size:12px}.timeline-track{position:relative;border-radius:8px;background:#edf2f7;overflow:hidden}.hour-bars{position:absolute;top:10px;right:0;bottom:0;left:0}.hour-bars i{position:absolute;bottom:0;width:calc(100% / 24 - 3px);border-radius:4px 4px 0 0;background:#0ea5a347}.segment-block{position:absolute;top:26px;height:50px;min-width:58px;padding:7px 12px;border:2px solid rgba(255,255,255,.85);border-radius:8px;color:#fff;text-align:left;box-shadow:0 8px 18px #0f172a29;overflow:hidden}.segment-block.selected{outline:3px solid rgba(37,99,235,.28)}.segment-block strong,.segment-block span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.segment-block span{margin-top:2px;font-size:12px;opacity:.9}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.form-grid .full{grid-column:1 / -1}.form-grid input[type=color]{min-height:42px;padding:5px}.quick-host{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px}.button-row{display:flex;gap:10px;margin-top:16px}.host-dot{margin-right:8px;vertical-align:middle}.host-library-list .panel-header p{margin-top:3px;color:var(--muted)}.tag-list{display:flex;flex-wrap:wrap;gap:6px}.tag-list em,.tag-list small,.status-pill{display:inline-flex;align-items:center;min-height:24px;padding:0 8px;border-radius:999px;background:#edf2f7;color:#475569;font-size:12px;font-style:normal}.tag-list em{color:#0f766e;background:#e8f8f6}.status-pill.good{color:#047857;background:#ecfdf5}.table-actions{display:flex;flex-wrap:wrap;gap:8px}.table-actions .secondary-button{min-height:32px;padding:0 10px;font-size:13px}.score-bar{display:inline-grid;grid-template-columns:72px auto;align-items:center;gap:8px}.score-bar:before{content:"";display:block;grid-column:1;grid-row:1;width:72px;height:7px;border-radius:999px;background:#e2e8f0}.score-bar i{display:block;grid-column:1;grid-row:1;max-width:72px;height:7px;border-radius:999px;background:var(--teal)}.room-card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.room-card{padding:8px 0}.room-card h2{margin-bottom:14px}.room-card dl{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0}.room-card div{padding:12px;border-radius:8px;background:var(--surface-2)}.room-card dt{color:var(--muted);font-size:12px}.room-card dd{margin:4px 0 0;font-size:19px;font-weight:800}.report-doc{max-width:980px}.report-doc h2{margin-top:22px;font-size:18px}.report-doc h2:first-child{margin-top:0}.report-doc p{margin-top:10px;color:#334155}.report-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:12px 0 0}.report-metrics div{padding:12px;border-radius:8px;background:var(--surface-2)}.report-metrics dt{color:var(--muted);font-size:12px}.report-metrics dd{margin:3px 0 0;font-size:20px;font-weight:850}@media(max-width:1120px){.app-shell{grid-template-columns:84px 1fr}.brand div:last-child,.sidebar nav button{font-size:0}.sidebar nav button{justify-content:center}.sidebar-footer span{display:none}.kpi-grid,.review-columns,.room-card-grid,.report-metrics,.template-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.panel.quarter,.panel.form-panel,.panel.summary-table{grid-column:1 / -1}.date-range-popover{width:min(760px,calc(100vw - 120px))}}@media(max-width:760px){.app-shell{display:block}.sidebar{position:static;height:auto;padding:12px}.brand div:last-child{font-size:15px}.sidebar nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.sidebar nav button{flex-direction:column;gap:4px;padding:8px 4px;font-size:12px;min-height:42px}.topbar,.page-title,.import-actions,.upload-row{align-items:stretch;flex-direction:column}.topbar{position:static;padding:14px 16px;-webkit-backdrop-filter:none;backdrop-filter:none}.topbar label{grid-auto-flow:row}.topbar select,.date-range-filter,.file-drop{width:100%;min-width:0}.date-range-filter{flex-basis:auto}.date-range-popover{position:fixed;top:12px;right:12px;bottom:12px;left:12px;display:block;width:auto;min-width:0;max-height:calc(100vh - 24px);overflow:auto}.date-presets{grid-template-columns:repeat(3,minmax(0,1fr));padding:8px;border-right:0;border-bottom:1px solid var(--line-soft)}.date-presets button{padding:0 6px;text-align:center}.date-range-main{padding:12px}.date-range-inputs{grid-template-columns:1fr}.date-range-inputs>span{display:none}.date-range-calendars{grid-template-columns:1fr}.date-range-calendars .date-month:nth-child(2){display:none}.date-range-actions{grid-template-columns:1fr 1fr}.date-range-actions>span{grid-column:1 / -1}.topbar-status{margin-left:0}.primary-button,.secondary-button,.danger-button{width:100%;min-width:0}.page-grid{grid-template-columns:1fr;padding:18px 16px 28px}.kpi-grid,.review-columns,.room-card-grid,.form-grid,.quick-host,.report-metrics,.template-grid{grid-template-columns:1fr}.panel,.panel.half,.panel.quarter,.panel.form-panel,.panel.summary-table{grid-column:1 / -1}.chart-large,.chart-medium{height:260px}h1{font-size:24px;overflow-wrap:anywhere}.kpi-card{display:grid;grid-template-columns:64px minmax(0,1fr);min-height:104px;padding:16px}.kpi-card strong{font-size:26px}table{display:block;overflow-x:auto}}
