:root{
  --bg:#0a0b0f; --bg-elev:#111318; --bg-card:#14161d; --bg-card-hover:#191c25;
  --line:#23262f; --line-soft:#1b1e26;
  --txt:#e8eaef; --txt-dim:#9aa0ad; --txt-mute:#6b7280;
  --accent:#1fc7ff; --accent-2:#7c5cff; --live:#22d3a0; --warn:#fb923c; --err:#f87171;
  --radius:14px; --radius-sm:9px;
  --shadow:0 2px 20px rgba(0,0,0,.5);
  --header-h:64px;
}
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  background:var(--bg);color:var(--txt);min-height:100vh;overflow-x:hidden;
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
input,select{font:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- header ---------- */
.site-header{
  position:sticky;top:0;z-index:60;height:var(--header-h);
  background:rgba(10,11,15,.86);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  border-bottom:1px solid var(--line-soft);
}
.header-inner{
  max-width:1400px;margin:0 auto;height:100%;padding:0 20px;
  display:flex;align-items:center;gap:18px;
}
.brand{display:flex;align-items:center;gap:10px;flex-shrink:0}
.brand-mark{
  width:30px;height:30px;border-radius:8px;flex-shrink:0;
  background:linear-gradient(135deg,var(--accent),var(--accent-2));
  display:grid;place-items:center;color:#04070b;
}
.brand-mark svg{width:16px;height:16px}
.brand-name{font-size:17px;font-weight:700;letter-spacing:-.2px;white-space:nowrap}
.brand-name em{font-style:normal;color:var(--accent)}

.search-wrap{position:relative;flex:1;max-width:420px;margin-left:auto}
.search-wrap svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--txt-mute);pointer-events:none}
#search{
  width:100%;height:38px;padding:0 34px 0 36px;
  background:var(--bg-elev);border:1px solid var(--line);border-radius:10px;
  color:var(--txt);transition:border-color .15s,background .15s;
}
#search::placeholder{color:var(--txt-mute)}
#search:focus{outline:none;border-color:var(--accent);background:var(--bg-card)}
.search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:22px;height:22px;border-radius:50%;display:none;place-items:center;color:var(--txt-mute)}
.search-clear.show{display:grid}
.search-clear:hover{background:var(--line);color:var(--txt)}
.header-count{font-size:12.5px;color:var(--txt-mute);white-space:nowrap;font-variant-numeric:tabular-nums}

