@font-face{font-family:system;src:local("Inter"),local("Segoe UI")}*{box-sizing:border-box}html{color-scheme:dark;font-size:16px}body{margin:0;background:var(--t-surf-0,#0f0b1b);color:var(--t-text-0,#edeaf6);font-family:system,system-ui,-apple-system,sans-serif;line-height:1.5}button,input,select{font:inherit}button,a,input,select,summary{ -webkit-tap-highlight-color:transparent}button,a,summary{touch-action:manipulation}a{color:var(--t-acc-1,#8bd3ee);text-decoration:none}a:hover{text-decoration:underline}button{cursor:pointer;border:1px solid var(--t-line-1,#3b3158);background:var(--t-surf-3,#241d3b);color:var(--t-text-0,#f0f3fa);border-radius:7px;padding:10px 15px;font-size:.875rem;font-weight:600;min-height:42px}button:hover{background:var(--t-line-1,#362b55)}button:disabled{opacity:.5;cursor:wait}.primary{background:var(--t-acc-1,#6fcbec);color:var(--t-surf-1,#072732);border-color:var(--t-acc-1,#6fcbec)}.primary:hover{background:var(--t-acc-1,#a4e3fa)}.quiet{background:transparent;color:var(--t-text-1,#bdb4d9)}.icon-button{font-size:1.6rem;padding:2px 13px}input,select{border:1px solid var(--t-line-1,#3a3056);background:var(--t-surf-2,#1a132e);color:var(--t-text-0,#eef1fa);border-radius:6px;padding:10px 12px;min-width:0;min-height:42px;width:100%}input:focus,select:focus{border-color:var(--t-acc-1,#83d1ed);outline:2px solid color-mix(in srgb,var(--t-acc-1,#6fcbec) 18.8%,transparent);outline-offset:1px}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--t-acc-1,#7bcfee);outline-offset:3px}input[type=checkbox]{width:18px;min-height:18px;accent-color:var(--t-acc-1,#6fcbec)}label{font-size:.875rem;color:var(--t-text-2,#b3a9d1);display:block}label>span{display:block;margin-bottom:6px}h1,h2,h3,p{margin-top:0}h1{font-size:2rem;letter-spacing:-.04em;line-height:1.2;margin-bottom:0}h2{font-size:1.55rem;letter-spacing:-.03em;margin-bottom:0}h3{font-size:1.1rem;margin-bottom:7px}p{color:var(--t-text-2,#ada2cd);font-size:.9375rem}small{font-size:.75rem;color:var(--t-text-2,#998dbb)}details summary{cursor:pointer;color:var(--t-text-1,#b6abd5);font-size:.875rem;padding:12px 0}dialog{color:inherit;background:var(--t-surf-1,#18122b);border:1px solid var(--t-line-1,#3f355e);border-radius:14px;padding:26px;max-height:90vh;max-width:calc(100vw - 28px);width:670px}dialog::backdrop{background:color-mix(in srgb,var(--t-surf-0,#050712) 80%,transparent);backdrop-filter:blur(5px)}[hidden]{display:none!important}.topbar{height:92px;padding:0 max(30px,calc((100vw - 1500px)/2));display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--t-surf-3,#2b2342);background:var(--t-surf-1,#140f22);gap:20px}.brand{color:var(--t-text-0,#f7f8ff);display:flex;align-items:center;gap:13px;font-size:1.25rem;font-weight:800;line-height:1.2;letter-spacing:-.04em}.brand:hover{text-decoration:none}.brand-light{font-weight:400;letter-spacing:.05em;color:var(--t-text-1,#cbc2e4)}.brand small{display:block;font-size:.625rem;letter-spacing:.18em;margin-top:7px;color:var(--t-text-3,#8578aa);font-weight:500}.header-actions{display:flex;align-items:center;gap:22px}.player-tag{font-size:.875rem;color:var(--t-text-1,#b6abd5)}.shell{max-width:1500px;margin:auto;padding:0 30px 20px}nav{display:flex;gap:28px;overflow:auto;border-bottom:1px solid var(--t-surf-3,#2e2646);white-space:nowrap}nav a{font-size:.875rem;color:var(--t-text-2,#998cbf);padding:20px 0 17px;border-bottom:3px solid transparent;text-decoration:none}nav a.active{color:var(--t-acc-1,#8ad6f1);border-color:var(--t-acc-1,#6fcbec)}nav a:hover{color:var(--t-text-0,#e7edf8);text-decoration:none}.page-heading{display:flex;align-items:end;justify-content:space-between;padding:34px 0 24px;gap:16px}.eyebrow{display:block;font-size:.75rem;letter-spacing:.14em;font-weight:650;color:var(--t-text-2,#9284bd);margin-bottom:8px}.stats{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--t-surf-3,#2f2749);background:var(--t-surf-1,#18112b);border-radius:10px;overflow:hidden;margin-bottom:24px}.stat{padding:20px 25px;position:relative}.stat+.stat{border-left:1px solid var(--t-surf-3,#2f2749)}.stat-label{font-size:.8125rem;color:var(--t-text-2,#a396c9);display:block;margin-bottom:8px}.stat-value{font-size:1.9rem;line-height:1.2;font-weight:650;letter-spacing:-.04em;font-variant-numeric:tabular-nums}.stat-value.accent{color:var(--t-acc-1,#7ecfec)}.stat-value.pink{color:var(--t-acc-2,#f295b4)}.stat-detail{font-size:.75rem;color:var(--t-text-2,#8f83b5);margin-top:6px}.workspace{border:1px solid var(--t-surf-3,#2f2749);border-radius:10px;background:var(--t-surf-1,#161027);overflow:hidden}.filters{padding:21px 22px;display:grid;grid-template-columns:minmax(200px,2.4fr) 100px 100px 130px 150px auto;gap:15px;align-items:end}.filters .quiet{margin-bottom:0}.advanced{border-top:1px solid var(--t-surf-3,#2a2143);padding:0 22px}.filter-extra{display:flex;flex-wrap:wrap;align-items:end;gap:18px;padding:0 0 18px}.filter-extra label{max-width:170px}.checkbox{display:flex;gap:10px;align-items:center;min-height:42px}.view-toolbar{padding:17px 22px;border-top:1px solid var(--t-surf-3,#2e2548);display:flex;align-items:center;justify-content:space-between;gap:12px}.view-toolbar p{margin:0;font-size:.875rem}.count-label{font-size:.8125rem;color:var(--t-text-2,#9b8ec2)}.table-scroll{overflow:auto}.score-table{width:100%;border-collapse:collapse;white-space:nowrap;font-size:.875rem}th{font-size:.75rem;font-weight:550;color:var(--t-text-2,#9c8ec5);text-align:left;background:var(--t-surf-2,#1b142f);letter-spacing:.02em;padding:13px 15px;border-bottom:1px solid var(--t-surf-3,#332a4e);white-space:nowrap}td{padding:15px;border-bottom:1px solid var(--t-surf-3,#292142);font-variant-numeric:tabular-nums}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:var(--t-surf-2,#201739)}.score-table th button{font:inherit;min-height:24px;padding:0;border:0;background:transparent;color:inherit;white-space:nowrap}.song-button{text-align:left;color:var(--t-text-0,#e5eaf7);min-height:24px;padding:0;font-weight:550;border:0;background:transparent;max-width:260px;white-space:normal;line-height:1.4;font-size:.875rem}.song-button:hover{background:transparent;color:var(--t-acc-1,#9adbf3)}.song-sub{display:block;font-size:.75rem;color:var(--t-text-3,#8375ac);margin-top:3px}.number{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.875rem;letter-spacing:-.025em}.score-number{font-weight:600;color:var(--t-text-0,#e9eef9)}.rating{color:var(--t-text-2,#afa1d8)}.badge{display:inline-block;font-size:.6875rem;font-weight:650;border:1px solid #4c3e77;border-radius:4px;padding:2px 5px;line-height:1.45;letter-spacing:.03em;color:#c1cbed;background:#2d224f}.grade{font-weight:700;font-size:.8125rem;color:var(--t-text-1,#c0b5e1)}.grade-high{color:var(--t-acc-1,#7fd0ed)}.source-chips{display:flex;gap:4px}.source-chip{font-size:.625rem;letter-spacing:.05em;padding:2px 5px;border:1px solid var(--t-line-1,#3d2f65);color:var(--t-text-2,#ac9dd7);border-radius:4px}.source-chip.csv{color:var(--t-acc-2,#efb3c7);border-color:var(--t-line-2,#65425d)}.lamp{white-space:nowrap}.date-cell{font-size:.75rem;color:var(--t-text-1,#b7acd6)}.date-cell small{display:block;color:var(--t-text-3,#8477ac);font-size:.625rem}.empty{padding:70px 25px;text-align:center;color:var(--t-text-2,#ac9fd3)}.empty h3{color:var(--t-text-0,#e6edf8)}.pager{display:flex;gap:14px;align-items:center;justify-content:end;padding:16px 22px;border-top:1px solid var(--t-surf-3,#30274a)}.pager span{font-size:.8125rem;color:var(--t-text-2,#a194c8)}footer{display:flex;justify-content:space-between;gap:15px;color:var(--t-text-3,#8071ac);font-size:.75rem;padding:18px 2px;flex-wrap:wrap}footer a{color:var(--t-text-2,#9c8ec5)}.dialog-heading{display:flex;align-items:start;justify-content:space-between;gap:20px;margin-bottom:18px}.import-method{display:flex;gap:20px;border-top:1px solid var(--t-surf-3,#342c4e);padding:24px 0}.method-number{color:var(--t-text-3,#7060a1);font:1rem ui-monospace,monospace}.import-method button{margin:5px 5px 0 0}.file-button{position:relative;display:inline-block;background:var(--t-surf-3,#2d224e);border:1px solid var(--t-line-2,#53457d);color:var(--t-text-0,#e7e3f3);padding:10px 16px;border-radius:6px;cursor:pointer;font-weight:550}.file-button input{display:block;position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.file-button:focus-within{outline:2px solid var(--t-acc-1,#6fcbec)}.import-advanced{padding:5px 0 10px}.import-advanced input{max-width:300px;margin:6px 0 18px;display:block}.dialog-foot{border-top:1px solid var(--t-surf-3,#342c4e);padding-top:16px;display:flex;align-items:center;justify-content:space-between;gap:20px;font-size:.8125rem}.notice{margin-top:18px;line-height:1.6;font-size:.875rem;white-space:pre-line}.error{color:#ff9fba}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--t-surf-3,#322752);border:1px solid var(--t-text-3,#7363a4);padding:13px 20px;border-radius:8px;font-size:.875rem;box-shadow:0 8px 40px #0007;z-index:10;max-width:90vw}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:420px;max-width:100%;padding:38px;border:1px solid var(--t-line-1,#372d55);border-radius:14px;background:var(--t-surf-1,#18122b)}.login-card img{margin-bottom:23px}.login-card h1{margin-bottom:16px}.login-card input{margin:7px 0 18px}.login-card .primary{width:100%}.login-card .error{margin:15px 0 0}.section-pad{padding:22px}.section-pad h3{font-size:1rem}.segmented{display:flex;gap:5px}.segmented button{min-height:34px;padding:6px 12px}.segmented .selected{color:var(--t-acc-1,#86d3ef);border-color:var(--t-text-3,#68acc4);background:var(--t-surf-2,#162d35)}.heat-table td,.heat-table th{text-align:center}.heat-table th:first-child,.heat-table td:first-child{text-align:left}.heat-table td.heat{font-weight:550;border:3px solid var(--t-surf-1,#161027);background:var(--t-surf-3,#23373f);color:var(--t-acc-1,#c6e5f0);min-width:78px}.legend{display:flex;gap:20px;color:var(--t-text-2,#998ac4);font-size:.8125rem;flex-wrap:wrap;margin-bottom:17px}.legend span{display:flex;align-items:center;gap:8px}.swatch{display:inline-block;width:13px;height:13px;border-radius:3px}.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.chart-card{background:var(--t-surf-2,#1a1330);border:1px solid var(--t-line-1,#362b55);border-radius:8px;padding:20px;min-width:0}.chart-card svg{width:100%;height:auto;display:block}.chart-card svg text{font-family:system-ui,sans-serif;font-size:12px;fill:var(--t-text-2,#a99cce)}.chart-card h3{margin-bottom:6px}.chart-card p{font-size:.8125rem}.bar-list{margin-top:22px}.bar-row{display:grid;grid-template-columns:70px 1fr 100px;gap:14px;align-items:center;padding:10px 0;font-size:.8125rem}.bar-track{height:10px;background:var(--t-surf-3,#2c214e);border-radius:2px;overflow:hidden}.bar-fill{height:100%;background:var(--t-acc-1,#7bc9e6);min-width:2px}.history-dialog{width:980px}.history-note{font-size:.8125rem;line-height:1.7;background:var(--t-surf-2,#22193d);padding:14px;border-radius:6px}.mobile-list{display:none}.import-summary{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:22px}.import-summary .badge{font-size:.8125rem;padding:9px 13px}.rival-controls{display:flex;align-items:end;flex-wrap:wrap;gap:14px}.rival-controls input,.rival-controls select{width:200px}.run-issues{white-space:normal;max-width:460px;font-size:.8125rem;color:#e8b3c3}.run-issues details summary{color:#e8b3c3}.run-issues ul{padding-left:20px}.table-selection{width:40px}.subtitle{color:var(--t-text-2,#9a8dc3);font-size:.8125rem;line-height:1.7;margin-bottom:20px}
@media(min-width:1300px){td{padding:17px 16px}.song-button{max-width:300px}}@media(max-width:1100px){.filters{grid-template-columns:minmax(180px,2fr) 90px 90px 120px 135px}.filters>button{grid-column:5}.stat{padding:18px}.stat-value{font-size:1.6rem}.shell{padding:0 20px 20px}.topbar{padding:0 20px}.chart-grid{grid-template-columns:1fr}}@media(max-width:700px){.topbar{height:77px;padding:0 16px;gap:10px}.brand{font-size:1rem;gap:9px}.brand img{width:30px;height:30px}.brand small{font-size:.5rem;letter-spacing:.13em}.header-actions{gap:9px}.player-tag{display:none}.header-actions button{font-size:.8125rem;padding:9px 12px}.shell{padding:0 14px 20px}nav{gap:24px;margin:0 -14px;padding:0 16px}nav a{padding-top:16px;font-size:.8125rem}.page-heading{padding:26px 2px 18px;align-items:center}h1{font-size:1.65rem}.page-heading>button{font-size:.75rem;padding:8px;min-height:36px}.eyebrow{font-size:.625rem}.stats{grid-template-columns:1fr 1fr;margin-bottom:18px}.stat{padding:15px 17px}.stat:nth-child(3){border-left:0;border-top:1px solid var(--t-surf-3,#2f2749)}.stat:nth-child(4){border-top:1px solid var(--t-surf-3,#2f2749)}.stat-label{font-size:.75rem;margin-bottom:6px}.stat-value{font-size:1.5rem}.stat-detail{font-size:.6875rem}.filters{padding:16px;grid-template-columns:1fr 1fr;gap:12px}.search-label{grid-column:1/-1}.filters label{font-size:.75rem}.filters>button{grid-column:auto}.advanced{padding:0 16px}.filter-extra{gap:12px}.filter-extra label{max-width:calc(50% - 6px);width:100%}.filter-extra .checkbox{width:100%;max-width:100%;font-size:.8125rem}.view-toolbar{padding:14px 16px;flex-wrap:wrap}.view-toolbar p{font-size:.8125rem}.desktop-scores{display:none}.mobile-list{display:block}.mobile-card{padding:17px 16px;border-top:1px solid var(--t-surf-3,#30274a)}.mobile-card:first-child{border-top:0}.mobile-card-top{display:flex;gap:10px;align-items:start;justify-content:space-between}.mobile-card .song-button{font-size:.9375rem;max-width:none}.mobile-score{text-align:right;white-space:nowrap}.mobile-score .score-number{font-size:1rem;display:block}.mobile-card-bottom{display:flex;justify-content:space-between;align-items:end;margin-top:12px;gap:15px}.mobile-meta{display:flex;gap:8px;align-items:center;margin-top:6px}.pager{justify-content:center;padding:14px 9px;gap:12px}.section-pad{padding:16px}.chart-card{padding:16px}.bar-row{grid-template-columns:55px 1fr 82px;gap:10px}.dialog-heading{margin-bottom:12px}dialog{padding:20px}.import-method{gap:14px;padding:20px 0}.method-number{font-size:.875rem}.dialog-foot{font-size:.75rem}.history-dialog .table-scroll{margin:0 -10px}.heat-table td,.heat-table th{padding:13px 11px}.legend{gap:12px;font-size:.75rem}.rival-controls label{width:100%}.rival-controls input,.rival-controls select{width:100%}.login-card{padding:28px}footer{font-size:.6875rem}.table-scroll td{padding:13px}.table-scroll th{padding:11px}.source-chip{font-size:.6875rem}.date-cell small{font-size:.6875rem}}@media(prefers-reduced-motion:no-preference){button,a,input,select{transition:background .15s,border-color .15s,color .15s}}@media print{nav,.header-actions,.filters,.advanced,.pager,footer,.page-heading>button{display:none}body{background:white;color:black}.workspace,.stats,.chart-card{background:white;border-color:var(--t-text-1,#cccccc)}td,th{color:black;background:white}.desktop-scores{display:block}.mobile-list{display:none}}
.danger{color:#ffe8ef;background:#6f263c;border-color:#b75874}.danger:hover{background:#91334d}.import-search{display:flex;align-items:end;flex-wrap:wrap;gap:12px}.import-search label{flex:1;min-width:180px}.run-detail{padding:22px}.run-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:20px 0}.run-summary div{padding:12px;border:1px solid var(--t-line-1,#3c315f);border-radius:6px}.run-summary strong{display:block}.run-issues td{white-space:normal;min-width:160px}#database-dialog label{margin-bottom:16px}#database-dialog button{margin-bottom:12px}#reset-preview{padding:12px;background:var(--t-surf-3,#251c3e);border-radius:6px}#reset-preview:empty{display:none}.metric-kind{display:block;font-size:.625rem;color:var(--t-text-2,#998ac5)}.run-status{white-space:normal}.run-toolbar{display:flex;gap:16px;flex-wrap:wrap;align-items:center}
.distribution-tabs{display:flex;flex-wrap:wrap;gap:6px;margin:14px 0}.distribution-tabs button{min-height:32px;padding:6px 10px;font-size:.75rem;white-space:nowrap}.distribution-tabs .selected{color:var(--t-acc-1,#86d3ef);border-color:var(--t-text-3,#68acc4);background:var(--t-surf-2,#162d35)}.distribution-summary{margin:10px 0}.histogram-scroll{overflow-x:auto;max-width:100%;padding-bottom:8px}.histogram-frame{width:100%;padding:0 16px}.histogram-scroll svg{max-width:none;min-width:0}
.distribution-tabs button:focus-visible,.histogram-scroll:focus-visible,[role="tabpanel"]:focus-visible{outline:2px solid var(--t-acc-1,#7ecbe7);outline-offset:3px}
.chart-grouping{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:14px 0;color:var(--t-text-2,#b3a9d1);font-size:.8125rem}.chart-grouping .segmented{flex-wrap:wrap}.cutoff-grouping{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;min-width:0}.cutoff-grouping>span{margin:0;font-weight:600;color:var(--t-text-0,#d6cfec)}.cutoff-grouping>select{width:auto;min-width:220px;max-width:100%}
.cutoff-average-heading{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}.cutoff-average-heading>h3{margin:0}.cutoff-average-heading+.subtitle{margin:8px 0 0}
.heat-table td.heat .heat-detail{color:var(--t-text-0,#d9d2ed)}.heat-table td.heat-unknown{background:var(--t-surf-2,#201739);color:var(--t-text-2,#ada2cd)}
/* Let rotated labels use the frame gutters without clipping at the SVG viewport. */
.histogram-frame>svg{overflow:visible}
/* Use the wide viewport with modest desktop padding; narrow-screen rules above retain their mobile sizing. */
@media screen and (min-width:1101px){
 .shell{width:100%;max-width:none;padding:0 32px 24px}.topbar{height:80px;padding:0 32px}
 nav a{padding:18px 0 16px}.page-heading{padding:28px 0 22px}.stats{margin-bottom:24px}.stat{padding:20px 24px}
 .filters{padding:20px 24px;gap:16px}.advanced{padding:0 24px}.view-toolbar{padding:16px 24px}
 .section-pad{padding:20px}.chart-grid{gap:20px}.chart-card{padding:20px}.bar-list{margin-top:22px}.bar-row{padding:10px 0}
 .score-table th,.score-table td{padding:14px 16px}.pager{padding:16px 24px}footer{padding:20px 2px}
 .distribution-tabs{gap:6px;margin:12px 0}.distribution-tabs button{padding:6px 10px;min-height:32px}
}
/* Keep other canonical difficulty text white with their existing category colors. */
.badge.NOV,.badge.ADV{color:#ffffff}
/* Lamp and difficulty badges share their shape, palette and white-text contrast. */
.badge.lamp{--difficulty-accent:#91a3bc;--difficulty-fill:#27314a}
.badge.MXM,.badge.EXH,.badge.GRV,.badge.VVD,.badge.HVN,.badge.XCD,.badge.NBL,.badge.ULT,.badge.INF,.badge.lamp{color:#ffffff;background:var(--difficulty-fill);border-color:var(--difficulty-accent);box-shadow:inset 3px 0 var(--difficulty-accent);padding-left:9px}
.badge.MXM,.lamp.mxv{--difficulty-accent:#ffffff;--difficulty-fill:#303744}
.badge.EXH,.lamp.failed,.lamp.played{--difficulty-accent:#ff4444;--difficulty-fill:#462020}
.badge.GRV{--difficulty-accent:#ffa500;--difficulty-fill:#4a2b0a}
.badge.VVD,.lamp.uc{--difficulty-accent:#ff69b4;--difficulty-fill:#4b1f3c}
.badge.HVN{--difficulty-accent:#00ffff;--difficulty-fill:#123b3f}
.badge.XCD{--difficulty-accent:#3388ff;--difficulty-fill:#183557}
.badge.NBL{--difficulty-accent:#7fff00;--difficulty-fill:#2d3b12}
.badge.ULT,.lamp.puc{--difficulty-accent:#ffff00;--difficulty-fill:#423b10}
.badge.INF{--difficulty-accent:#c0c0c0;--difficulty-fill:#30343b}
.lamp.excessive{--difficulty-accent:#bd7bff;--difficulty-fill:#34204d}
.lamp.clear{--difficulty-accent:#4de483;--difficulty-fill:#153c24}
.chart-title{display:inline-flex;align-items:center;gap:8px;min-width:0;max-width:100%;white-space:normal}
.chart-title>.badge{flex-shrink:0;white-space:nowrap}
.chart-title>.song-button{min-width:0;overflow-wrap:anywhere}
.mobile-card-top>div:first-child{min-width:0}
.mobile-chart{display:flex;align-items:flex-start;gap:8px}
.mobile-chart>.rating{flex-shrink:0;padding-top:2px}
.mobile-chart .chart-title{flex:1;min-width:0}
/* Expand the date picker within the workspace so its clipping boundary cannot hide calendar rows. */
.raises-date-controls{display:flex;align-items:flex-start;flex-wrap:wrap;gap:10px;max-width:100%}.raises-toolbar{align-items:flex-start;flex-wrap:wrap}.raises-date-picker{min-width:0;max-width:100%}.raises-date-picker>summary{border:1px solid var(--t-line-1,#3b3158);border-radius:7px;padding:10px 14px;color:var(--t-text-0,#edeaf6);background:var(--t-surf-3,#241d3b);min-height:42px}.raises-calendar{width:320px;max-width:100%;margin-top:8px;padding:14px;border:1px solid var(--t-line-2,#4c3e77);border-radius:8px;background:var(--t-surf-2,#1b142f);box-shadow:0 10px 35px #0008}.raises-month{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}.raises-month button{padding:4px 12px}.raises-days{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.raises-days .weekday{text-align:center;font-size:.6875rem;color:var(--t-text-2,#a498c8)}.raises-days button{padding:4px 0;min-height:42px;font-size:.8125rem;background:var(--t-surf-2,#17323c);border-color:var(--t-line-2,#336b7f);color:#fff}.raises-days button small{display:block;color:var(--t-acc-1,#a9e4f9);font-size:.625rem;line-height:1.1}.raises-days button:disabled{background:var(--t-surf-2,#1b142f);border-color:transparent;opacity:.45;cursor:default}.raises-days button.selected{outline:2px solid var(--t-acc-1,#81d3f0);outline-offset:0}.raises-calendar p{font-size:.75rem;margin:12px 0 0}.raise-unchanged{color:var(--t-text-3,#74679c)}.raises-table .song-sub{font-size:.6875rem}
@media(max-width:700px){.raises-date-controls{width:100%}.raises-table .song-button{max-width:180px}}
/* Keep the top fifty contributions in compact ranked halves without changing other table spacing. */
.volforce-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}.volforce-grid>.volforce-table{min-width:0}.volforce-grid>.volforce-table:only-child{grid-column:1/-1}
/* Score rows keep moderate breathing room above the compact Volforce spacing. */
.desktop-scores .score-table td{padding-top:8px;padding-bottom:8px}
.desktop-scores .score-table th{padding-top:9px;padding-bottom:9px}
.volforce-table .score-table td{padding:3px 8px;line-height:1.2}.volforce-table .score-table th{padding:4px 8px;line-height:1.2}.volforce-table .song-button{min-height:0;max-width:220px;line-height:1.2}.volforce-table .song-sub{display:inline-block;margin:0 0 0 6px;vertical-align:middle}.volforce-table .chart-title{vertical-align:middle;gap:6px}.volforce-table .badge{padding-top:1px;padding-bottom:1px;line-height:1.3}.volforce-table .date-cell small{line-height:1.15}
/* Keep lamp badges equally sized and centered across standard and compact tables. */
.badge.lamp{display:inline-flex;align-items:center;justify-content:center;width:4rem;height:1.5rem;padding:0 4px;line-height:1;text-align:center;vertical-align:middle;flex-shrink:0}
/* Jackets add height only while rendered; hiding them restores each table's original spacing. */
.song-jacket{display:inline-block;width:var(--jacket-size,48px);height:var(--jacket-size,48px);object-fit:cover;border-radius:4px;flex-shrink:0;vertical-align:middle}
.view-actions{display:flex;align-items:center;justify-content:end;gap:16px;flex-wrap:wrap}
.song-entry{display:flex;align-items:center;gap:10px;width:100%;min-width:0}.song-label{min-width:0}.playing-button{margin-left:auto;flex-shrink:0;min-height:28px;padding:4px 7px;font-size:.6875rem;white-space:nowrap}
.playing-dialog{width:560px}.playing-jacket{text-align:center;margin:12px 0}.playing-jacket .song-jacket{width:min(64vw,240px);height:min(64vw,240px);border-radius:8px}.playing-chart{text-align:center}.playing-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:12px 0 22px}.playing-stats>div{padding:10px 12px;background:var(--t-surf-2,#211938);border-radius:6px}.playing-stats dt{color:var(--t-text-2,#b3a9d1);font-size:.75rem}.playing-stats dd{margin:2px 0 0;font-size:1.1rem;font-variant-numeric:tabular-nums}.camera-button{display:block;text-align:center}.capture-preview{display:block;max-width:100%;max-height:300px;margin:16px auto;object-fit:contain;border-radius:6px}
@media(max-width:700px){.playing-dialog{position:fixed;inset:0;margin:0;width:100%;height:100dvh;max-width:none;max-height:none;border:0;border-radius:0;padding:16px;overflow:auto}.playing-button{min-height:36px}.mobile-chart>.song-entry{width:100%}}
@media(max-width:700px){.view-actions{gap:8px}.view-actions button{font-size:.75rem;padding:8px;min-height:36px}}
@media print{.view-actions{display:none}}
@media(max-width:1100px){.volforce-grid{grid-template-columns:minmax(0,1fr);gap:12px}.volforce-table .song-button{max-width:300px}}
.capture-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:16px 0}
.capture-fields input,.capture-fields select{width:100%;min-width:0}
.capture-preview[hidden],#capture-review[hidden]{display:none}
.camera-panel[hidden]{display:none}.camera-stage{position:relative;overflow:hidden;border-radius:6px;background:#000;width:min(100%,calc(65vh * var(--camera-ratio,.75)));margin-inline:auto;aspect-ratio:3/4}
.camera-stage video{display:block;width:100%;height:100%;object-fit:contain}
.camera-frame{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:94%;aspect-ratio:1.25;border:2px dashed var(--t-acc-1,#7ecfec);border-right-color:var(--t-acc-2,#f295b4);border-bottom-color:var(--t-acc-2,#f295b4);border-radius:5px;box-shadow:0 0 0 600px #0002;pointer-events:none}
.camera-field{position:absolute;border:1px solid var(--t-acc-1,#7ecfec);border-right-color:var(--t-acc-2,#f295b4);box-sizing:border-box}.camera-field>span{position:absolute;bottom:100%;left:0;white-space:nowrap;font-size:10px;line-height:1.2;background:color-mix(in srgb,var(--t-surf-1,#140f23) 80%,transparent);color:#fff;padding:1px 3px}.camera-layout-label{display:flex;align-items:center;gap:6px;margin-bottom:6px}.camera-layout-label select{flex:1}
.camera-actions{display:flex;justify-content:center;gap:10px;margin:8px 0}.camera-panel small{display:block;text-align:center;margin-bottom:8px}
#camera-open{width:100%;margin:8px 0}#camera-guide-help{font-size:.85rem;line-height:1.4;margin:8px 0}
.rating-below-count{fill:var(--t-text-2,#9a8dc3);font-size:11px}
#capture-pending button{margin:0 6px 6px 0}
.raise-photo{padding:3px;line-height:0}
.raise-photo img{object-fit:cover;border-radius:4px}
.raise-photo span{display:block;line-height:1.2;font-size:.65rem;margin-top:3px}
.pb-judgment-control{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:6px 12px;margin:12px 0}.pb-judgment-control select{margin-left:8px}.pb-judgment-control>label{display:flex;align-items:center;white-space:nowrap}.pb-judgment-control .checkbox{gap:6px}
/* Show the whole sharp original in normal flow so neither stats nor controls cover its result fields. */
.playing-result{margin-bottom:20px}
.playing-photo{margin:0}
.playing-result-photo{display:block;width:100%;height:auto;object-fit:contain}
.playing-result .playing-stats{position:relative;margin:0;padding:12px}
.playing-stats .focused-pb{outline:1px solid var(--t-text-2,#9684cd);outline-offset:-1px}
.playing-photo-caption{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:5px}
.playing-photo-caption small{color:var(--t-text-0,#edf3ff);line-height:1.25}.playing-photo-open{flex-shrink:0}
.scatter-controls{display:flex;flex-wrap:wrap;gap:5px 10px;margin:6px 0}.scatter-controls .segmented{margin:0}.scatter-controls button{padding:5px 8px;min-height:32px}.scatter-scroll{overflow-x:auto}.scatter-scroll svg{display:block}.raise-arrow{pointer-events:none}
.comparison-scale-note{margin:4px 10px 8px;font-size:.75rem;color:var(--t-text-2,#a296c5)}
.score-photo-links{display:inline-flex;align-items:center;gap:10px;flex-shrink:0;white-space:nowrap;vertical-align:middle}.photo-link{border:0;background:none;padding:0;min-height:24px;color:var(--t-acc-1,#86d3ef);font-size:.75rem;line-height:1.5;text-decoration:underline;text-underline-offset:2px}
/* Match the game's laser accents for source badges and independent Score/EX best values. */
.source-eamuse{color:var(--t-acc-2,#f295b4)}.source-api{color:var(--t-acc-1,#7ecfec)}
.source-chip.source-eamuse{color:var(--t-acc-2,#f295b4);border-color:var(--t-line-2,#85516f)}.source-chip.source-api{color:var(--t-acc-1,#7ecfec);border-color:var(--t-line-2,#336b7f)}
@media(max-width:700px){.mobile-chart .score-photo-links{margin-right:10px}.song-entry .score-photo-links{margin-top:6px}}
.score-photo-dialog{width:min(95vw,1000px)}
.score-photo-dialog>img{display:block;max-width:100%;max-height:80dvh;margin:auto;object-fit:contain}
/* Keep whole levels and their decimal folders visible without a menu-opening step. */
.filters{grid-template-columns:minmax(200px,2.4fr) 130px 150px auto}
.filters>button{grid-column:auto}
.rating-folders{grid-column:1/-1;min-width:0;margin:0;padding:0;border:0}
.rating-folders legend{padding:0;margin-bottom:8px;font-size:.75rem;color:var(--t-text-2,#aea3cf)}
.rating-folder-groups{display:flex;align-items:flex-start;flex-wrap:wrap;gap:8px 14px}
.rating-folder-row,.rating-folder-children{display:flex;align-items:center;flex-wrap:wrap;gap:5px}
.rating-folder-row{max-width:100%}
.rating-folder-children{padding-left:6px;border-left:1px solid var(--t-line-1,#3f3461);flex:1;min-width:0}
.rating-folder-groups button{min-height:34px;min-width:44px;padding:5px 9px;font-size:.8125rem;white-space:nowrap}
/* Signed score and EX comparisons share a zero center; each table scales the two metrics separately. */
.delta-cell{min-width:116px}
.delta-meter{display:flex;flex-direction:column;gap:2px;min-width:92px;margin:2px 0;text-align:center}
.delta-label{line-height:1.25}
.delta-track{position:relative;display:block;height:4px;width:100%;background:var(--t-surf-3,#2d244a);border-radius:2px;overflow:hidden}
.delta-fill{position:absolute;height:100%;background:var(--t-text-3,#887cac)}
.delta-zero{position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--t-text-0,#e3def2)}
.delta-meter.positive .delta-label{color:#6ee1a6}
.delta-meter.positive .delta-fill{background:#6ee1a6}
.delta-meter.negative .delta-label{color:#f17c88}
.delta-meter.negative .delta-fill{background:#f17c88}
.pager-top{border-top:0;border-bottom:1px solid var(--t-surf-3,#30274a)}
/* Keep raise values and deltas within two short lines so jackets determine the expanded row height. */
.raises-table .score-table td{padding-top:6px;padding-bottom:6px;line-height:1.2}
.raises-table .raise-detail{margin-top:2px;line-height:1.2}
.lamp-transition{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.raises-table .delta-meter{position:relative;display:block;height:18px;min-width:84px;margin:0;padding-bottom:4px}
.raises-table .delta-label{display:block;font-size:.6875rem;line-height:14px}
.raises-table .delta-track{position:absolute;bottom:0;left:0;height:3px}
.raises-table .song-button{min-height:0;line-height:1.2}
.raises-table .raise-photo{display:inline-flex;align-items:center;gap:4px;padding:2px 3px;min-height:28px;line-height:1.2}
.raises-table .raise-photo span{display:inline;margin:0}
.pending-photo-notice{border-block:1px solid var(--t-line-2,#483b70);background:var(--t-surf-2,#22193d)}
.pending-photo-notice p{font-size:.8125rem;margin:6px 0 10px}
.pending-photo-notice>div{display:flex;gap:8px;flex-wrap:wrap}
.photo-inbox-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 0;border-bottom:1px solid var(--t-line-1,#3b305e)}
.photo-inbox-row>a,.photo-inbox-row>span{flex:1;min-width:150px;overflow-wrap:anywhere}
.photo-inbox-row label{flex:2;min-width:190px}
.run-summary button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:10px;background:var(--t-surf-2,#22193d);border:1px solid var(--t-line-1,#3b305e)}
.run-summary button[aria-pressed="true"]{border-color:#6ee1a6;background:var(--t-surf-2,#172f38)}
.raises-sort-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.rating-folder-groups .rating-folder-level{font-weight:700;background:var(--t-surf-3,#2b1f4d)}
.rating-folder-groups .selected{color:var(--t-acc-1,#86d3ef);border-color:var(--t-text-3,#68acc4);background:var(--t-surf-2,#162d35)}
.rating-folder-groups button:focus-visible{outline:2px solid var(--t-acc-1,#7ecbe7);outline-offset:3px}
@media(max-width:700px){.filters{grid-template-columns:1fr 1fr}.rating-folder-groups{gap:8px}.rating-folder-row{flex-basis:100%}.rating-folder-groups button{min-height:40px}}
/* Show the stored player's viewing context above the app without taking over its main header. */
.view-as-banner{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:12px;padding:6px 16px;background:var(--t-surf-2,#162d35);border-bottom:1px solid var(--t-line-2,#336578);font-size:.8125rem;color:var(--t-text-0,#c2e7f5)}.view-as-banner button{padding:3px 10px;min-height:28px;font-size:.75rem;color:var(--t-text-0,#b8ecff)}
/* Give phone titles a full row; the score and Playing now action cannot shrink them between fixed-width controls. */
@media(max-width:700px){
 nav{margin-inline:-10px}
 .mobile-card-top{display:block}
 .mobile-card-top>div:first-child{width:100%}
 .mobile-chart{display:block}
 .mobile-chart>.rating{display:inline-block;padding-top:0;margin-bottom:6px}
 .mobile-chart>.song-entry,.mobile-chart .song-label{display:block;width:100%}
 .mobile-chart .chart-title{display:flex;align-items:flex-start;width:100%;max-width:none}
 .mobile-chart .song-button{flex:1;min-width:0;max-width:none;overflow-wrap:break-word;word-break:normal;text-align:left}
 .mobile-chart .playing-button{margin-left:0;margin-top:8px;min-height:40px}
 .mobile-score{display:flex;justify-content:flex-end;align-items:baseline;gap:8px;margin-top:10px}
 /* Keep titles readable in horizontally scrolling Rivals, Raises and other song tables. */
 .score-table .song-entry{display:block;width:clamp(260px,70vw,320px);min-width:260px}
 .score-table .song-label{display:block;width:100%}
 .score-table .chart-title{display:flex;align-items:flex-start;width:100%;max-width:none}
 .score-table .song-button{flex:1;min-width:0;max-width:none;overflow-wrap:break-word;word-break:normal;text-align:left}
 .score-table .playing-button{margin-left:0;margin-top:6px}
}
/* Compact spacing uses roughly 40% of the previous padding while preserving type size and phone controls. */
body:has(dialog[open]){overflow:hidden}
button{padding:4px 6px;min-height:32px}input,select{padding:4px 5px;min-height:32px}
label>span{margin-bottom:3px}.checkbox{min-height:32px;gap:4px}.checkbox>span{margin-bottom:0}
.topbar{height:54px;padding:0 13px;gap:8px}.header-actions{gap:9px}.shell{padding:0 13px 10px}
nav{gap:12px}nav a{padding:7px 0 6px}.page-heading{padding:11px 0 9px;gap:6px}.eyebrow{margin-bottom:3px}
.stats{margin-bottom:10px}.stat{padding:8px 10px}.stat-label{margin-bottom:3px}.stat-detail{margin-top:2px}
.filters{grid-template-columns:minmax(180px,1.5fr) 90px 140px 132px 132px auto auto auto;padding:8px 10px;gap:6px}
.filters .checkbox{white-space:nowrap}.rating-folders{grid-column:1/-1;margin-top:0;padding:0;border:0}
.rating-folder-groups{gap:6px}.rating-folder-group{gap:3px}.rating-folder-groups button{padding:3px 6px;min-height:28px}
.view-toolbar{padding:6px 10px;gap:5px}.view-actions{gap:6px}.section-pad{padding:8px}
.chart-grid,.volforce-grid{gap:8px}.chart-card{padding:8px}.bar-list{margin-top:9px}.bar-row{padding:4px 0}
.score-table th{padding:5px 6px}.score-table td{padding:6px}
.desktop-scores .score-table td{padding-top:3px;padding-bottom:3px}.desktop-scores .score-table th{padding-top:4px;padding-bottom:4px}
.raises-table .score-table td{padding-top:2px;padding-bottom:2px}.volforce-table .score-table td{padding:1px 3px}.volforce-table .score-table th{padding:2px 3px}
.pager{padding:6px 10px;gap:6px}footer{padding:8px 1px}.empty{padding:28px 10px}
.mobile-card{padding:7px}.mobile-card-bottom{margin-top:6px;padding-top:6px}.mobile-meta{margin-top:3px}
dialog{padding:10px}.dialog-heading{gap:8px;margin-bottom:7px}.import-method{padding:10px 0;gap:8px}
.dialog-foot{padding-top:6px;gap:8px}.file-button{padding:4px 6px}.notice{margin-top:7px}
.capture-fields{gap:5px;margin:6px 0}.playing-result .playing-stats{padding:5px;gap:5px}
.playing-stats>div{padding:4px 5px}.pb-judgment-control{margin:5px 0}.playing-result{margin-bottom:8px}
.distribution-tabs{gap:3px;margin:5px 0}.distribution-tabs button{padding:3px 4px;min-height:28px}
.cutoff-average-heading{gap:5px}.cutoff-average-heading+.subtitle{margin-top:3px}
@media(max-width:1200px){.filters{grid-template-columns:minmax(170px,1.5fr) 100px 140px 132px}.filters .rating-folders{grid-column:1/-1}}
@media(max-width:700px){
 .topbar{height:auto;min-height:54px;padding:7px 10px}.shell{padding:0 10px 8px}
 .filters{grid-template-columns:repeat(2,minmax(0,1fr));padding:8px;gap:6px}.filters .search-label{grid-column:1/-1}
 .filters .checkbox{white-space:normal}.filters input,.filters select,.filters button{min-height:36px}
 .page-heading{padding:10px 0 8px}.stat{padding:7px 8px}.view-toolbar{padding:6px 8px}
 .playing-dialog{padding:10px}.playing-stats>div{padding:5px 6px}
 .mobile-chart .playing-button{margin-top:4px;min-height:36px}.mobile-chart .score-photo-links{margin-top:4px}
}

/* Keep the transparent character sprite crisp in the header and login card. */
.app-mark{object-fit:contain;image-rendering:pixelated;flex-shrink:0}
/* Preserve readable song widths on phones, unfolded foldables and desktops; tables scroll when needed. */
.table-scroll:has(.chart-title){padding-inline-end:48px}
.score-table:has(.chart-title){width:max-content;min-width:0}
.score-table .song-entry{display:flex;width:max-content;min-width:0;max-width:none;gap:6px}
.score-table .song-label{flex:0 1 auto;min-width:0}
.score-table .chart-title{display:flex;width:max-content;max-width:none}
.score-table .song-button{flex:0 1 auto;width:max-content;min-width:12ch;max-width:24ch;overflow-wrap:break-word;word-break:normal;text-align:left}
.score-table .chart-title>span:not(.badge){max-width:28ch;min-width:120px;white-space:normal;overflow-wrap:break-word}
/* Give full chart titles one line in score, comparison, session and Volforce tables. */
.score-table .song-label{flex:none}
.score-table .song-button{flex:none;max-width:none;white-space:nowrap;overflow-wrap:normal}
.chart-playing .playing-button{margin:0}
.mobile-row-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:6px}
.mobile-row-actions .playing-button{margin:0}
.mobile-list .chart-title{align-items:center}
.mobile-list .song-button{white-space:nowrap;overflow-x:auto;overflow-wrap:normal}
@media(max-width:700px){
 .mobile-card-top{display:block}
 .mobile-card-top .mobile-chart{min-width:0}
 .mobile-card-top>.playing-button{margin:0;align-self:start;min-height:36px}
 .mobile-chart>.rating{margin-bottom:3px}
 .mobile-meta{flex-wrap:wrap;align-items:center;gap:5px}
 .mobile-meta .mobile-score{display:inline-flex;align-items:baseline;gap:5px;margin:0}
 .mobile-meta .source-chip{margin:0}
 .mobile-card-bottom>div{min-width:0;flex:1}
 .mobile-card-bottom{display:flex;align-items:start;flex-wrap:wrap;gap:6px;margin-top:5px;padding-top:5px}
 .mobile-judgments{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}
 .mobile-judgments>span{white-space:nowrap}
 .mobile-card-bottom>.date-cell{margin-left:auto;flex-shrink:0}
 .mobile-ex{font-size:.75rem;white-space:nowrap}
}
.import-history-tabs{display:flex;gap:8px;border-bottom:1px solid var(--t-surf-3,#30274a)}
.import-history-tabs a{padding:6px 10px;border:1px solid transparent;border-radius:5px;color:var(--t-text-2,#a094c5)}
.import-history-tabs a[aria-selected="true"]{color:var(--t-acc-1,#80cbe7);border-color:var(--t-line-2,#457a8d);background:var(--t-surf-2,#1d1535)}
.brand .app-mark{width:42px;height:42px}
@media(max-width:700px){.brand .app-mark{width:36px;height:36px}}
.login-card .app-mark{width:52px;height:52px}
.chart-session-controls{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:5px 0 8px}
.chart-session-controls button{padding:4px 8px;min-height:30px;font-size:.75rem}
.chart-session-controls button.selected{border-color:var(--t-acc-1,#7ecbe7);color:var(--t-acc-1,#7ecbe7)}
.chart-session-controls small{font-size:.6875rem;color:var(--t-text-2,#a396c8)}
.session-delta{display:block;color:var(--t-acc-1,#7ecbe7);font-size:.75rem;line-height:1.2}
.session-delta.negative{color:var(--t-acc-2,#fa9fbd)}
.volforce-controls{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:7px 12px;border-bottom:1px solid var(--t-surf-3,#30274a)}
.volforce-controls label{display:flex;align-items:center;gap:8px;font-size:.8125rem}
.volforce-controls input{width:90px;padding:5px 7px;min-height:32px}
.volforce-controls small{color:var(--t-text-2,#a396c8);font-size:.75rem}
#jackets-control[hidden],#pb-screenshot-control[hidden],#volforce-controls[hidden]{display:none}
/* Account settings stay compact while offering every saved chart property on phones. */
.settings-link{font-size:1.4rem;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
.settings-section{margin:1rem 0;padding-top:.7rem;border-top:1px solid var(--border,var(--t-line-1,#37304b))}
.settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.65rem 1rem}
.settings-grid label{display:flex;flex-direction:column;gap:.2rem;min-width:0}
.settings-grid input,.settings-grid select{width:100%;min-width:0;box-sizing:border-box}
.settings-checks{display:flex;flex-wrap:wrap;gap:.7rem 1.2rem;margin-bottom:.8rem}
#password-confirm-label[hidden],#private-import-method[hidden],#private-import-files[hidden],#public-saved-responses[hidden],#full-backup-link[hidden],#refresh-public-catalog[hidden]{display:none}
@media(max-width:600px){.settings-grid{grid-template-columns:1fr 1fr;gap:.6rem}.settings-grid label{font-size:.8rem}.header-actions{flex-wrap:wrap}.settings-link{padding:.25rem}}
/* Keep filter types together without giving desktop search most of the row. */
.filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px 12px}
.filters .search-label{flex:1 1 160px;min-width:160px;max-width:none}
.filter-dropdowns{display:flex;flex:0 1 auto;flex-wrap:wrap;gap:6px 10px;align-items:flex-end}
.filter-dropdowns label{flex:0 1 auto;min-width:95px}
.filter-dropdowns input,.filter-dropdowns select{width:100%}
.filter-checkboxes{display:flex;flex:1 0 100%;flex-wrap:wrap;gap:4px 14px;align-items:center;order:1}
.filters .rating-folders{order:2}
.database-query textarea{display:block;width:100%;margin:6px 0;font:13px ui-monospace,monospace;min-height:90px;resize:vertical}
.database-query .view-toolbar{padding:0;flex-wrap:wrap}
.filters .rating-folders{flex:1 0 100%;width:100%}
.topbar{height:auto;min-height:54px;padding-top:7px;padding-bottom:7px}
.changelog-link{font-size:.8rem;white-space:nowrap}
.login-card .checkbox{display:flex;align-items:flex-start;gap:7px;line-height:1.4}
.login-card .checkbox input{width:auto;min-height:0;flex:0 0 auto;margin:3px 0 0}
#register-demo-label[hidden],#schema-nav[hidden],#database-nav[hidden]{display:none}
.release-notes{max-width:920px;width:94%;margin:28px auto;line-height:1.6}
.release-notes h2{margin-top:28px;padding-top:16px;border-top:1px solid var(--t-line-1,#37304b)}
.release-notes li{margin:7px 0}
.schema-groups{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0}
.schema-groups [aria-pressed="true"]{border-color:var(--t-acc-1,#7bc6e1);color:var(--t-acc-1,#7bc6e1)}
.schema-diagram{overflow:auto;max-height:75vh;border:1px solid var(--t-line-1,#37304b);border-radius:6px}
.schema-diagram svg{display:block;width:1130px;max-width:none}
.schema-table rect{fill:var(--t-surf-2,#1a1330);stroke:var(--t-acc-1,#7bc6e1)}
.schema-context rect{stroke:var(--t-text-2,#9082b8);stroke-dasharray:4 3}
.schema-table text{fill:var(--t-text-0,#ddd7ef);font:11px ui-monospace,monospace}
.schema-table .schema-name{fill:var(--t-acc-2,#fa9fbd);font-weight:600;font-size:13px}
.schema-table .schema-type{fill:var(--t-text-2,#9a8dc3);font-size:9px}
.schema-indexes details{margin:8px 0}.schema-indexes summary{cursor:pointer}
.database-value{white-space:pre-wrap;min-width:80px;max-width:340px;overflow-wrap:anywhere;font:12px ui-monospace,monospace}
@media(max-width:700px){.filters .search-label{flex:1 0 100%;max-width:none}.filter-dropdowns,.filter-checkboxes{flex-basis:100%}.filter-dropdowns label{flex-basis:calc(50% - 10px)}.topbar{flex-wrap:wrap}.header-actions{flex:1 1 auto;justify-content:flex-end}.schema-diagram{max-height:65vh}}
/* Join equal Volforce halves with one shared scroller and identical metric columns. */
.volforce-grid{grid-template-columns:repeat(2,1fr);gap:0;width:max-content;min-width:100%}
.volforce-grid>.volforce-table{overflow:visible;padding-inline-end:0}
.volforce-grid>.volforce-table .score-table{width:100%}
.vf-rank{width:32px}.vf-rating{width:52px}.vf-score{width:100px}.vf-exscore{width:76px}.vf-lamp{width:70px}.vf-contribution{width:78px}.vf-date{width:142px}.vf-photos{width:116px}
.rival-compare-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,420px);gap:16px;align-items:start;padding-right:16px}
.rival-compare-layout>.table-scroll{min-width:0;max-width:100%}
.rival-table-panel{min-width:0;max-width:100%}
.rival-plot{position:relative}
.rival-grade-guide{stroke:var(--t-text-2,#9c8cbd);stroke-width:.8;stroke-dasharray:3 4;pointer-events:none}
.rival-scatter .rival-grade-label{fill:var(--t-text-1,#c9bcde);font-size:10px;pointer-events:none}
.rival-scatter .rival-dot,.rival-point-highlight{pointer-events:none}
.rival-point-highlight{stroke:var(--t-surf-1,#140f22);stroke-width:.6;fill-opacity:1}
.rival-point-highlight.own-win{fill:var(--t-acc-1,#7ecbe7)}.rival-point-highlight.rival-win{fill:var(--t-acc-2,#fa9fbd)}.rival-point-highlight.tie{fill:#e3d28e}
.rival-point-tooltip{position:absolute;z-index:2;max-width:min(280px,calc(100% - 16px));padding:8px 10px;border:1px solid var(--t-text-3,#7363a4);border-radius:6px;background:color-mix(in srgb,var(--t-surf-1,#18122b) 96.1%,transparent);color:var(--t-text-0,#eef1fa);font-size:.8rem;pointer-events:none;overflow-wrap:anywhere}
.rival-graph{min-width:0;position:sticky;top:16px;margin-bottom:16px}
.rival-scatter,.usage-chart{display:block;width:100%;height:auto;margin-top:14px}
.rival-scatter text,.usage-chart text{fill:var(--t-text-1,#bfb6dc);font-size:12px}
.graph-grid{stroke:var(--t-line-1,#392f57);stroke-width:1}.graph-axis{stroke:var(--t-text-2,#8b7db6);stroke-width:1}
.tie-diagonal{stroke:#e3d28e;stroke-width:1.5;stroke-dasharray:6 4}
.rival-dot{stroke:var(--t-surf-1,#140f22);stroke-width:.6;fill-opacity:.8}.rival-dot:hover{r:5;fill-opacity:1}
.rival-dot.own-win{fill:var(--t-acc-1,#7ecbe7)}.rival-dot.rival-win{fill:var(--t-acc-2,#fa9fbd)}.rival-dot.tie{fill:#e3d28e}
.rival-graph-legend{display:flex;flex-wrap:wrap;gap:8px 14px;font-size:.8rem}.rival-graph-legend .own-win{color:var(--t-acc-1,#7ecbe7)}.rival-graph-legend .rival-win{color:var(--t-acc-2,#fa9fbd)}.rival-graph-legend .tie{color:#e3d28e}
.usage-totals{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:18px 0;border:1px solid var(--t-line-1,#392f57)}
.usage-totals .stat strong,.usage-totals .stat span{display:block}.usage-totals .stat strong{font-size:1.5rem}
.usage-bar{fill:var(--t-acc-1,#7ecbe7)}.usage-feature-track{height:5px;min-width:100px;background:var(--t-line-1,#392f57);margin-top:5px}.usage-feature-track span{display:block;height:100%;background:var(--t-acc-1,#7ecbe7)}
#usage-link[hidden]{display:none}
.rival-graph .segmented [aria-pressed="true"],#view-content [data-usage-days][aria-pressed="true"],#view-content [data-usage-metric][aria-pressed="true"]{color:var(--t-acc-1,#7ecbe7);border-color:var(--t-acc-1,#7ecbe7);background:var(--t-surf-2,#162d35)}
@media(max-width:1100px){.rival-compare-layout{grid-template-columns:minmax(0,1fr);padding:0}.rival-graph{grid-row:1;position:static;margin:0 12px;max-width:600px;justify-self:center}.usage-totals{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:1100px){.volforce-grid{grid-template-columns:1fr;width:100%}}

/* Staged imports and account-scoped rival discovery. */
.import-step{border:1px solid var(--t-line-1,#372e52);border-radius:8px;margin:12px 0;padding:12px}.import-step summary{cursor:pointer;font-weight:600}.import-step .import-advanced{display:grid;gap:12px}.import-step input:not([type=checkbox]),.import-step select{max-width:100%}.import-step p{margin:0}.settings-rivals{padding:0;list-style:none}.settings-rivals li{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:8px 0}.rival-search-controls{display:flex;flex-wrap:wrap;align-items:end;gap:12px}.rival-search-controls label{min-width:130px;flex:1}.rival-search-controls input{width:100%}.import-step [hidden]{display:none!important}
.rival-graph-controls{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px}
.rival-player-context{font-weight:600;overflow-wrap:anywhere}
.json-mapping-method{display:grid;gap:14px}
.json-mapping-fields,.json-mapping-layout{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.json-mapping-method textarea{width:100%;max-width:100%;resize:vertical;box-sizing:border-box;background:var(--t-surf-2,#1a132e);color:var(--t-text-0,#eef1fa);border:1px solid var(--t-line-1,#3a3056);border-radius:6px;padding:10px;font:inherit;font-size:.85rem}
.json-mapping-method small{display:block;margin-top:5px;overflow-wrap:anywhere}
.json-code{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%;max-height:400px;overflow:auto;background:var(--t-surf-1,#140f24);border:1px solid var(--t-line-1,#3a3056);border-radius:6px;padding:12px;font-size:.8rem}
.json-mapping-actions{display:flex;flex-wrap:wrap;gap:8px}
@media(max-width:600px){.json-mapping-fields,.json-mapping-layout{grid-template-columns:1fr}}
.rival-filter-context{overflow-wrap:anywhere}
.rival-scatter{touch-action:none;user-select:none;cursor:crosshair}
.rival-zoom-target{fill:transparent}
.rival-zoom-window{fill:color-mix(in srgb,var(--t-acc-1,#7ecbe7) 18.8%,transparent);stroke:var(--t-acc-1,#7ecbe7);stroke-width:1;pointer-events:none}
.rival-zoom-window[hidden]{display:none}
.graph-fullscreen-button{float:right;margin:0 0 8px 12px}
.cutoff-chart{margin:12px 8px;padding:0}
.cutoff-chart>.graph-fullscreen-button{margin:8px}
#graph-fullscreen-content .heat-table{font-size:1rem}
#graph-fullscreen-content .heat-table td,#graph-fullscreen-content .heat-table th{padding:14px}
.chart-card>h2,.chart-card>h3{padding-top:3px}
.graph-fullscreen-dialog{inset:0;width:calc(100vw - 24px);height:calc(100dvh - 24px);max-width:none;max-height:none;margin:auto;padding:16px;overflow:auto}
.graph-overlay-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
#graph-fullscreen-content>.chart-card{position:static;max-width:none;width:100%;margin:0;padding:16px;box-sizing:border-box}
#graph-fullscreen-content .chart-card svg{height:clamp(340px,62dvh,1000px)!important;max-height:none;width:100%;min-width:0!important}
#graph-fullscreen-content .histogram-frame{min-width:0!important}
#graph-fullscreen-content .bar-list{min-height:55dvh;display:flex;flex-direction:column;justify-content:space-evenly}
#graph-fullscreen-content .rival-graph [aria-pressed="true"],#graph-fullscreen-content [data-usage-metric][aria-pressed="true"]{color:var(--t-acc-1,#7ecbe7);border-color:var(--t-acc-1,#7ecbe7);background:var(--t-surf-2,#162d35)}
@media(min-width:1101px){
 .rival-compare-layout{grid-template-columns:minmax(0,1fr) minmax(420px,1fr)}
}
@media(max-width:1100px){
 .rival-compare-layout>.rival-graph{max-width:none;width:calc(100% - 24px);box-sizing:border-box;justify-self:stretch}
 .rival-compare-layout .rival-scatter{max-height:none;width:calc(100% - 24px);margin-left:12px;margin-right:12px}
 .graph-fullscreen-button{display:none}
 .rival-scatter{touch-action:pan-y}
 .rival-scatter .rival-zoom-target,.rival-scatter .graph-grid,.rival-scatter .tie-diagonal,.rival-scatter .rival-dot{touch-action:none}
}
@media(max-width:600px){
 .graph-fullscreen-dialog{width:100vw;height:100dvh;border:0;border-radius:0;padding:10px;box-sizing:border-box}
 #graph-fullscreen-content>.chart-card{padding:8px}
 #graph-fullscreen-content .chart-card svg{height:55dvh!important}
}
/* Compact stream history retains readable titles and fixed jackets at every viewport size. */
.session-tabs{display:flex;gap:8px;padding:16px 20px;border-bottom:1px solid var(--border)}
.session-tabs [aria-pressed=true]{border-color:var(--t-acc-1,#56bde2);color:var(--t-acc-1,#56bde2)}
.ticker-toolbar{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:16px 20px 8px}
.ticker-toolbar p{font-size:12px;margin:5px 0;color:var(--t-text-2,#a99dce)}
.ticker-controls{display:flex;flex-wrap:wrap;gap:8px}
.ticker-status{display:flex;justify-content:space-between;gap:12px;padding:0 20px 12px;font-size:12px;color:var(--t-text-2,#a99dce)}
.session-ticker{list-style:none;margin:0;padding:0 20px 20px;overflow-anchor:none}
.ticker-card{display:flex;align-items:center;gap:12px;min-height:76px;padding:10px 12px;border:1px solid var(--t-surf-3,#2c2050);border-radius:8px;background:var(--t-surf-1,#120d21);margin-bottom:8px}
.ticker-card .song-jacket{width:56px;height:56px;flex:none;object-fit:cover;border-radius:5px}
.ticker-song{flex:1;min-width:0}
.ticker-song>strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:15px}
.ticker-song>span{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-top:6px;font-size:12px;color:var(--t-text-2,#a99dce)}
.ticker-values{display:flex;align-items:center;gap:22px;flex:none}
.ticker-metric{display:flex;flex-direction:column;gap:3px;font-variant-numeric:tabular-nums}
.ticker-metric small{font-size:11px;color:var(--t-text-2,#a99dce)}.ticker-metric strong{font-size:17px}.ticker-metric em{font-size:11px;font-style:normal;color:var(--t-acc-1,#56bde2)}
.ticker-actions{display:flex;gap:6px;flex:none}.ticker-actions button{font-size:12px;padding:6px 8px}
.ticker-pending{font-size:12px;color:#f4bf65}
@media(max-width:700px){.session-tabs,.ticker-toolbar{padding:12px}.ticker-toolbar{align-items:flex-start;flex-direction:column;gap:8px}.ticker-status{padding:0 12px 12px;flex-direction:column;gap:4px}.session-ticker{padding:0 10px 12px}.ticker-card{gap:9px;flex-wrap:wrap;padding:9px}.ticker-card .song-jacket{width:48px;height:48px}.ticker-song{flex-basis:calc(100% - 60px)}.ticker-song>strong{font-size:14px}.ticker-values{gap:18px;margin-left:57px;flex:1}.ticker-metric strong{font-size:15px}.ticker-actions{margin-left:auto}.ticker-metric .badge{font-size:10px}.ticker-controls button{font-size:12px;padding:7px 9px}}
.experimental-tag{display:inline-block;border:1px solid var(--t-text-3,#ad9658);border-radius:4px;padding:2px 6px;color:#efd183;font-size:.7rem;vertical-align:middle}
.replay-toolbar{padding:16px 20px;border-bottom:1px solid var(--t-line-1,#362b55);background:var(--t-surf-2,#1e1636)}
.replay-heading,.replay-period,.replay-transport{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.replay-heading{justify-content:space-between}.replay-toolbar p,.replay-context{color:var(--t-text-2,#afa4d2);font-size:.8rem;line-height:1.6}
.replay-period{margin:12px 0}.replay-period label,.replay-transport label{display:grid;gap:5px;font-size:.75rem}
.replay-transport input[type=range]{flex:1;min-width:160px;padding:0;accent-color:var(--t-acc-1,#7ecbe7)}
.replay-transport [data-replay-current]{flex-basis:100%;font-size:.8rem;color:var(--t-text-1,#d0c8e9)}
#graph-fullscreen-replay{margin-bottom:12px}.replay-context{clear:both}
@media(max-width:700px){.replay-toolbar{padding:12px}.replay-period label{flex:1}.replay-period input{width:100%;min-width:0}.replay-transport{gap:8px}.replay-transport input[type=range]{flex-basis:100%;min-height:30px}}
.invite-list{list-style:none;padding:0;display:grid;gap:10px;max-width:560px}.invite-list li{display:flex;align-items:end;gap:10px}.invite-code-field{flex:1;min-width:0}.invite-code-field input{font-family:ui-monospace,monospace;font-size:.875rem}.invite-used{color:var(--t-text-2,#998dbb);padding:10px 0}.invite-list button{flex-shrink:0}
.release-tabs{display:flex;gap:8px;overflow-x:auto;margin:20px 0;padding:0 0 10px;white-space:nowrap;border-bottom:1px solid var(--t-line-1,#37304b)}
.release-tabs a{padding:9px 14px;border:1px solid var(--t-line-1,#3b3158);border-radius:6px;background:var(--t-surf-3,#231a3e);color:var(--t-text-1,#bfb4e1)}
.release-tabs a.selected{border-color:var(--t-acc-1,#7ecbe7);background:var(--t-surf-2,#162d35);color:var(--t-acc-1,#7ecbe7)}.release-tabs a:focus-visible{outline:2px solid var(--t-acc-1,#7ecbe7);outline-offset:3px}
.release-notes [role=tabpanel]>h2:first-child{margin-top:8px}

/* Keep the game logos centered and the larger subtitle clear of header actions. */
.topbar{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);column-gap:16px}
.brand{grid-column:1;grid-row:1;justify-self:start;min-width:0;max-width:100%}.brand>span{min-width:0}
.brand small{font-size:1.125rem;font-style:italic;letter-spacing:0;line-height:1.2;margin-top:4px}
.login-card>.subtitle{font-size:1.5rem;font-style:italic;line-height:1.25}
.game-logos{grid-column:2;grid-row:1;display:flex;align-items:center;justify-content:center;gap:12px}
.game-logos img{display:block;width:auto;height:60px;max-width:calc(50% - 6px);object-fit:contain}
.header-actions{grid-column:3;grid-row:1;justify-self:end}
.cutoff-total-row>th,.cutoff-total-row>td{background:var(--t-surf-2,#1d1634);border-top:2px solid var(--t-line-2,#4c4070);font-weight:650}
.cutoff-total-row>th{text-align:left;white-space:nowrap}
.judgment-percent{font-size:.75rem;color:var(--t-text-2,#998dbb);white-space:nowrap}
@media(max-width:1100px){.topbar{grid-template-columns:minmax(0,1fr) auto;row-gap:8px}.brand{grid-column:1;grid-row:2}.header-actions{grid-column:2;grid-row:2}.game-logos{grid-column:1/-1;grid-row:1}.game-logos img{height:48px}}
@media(max-width:700px){.topbar{grid-template-columns:minmax(0,1fr);height:auto;min-height:77px;padding-block:8px;row-gap:8px}.brand small{font-size:.875rem}.header-actions{grid-column:1;grid-row:3;justify-self:end;flex-wrap:wrap;gap:9px}.game-logos img{height:38px}}
/* Wave logo theme: sunset glow behind the app, a sunset stripe under the header, and the logo as the app mark. Palette sampled from assets/branding/tsunami-wave.webp. */
:root{--wave-foam:var(--t-text-0,#baeeff);--wave-ice:var(--t-acc-1,#8ad6f1);--wave-lavender:var(--t-text-2,#9ea0d9);--wave-violet:var(--t-text-3,#876eb5);--wave-orchid:var(--t-text-2,#cd77c6);--wave-pink:var(--t-acc-2,#fe9cb5);--wave-peach:var(--t-acc-2,#ffb1b2);--wave-night:var(--t-surf-0,#0f0b1b);--wave-sunset:linear-gradient(90deg,var(--wave-foam),var(--wave-lavender) 30%,var(--wave-orchid) 55%,var(--wave-pink) 78%,var(--wave-peach))}
body{background:radial-gradient(1100px 520px at 88% -12%,color-mix(in srgb,var(--t-acc-2,#fe9cb5) 12.2%,transparent),transparent 62%),radial-gradient(900px 640px at -12% 108%,color-mix(in srgb,var(--t-text-3,#876eb5) 14.9%,transparent),transparent 62%),var(--wave-night);background-attachment:fixed}
.app-mark{image-rendering:auto;filter:drop-shadow(0 0 10px color-mix(in srgb,var(--t-text-3,#876eb5) 40%,transparent))}
.topbar{height:auto;padding-block:12px}.brand{gap:20px;font-size:2.25rem}.brand .app-mark{width:112px;height:112px;filter:drop-shadow(0 0 18px color-mix(in srgb,var(--t-acc-2,#fe9cb5) 25.1%,transparent)) drop-shadow(0 0 6px color-mix(in srgb,var(--t-text-3,#876eb5) 40%,transparent))}.brand small{font-size:1.25rem;margin-top:6px}
.brand>span{background:linear-gradient(100deg,var(--wave-foam),var(--wave-lavender) 45%,var(--wave-pink)) 0 0/5.2em 1.3em no-repeat;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.brand small{-webkit-text-fill-color:var(--t-text-2,#aaa3c9);color:var(--t-text-2,#aaa3c9)}
.topbar{position:relative;background:color-mix(in srgb,var(--t-surf-1,#140f22) 90.2%,transparent)}
.topbar::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--wave-sunset);pointer-events:none}
nav a.active{color:var(--wave-foam);border-image:linear-gradient(90deg,var(--wave-ice),var(--wave-pink)) 1}
.primary{background:linear-gradient(135deg,var(--wave-foam),var(--wave-ice) 55%,var(--wave-lavender));border-color:var(--wave-ice);color:var(--t-surf-1,#14102a)}
.primary:hover{background:linear-gradient(135deg,var(--t-text-0,#d9f6ff),var(--wave-foam) 55%,var(--t-acc-3,#b9bbec))}
.stat-value.pink{color:var(--wave-pink)}
.login-wrap{background:radial-gradient(520px 380px at 50% 18%,color-mix(in srgb,var(--t-acc-2,#fe9cb5) 14.1%,transparent),transparent 70%)}
.login-card{text-align:left;background:color-mix(in srgb,var(--t-surf-1,#18122b) 94.9%,transparent);box-shadow:0 24px 80px #0009,0 0 0 1px #ffffff08 inset;position:relative;overflow:hidden}
.login-card::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--wave-sunset)}
.login-card .app-mark{display:block;width:168px;height:168px;margin:0 auto 20px;filter:drop-shadow(0 0 24px color-mix(in srgb,var(--t-acc-2,#fe9cb5) 25.1%,transparent))}
.login-card h1{text-align:center;font-size:2.4rem;background:linear-gradient(100deg,var(--wave-foam),var(--wave-lavender) 45%,var(--wave-pink));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:6px}
.login-card>.subtitle{text-align:center;font-style:italic;color:var(--t-text-2,#aaa3c9)}
@media(max-width:1100px){.brand{gap:16px;font-size:1.75rem}.brand .app-mark{width:84px;height:84px}.brand small{font-size:1.05rem}}
@media(max-width:700px){.topbar{padding-block:10px}.brand{gap:12px;font-size:1.45rem}.brand .app-mark{width:64px;height:64px}.brand small{font-size:.875rem;margin-top:3px}.login-card .app-mark{width:128px;height:128px}.login-card h1{font-size:2rem}}
/* Lamp effects: rarer lamps move more. UC breathes a pink glow, PUC adds a gold shimmer sweep, MXV a soft white glow. Colours keep their existing meaning; motion stops for reduced-motion users. */
.badge.lamp.uc,.badge.lamp.puc,.badge.lamp.mxv{position:relative;isolation:isolate}
.badge.lamp.uc::before,.badge.lamp.puc::before,.badge.lamp.mxv::before{content:"";position:absolute;inset:-1px;border-radius:inherit;box-shadow:0 0 10px 1px var(--difficulty-accent);opacity:.35;z-index:-1;pointer-events:none}
.badge.lamp.uc::before{box-shadow:0 0 12px 2px #ff69b4}
.badge.lamp.mxv::before{box-shadow:0 0 8px 0 #ffffffb3;opacity:.25}
.badge.lamp.puc{background-image:linear-gradient(110deg,transparent 35%,#fff7b380 48%,#ffffffb3 50%,#fff7b380 52%,transparent 65%);background-size:300% 100%;background-repeat:no-repeat;background-position:120% 0}
@media(prefers-reduced-motion:no-preference){
 .badge.lamp.uc::before{animation:lamp-breathe 2.2s ease-in-out infinite}
 .badge.lamp.mxv::before{animation:lamp-breathe-soft 3.2s ease-in-out infinite}
 .badge.lamp.puc::before{animation:lamp-breathe 2.6s ease-in-out infinite}
 .badge.lamp.puc{animation:lamp-shimmer 3s ease-in-out infinite}
}
@keyframes lamp-breathe{0%,100%{opacity:.25}50%{opacity:.95}}
@keyframes lamp-breathe-soft{0%,100%{opacity:.15}50%{opacity:.55}}
@keyframes lamp-shimmer{0%,35%{background-position:120% 0}75%,100%{background-position:-20% 0}}
@media print{.badge.lamp::before{display:none}.badge.lamp.puc{background-image:none}}
/* Vaporwave horizon theme. One bold scene lives in the header and login (sunset sun behind Mt Fuji, a neon-grid sea, woodblock wave crests); the rest of the page stays quiet with a faint seigaiha pattern and a dim grid floor. Important numbers get neon light. Every motion stops for reduced-motion users. */
:root{--vapor-cyan:var(--t-acc-1,#6ff3ff);--vapor-magenta:var(--t-acc-2,#ff6ec7);--ai-indigo:var(--t-acc-3-deep,#1f3a6b);--washi:var(--t-text-0,#f2e8d5);--shu:var(--t-acc-2-deep,#d9412b);--chrome:linear-gradient(180deg,#ffffff 0%,var(--t-text-0,#e4ecff) 40%,var(--t-acc-3,#b3b5ec) 54%,var(--t-text-3,#7d64b8) 55%,var(--t-acc-3,#d39be0) 74%,var(--t-text-0,#ffe0ec) 100%);--seigaiha:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2248%22 height=%2224%22 viewBox=%220 0 48 24%22%3E%3Cg fill=%22%230e0a1c%22 stroke=%22%239ea0d9%22 stroke-width=%221.2%22%3E%3Cg id=%22s%22%3E%3Ccircle r=%2222%22/%3E%3Ccircle r=%2217%22/%3E%3Ccircle r=%2212%22/%3E%3Ccircle r=%227%22/%3E%3Ccircle r=%222.5%22/%3E%3C/g%3E%3Cuse href=%22%23s%22 x=%220%22 y=%220%22/%3E%3Cuse href=%22%23s%22 x=%2248%22 y=%220%22/%3E%3Cuse href=%22%23s%22 x=%2224%22 y=%2212%22/%3E%3Cuse href=%22%23s%22 x=%220%22 y=%2224%22/%3E%3Cuse href=%22%23s%22 x=%2248%22 y=%2224%22/%3E%3C/g%3E%3C/svg%3E");--cloud:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22200%22 height=%2264%22 viewBox=%220 0 200 64%22%3E%3Cg fill=%22%23ffe3ee%22%3E%3Crect x=%228%22 y=%2242%22 width=%22184%22 height=%2212%22 rx=%226%22/%3E%3Ccircle cx=%2244%22 cy=%2240%22 r=%2215%22/%3E%3Ccircle cx=%2276%22 cy=%2230%22 r=%2221%22/%3E%3Ccircle cx=%22114%22 cy=%2234%22 r=%2218%22/%3E%3Ccircle cx=%22146%22 cy=%2240%22 r=%2214%22/%3E%3Ccircle cx=%22170%22 cy=%2245%22 r=%229%22/%3E%3C/g%3E%3Cg fill=%22none%22 stroke=%22%23b56fb8%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M32.3 40.0 L32.6 38.1 L33.2 36.4 L34.1 34.7 L35.2 33.3 L36.5 32.1 L38.0 31.1 L39.5 30.4 L41.2 30.0 L42.9 29.8 L44.5 29.9 L46.1 30.3 L47.6 30.9 L48.9 31.7 L50.1 32.8 L51.1 34.0 L51.8 35.3 L52.3 36.7 L52.6 38.1 L52.6 39.5 L52.5 40.9 L52.0 42.2 L51.4 43.4 L50.7 44.5 L49.7 45.4 L48.7 46.1 L47.6 46.6 L46.4 47.0 L45.2 47.1 L44.0 47.1 L42.9 46.8 L41.9 46.4 L41.0 45.8 L40.1 45.1 L39.5 44.3 L39.0 43.5 L38.6 42.5 L38.4 41.6 L38.4 40.6 L38.5 39.7 L38.8 38.9 L39.2 38.1 L39.7 37.5 L40.3 36.9 L41.0 36.5 L41.6 36.2 L42.4 36.0 L43.1 35.9 L43.7 36.0 L44.4 36.2 L45.0 36.4 L45.5 36.8 L45.9 37.2 L46.2 37.6 L46.4 38.1 L46.5 38.6 L46.6 39.1 L46.5 39.6 L46.4 40.0 L46.2 40.3 L46.0 40.6%22/%3E%3Cpath d=%22M59.6 30.0 L60.1 27.4 L60.9 24.9 L62.1 22.6 L63.7 20.6 L65.5 18.9 L67.5 17.6 L69.8 16.6 L72.1 15.9 L74.4 15.7 L76.7 15.9 L79.0 16.4 L81.0 17.3 L82.9 18.4 L84.5 19.9 L85.9 21.5 L86.9 23.4 L87.7 25.3 L88.1 27.3 L88.1 29.3 L87.8 31.2 L87.3 33.1 L86.4 34.8 L85.3 36.3 L84.0 37.5 L82.6 38.6 L81.0 39.3 L79.3 39.8 L77.7 40.0 L76.1 39.9 L74.5 39.5 L73.0 39.0 L71.7 38.2 L70.6 37.2 L69.7 36.1 L69.0 34.8 L68.5 33.5 L68.2 32.2 L68.2 30.9 L68.4 29.6 L68.7 28.5 L69.3 27.4 L70.0 26.5 L70.8 25.7 L71.7 25.1 L72.7 24.6 L73.7 24.4 L74.7 24.3 L75.6 24.4 L76.5 24.6 L77.3 25.0 L78.0 25.5 L78.6 26.1 L79.1 26.7 L79.4 27.4 L79.6 28.1 L79.6 28.7 L79.6 29.4 L79.4 30.0 L79.1 30.5 L78.8 30.9%22/%3E%3Cpath d=%22M100.0 34.0 L100.3 31.8 L101.1 29.6 L102.1 27.7 L103.4 26.0 L105.0 24.5 L106.8 23.3 L108.7 22.5 L110.6 22.0 L112.6 21.8 L114.6 21.9 L116.5 22.3 L118.3 23.1 L119.9 24.1 L121.3 25.3 L122.5 26.8 L123.4 28.3 L124.0 30.0 L124.3 31.7 L124.4 33.4 L124.1 35.1 L123.7 36.6 L122.9 38.1 L122.0 39.4 L120.9 40.5 L119.6 41.3 L118.3 42.0 L116.9 42.4 L115.4 42.5 L114.0 42.5 L112.7 42.2 L111.5 41.7 L110.3 41.0 L109.4 40.2 L108.6 39.2 L108.0 38.1 L107.6 37.0 L107.3 35.9 L107.3 34.8 L107.5 33.7 L107.8 32.7 L108.3 31.8 L108.9 31.0 L109.6 30.3 L110.3 29.8 L111.2 29.4 L112.0 29.2 L112.9 29.1 L113.7 29.2 L114.5 29.4 L115.1 29.7 L115.7 30.1 L116.2 30.6 L116.6 31.2 L116.9 31.7 L117.1 32.3 L117.1 32.9 L117.0 33.5 L116.9 34.0 L116.7 34.4 L116.4 34.8%22/%3E%3Cpath d=%22M135.1 40.0 L135.4 38.3 L135.9 36.6 L136.7 35.1 L137.8 33.8 L139.0 32.6 L140.4 31.7 L141.8 31.0 L143.4 30.6 L144.9 30.5 L146.5 30.6 L148.0 30.9 L149.4 31.5 L150.6 32.3 L151.7 33.3 L152.6 34.4 L153.3 35.6 L153.8 36.9 L154.0 38.2 L154.1 39.5 L153.9 40.8 L153.5 42.1 L152.9 43.2 L152.2 44.2 L151.3 45.0 L150.4 45.7 L149.3 46.2 L148.2 46.5 L147.1 46.6 L146.0 46.6 L145.0 46.4 L144.0 46.0 L143.2 45.4 L142.4 44.8 L141.8 44.0 L141.3 43.2 L141.0 42.4 L140.8 41.5 L140.8 40.6 L140.9 39.8 L141.2 39.0 L141.5 38.3 L142.0 37.6 L142.5 37.1 L143.2 36.7 L143.8 36.4 L144.5 36.2 L145.1 36.2 L145.8 36.3 L146.4 36.4 L146.9 36.7 L147.4 37.0 L147.7 37.4 L148.0 37.8 L148.3 38.2 L148.4 38.7 L148.4 39.2 L148.4 39.6 L148.3 40.0 L148.1 40.3 L147.9 40.6%22/%3E%3Cpath d=%22M16 54H186%22 stroke-opacity=%22.45%22/%3E%3C/g%3E%3C/svg%3E")}
body::before{content:"";position:fixed;inset:0;z-index:-1;background:var(--seigaiha) 0 0/48px 24px;opacity:.05;pointer-events:none}
body::after{content:"";position:fixed;left:-25%;right:-25%;bottom:0;height:42vh;z-index:-1;pointer-events:none;background:linear-gradient(color-mix(in srgb,var(--t-acc-2,#ff6ec7) 40%,transparent) 1px,transparent 1px) 0 0/100% 40px,linear-gradient(90deg,color-mix(in srgb,var(--t-acc-1,#6ff3ff) 33.3%,transparent) 1px,transparent 1px) 50% 0/64px 100%;transform:perspective(360px) rotateX(62deg);transform-origin:50% 100%;-webkit-mask-image:linear-gradient(to top,#000,transparent 85%);mask-image:linear-gradient(to top,#000,transparent 85%);opacity:.22}

/* Header horizon scene */
.horizon{position:absolute;inset:0 0 1px;overflow:hidden;pointer-events:none;z-index:0;background:radial-gradient(260px 100px at 66% 72%,color-mix(in srgb,var(--t-acc-2,#ff6ec7) 34.9%,transparent),transparent 70%),linear-gradient(180deg,var(--t-surf-1,#110b24) 0%,var(--t-acc-3-dark,#1d1236) 48%,var(--t-acc-3-dark,#4a1a4f) 72%,var(--t-surf-1,#140c26) 72.5%)}
.topbar>:not(.horizon){position:relative;z-index:1}.topbar{padding-bottom:16px}
.horizon-sun{position:absolute;z-index:1;left:66%;bottom:28%;width:130px;height:130px;margin-left:-65px;margin-bottom:-52px;border-radius:50%;background:linear-gradient(180deg,#ffd3a8 0%,var(--t-acc-2,#ffb1b2) 30%,var(--t-acc-2,#fe7fb2) 60%,var(--t-text-2,#cd77c6) 100%);-webkit-mask-image:linear-gradient(180deg,#000 0 52%,transparent 52% 55%,#000 55% 61%,transparent 61% 65%,#000 65% 70%,transparent 70% 75%,#000 75% 79%,transparent 79% 85%,#000 85% 88%,transparent 88%);mask-image:linear-gradient(180deg,#000 0 52%,transparent 52% 55%,#000 55% 61%,transparent 61% 65%,#000 65% 70%,transparent 70% 75%,#000 75% 79%,transparent 79% 85%,#000 85% 88%,transparent 88%)}
.horizon-sea{position:absolute;left:-20%;right:-20%;bottom:0;height:28%;background:linear-gradient(color-mix(in srgb,var(--t-acc-2,#ff6ec7) 66.7%,transparent) 1px,transparent 1px) 0 0/100% 12px,linear-gradient(90deg,color-mix(in srgb,var(--t-acc-1,#6ff3ff) 53.3%,transparent) 1px,transparent 1px) 50% 0/46px 100%,linear-gradient(color-mix(in srgb,var(--t-acc-3-dark,#1a0f30) 69%,transparent),color-mix(in srgb,var(--t-surf-1,#140c26) 94.9%,transparent));z-index:2;transform:perspective(120px) rotateX(48deg);transform-origin:50% 0}
.brand{position:relative}.brand .seal{position:absolute;left:84px;top:62px;display:inline-grid;place-items:center;width:1.5em;min-width:1.5em;font:700 .5em/1.05 "Yu Mincho","Hiragino Mincho ProN","Noto Serif JP","Noto Serif CJK JP",serif;writing-mode:vertical-rl;white-space:nowrap;letter-spacing:.05em;color:var(--t-text-0,#fff4ea);-webkit-text-fill-color:var(--t-text-0,#fff4ea);background:var(--shu);border-radius:5px;padding:.25em .12em;box-shadow:0 0 0 2px color-mix(in srgb,var(--t-acc-2-deep,#d9412b) 33.3%,transparent),0 0 14px color-mix(in srgb,var(--t-acc-2-deep,#d9412b) 40%,transparent);transform:rotate(-4deg)}
.brand small{text-shadow:0 1px 8px var(--t-surf-0,#0e0a1c)}

/* Login: the same horizon, larger, behind the card */
.login-wrap{position:relative;overflow:hidden;isolation:isolate;grid-template-columns:minmax(0,1fr)}.login-card{width:min(420px,100%)}
.login-wrap>.horizon{position:fixed;inset:0;z-index:-1;background:radial-gradient(620px 260px at 79% 60%,color-mix(in srgb,var(--t-acc-2,#ff6ec7) 34.9%,transparent),transparent 70%),linear-gradient(180deg,var(--t-surf-0,#0e0a1c) 0%,var(--t-acc-3-dark,#1d1236) 40%,var(--t-acc-3-dark,#4a1a4f) 62%,var(--t-surf-1,#140c26) 62.3%)}
.login-wrap>.horizon .horizon-sun{left:76%;bottom:38%;width:360px;height:360px;margin-left:-180px;margin-bottom:-150px}
.login-wrap>.horizon .horizon-sea{height:70%;bottom:auto;top:62%;background-size:100% 30px,96px 100%;transform:perspective(700px) rotateX(62deg)}
.login-card{background:color-mix(in srgb,var(--t-surf-1,#150f29) 85.1%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}

/* Page titles in vaporwave chrome */
.page-heading h1,.page-heading h2{background:var(--chrome);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 10px color-mix(in srgb,var(--t-acc-2,#ff6ec7) 20%,transparent))}

/* Panels: a sunset rim on the stats strip and soft inner light */
.stats{position:relative;background:linear-gradient(180deg,var(--t-surf-2,#1b1335),var(--t-surf-1,#140f28));box-shadow:inset 0 1px #ffffff0f,0 10px 40px #0006}
.stats::before{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:var(--wave-sunset);opacity:.85}
.workspace,.chart-card{box-shadow:inset 0 1px #ffffff0a,0 10px 40px #0005}

/* Neon metrics */
.stat-value{color:var(--t-text-0,#f4f1ff);text-shadow:0 0 14px color-mix(in srgb,var(--t-text-2,#9ea0d9) 40%,transparent)}
.stat-value.accent{color:var(--t-acc-1,#9ff0ff);text-shadow:0 0 12px color-mix(in srgb,var(--t-acc-1,#6ff3ff) 66.7%,transparent),0 0 32px color-mix(in srgb,var(--t-acc-1,#6ff3ff) 26.7%,transparent)}
.stat-value.pink{color:var(--t-acc-2,#ffb3d0);text-shadow:0 0 12px color-mix(in srgb,var(--t-acc-2,#ff6ec7) 66.7%,transparent),0 0 32px color-mix(in srgb,var(--t-acc-2,#ff6ec7) 26.7%,transparent)}
.ticker-metric em,.session-delta:not(.negative){color:#8ff7c4;text-shadow:0 0 10px #6ee1a699}
.delta-meter.positive .delta-fill{box-shadow:0 0 8px #6ee1a6cc}
.delta-meter.positive .delta-label{text-shadow:0 0 10px #6ee1a688}
.delta-meter.negative .delta-fill{box-shadow:0 0 6px #f17c8866}
.bar-fill{position:relative;overflow:hidden;box-shadow:0 0 10px #ffffff22}
.bar-fill::after,.delta-meter.positive .delta-fill::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,#ffffff8c 50%,transparent 70%) 0 0/250% 100% no-repeat;background-position:150% 0;mix-blend-mode:screen}
.chart-card svg .raise-after,.chart-card svg .raise-point{filter:drop-shadow(0 0 3px #fff8)}
.score-table tbody tr:hover{background:linear-gradient(90deg,color-mix(in srgb,var(--t-acc-2,#ff6ec7) 7.8%,transparent),color-mix(in srgb,var(--t-acc-1,#6ff3ff) 5.1%,transparent) 60%,transparent)}
nav a.active{text-shadow:0 0 12px color-mix(in srgb,var(--t-acc-1,#6ff3ff) 53.3%,transparent)}

@media(prefers-reduced-motion:no-preference){
 .horizon-sea{animation:vapor-sea 2.4s linear infinite}
 .login-wrap>.horizon .horizon-sea{animation-duration:3.2s}
 .stat-value{animation:stat-flare 1.1s cubic-bezier(.2,.7,.2,1) both}
 .stat:nth-child(2) .stat-value{animation-delay:.08s}.stat:nth-child(3) .stat-value{animation-delay:.16s}.stat:nth-child(4) .stat-value{animation-delay:.24s}
 .bar-fill::after,.delta-meter.positive .delta-fill::after{animation:vapor-sheen 4.5s ease-in-out infinite}
 .ticker-metric em,.session-delta:not(.negative){animation:gain-pulse 2.6s ease-in-out infinite}
}
@keyframes vapor-sea{to{background-position:0 12px,50% 0,0 0}}
@keyframes stat-flare{0%{opacity:0;transform:translateY(6px);filter:brightness(2.2) blur(2px)}45%{opacity:1;filter:brightness(1.6) blur(0)}100%{opacity:1;transform:none;filter:none}}
@keyframes vapor-sheen{0%,55%{background-position:150% 0}100%{background-position:-50% 0}}
@keyframes gain-pulse{0%,100%{text-shadow:0 0 6px #6ee1a666}50%{text-shadow:0 0 14px #6ee1a6dd}}

@media(max-width:1100px){.horizon-sun{left:91%;width:96px;height:96px;margin-left:-48px;margin-bottom:-40px;opacity:.45}.horizon{background:radial-gradient(200px 80px at 91% 74%,color-mix(in srgb,var(--t-acc-2,#ff6ec7) 25.1%,transparent),transparent 70%),linear-gradient(180deg,var(--t-surf-1,#110b24) 0%,var(--t-acc-3-dark,#1d1236) 48%,var(--t-acc-3-dark,#4a1a4f) 72%,var(--t-surf-1,#140c26) 72.5%)}.header-actions a,.player-tag{text-shadow:0 0 6px var(--t-surf-0,#0e0a1c),0 0 12px var(--t-surf-0,#0e0a1c)}.brand .seal{left:62px;top:46px}}
@media(max-width:700px){.horizon{background:radial-gradient(160px 70px at 80% 80%,color-mix(in srgb,var(--t-acc-2,#ff6ec7) 30.2%,transparent),transparent 70%),linear-gradient(180deg,var(--t-surf-1,#110b24) 0%,var(--t-acc-3-dark,#1d1236) 55%,var(--t-acc-3-dark,#4a1a4f) 80%,var(--t-surf-1,#140c26) 80.5%)}.horizon-sun{display:none}.brand .seal{left:44px;top:38px;font-size:.62em}.horizon-sea{height:20%}.topbar{padding-bottom:12px}.horizon-cloud{width:110px;height:35px}.login-wrap>.horizon .horizon-sun{display:block;left:50%;width:240px;height:240px;margin-left:-120px;margin-bottom:-110px}}
@media print{.horizon,body::before,body::after{display:none}.page-heading h1,.page-heading h2{-webkit-text-fill-color:currentColor;background:none;filter:none}}
/* Japanese scroll clouds drift left to right behind the sun */
.horizon-cloud{position:absolute;z-index:0;left:0;width:200px;height:64px;background:var(--cloud) 0 0/100% 100% no-repeat;opacity:.38;filter:drop-shadow(0 0 10px color-mix(in srgb,var(--t-acc-2,#ff9ec4) 33.3%,transparent));transform:translateX(30vw)}
.horizon-cloud.c1{top:6%;transform:translateX(12vw)}
.horizon-cloud.c2{top:30%;width:150px;height:48px;opacity:.22;transform:translateX(58vw)}
.horizon-cloud.c3{top:-6%;width:240px;height:77px;opacity:.18;transform:translateX(80vw)}
.login-wrap>.horizon .horizon-cloud{opacity:.42}.login-wrap>.horizon .horizon-cloud.c1{top:14%;width:420px;height:134px}
.login-wrap>.horizon .horizon-cloud.c2{top:34%;width:320px;height:102px}
.login-wrap>.horizon .horizon-cloud.c3{top:4%;width:520px;height:166px}
@media(prefers-reduced-motion:no-preference){.horizon-cloud{animation:cloud-drift 90s linear infinite}.horizon-cloud.c1{animation-delay:-30s}.horizon-cloud.c2{animation-duration:120s;animation-delay:-80s}.horizon-cloud.c3{animation-duration:150s;animation-delay:-20s}}
@keyframes cloud-drift{from{transform:translateX(-560px)}to{transform:translateX(100vw)}}
/* Song titles take on their jacket's colours once sampled; the default colour stays for charts without cached art. */
[data-ink="ready"]:not(.song-button),.song-button[data-ink="ready"] .song-title-text{background:var(--title-ink);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 1px 1px color-mix(in srgb,var(--t-surf-0,#0e0a1c) 80%,transparent))}
.song-button[data-ink="ready"]:hover{filter:drop-shadow(0 0 6px #ffffff55) brightness(1.15)}
@media print{[data-ink="ready"],[data-ink="ready"] .song-title-text{-webkit-text-fill-color:currentColor;background:none;filter:none}}
/* Bolder, slightly larger song titles so jacket colours read clearly; the compact Volforce halves keep their size. */
.song-button{font-weight:650;font-size:.9375rem;letter-spacing:-.005em}
.volforce-table .song-button{font-size:.875rem}
.mobile-card .song-button{font-size:1rem}
.ticker-song strong{font-weight:700}
/* Grade ladder: muted below A, greens, blues, violet-pinks, golds, then a glowing sunset S++ and a shimmering PUC. */
.grade[data-grade]{font-weight:800;letter-spacing:.01em}
.grade[data-grade="D"]{color:#8a8199}.grade[data-grade="C"]{color:#a99cbf}.grade[data-grade="B"]{color:#c9c2a6}
.grade[data-grade="A"]{color:#a6dc9a}.grade[data-grade="A+"]{color:#7fe7b8}
.grade[data-grade="AA"]{color:#86b8ff}.grade[data-grade="AA+"]{color:#8fe0ff}
.grade[data-grade="AAA"]{color:#c9a2ff}.grade[data-grade="AAA+"]{color:#ff92d4}
.grade[data-grade="S"]{color:#ffbf73}.grade[data-grade="S+"]{color:#ffd86b;text-shadow:0 0 8px #ffd86b55}
.grade[data-grade="S++"]{background:linear-gradient(90deg,#ffe08a,#ffb1b2 55%,#ff7fc4);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 5px #ff9ec488)}
.grade[data-grade="PUC"]{background:linear-gradient(90deg,#fff6b0,#8ff0ff 30%,#ffffff 50%,#ff9ee0 70%,#fff6b0) 0 0/200% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 6px #fff6b0aa)}
@media(prefers-reduced-motion:no-preference){.grade[data-grade="PUC"]{animation:grade-shimmer 3s linear infinite}}
@keyframes grade-shimmer{to{background-position:-200% 0}}
@media print{.grade[data-grade="S++"],.grade[data-grade="PUC"]{-webkit-text-fill-color:currentColor;background:none;filter:none}}
/* Light sweep across big headings. */
.page-heading h1,.page-heading h2{position:relative;display:inline-block;background:linear-gradient(105deg,transparent 38%,#ffffffe6 50%,transparent 62%) -160% 0/45% 100% no-repeat,var(--chrome);-webkit-background-clip:text;background-clip:text}
.brand>span{background:linear-gradient(105deg,transparent 38%,#ffffffd9 50%,transparent 62%) -160% 0/2.6em 1.3em no-repeat,linear-gradient(100deg,var(--wave-foam),var(--wave-lavender) 45%,var(--wave-pink)) 0 0/5.2em 1.3em no-repeat;-webkit-background-clip:text;background-clip:text}
.login-card h1{background:linear-gradient(105deg,transparent 38%,#ffffffe6 50%,transparent 62%) -160% 0/40% 100% no-repeat,linear-gradient(100deg,var(--wave-foam),var(--wave-lavender) 45%,var(--wave-pink));-webkit-background-clip:text;background-clip:text}
@media(prefers-reduced-motion:no-preference){
 .page-heading h1,.page-heading h2,.brand>span,.login-card h1{animation:text-sweep 7s ease-in-out infinite}
 .brand>span{animation-delay:2.3s}.login-card h1{animation-delay:1s}
}
@keyframes text-sweep{0%,64%{background-position:-160% 0,0 0}100%{background-position:260% 0,0 0}}
/* Difficulty numbers share one cool-to-warm scale with a subtle gradient toward the next level. */
.lv-text{background:linear-gradient(90deg,var(--lv-a),var(--lv-b));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;font-weight:700}
.bar-row[data-level-ink] .bar-fill{background:linear-gradient(90deg,var(--lv-a),var(--lv-b))!important}
@media print{.lv-text,.page-heading h1,.page-heading h2{-webkit-text-fill-color:currentColor;background:none}}

/* Give camera framing the full visible viewport, with controls clear of safe areas. */
.camera-dialog{width:100vw;max-width:100vw;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh;margin:0;border:0;border-radius:0;padding:max(10px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-left));overflow:hidden;background:var(--wave-night)}
.camera-dialog[open]{display:flex}.camera-dialog::backdrop{background:#000}
.camera-dialog .camera-panel{display:grid;grid-template-rows:auto auto minmax(0,1fr) auto auto;width:100%;height:100%;min-height:0}
.camera-dialog .camera-stage{width:100%;height:100%;min-height:0;aspect-ratio:auto;margin:0;border-radius:0}
.camera-dialog .camera-stage video{object-fit:contain}
.camera-dialog .camera-layout-label{margin:0;gap:12px}.camera-dialog .camera-layout-label select{width:auto;flex:0 1 310px}
.camera-dialog #camera-guide-help{margin:5px 0;font-size:.875rem;line-height:1.3}
.camera-dialog .camera-field>span{font-size:14px;padding:2px 4px;background:color-mix(in srgb,var(--t-surf-1,#101622) 94.9%,transparent)}
.camera-dialog .camera-actions{margin:8px 0 5px}.camera-dialog .camera-actions button{min-height:44px}
.camera-dialog .camera-panel>small{margin:0;font-size:.75rem;line-height:1.3}
@media(orientation:landscape) and (max-height:500px){.camera-dialog{padding:5px max(8px,env(safe-area-inset-right)) max(5px,env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left))}.camera-dialog .camera-panel{grid-template-columns:minmax(0,1fr) 135px;grid-template-rows:auto minmax(0,1fr) auto;column-gap:10px}.camera-dialog .camera-layout-label{grid-column:1;grid-row:1}.camera-dialog #camera-guide-help{grid-column:1;grid-row:3;margin-bottom:0}.camera-dialog .camera-stage{grid-column:1;grid-row:2}.camera-dialog .camera-actions{grid-column:2;grid-row:2;flex-direction:column;margin:0}.camera-dialog .camera-panel>small{grid-column:2;grid-row:3}}

.playing-diagram{margin:20px 0;padding-top:14px;border-top:1px solid var(--line,var(--t-line-1,#334155))}
.playing-diagram[hidden]{display:none}.playing-diagram h3{margin:0}.playing-diagram h3 small{font-size:.75rem;font-weight:normal;margin-left:8px}
.playing-diagram p{font-size:.85rem}.playing-diagram-scroll{height:55vh;max-height:650px;overflow:auto;background:#000;border:1px solid var(--t-line-2,#526075);overscroll-behavior:contain;touch-action:pan-x pan-y pinch-zoom;scrollbar-gutter:stable both-edges}
.playing-diagram-lane{width:min(82%,320px);margin-inline:auto;display:flex;flex-direction:column}.playing-diagram-tile{position:relative;width:100%;flex:none;overflow:hidden}.playing-diagram-tile img{position:absolute;inset:0;display:block;width:100%;height:100%}

/* Dim modal backgrounds without repeatedly blurring an animated full-page surface. */
dialog::backdrop{backdrop-filter:none}
/* Keep decoration running in the active view, but stop repainting the covered page. */
body:has(dialog:modal)>:not(dialog),
body:has(dialog:modal)>:not(dialog) *,
body:has(dialog:modal)>:not(dialog) *::before,
body:has(dialog:modal)>:not(dialog) *::after{animation-play-state:paused!important}
/* Playing now stays open beneath its chart, camera and enlarged photo overlays. */
body:has(#chart-viewer-dialog:modal,#camera-dialog:modal,#score-photo-dialog:modal) #playing-dialog,
body:has(#chart-viewer-dialog:modal,#camera-dialog:modal,#score-photo-dialog:modal) #playing-dialog *,
body:has(#chart-viewer-dialog:modal,#camera-dialog:modal,#score-photo-dialog:modal) #playing-dialog *::before,
body:has(#chart-viewer-dialog:modal,#camera-dialog:modal,#score-photo-dialog:modal) #playing-dialog *::after{animation-play-state:paused!important}

/* Chart art has its own viewport; opening personal bests never expands or loads a chart. */
.playing-diagram-scroll{contain:layout paint}
.chart-viewer-dialog{width:min(94vw,700px);padding:16px;overflow:hidden}
.chart-viewer-heading{display:flex;align-items:center;gap:10px;margin-bottom:10px}.chart-viewer-heading h2{flex:1;min-width:0;font-size:1rem;overflow-wrap:anywhere}.chart-viewer-heading button{flex:none}
.chart-viewer-dialog .playing-diagram{margin:0;padding:0;border:0}.chart-viewer-dialog .playing-diagram h3{display:none}.chart-viewer-dialog .playing-diagram p{margin:0 0 8px}.chart-viewer-dialog .playing-diagram-scroll{height:min(70svh,720px);max-height:none}
#capture-controls[hidden]{display:none}
.capture-actions{display:flex;flex-direction:column;gap:8px}
.capture-actions .camera-button{margin:0;min-height:44px;width:100%}
@media(max-width:700px){
 .chart-viewer-dialog{width:100%;max-width:100%;padding:12px;border-radius:8px}.chart-viewer-heading{gap:6px}.chart-viewer-heading button{font-size:.75rem;padding:8px}.chart-viewer-dialog .playing-diagram-scroll{height:70svh}
}

/* Player goals: independent folder filters and compact recorded session progress. */
.goals-panel{padding:18px;min-width:0}.goals-intro p{margin:0 0 10px}.goal-scope,.goal-history,.goal-coverage,.goal-footer{color:var(--muted,var(--t-text-2,#9eabbc));font-size:.85rem;line-height:1.5}.goals-intro details{margin:12px 0 20px;max-width:960px}.goals-intro details p{margin-top:12px}.goals-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0}.goals-tabs button[aria-pressed="true"]{border-color:var(--cyan,var(--t-acc-1,#67e8f9));color:var(--cyan,var(--t-acc-1,#67e8f9))}.goals-tabs span{opacity:.7;margin-left:5px}.goals-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:end;margin:12px 0 20px}.goals-controls label{display:grid;gap:6px;flex:1 1 180px;max-width:300px;min-width:0;font-size:.85rem}.goals-controls select{width:100%;min-width:0}.goal-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:8px;align-items:stretch}.goal-details{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:10px;align-items:center}.goal-details>div{min-width:0}.goal-card{padding:10px;border:1px solid var(--line,var(--t-line-1,#314156));border-radius:12px;min-width:0;display:flex;flex-direction:column;background:var(--panel,var(--t-surf-2,#14202d))}.goal-card.reached{border-color:var(--t-text-3,#47b59f)}.goal-card-heading{display:flex;flex-wrap:wrap;align-items:center;gap:8px;justify-content:space-between}.goal-card-heading small{color:var(--muted,var(--t-text-2,#9eabbc))}.goal-badge{border-radius:99px;background:var(--t-acc-1-dark,#163c43);color:#9df1d8;font-size:.72rem;padding:4px 8px}.goal-card h3{font-size:.98rem;line-height:1.3;margin:6px 0 8px;overflow-wrap:anywhere}.goal-current{display:grid;gap:2px}.goal-current small{color:var(--muted,var(--t-text-2,#9eabbc))}.goal-current strong{font-size:1.3rem;font-variant-numeric:tabular-nums}.goal-effort{color:var(--t-acc-1,#a9e5e4)}.goal-card p{margin:4px 0 0;font-size:.8rem;line-height:1.35}.goal-card-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto;padding-top:8px}.goal-card-actions button{padding:6px 9px;font-size:.8rem}.goal-progress{display:flex;gap:8px;align-items:center;margin-top:8px}.goal-progress progress{width:100%;height:9px;accent-color:var(--t-acc-1,#67e8f9)}.goal-progress span{font-size:.8rem}.goal-warning{color:#f1c575;font-size:.85rem}.goal-footer{margin-top:20px}.session-goals{padding:14px 18px;border-bottom:1px solid var(--line,var(--t-line-1,#314156))}.session-goals h3{font-size:1rem;margin:0 0 8px}.session-goal-list{list-style:none;padding:0;margin:12px 0 0;display:grid;gap:8px;max-height:290px;overflow:auto}.session-goal{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(120px,auto);gap:14px;align-items:center;padding:10px 12px;border:1px solid var(--line,var(--t-line-1,#314156));border-radius:8px;font-size:.85rem}.session-goal strong{display:block;font-size:.85rem;overflow-wrap:anywhere}.session-goal small{display:block;color:var(--muted,var(--t-text-2,#9eabbc));margin-top:4px}.session-goal.crossed{border-color:var(--t-text-3,#47b59f)}.goal-gain{color:#9df1d8}.goal-session-state{color:var(--muted,var(--t-text-2,#9eabbc));text-align:right}.session-goals p{margin:6px 0}.session-goals a{color:var(--cyan,var(--t-acc-1,#67e8f9))}
@media(max-width:600px){.goals-panel{padding:12px}.goals-controls label{flex:1 1 100%;max-width:100%}.goals-tabs{gap:6px}.goals-tabs button{padding:8px;font-size:.8rem}.goal-card{padding:10px}.session-goals{padding:12px}.session-goal{grid-template-columns:minmax(0,1fr) auto;gap:8px}.goal-session-state{grid-column:1/-1;text-align:left}.goal-current strong{font-size:1.3rem}}
/* Compact goal cards use the space beside the naturally sized raises table. */
.goal-timeline{margin-top:14px}.goal-timeline-day{margin:0 0 16px}.goal-timeline-day h3{font-size:.95rem;margin:0 0 8px}.goal-timeline-day ol{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,350px),1fr));gap:8px;list-style:none;margin:0;padding:0 0 0 12px;border-left:2px solid var(--t-text-3,#47b59f)}.goal-timeline-day li{position:relative;display:grid;gap:6px;align-content:start;padding:9px 10px;border:1px solid var(--line,var(--t-line-1,#314156));border-radius:8px;min-width:0;overflow-wrap:anywhere}.goal-timeline-day li::before{content:"";position:absolute;left:-19px;top:17px;width:10px;height:10px;border-radius:50%;background:#9df1d8}.goal-timeline-heading{display:flex;align-items:start;justify-content:space-between;gap:8px}.goal-timeline-heading>div{min-width:0}.goal-timeline-heading .goal-badge{flex:none}.goal-timeline-day small,.goal-timeline-day p{color:var(--muted,var(--t-text-2,#9eabbc));font-size:.8rem;line-height:1.35;margin:0}.goal-timeline-day strong{display:block;font-size:.95rem;line-height:1.3;margin-top:3px}.goal-timeline-meta{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:10px}.goal-timeline-meta>p:only-child{grid-column:1/-1}.goal-timeline-day ol>li:not(:first-child)::before{display:none}
.session-summary-layout{display:grid;grid-template-columns:minmax(240px,1fr) minmax(0,max-content);align-items:stretch;min-width:0;border-top:1px solid var(--line,var(--t-line-1,#314156))}
.session-summary-layout>.session-goals{border-bottom:0;min-width:0}
.session-raises-content{min-width:0;border-left:1px solid var(--line,var(--t-line-1,#314156))}
.session-goal-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:8px;max-height:440px;margin:6px 0}
.session-goal{display:flex;flex-direction:column;align-items:start;gap:3px;padding:6px 10px;border:0;border-left:2px solid var(--line,var(--t-line-1,#314156));border-radius:0;font-size:.8rem}
.session-goal strong{font-size:.85rem;line-height:1.4}.session-goal small{margin-top:0;line-height:1.4}.goal-session-state{text-align:left;font-size:.75rem}.session-goal.crossed .goal-session-state{color:#9df1d8}
@media(max-width:900px){.session-summary-layout{grid-template-columns:minmax(0,1fr)}.session-raises-content{border-left:0;border-top:1px solid var(--line,var(--t-line-1,#314156))}.session-goal-list{max-height:260px}}
@media(min-width:901px){.session-summary-layout>.session-goals{position:relative;min-height:240px}.session-summary-layout #session-goals{position:absolute;inset:43px 18px 14px;display:flex;flex-direction:column;min-height:0}.session-summary-layout .session-goal-list{max-height:none;min-height:0;overflow:auto;align-content:start;flex:1}.session-summary-layout .goal-history{flex:none}}

/* Accessible title buttons cover goal cards; explicit tracking controls remain independent. */
.goal-card,.session-goal,.goal-timeline-day li{position:relative}.goal-song-open{display:inline;text-align:left;font:inherit;color:inherit;line-height:inherit;padding:0;border:0;background:none;min-height:0;white-space:normal}.goal-song-open::after{content:"";position:absolute;inset:0;border-radius:inherit}.goal-song-open:hover{color:var(--cyan,var(--t-acc-1,#67e8f9));background:none}.goal-song-open:focus-visible::after{outline:2px solid var(--cyan,var(--t-acc-1,#67e8f9));outline-offset:2px}.goal-card-actions{position:relative;z-index:1}
.goal-songs-dialog{width:min(94vw,760px);max-height:85svh;overflow:auto}.goal-songs-dialog .dialog-heading{position:sticky;top:-10px;background:var(--panel,var(--t-surf-1,#18122b));z-index:1;padding:8px 0}.goal-songs-dialog h2{font-size:1rem;overflow-wrap:anywhere}.goal-song-list{display:grid;gap:8px;list-style:none;padding:0;margin:12px 0}.goal-song-list>li{padding:10px;border:1px solid var(--line,var(--t-line-1,#314156));border-radius:8px;min-width:0}.goal-song-name{display:flex;gap:9px;align-items:center}.goal-song-name>div{flex:1;min-width:0}.goal-song-name strong{display:block;font-size:.9rem;overflow-wrap:anywhere}.goal-song-name small,.goal-song-metrics small{display:block;color:var(--muted,var(--t-text-2,#9eabbc));font-size:.75rem}.goal-song-name .song-jacket{width:40px;height:40px;flex:none}.goal-song-name button{font-size:.75rem;padding:6px;flex:none}.goal-song-metrics{display:flex;gap:8px 20px;flex-wrap:wrap;margin-top:8px}.goal-song-metrics strong{font-size:.875rem;font-variant-numeric:tabular-nums}.goal-song-metrics strong small{display:inline}
@media(max-width:600px){.goal-songs-dialog{width:calc(100vw - 24px);padding:10px;box-sizing:border-box}.goal-song-name{flex-wrap:wrap}.goal-song-name>div{flex-basis:calc(100% - 50px)}.goal-song-name button{margin-left:49px}.goal-song-metrics{gap:6px 15px}}

/* Private, reversible Konasute ownership controls. */
.ownership-controls{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;margin-top:.6rem}
.ownership-controls[hidden]{display:none}.ownership-controls small{max-width:42rem;color:var(--muted)}
.ownership-search{display:flex;align-items:end;gap:.5rem;flex-wrap:wrap}.ownership-search label{flex:1;min-width:12rem}
.ownership-list{list-style:none;margin:.5rem 0;padding:0;max-width:60rem}
.ownership-list li{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.45rem 0;border-bottom:1px solid var(--line)}
.ownership-list li span{min-width:0;overflow-wrap:anywhere}.ownership-list small{display:block;color:var(--muted)}
.ownership-list button{flex:none}.ownership-dialog{max-width:min(36rem,calc(100vw - 2rem))}
@media(max-width:600px){.ownership-list button{font-size:.8rem;padding:.4rem}.ownership-controls button{width:100%}}

/* Compact per-song Volforce opportunities and current-goal score summaries. */
.volforce-goal-summary{display:flex;gap:1.5rem;flex-wrap:wrap;margin:1rem 0}.volforce-goal-summary small,.volforce-goal-summary strong{display:block}.volforce-goal-summary strong{font-size:1.7rem}
.volforce-goal-song{display:flex;align-items:center;gap:.6rem}.volforce-goal-song>div{flex:1;min-width:0}.volforce-goal-song h3{font-size:1rem;margin:.15rem 0;overflow-wrap:anywhere}.volforce-goal-song>strong{flex:none}
.volforce-goal-values{display:flex;flex-wrap:wrap;gap:.3rem 1rem;font-size:.8rem}.volforce-goal-values strong{display:block}.volforce-goal .goal-card-actions{align-items:center}.volforce-goal .goal-card-actions small{font-size:.75rem;color:var(--muted)}
.score-goal-target{max-width:15rem;white-space:normal;font-size:.85rem;overflow-wrap:anywhere}
.goal-timeline .volforce-goal{border:0;padding:0;background:transparent}.goal-timeline .volforce-goal h3{font-size:.9rem}

/* Keep Scores folder choices and narrow score cards predictable as sources change. */
.rating-folder-toggle{margin:0 0 8px}
@media(max-width:700px){
 .mobile-score-card .mobile-chart{display:flex;align-items:center;gap:8px}
 .mobile-score-card .mobile-chart>.rating{flex:none;margin:0}
 .mobile-score-card .mobile-chart>.song-entry{flex:1;min-width:0;width:0}
 .mobile-score-card .mobile-meta{flex-wrap:nowrap;align-items:center;gap:5px}
 .mobile-score-card .mobile-meta .playing-button{margin:0 0 0 auto;flex:none}
 .mobile-score-card .mobile-source-ex{display:flex;align-items:center;gap:6px;margin:4px 0;min-width:0;overflow-x:auto}
 .mobile-score-card .mobile-sources{flex:none}
 .mobile-score-card .mobile-sources .source-chips{display:flex;flex-wrap:nowrap;gap:3px}
 .mobile-score-card .mobile-sources .source-chip{font-size:.625rem;letter-spacing:0;padding:2px 3px}
 .mobile-score-card .mobile-ex{flex:none;display:block;margin:0;white-space:nowrap}
 .mobile-score-card .mobile-row-actions{justify-content:space-between;flex-wrap:wrap}
 .mobile-score-card .mobile-row-actions>.checkbox{margin:0 0 0 auto;white-space:nowrap}
}

/* Reserve a stable title width; oversized names move inside it instead of moving columns. */
.score-table .song-entry{width:clamp(15rem,22vw,20rem);min-width:0;max-width:none}
.score-table .song-label{flex:1;min-width:0;width:100%}
.score-table .chart-title{width:100%;min-width:0}
.score-table .song-button{flex:1;width:0;min-width:0;max-width:none;overflow:hidden;white-space:nowrap;overflow-wrap:normal}
.song-title-text{display:inline-block;white-space:nowrap}
.mobile-list .song-button.has-marquee{overflow:hidden}
.song-button.has-marquee.marquee-visible .song-title-text{animation:song-title-marquee var(--marquee-duration,8s) ease-in-out infinite alternate}
body:has(dialog[open]) .song-title-text{animation-play-state:paused}
@keyframes song-title-marquee{0%,15%{transform:translateX(0)}85%,100%{transform:translateX(var(--marquee-travel,0))}}
@media(prefers-reduced-motion:reduce){
 .song-button.has-marquee.marquee-visible .song-title-text{animation:none}
 .song-button.has-marquee{overflow-x:auto}
}

.photo-read-preview{display:block;width:100%;max-height:40vh;object-fit:contain;margin:8px auto}.photo-inbox-row{flex-wrap:wrap}#capture-ocr-status{font-size:.88rem}#photo-read-dialog label{display:block;margin-block:8px}
