/* Thuis — demo of Marley's Bluesound + lights remote. Dark, mobile first. rem/vw only. */
:root {
  --bg: #0d0f13;
  --surface: #161a21;
  --surface-2: #1e232d;
  --card: #161a21;
  --card-2: #1e232d;
  --line-soft: rgb(255 255 255 / 6%);
  --line: #2b3240;
  --line-strong: #3a4252;
  --text: #e9edf3;
  --muted: #8b95a7;
  --accent: #4fd1c5;
  --accent-soft: rgb(79 209 197 / 16%);
  --accent-text: #062a27;
  --accent-ink: #062a27;
  --danger: #f0716b;
  --bad: #f0716b;
  --warn: #f5b041;
  --warn-soft: #3a2a10;
  --ok-soft: #12301f;
  --bad-soft: #3a1717;
  --radius: 1.4rem;
  --radius-sm: 1rem;
  --gutter: 5vw;
  --font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --shadow-lg: 0 1rem 3rem rgb(0 0 0 / 55%);
  --morph-ease: cubic-bezier(.32, .72, 0, 1);
  --morph-ms: .5s;
  color-scheme: dark;
}
html, body { background: var(--bg); color: var(--text); }
body { font: 1rem/1.4 var(--font); padding-bottom: 4rem; -webkit-text-size-adjust: 100%; overflow-x: hidden; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; touch-action: manipulation; -webkit-tap-highlight-color: transparent; }
button:disabled { opacity: .4; cursor: default; }
.hidden, [hidden] { display: none !important; }
.muted { color: var(--muted); }

button.icon { width: 2.75rem; height: 2.75rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; position: relative; }
button.icon .ms { font-size: 1.5rem; }
button.icon:hover { background: rgb(255 255 255 / 5%); }
button.icon:active { background: rgb(255 255 255 / 10%); }
button.icon.sm { width: 2.25rem; height: 2.25rem; }
button.icon.sm .ms { font-size: 1.25rem; }
button.icon.active { color: var(--accent); }
.badge { position: absolute; right: .1rem; top: .2rem; background: var(--accent); color: var(--accent-ink); font-size: .6rem; font-weight: 700; border-radius: .6rem; padding: 0 .3rem; line-height: 1.5; }