/* ---------- toolbar ---------- */
.toolbar{max-width:1400px;margin:0 auto;padding:20px 20px 4px;display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.chip-row{display:flex;gap:7px;flex-wrap:wrap;flex:1}
.chip{
  padding:6px 13px;border-radius:999px;font-size:12.5px;font-weight:600;white-space:nowrap;
  background:var(--bg-elev);border:1px solid var(--line);color:var(--txt-dim);
  transition:background .15s,color .15s,border-color .15s;
}
.chip:hover{color:var(--txt);border-color:#2f333f}
.chip.active{background:var(--accent);border-color:var(--accent);color:#04070b}
.chip .n{opacity:.65;font-weight:500;margin-left:5px;font-variant-numeric:tabular-nums}
.sort-select{
  height:32px;padding:0 28px 0 11px;border-radius:999px;font-size:12.5px;font-weight:600;
  background:var(--bg-elev) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='%239aa0ad' d='M6 8.5 2 4.5h8z'/%3E%3C/svg%3E") no-repeat right 10px center;
  border:1px solid var(--line);color:var(--txt-dim);appearance:none;cursor:pointer;
}
.sort-select:focus{outline:none;border-color:var(--accent)}

/* ---------- grid ---------- */
main{max-width:1400px;margin:0 auto;padding:14px 20px 64px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}
.card{
  position:relative;background:var(--bg-card);border:1px solid var(--line-soft);border-radius:var(--radius);
  padding:18px 14px 15px;display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;
  cursor:pointer;overflow:hidden;transition:background .17s,border-color .17s,transform .12s,box-shadow .17s;
  -webkit-tap-highlight-color:transparent;
}
.card::after{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(120% 80% at 50% -20%,rgba(31,199,255,.11),transparent 62%);
  opacity:0;transition:opacity .2s;
}
.card:hover{background:var(--bg-card-hover);border-color:#2c313d;transform:translateY(-2px);box-shadow:var(--shadow)}
.card:hover::after{opacity:1}
.card:active{transform:scale(.985)}
.card.is-focal{border-color:var(--accent)}

.logo-tile{
  width:66px;height:66px;border-radius:50%;flex-shrink:0;display:grid;place-items:center;
  background:linear-gradient(145deg,#1b1f29,#12141a);border:1px solid var(--line);
  font-size:22px;font-weight:700;color:var(--txt-dim);letter-spacing:-.5px;overflow:hidden;
  transition:border-color .17s;
}
.card:hover .logo-tile{border-color:#3a4152}
.logo-tile img{width:100%;height:100%;object-fit:cover;display:block}
.ch-name{font-size:13.5px;font-weight:600;line-height:1.35;color:var(--txt);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}
.ch-meta{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--txt-mute);margin-top:auto}
.dot{width:6px;height:6px;border-radius:50%;background:var(--txt-mute);flex-shrink:0;transition:background .2s}
.dot.online{background:var(--live);box-shadow:0 0 7px rgba(34,211,160,.6);animation:pdot 2.4s ease-in-out infinite}
.dot.offline{background:var(--err)}
.dot.checking{background:var(--warn);animation:pdot 1s ease-in-out infinite}
@keyframes pdot{0%,100%{opacity:1}50%{opacity:.3}}

.card-actions{position:absolute;top:9px;right:9px;display:flex;gap:5px;opacity:0;transition:opacity .17s;z-index:2}
.card:hover .card-actions,.card:focus-within .card-actions{opacity:1}
.icon-btn{
  width:27px;height:27px;border-radius:7px;display:grid;place-items:center;
  background:rgba(10,11,15,.8);border:1px solid var(--line);color:var(--txt-dim);
  backdrop-filter:blur(6px);transition:color .15s,border-color .15s,background .15s;
}
.icon-btn:hover{color:var(--txt);border-color:#3a4152;background:var(--bg-elev)}
.icon-btn svg{width:13px;height:13px}
.icon-btn.faved{color:#ffc336;border-color:#4a3d16}
.badge-relay,.badge-warn{
  position:absolute;top:9px;left:9px;padding:2px 6px;border-radius:5px;font-size:9.5px;font-weight:700;
  letter-spacing:.4px;
}
.badge-relay{background:rgba(124,92,255,.16);color:#b8a5ff;border:1px solid rgba(124,92,255,.3)}
.badge-warn{background:rgba(251,146,60,.14);color:#fbbf77;border:1px solid rgba(251,146,60,.3)}

/* standalone watch page: modal becomes the page */
.modal.page{position:static;display:flex;padding:clamp(0px,2vw,24px);background:var(--bg)}
.modal.page .modal-bg{display:none}
.modal.page .modal-box{box-shadow:none;border-radius:var(--radius);max-height:none;width:min(1100px,100%)}
.modal.page .stage{max-height:none}
@media(max-width:720px){.modal.page .modal-box{border:none;border-radius:0}}

/* ---------- skeleton / empty ---------- */
.sk{background:var(--bg-card);border:1px solid var(--line-soft);border-radius:var(--radius);padding:18px 14px;display:flex;flex-direction:column;align-items:center;gap:12px;min-height:172px}
.sk .b{background:linear-gradient(90deg,#15171e 25%,#1d2028 50%,#15171e 75%);background-size:200% 100%;animation:shimmer 1.3s linear infinite;border-radius:6px}
.sk .b.r{width:66px;height:66px;border-radius:50%}
.sk .b.l1{width:82%;height:11px}.sk .b.l2{width:55%;height:9px}
@keyframes shimmer{to{background-position:-200% 0}}
.empty{grid-column:1/-1;padding:72px 20px;text-align:center;color:var(--txt-mute)}
.empty h3{font-size:17px;color:var(--txt-dim);margin-bottom:7px;font-weight:600}
.empty p{font-size:13.5px}
.notice{
  max-width:1400px;margin:0 auto 4px;padding:12px 16px;border-radius:var(--radius-sm);
  background:rgba(251,146,60,.07);border:1px solid rgba(251,146,60,.22);color:#f5c99a;font-size:13px;
}
.notice b{color:#fcd34d}

/* ---------- modal player ---------- */
.modal{position:fixed;inset:0;z-index:100;display:none;align-items:center;justify-content:center;padding:clamp(0px,3vw,32px)}
.modal.open{display:flex}
.modal-bg{position:absolute;inset:0;background:rgba(4,5,8,.88);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);animation:fade .22s ease}
@keyframes fade{from{opacity:0}}
.modal-box{
  position:relative;width:min(1180px,100%);max-height:100%;display:flex;flex-direction:column;
  background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:0 24px 80px rgba(0,0,0,.75);overflow:hidden;animation:pop .22s cubic-bezier(.2,.9,.3,1.1);
}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.985)}}
.modal-head{display:flex;align-items:center;gap:12px;padding:13px 15px;border-bottom:1px solid var(--line-soft);flex-shrink:0}
.modal-head .logo-tile{width:34px;height:34px;font-size:13px}
.mh-txt{min-width:0;flex:1}
.mh-txt h2{font-size:14.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mh-txt p{font-size:11.5px;color:var(--txt-mute)}
.stage{position:relative;background:#000;aspect-ratio:16/9;max-height:calc(100vh - 210px)}
.stage video{width:100%;height:100%;display:block;background:#000}
video.mode-fill{object-fit:fill}
video.mode-cover{object-fit:cover}
.stage-loader{position:absolute;inset:0;display:grid;place-items:center;gap:12px;background:#000;z-index:5}
.stage-loader.hide{display:none}
.spinner{width:32px;height:32px;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.stage-msg{position:absolute;left:50%;bottom:74px;transform:translateX(-50%);z-index:6;
  display:flex;align-items:center;gap:7px;padding:6px 14px;border-radius:999px;font-size:12px;font-weight:500;
  background:rgba(10,10,10,.9);border:1px solid rgba(255,255,255,.08);color:#c0c0c0;
  backdrop-filter:blur(12px);opacity:0;transition:opacity .25s;pointer-events:none;white-space:nowrap;max-width:92%}
.stage-msg.show{opacity:1}
.stage-msg .st-dot{width:7px;height:7px;border-radius:50%;background:#60a5fa;flex-shrink:0}
.stage-msg.live .st-dot{background:var(--live);animation:pdot 2s ease-in-out infinite}
.stage-msg.warn .st-dot{background:var(--warn);animation:pdot 1s ease-in-out infinite}
.stage-msg.err{color:#fca5a5}.stage-msg.err .st-dot{background:var(--err)}
.modal-foot{display:flex;align-items:center;gap:9px;padding:12px 15px;border-top:1px solid var(--line-soft);flex-wrap:wrap;flex-shrink:0}
.foot-select{
  height:33px;padding:0 26px 0 10px;border-radius:8px;font-size:12.5px;font-weight:600;
  background:var(--bg-card) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='%239aa0ad' d='M6 8.5 2 4.5h8z'/%3E%3C/svg%3E") no-repeat right 8px center;
  border:1px solid var(--line);color:var(--txt-dim);appearance:none;cursor:pointer;max-width:190px
}
.btn{
  height:33px;padding:0 13px;border-radius:8px;font-size:12.5px;font-weight:600;
  background:var(--bg-card);border:1px solid var(--line);color:var(--txt-dim);
  display:inline-flex;align-items:center;gap:6px;transition:color .15s,border-color .15s,background .15s;
}
.btn:hover{color:var(--txt);border-color:#3a4152}
.btn svg{width:13px;height:13px}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#04070b}
.btn.primary:hover{background:#3ed3ff;border-color:#3ed3ff;color:#04070b}
.btn.on{color:var(--accent);border-color:rgba(31,199,255,.45)}
.foot-spacer{flex:1}
.embed-box{display:flex;align-items:center;gap:6;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:0 0 0 10px;max-width:100%;overflow:hidden}
.embed-box code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:var(--txt-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:340px}

.toast-wrap{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);z-index:120;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{
  padding:9px 16px;border-radius:9px;font-size:13px;background:#1c1f28;border:1px solid var(--line);
  color:var(--txt);box-shadow:var(--shadow);animation:tin .22s ease;max-width:min(90vw,460px)
}
@keyframes tin{from{opacity:0;transform:translateY(8px)}}
.toast.out{opacity:0;transition:opacity .3s}

.site-footer{border-top:1px solid var(--line-soft);padding:26px 20px 40px;text-align:center;color:var(--txt-mute);font-size:12.5px;line-height:1.9}
.site-footer .kbd{display:inline-block;padding:1px 6px;border-radius:5px;background:var(--bg-elev);border:1px solid var(--line);font-family:ui-monospace,monospace;font-size:11px;color:var(--txt-dim)}

@media(max-width:720px){
  :root{--header-h:56px}
  .header-inner{gap:11px;padding:0 13px}
  .brand-name{display:none}
  .header-count{display:none}
  main,.toolbar{padding-left:13px;padding-right:13px}
  .grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
  .card{padding:15px 10px 13px;min-height:150px}
  .logo-tile{width:54px;height:54px;font-size:18px}
  .ch-name{font-size:12.5px}
  .modal{padding:0}
  .modal-box{width:100%;max-height:100vh;height:100%;border-radius:0;border:none}
  .stage{aspect-ratio:16/9;max-height:none}
  .embed-box code{max-width:52vw}
}
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}
