:root{color-scheme:dark;--bg:#0b0c11;--layer:#12141b;--layer2:#1a1d26;--line:rgba(255,255,255,.095);--muted:#9a9eac;--text:#f6f7fb;--accent:#f66c4d;--accent-soft:rgba(246,108,77,.13);--shadow:0 20px 70px rgba(0,0,0,.4)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-height:100vh;background:var(--bg);color:var(--text);font:15px/1.55 'DM Sans',system-ui,-apple-system,sans-serif}button,input,textarea,select{font:inherit}button{cursor:pointer}button:disabled{opacity:.4;cursor:not-allowed}a{color:inherit;text-decoration:none}::selection{background:var(--accent);color:white}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}h1,h2,h3,p{margin-top:0}h1,h2,h3,.brand,.stat-value,.eyebrow{font-family:'Space Grotesk',system-ui,sans-serif}h1{font-size:clamp(2.3rem,8vw,4.6rem);line-height:1.04;letter-spacing:-.06em;margin:0}h2{font-size:1.42rem;letter-spacing:-.045em;margin:0}h3{font-size:1rem;margin:0}p{color:var(--muted)}small,.subtle{color:var(--muted)}.muted{color:var(--muted)}
.bg-glow{pointer-events:none;position:fixed;z-index:-1;top:-220px;right:-260px;width:760px;height:760px;background:radial-gradient(circle,var(--accent-soft),transparent 65%);filter:blur(22px)}
.page{max-width:1100px;margin:0 auto;padding:0 26px 70px}.topbar{min-height:84px;display:flex;align-items:center;justify-content:space-between;gap:20px}.brand{display:inline-flex;align-items:center;gap:12px;font-size:1.1rem;font-weight:700;letter-spacing:-.055em;white-space:nowrap}.brand-mark{display:grid;place-items:center;width:37px;height:37px;border-radius:12px;background:var(--accent);color:#141418;font-weight:800;box-shadow:0 0 40px var(--accent-soft)}.brand sup{font-size:.55rem;letter-spacing:.08em;color:var(--muted);font-weight:500;vertical-align:top;margin-left:2px}.nav-actions{display:flex;align-items:center;gap:10px}.text-link{background:none;border:0;color:var(--muted);font-size:.87rem;padding:10px}.text-link:hover{color:white}.btn{display:inline-flex;justify-content:center;align-items:center;gap:8px;border:1px solid var(--line);border-radius:13px;background:var(--layer2);color:var(--text);font-weight:700;padding:11px 17px;transition:.15s transform,.15s background,.15s border-color;white-space:nowrap}.btn:hover:not(:disabled){transform:translateY(-1px);border-color:rgba(255,255,255,.22)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#111}.btn.primary:hover{filter:brightness(1.09)}.btn.ghost{background:transparent}.btn.small{padding:8px 12px;font-size:.82rem;border-radius:10px}.btn.icon-btn{width:40px;height:40px;padding:0}.btn.danger{color:#ff958e;border-color:rgba(255,149,142,.3)}.pill{display:inline-flex;align-items:center;gap:8px;padding:7px 11px;border:1px solid var(--line);background:rgba(255,255,255,.025);border-radius:100px;font-size:.76rem;font-weight:700;letter-spacing:.015em}.dot{width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 15px var(--accent)}.pill.live .dot{background:#51d99a;box-shadow:0 0 12px #51d99a}.pill.closed .dot{background:#a5a3b6;box-shadow:none}.pill.paused .dot{background:#f6c46b}.eyebrow{display:flex;align-items:center;gap:8px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);font-size:.72rem;font-weight:700}.eyebrow::before{content:'';width:20px;height:2px;background:var(--accent)}
.guest-hero{padding:63px 0 45px;display:flex;justify-content:space-between;align-items:flex-end;gap:30px}.guest-hero .intro{max-width:650px}.guest-hero h1 span{color:var(--accent)}.guest-hero p{margin:20px 0 0;max-width:550px;font-size:1.05rem}.hero-disc{flex:none;width:175px;height:175px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;position:relative;background:repeating-radial-gradient(circle,rgba(255,255,255,.10) 0 1px,transparent 1px 13px),#14151a;box-shadow:0 0 80px var(--accent-soft);transform:rotate(-16deg)}.hero-disc:before{content:'';position:absolute;inset:28px;border:1px solid var(--accent);border-radius:50%;opacity:.55}.hero-disc:after{content:'';position:absolute;inset:69px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 9px #13141a}.hero-disc .disc-caption{position:absolute;bottom:-22px;font-size:.61rem;letter-spacing:.17em;text-transform:uppercase;color:var(--muted);font-weight:800;transform:rotate(16deg)}
.notice{border:1px solid var(--line);border-radius:14px;padding:12px 16px;display:flex;align-items:center;gap:10px;color:var(--muted);background:var(--layer);font-size:.87rem}.notice.demo{border-color:rgba(246,196,107,.32);background:rgba(246,196,107,.06)}.notice strong{color:var(--text)}.main-grid{display:grid;grid-template-columns:minmax(320px,.93fr) minmax(350px,1.07fr);gap:22px;align-items:start}.card{border:1px solid var(--line);border-radius:23px;background:linear-gradient(150deg,rgba(255,255,255,.027),transparent 35%),var(--layer);padding:27px;box-shadow:0 10px 50px rgba(0,0,0,.11)}.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px}.card-head h2{display:flex;align-items:center;gap:11px}.icon-tile{display:grid;place-items:center;width:33px;height:33px;background:var(--accent-soft);color:var(--accent);border-radius:10px;font-size:1rem}.card-head p{margin:4px 0 0}.card p:last-child{margin-bottom:0}label.field-label{display:block;font-size:.78rem;font-weight:800;letter-spacing:.02em;margin:0 0 7px}.field{display:block;width:100%;background:#0f1118;border:1px solid var(--line);color:var(--text);padding:12px 14px;border-radius:12px;outline:none;min-height:48px}.field:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.field::placeholder{color:#747987}textarea.field{resize:vertical}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-field{margin-bottom:17px}.field-note{font-size:.76rem;color:var(--muted);margin:5px 0 0}.form-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:5px}.helper-text{font-size:.76rem;color:var(--muted);margin:11px 0 0}.accent-text{color:var(--accent)}.empty{text-align:center;padding:32px 15px;color:var(--muted)}.empty-icon{font-size:2.3rem;opacity:.55;margin-bottom:8px}.empty h3{color:white;margin:0 0 7px}.empty p{margin:0 auto;max-width:310px;font-size:.88rem}.queue-toolbar{display:flex;align-items:center;gap:7px}.seg{border:0;border-radius:9px;background:transparent;color:var(--muted);padding:7px 11px;font-size:.8rem;font-weight:800}.seg.active{background:var(--layer2);color:white}.song-list{display:flex;flex-direction:column;gap:11px}.song{display:flex;gap:12px;align-items:center;padding:13px;border:1px solid var(--line);border-radius:15px;background:rgba(0,0,0,.13);min-width:0}.song-rank{flex:none;width:31px;text-align:center;font-size:1rem;font-weight:800;font-family:'Space Grotesk';color:#6e7481}.song-main{min-width:0;flex:1}.song-title{display:block;font-size:.95rem;font-weight:800;overflow-wrap:anywhere}.song-sub{color:var(--muted);font-size:.78rem;overflow-wrap:anywhere}.song-sub b{color:#c0c2cb;font-weight:500}.vote-btn{display:flex;flex:none;flex-direction:column;align-items:center;justify-content:center;min-width:57px;min-height:57px;padding:6px 8px;border-radius:11px;border:1px solid var(--line);color:#e2e3e9;background:var(--layer2);font-weight:800;font-size:.94rem}.vote-btn:before{content:'▲';font-size:.63rem;color:var(--muted);line-height:1}.vote-btn.voted{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.vote-btn.voted:before{color:var(--accent)}.song.played{opacity:.55}.song-status{font-size:.71rem;color:#8de9b9;font-weight:700}.guest-list{max-height:660px;overflow:auto;padding-right:4px}.guest-list::-webkit-scrollbar{width:5px}.guest-list::-webkit-scrollbar-thumb{background:#31343f;border-radius:9px}
.footer{padding-top:45px;display:flex;align-items:center;justify-content:space-between;gap:20px;color:var(--muted);font-size:.78rem}.footer b{color:#d6d7dc}.logo-preview{width:64px;height:64px;border-radius:15px;object-fit:contain;background:#20232c;padding:5px}.event-wordmark{color:var(--accent);text-transform:uppercase;letter-spacing:.19em;font-size:.73rem;font-weight:800;display:block;margin-bottom:13px}.hero-logo{max-width:90px;max-height:65px;object-fit:contain;margin-bottom:14px}
/* Dashboard */
.admin-layout{display:grid;grid-template-columns:264px minmax(0,1fr);min-height:100vh}.sidebar{border-right:1px solid var(--line);background:#101117;padding:29px 20px;display:flex;flex-direction:column;gap:25px;position:sticky;top:0;height:100vh}.sidebar-head{padding:0 8px}.side-label{font-size:.66rem;text-transform:uppercase;letter-spacing:.16em;color:#797e8b;font-weight:800;padding:0 10px;margin:0 0 10px}.events-menu{display:flex;flex-direction:column;gap:6px}.event-menu-item{width:100%;text-align:left;border:1px solid transparent;border-radius:12px;padding:11px 12px;background:transparent;color:var(--muted);display:flex;gap:10px;align-items:center}.event-menu-item.active{background:var(--accent-soft);border-color:rgba(246,108,77,.2);color:white}.event-menu-item strong{font-size:.84rem;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.event-menu-item small{display:block;font-size:.72rem}.event-menu-item .event-icon{display:grid;place-items:center;flex:none;width:30px;height:30px;border-radius:9px;background:#242630;color:var(--accent)}.sidebar-bottom{margin-top:auto;padding:14px 10px 0;border-top:1px solid var(--line)}.sidebar-bottom .muted{font-size:.76rem;overflow-wrap:anywhere}.dash-main{padding:28px clamp(20px,4vw,50px) 70px;max-width:1370px;width:100%;margin:0 auto}.dash-top{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:34px}.breadcrumb{font-size:.8rem;color:var(--muted);font-weight:700}.dashboard-header{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;margin-bottom:24px;flex-wrap:wrap}.dashboard-header h1{font-size:clamp(1.85rem,4.4vw,2.75rem);letter-spacing:-.06em}.dashboard-header p{margin:8px 0 0}.dash-header-actions{display:flex;gap:9px;flex-wrap:wrap}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin:0 0 22px}.stat{background:var(--layer);border:1px solid var(--line);border-radius:17px;padding:20px}.stat-label{color:var(--muted);font-size:.76rem;font-weight:700}.stat-value{font-size:2rem;letter-spacing:-.05em;font-weight:700;line-height:1.3;margin:6px 0 0}.dash-columns{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(290px,.75fr);gap:20px;align-items:start}.dash-song{display:flex;align-items:center;gap:13px;border-bottom:1px solid var(--line);padding:13px 0}.dash-song:first-child{padding-top:0}.dash-song:last-child{border-bottom:0;padding-bottom:0}.song-bubble{width:38px;height:38px;flex:none;display:grid;place-items:center;background:var(--accent-soft);border-radius:11px;color:var(--accent);font-weight:900}.dash-song .song-meta{flex:1;min-width:0}.dash-song .song-title{font-size:.91rem}.dash-song-actions{display:flex;align-items:center;gap:6px;flex:none}.count{font-weight:800;color:var(--accent);font-family:'Space Grotesk';font-size:.83rem}.small-section{display:flex;flex-direction:column;gap:14px}.small-section .card{padding:21px}.card-title{font-size:.9rem;font-weight:800;margin:0 0 14px}.stack{display:flex;flex-direction:column;gap:12px}.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px}.share-link{background:#0d0f15;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:.72rem;color:var(--muted);overflow-wrap:anywhere}.color-swatches{display:flex;gap:9px;flex-wrap:wrap}.swatch{width:39px;height:39px;border:2px solid transparent;border-radius:12px;background:var(--color);position:relative;box-shadow:inset 0 0 0 5px rgba(0,0,0,.12)}.swatch.selected{border-color:white;box-shadow:0 0 0 3px rgba(255,255,255,.14)}.swatch[aria-label]{font-size:0}.login-shell{min-height:100vh;display:grid;place-items:center;padding:30px 16px}.login-card{max-width:445px;width:100%;box-shadow:var(--shadow)}.login-card h1{font-size:2.2rem;margin:20px 0 8px}.login-card p{margin:0 0 25px}.login-card .btn{width:100%}.login-card .guest-back{display:block;text-align:center;margin-top:20px}.admin-controls{display:flex;gap:7px;flex-wrap:wrap}.admin-controls .btn{font-size:.76rem}.form-section{margin-top:10px}.separator{height:1px;background:var(--line);margin:18px 0}.inline-code{background:#0b0d12;border:1px solid var(--line);padding:8px 10px;border-radius:9px;font-size:.7rem;color:#e9eaf0;overflow-wrap:anywhere}.selection-info{font-size:.74rem;color:var(--muted)}.state-line{font-size:.8rem;color:var(--muted);margin:0}.state-line strong{color:white}.banner{margin-bottom:21px}.loading-section{padding:25vh 0;text-align:center;color:var(--muted)}.boot{min-height:100vh;display:flex;justify-content:center;align-items:center;gap:12px;color:var(--muted)}.spin{height:19px;width:19px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:rotate 1s linear infinite}@keyframes rotate{to{transform:rotate(360deg)}}.toast{position:fixed;z-index:30;left:50%;bottom:25px;max-width:calc(100vw - 24px);width:max-content;transform:translate(-50%,100px);opacity:0;background:#eceef5;color:#111219;border-radius:12px;padding:12px 19px;font-size:.85rem;font-weight:800;box-shadow:var(--shadow);pointer-events:none;transition:.22s}.toast.show{transform:translate(-50%,0);opacity:1}.toast.error{background:#ff9996}
.overlay{position:fixed;z-index:25;inset:0;background:rgba(0,0,0,.8);backdrop-filter:blur(9px);display:grid;place-items:center;padding:20px}.modal{background:#171920;border:1px solid var(--line);border-radius:22px;padding:28px;max-width:490px;width:100%;box-shadow:var(--shadow);max-height:94vh;overflow:auto}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.qr-box{margin:20px auto;display:grid;place-items:center;background:white;border-radius:15px;padding:14px;width:fit-content;min-width:218px;min-height:218px}.qr-box canvas,.qr-box img{max-width:190px}.qr-label{margin:8px 0;text-align:center;font-weight:800}.close{border:0;background:transparent;color:var(--muted);font-size:1.5rem}.warning{font-size:.75rem;color:#dfb980}.right{text-align:right}.mobile-menu{display:none}
@media(max-width:900px){.admin-layout{grid-template-columns:1fr}.sidebar{position:relative;height:auto;padding:17px 18px;gap:15px}.sidebar-head{display:flex;align-items:center;justify-content:space-between;padding:0}.mobile-menu{display:inline-flex}.sidebar-body{display:none}.sidebar.open .sidebar-body{display:block}.sidebar-bottom{display:none}.dash-main{padding:26px 20px 50px}.stats{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.page{padding:0 17px 50px}.topbar{min-height:72px}.brand{font-size:1rem}.brand-mark{width:34px;height:34px}.nav-actions .text-link{font-size:.77rem;padding:7px}.guest-hero{padding:37px 0 38px}.guest-hero .intro{max-width:100%}.guest-hero p{font-size:.94rem;margin:15px 0 0}.hero-disc{display:none}.main-grid{grid-template-columns:1fr;gap:16px}.card{padding:21px;border-radius:18px}.card-head{margin-bottom:17px}.field-row{grid-template-columns:1fr;gap:0}.footer{display:block;text-align:center}.footer span{display:block;margin-bottom:6px}.dash-columns{grid-template-columns:1fr}.dash-song{flex-wrap:wrap}.dash-header-actions{width:100%}.dash-header-actions .btn{flex:1}.stat{padding:15px}.stat-value{font-size:1.7rem}}
@media(max-width:380px){.song{padding:10px;gap:8px}.song-rank{width:19px}.vote-btn{min-width:48px}.brand sup{display:none}.dash-song-actions .btn{padding:7px 9px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}
@media print {
  @page {size:A4;margin:24mm}
  body{background:white;color:black}
  #app,#toast,.bg-glow{display:none!important}
  .overlay{position:static;background:white;display:block;padding:0;backdrop-filter:none}
  .modal{border:0;box-shadow:none;max-width:100%;background:white;color:black;text-align:center;padding:30px}
  .modal h2{font-size:29pt}.modal p{color:#111}
  .modal-head,.modal .admin-controls,.modal .warning{display:none!important}
  .qr-box{border:1px solid #eee;margin:30px auto}
  .share-link{background:white;color:#222;border:0;font-size:10pt}
  .brand{color:black}
}

/* v0.2: Verein branding and now-playing display */
.brand-mark.has-logo{padding:4px;background:rgba(255,255,255,.08);overflow:hidden}.brand-mark.has-logo img{height:100%;width:100%;object-fit:contain}
.now-playing{display:flex;align-items:center;gap:16px;border:1px solid rgba(246,108,77,.23);background:linear-gradient(120deg,rgba(246,108,77,.115),rgba(23,25,34,.95) 42%,#181b25);border-radius:20px;padding:19px 22px;margin:0 0 20px;min-width:0;box-shadow:0 9px 30px rgba(0,0,0,.12)}
.now-playing-cover{width:70px;height:70px;display:grid;place-items:center;flex:none;background:var(--accent-soft);border:1px solid rgba(255,255,255,.08);border-radius:15px;font-size:2rem;color:var(--accent)}
.now-playing-info{min-width:0;flex:1}.now-playing-label{color:var(--accent);font-size:.65rem;letter-spacing:.17em;font-weight:900;margin-bottom:6px}.now-playing-source{color:#999da8;letter-spacing:0;font-size:.65rem;font-weight:500}
.now-playing-title{font-family:'Space Grotesk',sans-serif;font-size:clamp(1.06rem,2.7vw,1.42rem);letter-spacing:-.027em;font-weight:750;line-height:1.2;overflow-wrap:anywhere}.now-playing-artist{font-size:.87rem;color:#a9acb8;margin-top:5px;overflow-wrap:anywhere}.live-pulse{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--accent);margin-right:5px;box-shadow:0 0 0 4px var(--accent-soft)}
.now-playing:not(.is-playing){background:rgba(255,255,255,.025);border-color:var(--line)}.now-playing:not(.is-playing) .live-pulse{background:#777}.now-playing:not(.is-playing) .now-playing-label{color:#9b9fab}
.soundbars{display:flex;gap:4px;align-items:center;height:35px;margin-left:5px}.soundbars i{display:block;width:4px;height:11px;border-radius:4px;background:var(--accent);animation:barbeat .8s ease-in-out infinite alternate}.soundbars i:nth-child(2){animation-delay:.25s;height:23px}.soundbars i:nth-child(3){animation-delay:.6s;height:16px}.soundbars i:nth-child(4){animation-delay:.1s;height:30px}@keyframes barbeat{to{height:6px;opacity:.55}}
.venue-logo-preview{width:76px;height:76px;border-radius:14px;border:1px solid var(--line);background:#0c0e15;display:grid;place-items:center;font-size:2.6rem;overflow:hidden;flex:none}.venue-logo-preview img{width:100%;height:100%;object-fit:contain;padding:6px}.logo-upload-row{display:flex;align-items:center;gap:16px;margin:10px 0 14px}.upload-trigger{cursor:pointer;display:inline-block}.logo-upload-row .field-note{font-size:.72rem;margin:8px 0 0}
@media(max-width:720px){.now-playing{padding:14px;gap:12px;border-radius:16px}.now-playing-cover{width:55px;height:55px;border-radius:12px}.soundbars{display:none}.now-playing-source{display:none}.now-playing-artist{font-size:.79rem}.now-playing-label{font-size:.62rem}}

/* v0.3 Spotify read-only integration */
.spotify-box{border-color:rgba(30,215,96,.20)}.spotify-tag{color:#6cdea0;background:rgba(30,215,96,.10);border:1px solid rgba(30,215,96,.2);padding:4px 9px;border-radius:99px;font-size:.69rem;font-weight:800}
.spotify-box .field-note{overflow-wrap:anywhere}.spotify-box .inline-code{margin:7px 0 8px}.spotify-box .admin-controls{gap:7px}
.now-playing-cover{overflow:hidden}.now-playing-cover img{width:100%;height:100%;object-fit:cover;border-radius:11px}.now-playing-cover a{display:block;width:100%;height:100%}.now-playing-cover a img{display:block}
.spotify-song-link{display:inline-block;color:#8de9b9;font-size:.73rem;font-weight:700;margin-top:7px;text-decoration:none}.spotify-song-link:hover{text-decoration:underline}

/* DJ assistant: preserve the existing colours, typography and cards. */
.assistant-card{margin-bottom:20px}.suggestion-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.suggestion{border:1px solid var(--line);border-radius:14px;padding:17px;min-width:0;background:var(--accent-soft)}.suggestion .eyebrow{font-size:.65rem;margin-bottom:12px}.suggestion .song-title{display:block;overflow-wrap:anywhere}.suggestion .btn{margin-top:10px}.assistant-note{margin:16px 0 0}.repeat-warning{font-size:.75rem;color:#f4c587;margin:7px 0 0;overflow-wrap:anywhere}.planned-song{display:flex;align-items:center;gap:12px;padding:15px 0;border-bottom:1px solid var(--line)}.planned-song:last-child{border-bottom:0}.planned-song .song-meta{flex:1;min-width:0}.assistant-song{flex-wrap:wrap}.assistant-song .song-meta{flex-basis:100%}.dash-song-actions{flex-wrap:wrap}.request-status{display:inline-block;font-size:.68rem;font-weight:700;border-radius:6px;padding:3px 7px;background:rgba(255,255,255,.06);color:var(--muted);margin-top:6px}.request-status.later{color:#f4c587}.request-status.rejected{color:#ffaaa5}.request-status.played{color:#8de9b9}.request-status.new{color:var(--accent)}
@media(max-width:720px){.suggestion-grid{grid-template-columns:1fr}.planned-song{flex-wrap:wrap}.planned-song .dash-song-actions{width:100%;margin-left:50px}.assistant-song .dash-song-actions{width:100%}.suggestion .eyebrow{margin-bottom:8px}}