/* ---------- Top bar (fixed controls on the right) ---------- */
.top { position: sticky; top: 0; z-index: 5; display: flex; align-items: center; gap: .5rem; padding: .5rem var(--gutter); background: color-mix(in srgb, var(--bg) 82%, transparent); -webkit-backdrop-filter: blur(1rem); backdrop-filter: blur(1rem); view-transition-name: kop; }
.top h1 { font-size: 1.25rem; margin: 0; display: flex; align-items: center; gap: .5rem; white-space: nowrap; }
.top h1 .ms { font-size: 1.5rem; background: linear-gradient(135deg, #4fd1c5, #ffb347); -webkit-background-clip: text; background-clip: text; color: transparent; }
.top .k-demo-badge { flex: 0 1 auto; }
.toolbar { gap: .1rem; }
.tb-var { display: inline-flex; }
.statusbar { display: none; }
html.in-frame .top { padding-top: 2.6rem; }
html.in-frame .statusbar { display: flex; position: absolute; left: 0; right: 0; top: 0; height: 2.3rem; align-items: center; justify-content: space-between; padding: .5rem 1.6rem 0; font-size: .8rem; font-weight: 600; pointer-events: none; }
.statusbar .ms { font-size: .95rem; }
.statusbar span:last-child { display: inline-flex; gap: .2rem; }
.busy-bar { position: fixed; top: 0; left: 0; right: 0; height: .2rem; z-index: 10; background: linear-gradient(90deg, transparent, var(--accent), transparent); background-size: 50% 100%; animation: busy 1s linear infinite; }
@keyframes busy { from { background-position: -50% 0; } to { background-position: 150% 0; } }

.seg { display: inline-flex; background: var(--card); border: .0625rem solid var(--line); border-radius: 2rem; padding: .2rem; margin-left: .25rem; }
.seg button { display: inline-flex; align-items: center; gap: .35rem; padding: .45rem .8rem; border-radius: 2rem; font-size: .9rem; color: var(--muted); transition: background .2s, color .2s; }
.seg button .ms { font-size: 1.15rem; }
.seg button.active { background: var(--text); color: var(--bg); font-weight: 600; }
.badge-float { display: none; }
@media (max-width: 30rem) {
  .title-text, .seg-label, #badge { display: none; }
  .seg button { padding: .45rem .6rem; }
  .top { gap: .25rem; }
  .badge-float { display: block; position: fixed; left: 1.1rem; bottom: 1.1rem; z-index: 6; pointer-events: none; }
  .badge-float .k-demo-badge { box-shadow: 0 .25rem .75rem rgb(0 0 0 / 45%); background: #3a2a10; }
}
.tab { animation: fade .2s ease; }
@keyframes fade { from { opacity: 0; transform: translateY(.25rem); } to { opacity: 1; transform: none; } }

/* ---------- Quick actions + scenes ---------- */
.scenes { display: flex; flex-direction: column; gap: .9rem; padding: .25rem var(--gutter) 1rem; max-width: 44rem; margin: 0 auto; }
.chip { flex: 0 0 auto; display: inline-flex; align-items: center; gap: .35rem; padding: .5rem .95rem; border-radius: 2rem; background: var(--card-2); border: .0625rem solid var(--line-soft); transition: background .2s, color .2s; font-size: .9rem; white-space: nowrap; }
.chip .ms { font-size: 1.1rem; }
.chip.active { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
.chip.quick { background: transparent; border-color: var(--line); }
.chips { display: flex; gap: .5rem; overflow-x: auto; scrollbar-width: none; margin: 0 -1rem; padding: 0 1rem; }
.chips::-webkit-scrollbar { display: none; }
.chips:empty { display: none; }
.sub-head { display: flex; align-items: baseline; gap: .6rem; margin-top: .4rem; padding: 0 .25rem; }
.sub-head h3 { margin: 0; font-size: .8rem; text-transform: uppercase; letter-spacing: .08em; color: var(--muted); font-weight: 600; }
.sub-head small { font-size: .75rem; }
.scene-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(8.5rem, 1fr)); gap: .7rem; }
.scene-tile { position: relative; display: flex; flex-direction: column; justify-content: space-between; gap: .9rem; min-height: 5.5rem; padding: .85rem; border-radius: var(--radius-sm); cursor: pointer; text-align: left; border: .0625rem solid var(--line-soft); background: linear-gradient(135deg, color-mix(in srgb, var(--s1, transparent) 22%, var(--card)), color-mix(in srgb, var(--s2, transparent) 14%, var(--card))); transition: transform .15s, border-color .2s, box-shadow .2s; }
.scene-tile:active { transform: scale(.97); }
.scene-tile.active { border-color: var(--accent); box-shadow: 0 0 0 .0625rem var(--accent) inset; }
.scene-tile .sname { font-weight: 600; font-size: .9rem; padding-right: 1.5rem; }
.scene-tile .sname small { display: block; color: var(--muted); font-weight: 400; font-size: .72rem; margin-top: .15rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.scene-tile .sdots { display: flex; gap: .3rem; flex-wrap: wrap; }
.sdot { width: .85rem; height: .85rem; border-radius: 50%; }
.sdot.off { border: .0625rem solid var(--line); }
.scene-tile .x { position: absolute; top: .35rem; right: .35rem; width: 1.9rem; height: 1.9rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; color: var(--muted); }
.scene-tile .x .ms { font-size: 1rem; }
.scene-tile.add { align-items: center; justify-content: center; gap: .3rem; background: transparent; border: .0625rem dashed var(--line); color: var(--muted); }
.scene-tile.add .sname { padding: 0; font-weight: 500; }
.scene-tile.spk { background: var(--card); }
.scene-tile.spk.active { background: color-mix(in srgb, var(--accent) 10%, var(--card)); }
.sico { width: 1.6rem; height: 1.6rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--card-2); color: var(--muted); }
.sico .ms { font-size: .95rem; }
.scene-tile.spk.active .sico { color: var(--accent); }
.scene-tile.house { min-height: 6rem; }

/* ---------- Group tiles + group card ---------- */
main { display: flex; flex-direction: column; gap: 1rem; padding: 0 var(--gutter); max-width: 44rem; margin: 0 auto; }
.empty { color: var(--muted); text-align: center; padding: 3rem 0; }
.tiles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .9rem; }
@media (min-width: 40rem) { .tiles { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.tile { position: relative; overflow: hidden; display: flex; flex-direction: column; gap: .2rem; min-height: 9.5rem; padding: 1rem; border-radius: var(--radius); background: var(--card); border: .0625rem solid var(--line-soft); cursor: pointer; transition: transform .15s, border-color .2s; -webkit-tap-highlight-color: transparent; }
.tile::before { content: ""; position: absolute; inset: 0; opacity: 0; transition: opacity .4s; background: radial-gradient(120% 90% at 100% 0%, color-mix(in srgb, var(--c1) 45%, transparent), transparent 60%), radial-gradient(90% 80% at 0% 100%, color-mix(in srgb, var(--c2) 25%, transparent), transparent 70%); pointer-events: none; }
.tile.lit::before { opacity: 1; }
.tile:active { transform: scale(.97); }
.tile:focus-visible { outline: .125rem solid var(--accent); }
.tile > * { position: relative; }
.tile-top { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: auto; }
.tile-icon { width: 2.5rem; height: 2.5rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--card-2); color: var(--muted); transition: background .3s, color .3s; }
.tile.lit .tile-icon { background: color-mix(in srgb, var(--c1) 30%, var(--card-2)); color: var(--c1); }
.tile-name { font-weight: 650; font-size: 1.05rem; margin-top: .75rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tile-meta { display: flex; align-items: center; gap: .3rem; color: var(--muted); font-size: .8rem; }
.tile-meta .ms { font-size: .95rem; }
.tile-scene { display: flex; align-items: center; gap: .3rem; font-size: .75rem; color: var(--text); opacity: .8; min-height: 1rem; }
.tile-scene .ms { font-size: .9rem; }
.gtile::before { display: none; }
.gtile .gbg { position: absolute; inset: -20%; filter: blur(1.6rem) saturate(1.4); opacity: 0; transition: opacity .5s; pointer-events: none; }
.gtile.lit .gbg { opacity: .5; }
.gtile.lit .tile-icon { background: color-mix(in srgb, var(--accent) 25%, var(--card-2)); color: var(--accent); }
.gtile.offline { opacity: .55; }
.gtile .tile-scene { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.play-mini { width: 2.5rem !important; height: 2.5rem !important; background: rgb(255 255 255 / 10%) !important; margin: -.15rem -.15rem 0 0; }
.gtile.lit .play-mini { background: var(--text) !important; color: var(--bg); }

.card { background: var(--card); border: .0625rem solid var(--line-soft); border-radius: var(--radius); padding: 1.1rem; display: flex; flex-direction: column; gap: .75rem; }
.card.offline { opacity: .55; }
.card-head { display: flex; align-items: center; justify-content: space-between; gap: .5rem; flex-wrap: wrap; row-gap: .6rem; }
.card-head h2 { margin: 0; font-size: 1.1rem; line-height: 1.25; min-width: 0; flex: 1 1 auto; }
.card-head h2 small { display: block; color: var(--muted); font-weight: normal; font-size: .8rem; }
.card-head .back { margin-left: -.6rem; }
.card-tools { order: 3; width: 100%; display: flex; justify-content: space-around; background: var(--card-2); border-radius: 2rem; padding: .1rem; }
.np { display: flex; align-items: center; gap: .75rem; min-height: 4rem; }
.art { position: relative; width: 4rem; height: 4rem; border-radius: .5rem; background: var(--card-2); flex: 0 0 auto; display: flex; align-items: center; justify-content: center; color: rgb(255 255 255 / 85%); overflow: hidden; box-shadow: 0 .4rem 1rem rgb(0 0 0 / 35%); }
.art .ms { font-size: 1.75rem; text-shadow: 0 .1rem .4rem rgb(0 0 0 / 35%); }
.art.none { color: var(--muted); box-shadow: none; }
.art.spin::after { content: ""; position: absolute; inset: 0; background: linear-gradient(115deg, transparent 30%, rgb(255 255 255 / 18%) 45%, transparent 60%); }
.np-text { flex: 1 1 auto; min-width: 0; }
.np-text div { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.np-title { font-weight: 600; }
.np-sub { font-size: .9rem; }
.transport { display: flex; align-items: center; gap: .1rem; flex: 0 0 auto; }
.transport .big { width: 3.25rem; height: 3.25rem; background: var(--card-2); }
.transport .big .ms { font-size: 2rem; }
@media (max-width: 24rem) { .transport [data-act=prev] { display: none; } }
.prog { display: flex; align-items: center; gap: .25rem; margin-top: -.25rem; }
.prog .time { font-size: .75rem; color: var(--muted); font-variant-numeric: tabular-nums; width: 2.6rem; text-align: center; flex: 0 0 auto; }
.prog input[type=range] { flex: 1 1 auto; min-width: 0; height: 1.75rem; }
.prog input[type=range]::-webkit-slider-runnable-track { height: .3rem; }
.prog input[type=range]::-webkit-slider-thumb { width: .9rem; height: .9rem; margin-top: -.3rem; }
.prog input[type=range]::-moz-range-track, .prog input[type=range]::-moz-range-progress { height: .3rem; }
.prog input[type=range]::-moz-range-thumb { width: .9rem; height: .9rem; }

.vol { display: flex; align-items: center; gap: .1rem; }
.vol .num { width: 2.2rem; text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; flex: 0 0 auto; }
.vol .nudge { width: 2.25rem; }
.vol input[type=range] { flex: 1 1 auto; min-width: 0; margin: 0 .25rem; }
.vol .lead { color: var(--muted); font-size: 1.2rem; width: 2.25rem; text-align: center; flex: 0 0 auto; }
.group-vol { background: var(--card-2); border-radius: .75rem; padding: .35rem .5rem; }
.group-vol .num { font-size: 1.1rem; }
.group-vol .glabel { font-size: .72rem; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; padding: .15rem 0 0 .5rem; }
.members { display: flex; flex-direction: column; gap: .25rem; }
.member { display: flex; flex-direction: column; padding: .25rem 0; border-top: .0625rem solid var(--line); }
.member .mname { display: flex; align-items: center; gap: .4rem; font-size: .9rem; padding: .25rem 0 0 .5rem; }
.member .mname .tag, .lname .tag { font-size: .7rem; color: var(--muted); border: .0625rem solid var(--line); border-radius: .4rem; padding: .05rem .35rem; }
.member .mname .db { color: var(--muted); font-size: .75rem; margin-left: auto; padding-right: .5rem; font-variant-numeric: tabular-nums; }
.member.off .mname { color: var(--muted); }
.member .vol .leave, .member .vol .more { color: var(--muted); }
.member .vol .more { margin-left: -.4rem; }
@media (max-width: 24rem) { .member .vol .nudge { display: none; } }

input[type=range] { -webkit-appearance: none; appearance: none; height: 2.75rem; background: transparent; cursor: pointer; }
input[type=range]:focus { outline: none; }
input[type=range]::-webkit-slider-runnable-track { height: .5rem; border-radius: .25rem; background: linear-gradient(90deg, var(--accent) var(--pct, 0%), var(--line) var(--pct, 0%)); }
input[type=range]::-moz-range-track { height: .5rem; border-radius: .25rem; background: var(--line); }
input[type=range]::-moz-range-progress { height: .5rem; border-radius: .25rem; background: var(--accent); }
input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 1.6rem; height: 1.6rem; border-radius: 50%; background: #fff; margin-top: -.55rem; box-shadow: 0 .1rem .4rem rgb(0 0 0 / 50%); }
input[type=range]::-moz-range-thumb { width: 1.6rem; height: 1.6rem; border: 0; border-radius: 50%; background: #fff; box-shadow: 0 .1rem .4rem rgb(0 0 0 / 50%); }
input[type=range].muted::-webkit-slider-runnable-track { background: linear-gradient(90deg, var(--muted) var(--pct, 0%), var(--line) var(--pct, 0%)); }
input[type=range].muted::-moz-range-progress { background: var(--muted); }
input[type=range]:disabled { opacity: .4; }

/* ---------- Dialogs (kit dialog, restyled) ---------- */
dialog.k-dialog { border: .0625rem solid var(--line-soft); background: var(--card); width: min(92vw, 28rem); max-height: 85vh; }
dialog.k-dialog .k-dialog-head h2 { font-size: 1.1rem; }
dialog.k-dialog .k-dialog-body { overflow-y: auto; }
.k-dialog-foot { background: var(--card); border-top-color: var(--line-soft); }
.k-dialog-foot:empty { display: none; }
.k-btn { border-radius: 2rem; height: 2.5rem; padding: 0 1.1rem; }
.k-btn.primary { color: var(--accent-ink); }
.k-toast { background: #2b3140; color: var(--text); font-size: .9rem; }
.k-toasts { bottom: 1.5rem; }
dialog.k-dialog.sheet { width: 100vw; height: 100dvh; max-height: none; max-width: none; margin: 0; border-radius: 0; display: flex; flex-direction: column; }
dialog.k-dialog.sheet:not([open]) { display: none; }
dialog.k-dialog.sheet .k-dialog-body { flex: 1 1 auto; padding: 0 0 2rem; gap: 0; }
html.in-frame dialog.k-dialog.sheet .k-dialog-head { padding-top: 2.6rem; }
@media (min-width: 40rem) { dialog.k-dialog.sheet { width: min(92vw, 30rem); height: 85vh; margin: auto; border-radius: var(--radius); } }
.sheet-sub { color: var(--muted); font-size: .8rem; padding: 0 1.25rem .5rem; }
.sheet-search { display: flex; align-items: center; gap: .5rem; padding: .5rem 1rem; margin: 0 1rem .5rem; border-radius: 2rem; background: var(--card-2); color: var(--muted); }
.sheet-search input { flex: 1; min-width: 0; background: transparent; border: 0; outline: 0; color: var(--text); font: inherit; }
.sheet-chips { padding: 0 1.25rem .5rem; margin: 0; }
.section { padding: .9rem 1.25rem .25rem; color: var(--muted); font-size: .75rem; text-transform: uppercase; letter-spacing: .06em; }
.brow { display: flex; align-items: center; gap: .75rem; padding: .5rem 1.25rem; cursor: pointer; }
.brow:hover { background: rgb(255 255 255 / 3%); }
.brow:active { background: rgb(255 255 255 / 6%); }
.brow .thumb { width: 3rem; height: 3rem; border-radius: .4rem; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; color: rgb(255 255 255 / 85%); }
.brow .thumb .ms { font-size: 1.3rem; }
.brow .grow { flex: 1 1 auto; min-width: 0; }
.brow .grow div, .brow .grow small { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }
.brow small { color: var(--muted); }
.brow.active .grow div { color: var(--accent); font-weight: 600; }
.brow .num { width: 1.6rem; text-align: right; color: var(--muted); font-variant-numeric: tabular-nums; flex: 0 0 auto; font-size: .85rem; }
.brow .dur { color: var(--muted); font-size: .8rem; font-variant-numeric: tabular-nums; flex: 0 0 auto; }
.brow .eq { color: var(--accent); font-size: 1.1rem; }
.list { display: flex; flex-direction: column; }
.row { display: flex; align-items: center; gap: .75rem; padding: .6rem 0; border-top: .0625rem solid var(--line); cursor: pointer; }
.row:first-child { border-top: 0; }
.row .grow { flex: 1 1 auto; min-width: 0; }
.row small { display: block; color: var(--muted); font-size: .8rem; }
.row input[type=checkbox] { width: 1.35rem; height: 1.35rem; accent-color: var(--accent); margin: 0; }
.field { display: flex; flex-direction: column; gap: .3rem; font-size: .85rem; color: var(--muted); }
.field input[type=text] { font: inherit; font-size: 1rem; color: var(--text); background: var(--card-2); border: .0625rem solid var(--line); border-radius: .6rem; padding: .6rem .75rem; width: 100%; }
.field input[type=text]:focus { outline: .125rem solid var(--accent); border-color: transparent; }
.note-small { font-size: .8rem; color: var(--muted); }
.menu-list { display: flex; flex-direction: column; margin: 0 -1.25rem; }
.menu-list button { text-align: left; padding: .8rem 1.25rem; display: flex; align-items: center; gap: .75rem; width: 100%; }
.menu-list button:active { background: rgb(255 255 255 / 6%); }
.menu-list .ms { color: var(--muted); }
.switch { position: relative; width: 2.9rem; height: 1.7rem; flex: 0 0 auto; display: inline-block; cursor: pointer; }
.switch input { opacity: 0; width: 0; height: 0; position: absolute; }
.switch span { position: absolute; inset: 0; border-radius: 1rem; background: var(--line); transition: .2s; }
.switch span::before { content: ""; position: absolute; width: 1.3rem; height: 1.3rem; left: .2rem; top: .2rem; border-radius: 50%; background: #fff; transition: .2s; }
.switch input:checked + span { background: var(--accent); }
.switch input:checked + span::before { transform: translateX(1.2rem); }
.setting { padding: .5rem 0; }
.setting .s-head { display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.setting .s-head .val { color: var(--muted); font-variant-numeric: tabular-nums; }
.setting input[type=range] { width: 100%; }

/* ---------- Lights ---------- */
.lights-main { padding-top: .25rem; }
#lights, #disco { display: flex; flex-direction: column; gap: 1rem; }
.room-view { display: flex; flex-direction: column; gap: .9rem; background: var(--surface); border: .0625rem solid var(--line-soft); border-radius: var(--radius); padding: 1rem; --card: #1e232d; --card-2: #282e3a; }
.rv-head { display: flex; align-items: center; gap: .5rem; }
.rv-head h2 { flex: 1 1 auto; min-width: 0; margin: 0; font-size: 1.3rem; }
.rv-head h2 small { display: block; color: var(--muted); font-weight: normal; font-size: .8rem; margin-top: .1rem; }
.rv-head .icon { margin-left: -.5rem; }
.card.slim { padding: .35rem .75rem; }
.list-card { padding: .25rem 1rem; gap: 0; }
.lamp { padding: .5rem 0; border-top: .0625rem solid var(--line-soft); }
.lamp:first-child { border-top: 0; }
.lamp.off { opacity: .5; }
.lrow { display: flex; align-items: center; gap: .7rem; min-height: 2.75rem; }
.lamp-ico { width: 2.25rem; height: 2.25rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--card-2); color: var(--muted); flex: 0 0 auto; transition: background .3s, color .3s; }
.lamp-ico .ms { font-size: 1.2rem; }
.lamp-ico.lit { background: color-mix(in srgb, var(--lc) 28%, var(--card-2)); color: var(--lc); }
.lname { flex: 1 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; gap: .4rem; }
.swatch { width: 1.9rem; height: 1.9rem; border-radius: 50%; border: .125rem solid rgb(255 255 255 / 20%); flex: 0 0 auto; transition: transform .15s, background .3s; }
.swatch:active { transform: scale(.9); }
.lamp .vol { padding-left: 2.95rem; }
.lamp .vol .lead { display: none; }
.colors { display: grid; grid-template-columns: repeat(6, 1fr); gap: .6rem; margin: .25rem 0 .5rem; }
.cchip { aspect-ratio: 1; border-radius: 50%; border: .125rem solid rgb(255 255 255 / 15%); transition: transform .15s; }
.cchip:active { transform: scale(.9); }
.cchip.sel { border-color: #fff; }
.hlist { display: flex; flex-direction: column; gap: .9rem; }
.hrow .hname { font-weight: 600; font-size: .9rem; margin-bottom: .4rem; }
.chips.wrap { flex-wrap: wrap; overflow: visible; margin: 0; padding: 0; }
.chips.wrap .chip { font-size: .82rem; padding: .4rem .75rem; }

/* Disco */
.disco-card { position: relative; overflow: hidden; border-radius: var(--radius); padding: 1rem; background: var(--card); border: .0625rem solid var(--line-soft); display: flex; flex-direction: column; gap: .9rem; }
.disco-card::before { content: ""; position: absolute; inset: -40%; opacity: 0; transition: opacity .6s; pointer-events: none; background: conic-gradient(from 0deg, #ff3d7f33, #ffb83d33, #3dffb033, #3d9bff33, #b03dff33, #ff3d7f33); animation: spin 12s linear infinite; filter: blur(2rem); }
.disco-card.on::before { opacity: 1; }
.disco-card > * { position: relative; }
@keyframes spin { to { transform: rotate(1turn); } }
.disco-top { display: flex; align-items: center; gap: .9rem; }
.ball { width: 3.75rem; height: 3.75rem; border-radius: 50%; padding: .1rem; flex: 0 0 auto; color: var(--muted); transition: transform .2s, filter .3s; }
.ball:active { transform: scale(.93); }
.ball-svg { width: 100%; height: 100%; display: block; overflow: visible; }
.disco-card.on .ball { color: var(--text); filter: drop-shadow(0 0 .9rem rgb(255 255 255 / 35%)); animation: sway 3s ease-in-out infinite; }
.disco-card.on .glints rect, .disco-ico.on .glints rect { animation: twinkle 1.1s ease-in-out infinite; }
.disco-card.on .glints rect:nth-child(2), .disco-ico.on .glints rect:nth-child(2) { animation-delay: .3s; }
.disco-card.on .glints rect:nth-child(3), .disco-ico.on .glints rect:nth-child(3) { animation-delay: .6s; }
.disco-card.on .glints rect:nth-child(4), .disco-ico.on .glints rect:nth-child(4) { animation-delay: .85s; }
@keyframes sway { 50% { transform: rotate(4deg); } }
@keyframes twinkle { 50% { opacity: .1; } }
.disco-info { flex: 1 1 auto; min-width: 0; }
.disco-title { font-weight: 700; font-size: 1.15rem; }
.disco-info small { color: var(--muted); display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mic-btn { background: var(--card-2) !important; }
.mic-btn.active { background: color-mix(in srgb, var(--accent) 22%, var(--card-2)) !important; color: var(--accent); }
.modes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .6rem; }
.mode { display: flex; flex-direction: column; align-items: flex-start; gap: .2rem; padding: .75rem; border-radius: var(--radius-sm); background: var(--card-2); border: .0625rem solid transparent; text-align: left; transition: background .2s, border-color .2s, transform .15s; }
.mode:active { transform: scale(.97); }
.mode .ms { font-size: 1.35rem; color: var(--muted); margin-bottom: .2rem; }
.mode .mname { font-weight: 600; font-size: .9rem; }
.mode small { color: var(--muted); font-size: .7rem; line-height: 1.25; }
.mode.sel { border-color: var(--line); }
.mode.active { background: color-mix(in srgb, var(--accent) 16%, var(--card-2)); border-color: var(--accent); }
.mode[data-mode=slow].active .ms { color: #ff7aa8; }
.mode[data-mode=rave].active .ms { color: #ffd23d; }
.disco-more { display: none; flex-direction: column; gap: .75rem; }
.disco-card.on .disco-more { display: flex; }
.meter-row { display: flex; align-items: center; gap: .75rem; }
.meter { flex: 1 1 auto; height: .45rem; background: var(--line); border-radius: .3rem; overflow: hidden; }
.meter .bar { height: 100%; width: 0; border-radius: .3rem; background: linear-gradient(90deg, #4d8dff, #b04dff, #ff4d6d); transition: width .06s linear; }
.meter .bar.flash { filter: brightness(1.8); }
.bpm { font-variant-numeric: tabular-nums; color: var(--muted); font-size: .8rem; min-width: 4rem; text-align: right; flex: 0 0 auto; }
.disco-card .chips { margin: 0; padding: 0; flex-wrap: wrap; overflow: visible; }
.disco-ico { padding: .3rem; color: var(--muted); }
.disco-ico .ball-svg { width: 100%; height: 100%; }
.disco-ico.on { color: var(--text); filter: drop-shadow(0 0 .45rem rgb(255 255 255 / 45%)); }
.tile.lit.disco::before { transition: opacity .4s, background .15s; }

@media (min-width: 40rem) {
  :root { --gutter: 1.5rem; }
  .top { padding-left: max(1.5rem, calc((100vw - 44rem) / 2 + 1.5rem)); padding-right: max(1.5rem, calc((100vw - 44rem) / 2 + 1.5rem)); }
}

/* Tile grows into the full view (View Transitions), like the real app */
::view-transition-group(kop) { animation: none; }
::view-transition-group(vt-morph) {
  animation-duration: var(--morph-ms); animation-timing-function: var(--morph-ease);
  background: var(--surface); border-radius: var(--radius); overflow: clip;
  box-shadow: inset 0 0 0 .0625rem var(--line-soft), 0 1.5rem 3rem rgb(0 0 0 / 45%);
}
::view-transition-image-pair(vt-morph) { isolation: auto; }
::view-transition-old(vt-morph), ::view-transition-new(vt-morph) { mix-blend-mode: normal; }
::view-transition-old(vt-morph) { animation: vt-out .14s ease-out both; }
::view-transition-new(vt-morph) { height: 100%; object-fit: none; object-position: top center; animation: vt-in .24s .2s ease-out both; }
::view-transition-old(root) { animation: vt-recede var(--morph-ms) var(--morph-ease) both; }
::view-transition-new(root) { animation: vt-in .2s .26s ease-out both; }
html[data-vt=close]::view-transition-old(root) { animation: vt-out .18s ease-out both; }
html[data-vt=close]::view-transition-new(root) { animation: vt-return var(--morph-ms) var(--morph-ease) both; }
html[data-vt=close]::view-transition-new(vt-morph) { animation: vt-in .2s .22s ease-out both; }
@keyframes vt-out { to { opacity: 0; } }
@keyframes vt-in { from { opacity: 0; } }
@keyframes vt-recede { to { opacity: 0; transform: scale(.94); } }
@keyframes vt-return { from { opacity: 0; transform: scale(.94); } }
@media (prefers-reduced-motion: reduce) { ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; } }
