:root{
  --bg:#0d1117; --card:#161b22; --card2:#1c2430; --line:#2a3441;
  --tx:#e6edf3; --dim:#8b98a5; --acc:#58a6ff;
  --ok:#3fb950; --bad:#f85149; --warn:#e3b341; --pl:#e01b24; --plw:#fff;
  --r:10px;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--tx);
  font:15px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
a{color:var(--acc)}
h1,h2,h3{margin:0 0 .4em}
main{max-width:1180px;margin:0 auto;padding:0 14px 60px}

/* ---------- header ---------- */
.top{display:grid;grid-template-columns:1fr auto auto;gap:18px;align-items:center;
  padding:14px 18px;background:linear-gradient(180deg,#161b22,#0d1117);
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:50}
.brand{display:flex;gap:12px;align-items:center}
.logo{font-size:32px}
.top h1{font-size:20px;letter-spacing:.5px}
.me{color:var(--acc)}
.sub{margin:0;color:var(--dim);font-size:13px}
.clock{text-align:center;min-width:190px}
.phase{font-size:11px;letter-spacing:1.5px;color:var(--dim);text-transform:uppercase}
.time{font:700 26px/1.1 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--warn)}
.time.run{color:var(--ok)}
.utc{font-size:12px;color:var(--dim)}
.bar{height:4px;background:#222c38;border-radius:3px;margin-top:6px;overflow:hidden}
.fill{height:100%;width:0;background:linear-gradient(90deg,var(--ok),var(--warn));transition:width 1s linear}
.nowband{text-align:center;background:var(--card2);border:1px solid var(--line);
  border-radius:var(--r);padding:8px 18px;min-width:170px}
.nowband .lbl{font-size:10px;letter-spacing:1.5px;color:var(--dim)}
.nowband .band{font:700 34px/1.1 ui-monospace,monospace;color:var(--ok)}
.nowband .alt{font-size:11px;color:var(--dim)}

.nav{display:flex;gap:4px;flex-wrap:wrap;justify-content:center;padding:8px;
  background:#11161d;border-bottom:1px solid var(--line);position:sticky;top:86px;z-index:40}
.nav a{padding:5px 12px;border-radius:20px;text-decoration:none;font-size:13px;color:var(--dim)}
.nav a:hover{background:var(--card2);color:var(--tx)}

/* ---------- alerts ---------- */
#alerts{max-width:1180px;margin:12px auto 0;padding:0 14px}
.alert{padding:12px 16px;border-radius:var(--r);margin-bottom:8px;font-weight:600;
  border:1px solid;animation:pop .3s ease}
.alert.open{background:#1d2a17;border-color:var(--ok);color:#a8e6a0}
.alert.hq{background:#2b1416;border-color:var(--pl);color:#ffc7c7}
@keyframes pop{from{transform:translateY(-6px);opacity:0}to{transform:none;opacity:1}}

/* ---------- cards ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:18px;margin-top:16px}
.card.pl{border-color:#7d2027;background:linear-gradient(180deg,#1d1416,#161b22)}
.card h2{font-size:18px}
.blk{font:400 13px ui-monospace,monospace;color:var(--dim);margin-left:8px}
.lead{color:var(--tx);margin:.2em 0 1em}
.hint{color:var(--dim);font-size:13px}
.note{background:var(--card2);border-left:3px solid var(--acc);padding:10px 14px;border-radius:6px}
.goal{font-size:17px;font-weight:600;color:var(--warn);margin:.2em 0}
.data{color:var(--dim);font-size:12.5px;font-style:italic}
.officials{background:#1e2130;border:1px solid #33406b;border-radius:8px;padding:10px 14px;font-size:13.5px}

/* ---------- tables ---------- */
table{width:100%;border-collapse:collapse;font-size:14px}
th,td{padding:7px 9px;border-bottom:1px solid var(--line);text-align:left}
th{color:var(--dim);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px}
.acttable{overflow-x:auto;margin-top:12px}
.acttable td{text-align:center;font:600 15px ui-monospace,monospace}
.acttable tr#actDx td{color:var(--ok)}
.acttable tr#actEu3 td{color:var(--acc)}
.acttable tr#actHq td{color:var(--warn)}
.acttable td.hot{background:#1d2a17;border-radius:4px}

/* ---------- SN0HQ sloty ---------- */
.slots{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin:14px 0}
.slotcol{display:flex;flex-direction:column;gap:6px}
.slotband{text-align:center;font:700 13px ui-monospace,monospace;color:var(--dim)}
.slot{border:2px solid var(--line);background:var(--card2);border-radius:8px;
  padding:10px 4px;text-align:center;cursor:pointer;user-select:none;transition:.15s}
.slot .m{font:700 14px ui-monospace,monospace}
.slot .f{font:600 11px ui-monospace,monospace;color:var(--dim);min-height:14px}
.slot:hover{border-color:var(--acc)}
.slot.done{background:#14361c;border-color:var(--ok);color:#a8e6a0}
.slot.done .m::after{content:" ✓"}
/* SN0HQ wykryta TERAZ na tym pasmie i emisji: pole zielone + QRG w kHz */
.slot.spotted{background:#14361c;border-color:var(--ok);color:#a8e6a0;
  animation:pulse 1.4s infinite}
.slot.spotted .f{color:#7ee787;font-weight:700}
.slot.done.spotted{animation:none}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(63,185,80,.55)}50%{box-shadow:0 0 0 7px rgba(63,185,80,0)}}
.progressline{text-align:center;font-size:15px;color:var(--dim)}
.progressline b{color:var(--ok);font-size:20px}
.dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--ok)}

/* ---------- spoty ---------- */
.two{display:grid;grid-template-columns:1fr 1fr;gap:20px}
h3.ok{color:var(--ok)} h3.bad{color:var(--bad)}
.spotlist{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:420px;overflow-y:auto}
.spot{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;
  background:var(--card2);border:1px solid var(--line);border-left-width:3px;border-radius:8px;padding:8px 10px}
.spot.call{border-left-color:var(--ok)}
.spot.skip{border-left-color:var(--bad);opacity:.85}
.spot.plhq{border-left-color:var(--pl);background:#251518}
.spot .c{font:700 15px ui-monospace,monospace}
.spot .qrg{font:600 13px ui-monospace,monospace;color:var(--warn)}
.spot .meta{font-size:12px;color:var(--dim)}
.spot .why{font-size:12px;color:#cbd5e1;margin-top:2px}
.badge{font-size:10.5px;padding:2px 7px;border-radius:10px;font-weight:700;letter-spacing:.3px}
.b5{background:#14361c;color:#7ee787} .b3{background:#1e2a3a;color:#79c0ff}
.b1{background:#2d2a1a;color:#e3b341} .bhq{background:#3a1d20;color:#ffa198}
.bdupe{background:#30363d;color:#8b949e}
.spot button{background:#21262d;border:1px solid var(--line);color:var(--tx);
  border-radius:6px;padding:5px 10px;cursor:pointer;font-size:12px}
.spot button:hover{background:var(--ok);color:#0d1117;border-color:var(--ok)}
.empty{color:var(--dim);font-size:13px;padding:10px}

/* ---------- plan ---------- */
table.plan td{vertical-align:top}
table.plan tr.now{background:#17301f;outline:1px solid var(--ok)}
table.plan .h{font:700 13px ui-monospace,monospace;white-space:nowrap}
.pill{display:inline-block;padding:3px 9px;border-radius:12px;background:#21262d;
  font:600 12px ui-monospace,monospace}
.pill.main{background:#14361c;color:#7ee787}
.pill.watch{background:#2d2a1a;color:#e3b341}
.goalcell{font-weight:600;color:var(--warn);font-size:13px}
.why{font-size:13px;color:#c9d1d9;max-width:430px}
.tips{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;margin-top:10px}
.tip{background:var(--card2);border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.tip b{color:var(--acc)}
.tip p{margin:.35em 0 0;font-size:13.5px;color:#c9d1d9}

/* ---------- regulamin ---------- */
.cat{background:#1a2432;border:1px solid #2f4a6b;border-radius:8px;padding:12px 16px;margin-bottom:16px}
.cat .hl{color:var(--ok)}
.cat ul{margin:.4em 0;padding-left:20px;font-size:13.5px}
.warn{background:#2d2a1a;border-left:3px solid var(--warn);padding:8px 12px;border-radius:6px;
  font-size:13.5px;margin:.6em 0 0}
table.pts .p{font:700 16px ui-monospace,monospace;text-align:center}
.p5{color:var(--ok)} .p3{color:var(--acc)} .p1{color:var(--warn)}
.rules{display:flex;flex-direction:column;gap:8px}
.rule{display:grid;grid-template-columns:56px 1fr;gap:12px;background:var(--card2);
  border:1px solid var(--line);border-radius:8px;padding:10px 12px}
.rid{font:700 13px ui-monospace,monospace;color:var(--dim)}
.orig{margin:.3em 0;font-size:13px;color:var(--dim);font-style:italic}
.mine{margin:.3em 0 0;font-size:13.5px;color:#c9d1d9}
details{margin-top:10px}
summary{cursor:pointer;color:var(--acc);font-size:14px}
footer{text-align:center;color:var(--dim);font-size:12.5px;padding:24px 14px 40px;border-top:1px solid var(--line)}

@media(max-width:900px){
  .top{grid-template-columns:1fr;text-align:center}
  .brand{justify-content:center}
  .nav{position:static}
  .two{grid-template-columns:1fr}
  .slots{grid-template-columns:repeat(3,1fr)}
  .why{max-width:none}
}

/* ---------- terminal kontaktu ---------- */
#chatToggle{position:fixed;right:20px;bottom:20px;z-index:60;width:56px;height:56px;
  border-radius:50%;border:1px solid var(--line);background:var(--acc);color:#0d1117;
  font-size:24px;cursor:pointer;box-shadow:0 4px 18px rgba(0,0,0,.5)}
#chatBadge{position:absolute;top:-2px;right:-2px;background:var(--bad);color:#fff;
  border-radius:10px;font:700 11px/16px system-ui;min-width:18px;height:18px;display:none}
#chatBadge.on{display:block}
.chatbox{position:fixed;right:20px;bottom:86px;z-index:60;width:min(380px,calc(100vw - 40px));
  background:var(--card);border:1px solid var(--acc);border-radius:var(--r);
  display:flex;flex-direction:column;box-shadow:0 8px 30px rgba(0,0,0,.6)}
.chatbox.hidden{display:none}
.chatbox header{display:flex;justify-content:space-between;align-items:center;
  padding:10px 12px;border-bottom:1px solid var(--line);font-size:14px}
.chatbox header button{background:none;border:0;color:var(--dim);font-size:16px;cursor:pointer}
.chatlog{padding:10px;max-height:46vh;overflow-y:auto;display:flex;flex-direction:column;gap:8px}
.msg{padding:8px 10px;border-radius:8px;font-size:13.5px;line-height:1.5;white-space:pre-wrap;word-break:break-word}
.msg .who{display:block;font:700 10px ui-monospace,monospace;letter-spacing:1px;
  text-transform:uppercase;color:var(--dim);margin-bottom:3px}
.msg.claude{background:var(--card2);border-left:3px solid var(--acc)}
.msg.op{background:#1b2a1e;border-left:3px solid var(--ok);align-self:flex-end;max-width:88%}
#chatForm{display:flex;gap:6px;padding:10px;border-top:1px solid var(--line)}
#chatForm input{flex:1;background:var(--card2);border:1px solid var(--line);color:var(--tx);
  border-radius:6px;padding:8px 10px;font-size:14px}
#chatForm button{background:var(--acc);border:0;color:#0d1117;font-weight:700;
  border-radius:6px;padding:8px 14px;cursor:pointer}

.loginbox{padding:12px;display:flex;flex-direction:column;gap:8px;border-bottom:1px solid var(--line)}
.loginbox.hidden{display:none}
.loginbox p{margin:0;font-size:13px;color:var(--dim)}
.loginbox input{background:var(--card2);border:1px solid var(--line);color:var(--tx);
  border-radius:6px;padding:8px 10px;font-size:14px}
.loginbox button{background:var(--acc);border:0;color:#0d1117;font-weight:700;
  border-radius:6px;padding:8px 14px;cursor:pointer}
.loginbox .err{color:var(--bad);font-size:12.5px;min-height:16px}
.chatbox .logout{background:none;border:0;color:var(--dim);font-size:11px;cursor:pointer;
  text-decoration:underline;margin-left:auto;margin-right:8px}
.chatbox .logout.hidden{display:none}
.chatlog.hidden,#chatForm.hidden{display:none}


/* ---------- WRTC ---------- */
.card.wrtc{border-color:#4a3d78;background:linear-gradient(180deg,#1a1730,#161b22)}
.callgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:6px;margin:10px 0}
.wcall{display:block;text-align:center;padding:7px 4px;border:1px solid var(--line);
  border-radius:6px;background:var(--card2);font:700 13px ui-monospace,monospace;
  cursor:pointer;user-select:none;transition:.12s}
.wcall:hover{border-color:var(--acc)}
.wcall.done{background:#14361c;border-color:var(--ok);color:#a8e6a0}
.wcall.spotted{border-color:var(--warn);color:var(--warn);box-shadow:0 0 0 1px var(--warn) inset}
.wcall.done.spotted{color:#a8e6a0;box-shadow:none}
.spot.wrtcspot{border-left-color:#8b7fd4}

h3.check{color:var(--warn)}
.spot.check{border-left-color:var(--warn);background:#221d10}
.badge.bmaybe{background:#3a2f10;color:#e3b341}
