@charset "UTF-8";
:root{color-scheme:dark;--bg:#0d1012;--panel:#15191c;--panel-soft:#191e21;--line:#2c3337;--text:#f1f3ee;--muted:#a6b0af;--accent:#c5e4ad;--danger:#ffb8a9;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-synthesis:none}
*{box-sizing:border-box}html{min-width:280px;background:var(--bg)}body{margin:0;background:radial-gradient(ellipse at 85% 0,rgba(160,192,143,.055),transparent 45%),var(--bg);color:var(--text);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}main,#dashboard{width:min(1280px,calc(100% - 80px));margin:0 auto;padding:48px 0 64px}main #dashboard{width:100%;padding:0}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(27px,3.5vw,42px);font-weight:550;letter-spacing:-.045em;line-height:1.15;margin-bottom:12px}h2{font-size:17px;font-weight:550;letter-spacing:-.02em;line-height:1.4;margin-bottom:24px}h3{font-size:14px;font-weight:600}a{color:var(--accent);text-underline-offset:4px}a:hover{color:#e3f7d6}small,.muted,.subtitle{color:var(--muted)}header,.page-header,.dashboard-header{display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;margin-bottom:32px}header p{margin-bottom:0;color:var(--muted)}header form{margin:0}label{display:flex;flex-direction:column;gap:7px;color:var(--muted);font-size:12px;font-weight:500;letter-spacing:.02em}input,select,button{font:inherit;max-width:100%;min-width:0;border:1px solid var(--line);border-radius:8px;min-height:44px;padding:10px 13px;color:var(--text);background:var(--panel-soft)}input,select{color-scheme:dark}input[type=date]{min-width:145px}button{cursor:pointer;font-weight:550;line-height:1.4;transition:background .15s,border-color .15s}button:hover{background:#27312a;border-color:#73836b}button:active{transform:translateY(1px)}button:disabled,input:disabled{opacity:.5;cursor:default}button:disabled:active{transform:none}input:focus-visible,select:focus-visible,button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:4px}input:focus,select:focus{border-color:var(--accent)}#apply,button[type=submit]{background:var(--accent);border-color:var(--accent);color:#192015}#apply:hover,button[type=submit]:hover{background:#d8efc8}#exclude{font-size:12px;color:var(--muted);background:transparent}#exclude[aria-pressed=true]{border-color:#687d58;color:var(--accent)}form,.filters,.toolbar,.controls,.date-controls{display:flex;align-items:flex-end;flex-wrap:wrap;gap:12px}form{margin-bottom:24px}.filters,.toolbar,.controls{padding:20px;background:rgba(21,25,28,.65);border:1px solid var(--line);border-radius:12px;margin-bottom:12px}.filters form,.toolbar form,.controls form{margin:0}#status{color:var(--muted);font-size:12px;min-height:20px;margin:14px 0 26px;overflow-wrap:anywhere}#status.is-error,.error,[role=alert]{color:var(--danger)}#summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin:0 0 24px}.stat-card{padding:24px;background:var(--panel);border:1px solid var(--line);border-radius:12px;min-width:0;display:flex;flex-direction:column;gap:17px}.stat-label{color:var(--muted);font-size:12px;font-weight:500;letter-spacing:.025em}.stat-value{font-size:clamp(27px,3.2vw,42px);font-weight:500;letter-spacing:-.045em;line-height:1.1;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.stat-visits .stat-value{color:var(--accent)}section,.panel,.card{min-width:0;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:25px;margin-bottom:24px}section section,.panel .panel,.card .card{background:transparent}.grid,.dashboard-grid,.charts-grid,.two-column,.two-col,.split{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.grid>*,.dashboard-grid>*,.charts-grid>*,.two-column>*,.two-col>*,.split>*{min-width:0}.grid>section,.dashboard-grid>section,.charts-grid>section,.two-column>section,.two-col>section,.split>section{margin-bottom:0}.grid,.dashboard-grid,.charts-grid,.two-column,.two-col,.split{margin-bottom:24px}.section-header,.panel-header{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:18px}.section-header h2,.panel-header h2{margin:0}#metric{font-size:12px}#timeline,#ranking,#depth,#songs,#sources,#devices,#reveal{min-width:0;max-width:100%}.timeline-chart{display:block;width:100%;height:auto;overflow:visible}.chart-grid{stroke:var(--line);stroke-width:1}.chart-axis{fill:var(--muted);font-size:11px;font-family:inherit}.chart-area{fill:var(--accent);opacity:.055}.chart-line{fill:none;stroke:var(--accent);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.chart-dot{fill:var(--accent);stroke:var(--panel);stroke-width:1.5}.chart-note{font-size:12px;color:var(--muted);line-height:1.65;margin:19px 0 0;max-width:75ch;overflow-wrap:anywhere}.empty-state{display:flex;align-items:center;justify-content:center;min-height:130px;border:1px dashed var(--line);border-radius:8px;color:var(--muted);font-size:13px;text-align:center;padding:24px;margin:0}.bar-list{list-style:none;padding:0;margin:0;display:grid;gap:22px}.bar-label{display:flex;justify-content:space-between;align-items:baseline;gap:20px;margin-bottom:9px;font-size:13px}.bar-label span{overflow-wrap:anywhere;min-width:0}.bar-label strong{font-weight:500;font-variant-numeric:tabular-nums;flex-shrink:0}.bar-track{display:block;width:100%;height:6px}.bar-bg{fill:#29302e}.bar-fill{fill:var(--accent)}#depth .bar-fill{fill:#9bbad1}#sources .bar-fill,#devices .bar-fill{fill:#a5bca0}.chart-data{margin-top:12px;font-size:12px;color:var(--muted)}.chart-data summary{cursor:pointer;display:list-item;width:fit-content;padding:5px 0}.daily-values{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 16px;max-height:260px;overflow-y:auto;padding-right:12px;font-variant-numeric:tabular-nums}.daily-values dt{overflow-wrap:anywhere}.daily-values dd{margin:0;color:var(--text)}table{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums;table-layout:fixed}caption{text-align:left;color:var(--muted);font-size:12px;margin-bottom:16px}th,td{padding:14px 9px;border-bottom:1px solid var(--line);text-align:right;overflow-wrap:anywhere}thead th{font-size:11px;font-weight:500;color:var(--muted)}th:first-child,td:first-child{text-align:left;width:34%;padding-left:0}tbody th{font-weight:500}th:last-child,td:last-child{padding-right:0}tbody tr:last-child>*{border-bottom:0}tbody tr:hover{background:rgba(197,228,173,.025)}#reveal{padding:6px 0}#reveal .stat-value{color:var(--accent)}footer{font-size:12px;color:var(--muted);padding-top:16px;display:flex;gap:16px;flex-wrap:wrap;align-items:center;justify-content:space-between}.login,.login-card,main:has(>form input[type=password]){width:min(440px,calc(100% - 40px));margin:10vh auto;padding:32px;background:var(--panel);border:1px solid var(--line);border-radius:14px}.login form,.login-card form,form:has(input[type=password]){display:flex;flex-direction:column;align-items:stretch}.login input,.login-card input,form:has(input[type=password]) input{width:100%}form:has(input[type=password]) button{margin-top:8px}::selection{background:#c5e4ad;color:#0d1012}[hidden]{display:none!important}
#dashboard{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:24px}#dashboard>*{grid-column:1/-1}#dashboard>section:has(#ranking),#dashboard>section:has(#depth),#dashboard>section:has(#sources),#dashboard>section:has(#devices){grid-column:auto}#summary{padding:0;border:0;background:none}#dashboard>.filters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr)) auto;gap:8px 12px;align-items:end}label[for=range]{grid-area:1/1}#range{grid-area:2/1}label[for=start]{grid-area:1/2}#start{grid-area:2/2}label[for=end]{grid-area:1/3}#end{grid-area:2/3}#apply{grid-area:2/4}#dashboard>.filters #exclude{grid-column:1/-1;justify-self:start;margin-top:8px}#logout{background:transparent;color:var(--muted);border-color:var(--line)}
@media(max-width:600px){#dashboard{grid-template-columns:minmax(0,1fr)}#dashboard>.filters{grid-template-columns:repeat(2,minmax(0,1fr))}label[for=range]{grid-area:1/1}#range{grid-area:2/1/3/3}label[for=start]{grid-area:3/1}#start{grid-area:4/1}label[for=end]{grid-area:3/2}#end{grid-area:4/2}#apply{grid-area:5/1/6/3}#dashboard>.filters #exclude{grid-area:6/1/7/3}}
@media(min-width:1500px){main,#dashboard{padding-top:64px}}
@media(max-width:800px){main,#dashboard{width:calc(100% - 40px);padding-top:30px}.stat-card{padding:19px}.grid,.dashboard-grid,.charts-grid,.two-column,.two-col,.split{gap:16px}section,.panel,.card{padding:20px}.timeline-chart{min-height:170px}#summary{gap:12px}.filters,.toolbar,.controls{padding:16px}}
@media(max-width:600px){main,#dashboard{width:calc(100% - 28px);padding-top:24px;padding-bottom:36px}header{gap:16px;margin-bottom:25px}#summary{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.stat-card{padding:18px;gap:12px}.stat-value{font-size:32px}.grid,.dashboard-grid,.charts-grid,.two-column,.two-col,.split{grid-template-columns:minmax(0,1fr);gap:16px}section,.panel,.card{padding:18px;margin-bottom:16px}h2{margin-bottom:20px}.filters,.toolbar,.controls{gap:12px}.filters>label,.toolbar>label,.controls>label{flex:1 1 120px}input[type=date]{min-width:0;width:100%}#range{width:100%}.timeline-chart{min-height:150px}.chart-axis{font-size:13px}.song-table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.song-table,.song-table tbody,.song-table caption{display:block}.song-table tr{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 8px;padding:18px 0;border-bottom:1px solid var(--line)}.song-table tr:last-child{border-bottom:0}.song-table th,.song-table td{display:block;border:0;padding:0;width:auto;text-align:left}.song-table th{grid-column:1/-1;margin-bottom:2px}.song-table td:before{content:attr(data-label);display:block;font-size:10px;color:var(--muted);margin-bottom:3px}.song-table td{font-size:14px}.bar-label{gap:12px}#exclude{width:100%;text-align:center}footer{align-items:stretch}.login,.login-card,main:has(>form input[type=password]){padding:24px;width:calc(100% - 32px)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
