/* Nightjar Live. Live apps are dark so the stream is the brightest thing on screen. */
.demo-side[data-side="host"],.demo-side[data-side="viewer"]{background:#0f0c1d}
.nl-host,.nl-viewer{--nl-card:#17132a;--nl-card-2:#1d1834;--nl-line:#2a2442;--nl-ink:#f4f1ff;--nl-muted:#a59fc2;
  --nl-pink:#ff4f8b;--nl-violet:#8b5cf6;--nl-gold:#fcd34d;--nl-teal:#2dd4bf;color:var(--nl-ink)}
.nl-host button,.nl-viewer button{color:inherit}
.nl-av{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font:700 12px/1 Inter,sans-serif;color:#fff;flex:none}
.nl-av-host{width:34px;height:34px;background:linear-gradient(135deg,#ff4f8b,#8b5cf6) !important}
.nl-empty{font-size:13px;color:var(--nl-muted);list-style:none}

/* ---------- stage ---------- */
.nl-stage{position:relative;overflow:hidden;border-radius:20px;background:#07060d;isolation:isolate;box-shadow:0 18px 40px rgba(0,0,0,.45)}
.nl-scene{position:absolute;inset:0;display:flex}
.nl-canvas{flex:1 1 0;min-width:0;width:100%;height:100%;display:block}
.nl-canvas-rival{display:none}
.nl-stage.pk .nl-canvas-rival{display:block}
.nl-cam{flex:1 1 0;min-width:0;width:100%;height:100%;object-fit:cover;transform:scaleX(-1);background:#000}
.nl-stage.pk .nl-scene::after{content:"";position:absolute;left:50%;top:0;bottom:0;width:2px;margin-left:-1px;background:rgba(255,255,255,.55)}

.nl-top{position:absolute;top:10px;left:10px;right:10px;display:flex;justify-content:space-between;align-items:flex-start;gap:8px;z-index:4}
.nl-chip{display:flex;align-items:center;gap:8px;min-width:0;background:rgba(6,4,14,.5);backdrop-filter:blur(8px);border-radius:999px;padding:4px 5px 4px 4px}
.nl-chip-text{display:flex;flex-direction:column;line-height:1.2;min-width:0;padding-right:6px}
.nl-chip-text strong{font-size:13px;white-space:nowrap}
.nl-chip-sub{font-size:11px;color:#d4cfee;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nl-follow{border:0;background:var(--nl-pink);color:#fff !important;font-weight:700;font-size:12px;border-radius:999px;padding:0 13px;min-height:32px;flex:none}
.nl-follow.on{background:rgba(255,255,255,.18)}
.nl-live{display:flex;gap:6px;align-items:center;flex:none;background:rgba(6,4,14,.5);backdrop-filter:blur(8px);border-radius:999px;padding:4px 10px 4px 4px;font:600 12px/1.4 Inter,sans-serif}
.nl-live-tag{background:#ef4444;color:#fff;border-radius:999px;padding:1px 7px;font-size:10px;letter-spacing:.08em;font-weight:800}

.nl-pk{position:absolute;top:58px;left:10px;right:10px;z-index:4;display:grid;grid-template-columns:1fr auto 1fr;align-items:center}
.nl-pk-track{grid-column:1/-1;grid-row:1;height:24px;border-radius:999px;background:var(--nl-teal);overflow:hidden;box-shadow:0 2px 10px rgba(0,0,0,.35)}
.nl-pk-fill{height:100%;width:50%;background:linear-gradient(90deg,#ff4f8b,#f97316);transition:width .45s ease}
.nl-pk-score{grid-row:1;font:700 12px/1 "JetBrains Mono",ui-monospace,monospace;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.5);z-index:1}
.nl-pk-host{grid-column:1;justify-self:start;padding-left:10px}
.nl-pk-rival{grid-column:3;justify-self:end;padding-right:10px;color:#042f2e;text-shadow:none}
.nl-pk-clock{grid-row:1;grid-column:2;z-index:1;background:#0b0a12;color:#fff;border-radius:999px;padding:4px 9px;font:700 12px/1 "JetBrains Mono",ui-monospace,monospace}
.nl-pk-clock.late{color:#fca5a5}
.nl-pk-names{grid-column:1/-1;display:flex;justify-content:space-between;font-size:11px;font-weight:700;margin-top:5px;padding:0 4px;text-shadow:0 1px 3px rgba(0,0,0,.8)}
.nl-rival-pops{position:absolute;right:0;width:50%;top:28%;height:30%;pointer-events:none;z-index:3}
.nl-pop{position:absolute;right:22%;top:var(--y);font:800 16px/1 "JetBrains Mono",ui-monospace,monospace;color:#99f6e4;text-shadow:0 1px 4px rgba(0,0,0,.6);animation:nl-rise 1.2s ease-out forwards}

.nl-banners{position:absolute;left:10px;top:38%;display:flex;flex-direction:column;gap:6px;z-index:5;max-width:82%}
.nl-banner{display:flex;align-items:center;gap:8px;border-radius:999px;padding:3px 16px 3px 3px;
  background:linear-gradient(90deg,rgba(139,92,246,.92),rgba(139,92,246,.45) 70%,rgba(139,92,246,0));animation:nl-banner 4.2s ease forwards}
.nl-banner.mine{background:linear-gradient(90deg,rgba(255,79,139,.95),rgba(249,115,22,.55) 70%,rgba(249,115,22,0))}
.nl-banner-text{display:flex;flex-direction:column;line-height:1.15;min-width:0}
.nl-banner-text strong{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}
.nl-banner-text span{font-size:11px;color:#f1eaff}
.nl-banner svg{flex:none;filter:drop-shadow(0 2px 4px rgba(0,0,0,.4))}
.nl-banner-count{font:italic 800 22px/1 "Space Grotesk",sans-serif;color:#fde047;text-shadow:0 2px 0 #b45309,0 0 10px rgba(253,224,71,.5)}
.nl-banner-count.pop{animation:nl-countpop .3s ease}

.nl-big{position:absolute;inset:0;pointer-events:none;z-index:6}
.nl-fx{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;animation:nl-fx 2.8s ease forwards}
.nl-fx-art svg{width:min(120px,36vw);height:auto;filter:drop-shadow(0 8px 24px rgba(0,0,0,.5))}
.nl-fx-cap{font-weight:700;font-size:14px;background:rgba(6,4,14,.6);border-radius:999px;padding:6px 14px;max-width:90%;text-align:center}
.nl-fx-disco{background:radial-gradient(circle at 50% 30%,rgba(255,255,255,.12),transparent 60%)}
.nl-fx-disco .nl-fx-art{animation:nl-drop 2.8s cubic-bezier(.2,.8,.3,1) forwards}
.nl-beams{position:absolute;inset:-50%;background:repeating-conic-gradient(from 0deg at 50% 50%,rgba(255,79,139,.18) 0 6deg,transparent 6deg 24deg,rgba(45,212,191,.16) 24deg 30deg,transparent 30deg 48deg);animation:nl-spin 2.8s linear forwards}
.nl-fx-star .nl-fx-art{animation:nl-streak 2.6s ease-in-out forwards}
.nl-fx-nightjar{background:radial-gradient(circle at 50% 42%,rgba(253,230,138,.22),transparent 55%)}
.nl-moon{position:absolute;left:50%;top:42%;width:150px;height:150px;margin:-75px 0 0 -75px;border-radius:50%;background:radial-gradient(circle at 40% 40%,#fff7d6,#fde68a 60%,#f59e0b);opacity:.85;box-shadow:0 0 80px rgba(253,230,138,.6)}
.nl-fx-nightjar .nl-fx-art{position:relative;animation:nl-fly 2.8s ease-in-out forwards}

.nl-hearts{position:absolute;right:12px;bottom:70px;width:64px;height:62%;pointer-events:none;z-index:5}
.nl-heart{position:absolute;bottom:0;left:20px;opacity:0;animation:nl-heart 2.4s ease-out forwards}

.nl-chat{position:absolute;left:10px;right:30%;bottom:12px;list-style:none;display:flex;flex-direction:column;align-items:flex-start;gap:4px;z-index:4;
  -webkit-mask-image:linear-gradient(transparent,#000 35%);mask-image:linear-gradient(transparent,#000 35%)}
.nl-stage.pk .nl-chat{right:52%}
.nl-chat li{background:rgba(6,4,14,.45);border-radius:12px;padding:3px 10px;font-size:12px;line-height:1.35;max-width:100%}
.nl-chat b{color:#c4b5fd;margin-right:6px;font-weight:700}
.nl-chat li.mine b{color:#fdba74}
.nl-chat-gift{color:#fde68a}
.nl-chat-muted{color:#b8b2d6}

.nl-result{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:7;width:min(86%,300px);text-align:center;
  background:rgba(10,8,20,.9);border:1px solid rgba(255,255,255,.14);border-radius:18px;padding:18px 20px;display:flex;flex-direction:column;gap:4px}
.nl-result[data-won="true"]{border-color:#ff4f8b;box-shadow:0 0 40px rgba(255,79,139,.35)}
.nl-result strong{font:700 19px/1.2 "Space Grotesk",sans-serif}
.nl-result span{font:700 14px "JetBrains Mono",ui-monospace,monospace;color:var(--nl-gold)}
.nl-result p{font-size:13px;color:var(--nl-muted)}

/* ---------- host side ---------- */
.nl-host{--stage-h:min(680px,max(520px,calc(100vh - 190px)));display:grid;grid-template-columns:auto minmax(0,1fr);gap:20px;padding:20px;align-items:start}
.nl-host-stage{width:calc(var(--stage-h) * 9 / 16);display:flex;flex-direction:column;gap:10px}
.nl-stage-host{width:100%;aspect-ratio:9/16}
.nl-cam-btn{width:100%;min-height:44px;border:1px solid var(--nl-line);background:var(--nl-card);border-radius:12px;padding:10px 14px;font-weight:600;font-size:14px}
.nl-cam-btn:hover{border-color:#4a3f78}
.nl-cam-btn.on{border-color:#ef4444}
.nl-cam-note{font-size:12px;color:var(--nl-muted);margin-top:6px;line-height:1.45}
.nl-cam-err{font-size:12px;color:#fca5a5}
.nl-cam-err:empty{display:none}

.nl-host-side{display:flex;flex-direction:column;gap:14px;min-width:0}
.nl-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.nl-stat{background:var(--nl-card);border:1px solid var(--nl-line);border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:2px}
.nl-stat-v{font:700 22px/1.1 "Space Grotesk",sans-serif;font-variant-numeric:tabular-nums}
.nl-stat-k{font-size:12px;color:var(--nl-muted)}
.nl-stat:first-child .nl-stat-v,.nl-stat:nth-child(2) .nl-stat-v{color:var(--nl-gold)}
.nl-card{background:var(--nl-card);border:1px solid var(--nl-line);border-radius:16px;padding:14px 16px;min-width:0}
.nl-card h3{font-size:14px;font-weight:700;margin-bottom:8px}
.nl-card-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.nl-card-meta{font-size:12px;color:var(--nl-muted)}
.nl-card-text{font-size:13px;color:var(--nl-muted);margin-bottom:12px;line-height:1.45}
.nl-pk-card.running{border-color:#5b2a4a}
.nl-primary{width:100%;min-height:44px;border:0;border-radius:12px;padding:12px;font-weight:700;font-size:15px;background:linear-gradient(135deg,#ff4f8b,#8b5cf6);color:#fff !important}
.nl-primary:disabled{background:#2a2442;color:#d8d2f0 !important;cursor:default}
.nl-lists{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px}
.nl-rank,.nl-viewers{list-style:none;display:flex;flex-direction:column;gap:2px}
.nl-rank li,.nl-viewers li{display:flex;align-items:center;gap:9px;font-size:13px;padding:4px 0;min-width:0}
.nl-rank-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nl-rank-v{margin-left:auto;font:600 12px "JetBrains Mono",ui-monospace,monospace;color:var(--nl-gold)}
.nl-viewers{max-height:236px;overflow-y:auto;scrollbar-width:thin}
.nl-tag{margin-left:auto;font-size:11px;color:var(--nl-muted);border:1px solid var(--nl-line);border-radius:999px;padding:1px 8px}
li.mine > span:not(.nl-tag):not(.nl-rank-v){color:#fdba74;font-weight:600}
.nl-log{display:flex;flex-direction:column;max-height:244px;overflow-y:auto;scrollbar-width:thin}
.nl-log-row{display:grid;grid-template-columns:auto minmax(0,1fr) 22px auto 52px;gap:10px;align-items:center;font-size:13px;padding:6px 0;border-top:1px solid var(--nl-line)}
.nl-log-row:first-child{border-top:0}
.nl-log-row.mine .nl-log-name{color:#fdba74;font-weight:600}
.nl-log-time{font:500 11px "JetBrains Mono",ui-monospace,monospace;color:var(--nl-muted)}
.nl-log-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nl-log-coins{font:600 12px "JetBrains Mono",ui-monospace,monospace;color:var(--nl-gold);text-align:right}

/* ---------- viewer side ---------- */
.nl-viewer{display:flex;flex-direction:column;gap:10px;padding:10px 10px 18px;position:relative}
.nl-stage-viewer{width:100%;height:min(44vh,460px);min-height:300px}
.nl-reacts{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:1px}
.nl-reacts::-webkit-scrollbar{display:none}
.nl-react{flex:none;border:1px solid var(--nl-line);background:var(--nl-card);border-radius:999px;padding:0 14px;min-height:38px;font-size:13px;font-weight:600;transition:opacity .2s}
.nl-react:active{border-color:var(--nl-pink)}
.nl-reacts.cool .nl-react{opacity:.45}
.nl-hint{border:1px dashed #3b3360;background:transparent;color:var(--nl-muted) !important;border-radius:12px;padding:8px 12px;font-size:13px;text-align:left;min-height:40px}
.nl-hint::after{content:" \2192"}
.nl-panel{background:var(--nl-card);border:1px solid var(--nl-line);border-radius:18px;padding:12px}
.nl-combo{margin-left:auto;font:italic 800 16px/1 "Space Grotesk",sans-serif;color:#fde047;white-space:nowrap}
.nl-combo.pop{animation:nl-countpop .25s ease}
.nl-gifts{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
.nl-gift{display:flex;flex-direction:column;align-items:center;gap:1px;border:1px solid var(--nl-line);background:var(--nl-card-2);border-radius:14px;padding:8px 4px 7px;min-height:88px;transition:transform .08s ease,border-color .15s}
.nl-gift:hover{border-color:#4a3f78}
.nl-gift:active{transform:scale(.95);border-color:var(--nl-pink)}
.nl-gift.short{opacity:.45}
.nl-gift-name{font-size:12.5px;font-weight:600;margin-top:2px}
.nl-gift-price{font-size:11.5px;color:var(--nl-gold);font-weight:600}
.nl-wallet{display:flex;align-items:center;gap:12px}
.nl-wallet-k{display:block;font-size:12px;color:var(--nl-muted)}
.nl-wallet-v{font:700 21px/1.1 "Space Grotesk",sans-serif;color:var(--nl-gold);font-variant-numeric:tabular-nums}
.nl-wallet.bump .nl-wallet-v{display:inline-block;animation:nl-countpop .4s ease}
.nl-topup{border:0;background:linear-gradient(135deg,#ff4f8b,#f97316);color:#fff !important;font-weight:700;font-size:15px;border-radius:12px;padding:0 20px;min-height:44px}

.nl-sheet-wrap{position:fixed;inset:0;z-index:50;background:rgba(5,3,12,.6);display:flex;align-items:flex-end;justify-content:center}
.nl-sheet{width:min(460px,100vw);background:#17132a;color:#f4f1ff;border-radius:20px 20px 0 0;padding:20px 18px max(18px,env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:12px;border-top:1px solid #2a2442}
.nl-sheet-head h3{font:700 20px "Space Grotesk",sans-serif}
.nl-sheet-head p{font-size:14px;color:#a59fc2;margin-top:2px}
.nl-packs{display:flex;flex-direction:column;gap:8px}
.nl-pack{display:flex;justify-content:space-between;align-items:center;border:1px solid #2a2442;background:#1d1834;color:#f4f1ff;border-radius:14px;padding:0 16px;min-height:52px;font-size:15px}
.nl-pack strong{color:#fcd34d}
.nl-pack:hover{border-color:#ff4f8b}
.nl-pack:disabled{opacity:.4;cursor:default}
.nl-fine{font-size:12px;color:#a59fc2;text-align:center}
.nl-ghost{background:none;border:0;color:#a59fc2;padding:10px;font-weight:600;min-height:44px}

/* ---------- narrow ---------- */
@media (max-width:1023px){
  .nl-host{grid-template-columns:minmax(0,1fr);padding:10px;gap:12px}
  .nl-host-stage{width:100%}
  .nl-stage-host{aspect-ratio:auto;height:min(64vh,560px);min-height:340px}
  .nl-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  /* On a phone the battle button is the next thing to do after watching. */
  .nl-pk-card{order:-1}
  .nl-stat-v{font-size:19px}
}

@keyframes nl-banner{0%{opacity:0;transform:translateX(-110%)}8%{opacity:1;transform:none}86%{opacity:1;transform:none}100%{opacity:0;transform:translateX(-12px)}}
@keyframes nl-countpop{0%{transform:scale(1)}45%{transform:scale(1.45)}100%{transform:scale(1)}}
@keyframes nl-rise{0%{opacity:0;transform:translateY(10px)}20%{opacity:1}100%{opacity:0;transform:translateY(-40px)}}
@keyframes nl-heart{0%{opacity:0;transform:translate(0,0) scale(.5)}15%{opacity:1;transform:translate(0,-20px) scale(1)}100%{opacity:0;transform:translate(var(--x),-280px) scale(1.1)}}
@keyframes nl-fx{0%{opacity:0}10%{opacity:1}82%{opacity:1}100%{opacity:0}}
@keyframes nl-drop{0%{transform:translateY(-60vh)}35%{transform:translateY(0)}100%{transform:translateY(0) rotate(8deg)}}
@keyframes nl-spin{to{transform:rotate(120deg)}}
@keyframes nl-streak{0%{transform:translate(-80%,60%) scale(.6)}60%{transform:translate(0,0) scale(1.1)}100%{transform:translate(30%,-20%) scale(1)}}
@keyframes nl-fly{0%{transform:translateX(-140%) scale(.7)}50%{transform:translateX(0) scale(1.15)}100%{transform:translateX(140%) scale(.8)}}

@media (prefers-reduced-motion: reduce){
  .nl-banner,.nl-banner-count.pop,.nl-pop,.nl-fx,.nl-fx-art,.nl-beams,.nl-heart,.nl-combo.pop,.nl-wallet.bump .nl-wallet-v{animation:none !important}
  .nl-heart{display:none}
  .nl-pk-fill,.nl-gift,.nl-react{transition:none}
}
