/* ===========================================================
   Dekan Cup Catur — Fakultas Teknik Universitas Tanjungpura
   Tema "Bagan Turnamen" — dirancang seperti papan pengumuman
   resmi turnamen catur yang dipasang di atas kertas gambar
   teknik (blueprint): kop surat berlapis lambang, notasi hasil
   ditampilkan sebagai cap tinta bernotasi asli (1-0, ½-½, 0-1),
   dan papan klasemen berupa cross-table dengan lempeng kuningan
   untuk tiga besar.
   =========================================================== */
:root{
  --canvas:#eaf1f7;
  --surface:#ffffff;
  --surface-2:#f2f8fb;
  --ink:#0a2540;
  --muted:#5b7286;
  --line:#cfe0ec;
  --line-strong:#b4cee0;
  --primary:#0b63b0;
  --primary-dim:#084a86;
  --primary-tint:rgba(11,99,176,.1);
  --flag:#96e1ff;
  --accent:#ad8a2e;
  --accent-dim:#8c6f22;
  --accent-tint:rgba(173,138,46,.12);
  --success:#1e7a4c;
  --success-tint:rgba(30,122,76,.1);
  --danger:#b23b32;
  --danger-tint:rgba(178,59,50,.1);
  --warn:#b8860b;
  --warn-tint:rgba(184,134,11,.12);
  --ring:rgba(11,99,176,.35);
  --radius:20px;
  --radius-sm:12px;
  --radius-pill:999px;
  --shadow-sm:0 1px 2px rgba(10,37,64,.08);
  --shadow-md:0 8px 24px -10px rgba(10,37,64,.2);
  --shadow-lift:0 20px 44px -16px rgba(10,37,64,.4);
  --ease-spring:cubic-bezier(.34,1.56,.64,1);
  --ease-out:cubic-bezier(.16,1,.3,1);
  --disp:'Bricolage Grotesque','Segoe UI',system-ui,sans-serif;
  --sans:'Figtree','Segoe UI',system-ui,-apple-system,Arial,sans-serif;
  --mono:'JetBrains Mono',Consolas,'SFMono-Regular',Menlo,monospace;
  font-size:16px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:var(--sans);
  background-color:var(--canvas);
  background-image:
    radial-gradient(circle, rgba(11,99,176,.16), transparent 70%),
    radial-gradient(circle, rgba(150,225,255,.5), transparent 70%),
    radial-gradient(circle, rgba(173,138,46,.12), transparent 70%);
  background-repeat:no-repeat;
  background-size:65% 65%, 55% 55%, 50% 50%;
  background-position:-15% -15%, 115% 0%, 25% 115%;
  background-attachment:fixed;
  animation:blobDrift 40s ease-in-out infinite alternate;
  color:var(--ink);
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
}
@keyframes blobDrift{
  from{background-position:-15% -15%, 115% 0%, 25% 115%}
  to{background-position:-5% 0%, 100% 12%, 35% 100%}
}

/* ===== HEADER / LETTERHEAD ===== */
header{
  background:
    radial-gradient(circle at 15% 20%, rgba(150,225,255,.4), transparent 55%),
    radial-gradient(circle at 85% 85%, rgba(11,99,176,.55), transparent 60%),
    radial-gradient(circle at 50% 100%, rgba(173,138,46,.18), transparent 60%),
    linear-gradient(160deg, var(--ink), var(--primary) 150%);
  background-size:140% 140%, 130% 130%, 100% 100%, 100% 100%;
  color:#fff;padding:2.8rem 1.2rem 2.3rem;text-align:center;position:relative;overflow:hidden;
  animation:headerBlobDrift 26s ease-in-out infinite alternate;
}
@keyframes headerBlobDrift{
  from{background-position:0% 0%, 100% 100%, 50% 100%, 0 0}
  to{background-position:12% 12%, 88% 82%, 56% 100%, 0 0}
}
header>*{position:relative}
.letterhead{
  background:rgba(255,255,255,.94);color:var(--ink);
  border:1px solid rgba(255,255,255,.7);
  border-radius:28px;
  padding:2rem 2.2rem 1.7rem;
  max-width:940px;margin:0 auto;
  box-shadow:var(--shadow-lift);
  -webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);
  position:relative;overflow:hidden;
  transition:transform .15s var(--ease-out);
  transform-style:preserve-3d;
  will-change:transform;
}
.letterhead::after{
  content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:radial-gradient(circle at var(--sheen-x,50%) var(--sheen-y,15%), rgba(150,225,255,.45), transparent 60%);
  opacity:0;transition:opacity .4s var(--ease-out);
}
.letterhead:hover::after{opacity:1}
.header-logos{
  display:flex;align-items:center;justify-content:center;gap:1.4rem;margin-bottom:.6rem;flex-wrap:wrap;
}
.logo-badge{
  width:92px;height:92px;object-fit:contain;flex:none;
  filter:drop-shadow(0 8px 16px rgba(10,37,64,.3));
  transition:transform .35s var(--ease-spring);
}
.logo-badge:hover{transform:scale(1.08) rotate(-3deg)}
.header-text{max-width:580px;min-width:0}
.eyebrow{
  font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;
  font-size:.66rem;color:var(--primary);margin-bottom:.5rem;font-weight:600;
}
header h1{
  font-family:var(--disp);font-weight:700;letter-spacing:-.01em;color:var(--ink);
  font-size:clamp(1.45rem,4.2vw,2.2rem);
}
header h1 b{color:var(--accent)}
.knight{display:inline-block;animation:knightHop 4.5s ease-in-out infinite}
@keyframes knightHop{
  0%,58%,100%{transform:translateY(0) rotate(0deg)}
  64%{transform:translateY(-7px) rotate(-14deg)}
  74%{transform:translateY(0) rotate(7deg)}
  80%{transform:translateY(-2px) rotate(-3deg)}
  86%{transform:translateY(0) rotate(0deg)}
}
.sub{font-size:.85rem;color:var(--muted);margin-top:.55rem;line-height:1.55}
.live-badge{
  display:inline-flex;align-items:center;gap:.45rem;margin-top:.8rem;
  font-family:var(--mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);
}
.live-dot{
  width:.5rem;height:.5rem;border-radius:50%;background:var(--success);flex:none;
  box-shadow:0 0 0 0 rgba(30,122,76,.5);animation:livePulse 2s ease-in-out infinite;
}
@keyframes livePulse{
  0%{box-shadow:0 0 0 0 rgba(30,122,76,.5)}
  70%{box-shadow:0 0 0 7px rgba(30,122,76,0)}
  100%{box-shadow:0 0 0 0 rgba(30,122,76,0)}
}

.hstats{
  display:flex;gap:.6rem;justify-content:center;flex-wrap:wrap;margin-top:1.5rem;
}
.hstat{
  background:rgba(255,255,255,.08);backdrop-filter:blur(6px);
  border:1px solid rgba(150,225,255,.35);border-radius:8px;
  padding:.5rem 1rem;min-width:96px;
}
.hstat .n{font-family:var(--mono);font-size:1.25rem;font-weight:700;color:#fff}
.hstat .l{font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--flag)}

/* ===== TURNAMEN SWITCHER (multi-tournament) ===== */
.tourn-switcher{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap;margin-top:1rem}
.tourn-pill{
  font-family:var(--sans);font-size:.75rem;font-weight:600;
  padding:.4rem .9rem;border-radius:var(--radius-pill);
  background:rgba(255,255,255,.08);border:1px solid rgba(150,225,255,.35);
  color:var(--flag);text-decoration:none;cursor:pointer;display:inline-block;
  transition:background .2s,color .2s,transform .15s var(--ease-spring),border-color .2s;
}
.tourn-pill:hover{background:rgba(255,255,255,.18);transform:translateY(-1px)}
.tourn-pill.active{background:var(--accent);border-color:var(--accent);color:#fff}
.tourn-pill.add{background:transparent;border-style:dashed;color:#fff}
.tourn-pill.del{background:transparent;border-color:rgba(239,68,68,.5);color:#ffc2bf}
.tourn-pill.del:hover{background:rgba(239,68,68,.18);border-color:rgba(239,68,68,.8)}

/* ===== NAV — index tabs w/ sliding brass underline ===== */
.navwrap{
  position:sticky;top:0;z-index:20;padding:0 1rem;
  background:rgba(234,241,247,.78);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line-strong);
}
nav{
  position:relative;display:flex;justify-content:center;gap:.15rem;
  max-width:1080px;margin:0 auto;overflow-x:auto;padding:.4rem 0;
}
nav .thumb{
  position:absolute;top:.4rem;bottom:.4rem;left:0;width:0;
  background:var(--primary);border-radius:var(--radius-pill);
  box-shadow:0 4px 12px -2px rgba(11,99,176,.5);
  transition:transform .4s var(--ease-spring),width .4s var(--ease-spring);
  z-index:0;
}
nav button{
  position:relative;z-index:1;font-family:var(--sans);font-weight:600;
  background:none;border:none;border-radius:var(--radius-pill);color:var(--muted);
  padding:.7rem 1.2rem;font-size:.8rem;cursor:pointer;
  transition:color .25s var(--ease-out),background .25s var(--ease-out);white-space:nowrap;letter-spacing:.01em;
}
nav button:hover{color:var(--ink);background:rgba(11,99,176,.08)}
nav button.active{color:#fff}
nav button.active:hover{background:none}
nav button:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}

main{max-width:1080px;margin:0 auto;padding:.6rem 1rem 4rem}
section{display:none}
section.show{display:block;animation:sectionIn .35s var(--ease-out)}
@keyframes sectionIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

h2{
  font-family:var(--disp);font-weight:700;font-size:1.25rem;
  margin-bottom:1.1rem;display:flex;align-items:center;gap:.6rem;color:var(--ink);
}
h2 .dot{width:.55rem;height:.55rem;border-radius:2px;background:var(--accent);display:inline-block}

.card{
  background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:1.25rem;margin-bottom:1.1rem;
  box-shadow:var(--shadow-sm);
  transition:transform .3s var(--ease-out),box-shadow .3s var(--ease-out);
}
.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}

/* stagger children in on section show */
.stagger>*{animation:itemIn .4s var(--ease-out) both}
.stagger>*:nth-child(1){animation-delay:.02s}
.stagger>*:nth-child(2){animation-delay:.06s}
.stagger>*:nth-child(3){animation-delay:.1s}
.stagger>*:nth-child(4){animation-delay:.14s}
.stagger>*:nth-child(5){animation-delay:.18s}
.stagger>*:nth-child(n+6){animation-delay:.2s}
@keyframes itemIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ===== FORMS ===== */
label{font-size:.75rem;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:.3rem;font-weight:600}
input[type=text],input[type=password],select{
  font-family:var(--sans);font-size:.95rem;
  padding:.6rem .8rem;border:1.5px solid var(--line);
  border-radius:var(--radius-sm);background:var(--surface-2);width:100%;color:var(--ink);
  transition:border-color .2s,box-shadow .2s;
}
input[type=text]:focus-visible,input[type=password]:focus-visible,select:focus-visible{
  outline:none;border-color:var(--primary);box-shadow:0 0 0 4px var(--ring);
}
.row{display:flex;gap:.8rem;flex-wrap:wrap;align-items:flex-end}
.row>div{flex:1;min-width:160px}

.btn{
  position:relative;overflow:hidden;
  font-family:var(--sans);font-size:.85rem;font-weight:600;
  padding:.65rem 1.3rem;border-radius:var(--radius-pill);border:1.5px solid var(--line);cursor:pointer;
  background:var(--surface);color:var(--ink);
  transition:transform .15s var(--ease-spring),box-shadow .2s,border-color .2s,background .2s;
}
.btn:hover{border-color:var(--primary);box-shadow:var(--shadow-sm)}
.btn:active{transform:scale(.96)}
.btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.btn.gold{background:var(--accent);color:#fff;border-color:var(--accent)}
.btn.gold:hover{background:var(--accent-dim);border-color:var(--accent-dim)}
.btn.danger{background:transparent;color:var(--danger);border-color:var(--danger);padding:.4rem .8rem;font-size:.78rem}
.btn.danger:hover{background:var(--danger);color:#fff}
.btn.small{padding:.4rem .85rem;font-size:.78rem}
td.c .btn+.btn{margin-left:.4rem}
.btn .ripple{
  position:absolute;border-radius:50%;background:rgba(255,255,255,.55);
  transform:scale(0);animation:rippleOut .55s var(--ease-out);pointer-events:none;
}
@keyframes rippleOut{to{transform:scale(2.6);opacity:0}}

/* ===== TABLES / CROSS-TABLE ===== */
.tblwrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-family:var(--sans);font-size:.88rem}
th{
  background:var(--surface-2);color:var(--muted);
  padding:.6rem .65rem;text-align:left;font-size:.68rem;
  font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;
  border-bottom:2px solid var(--accent);
}
th.c,td.c{text-align:center}
td{padding:.6rem .65rem;border-bottom:1px solid var(--line);font-family:var(--sans)}
td.c,.pts{font-family:var(--mono)}
tbody tr{transition:background .2s}
tbody tr:hover{background:var(--primary-tint)}
.rank1 td{background:linear-gradient(90deg,var(--accent-tint),transparent)!important;font-weight:700}
.rank2 td{background:linear-gradient(90deg,rgba(11,99,176,.07),transparent)!important}
.rank3 td{background:linear-gradient(90deg,rgba(11,99,176,.035),transparent)!important}
.pts{font-weight:700;color:var(--primary)}
.plaque{
  display:inline-flex;align-items:center;justify-content:center;
  width:1.55em;height:1.55em;border-radius:7px;margin-right:.35em;
  font-family:var(--mono);font-weight:700;font-size:.85em;
  border:1.5px solid var(--accent);color:var(--accent);
}
.plaque.p1{background:var(--accent);color:#fff}
.plaque.p3{border-color:var(--accent-dim);color:var(--accent-dim);opacity:.85}
.plaque{transition:transform .2s var(--ease-spring)}
tbody tr:hover .plaque{transform:scale(1.15)}
.tag{
  display:inline-block;padding:.15rem .55rem;border-radius:var(--radius-pill);
  font-size:.7rem;letter-spacing:.03em;color:#fff;font-family:var(--mono);
}
.tag.w{background:var(--success)}.tag.l{background:var(--danger)}.tag.d{background:var(--warn)}.tag.b{background:var(--muted)}

/* ===== PAIRING SLIPS ===== */
.pair{
  display:grid;grid-template-columns:1fr auto 1fr;
  gap:.8rem;align-items:center;
  padding:.85rem;border:1.5px solid var(--line);border-radius:var(--radius);
  margin-bottom:.65rem;background:var(--surface);
  transition:background .35s var(--ease-out),border-color .35s;
}
.pair.res-w{background:var(--success-tint);border-color:var(--success)}
.pair.res-l{background:var(--danger-tint);border-color:var(--danger)}
.pair.res-d{background:var(--warn-tint);border-color:var(--warn)}
.pair .pl{font-size:.95rem;font-weight:600}
.pair .pl small{display:block;color:var(--muted);font-size:.72rem;font-weight:400;font-family:var(--mono)}
.pts-chip{
  display:inline-block;font-family:var(--mono);font-weight:700;font-size:.7rem;
  color:var(--primary);background:var(--primary-tint);border-radius:6px;
  padding:.05rem .4rem;vertical-align:middle;
}
.pair .white{text-align:right}
.vs{
  font-family:var(--mono);font-size:.66rem;color:var(--muted);
  text-align:center;letter-spacing:.08em;text-transform:uppercase;line-height:1.6;
}
.notation{
  font-family:var(--mono);font-weight:700;font-size:.95rem;color:var(--ink);
  display:inline-block;margin-top:.2rem;padding:.1rem .55rem;
  border-radius:9px;border:1px solid var(--line);background:var(--surface-2);
  text-transform:none;letter-spacing:.02em;
  transition:transform .25s var(--ease-spring);
}
.notation.nw{color:var(--success);border-color:var(--success);background:var(--success-tint);transform:rotate(-2deg)}
.notation.nl{color:var(--danger);border-color:var(--danger);background:var(--danger-tint);transform:rotate(-2deg)}
.notation.nd{color:var(--warn);border-color:var(--warn);background:var(--warn-tint);transform:rotate(-2deg)}
.pair:hover .notation.nw,.pair:hover .notation.nl,.pair:hover .notation.nd{transform:rotate(0deg) scale(1.08)}
.vslabel{color:var(--muted);opacity:.75}
.resbtns{display:flex;gap:.4rem;justify-content:center;margin-top:.5rem;grid-column:1/-1;flex-wrap:wrap}
.resbtns button{
  font-family:var(--mono);font-size:.78rem;font-weight:600;padding:.4rem .85rem;
  border:1.5px solid var(--line);background:var(--surface-2);border-radius:var(--radius-sm);cursor:pointer;
  transition:transform .18s var(--ease-spring),background .2s,border-color .2s,color .2s;
}
.resbtns button:hover{border-color:var(--primary)}
.resbtns button:active{transform:scale(.94)}
.resbtns button.on{animation:stampin .32s var(--ease-spring);transform:rotate(-2deg)}
.resbtns button.on.w{background:var(--success);color:#fff;border-color:var(--success)}
.resbtns button.on.l{background:var(--danger);color:#fff;border-color:var(--danger)}
.resbtns button.on.d{background:var(--warn);color:#fff;border-color:var(--warn)}
@keyframes stampin{0%{transform:scale(1.35) rotate(-8deg)}60%{transform:scale(.94) rotate(3deg)}100%{transform:scale(1) rotate(-2deg)}}
.roundhead{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.6rem;margin-bottom:.9rem}
.roundhead h3{font-family:var(--disp);font-weight:700;font-size:1.1rem}
.bye{
  border:1.5px dashed var(--accent);background:var(--accent-tint);
  padding:.75rem;border-radius:var(--radius);margin-bottom:.65rem;
  font-size:.9rem;text-align:center;
}
.empty{
  text-align:center;color:var(--muted);padding:2.4rem 1rem;font-size:.9rem;
  border-radius:var(--radius);
}
.empty .ic{font-size:2rem;display:block;margin-bottom:.6rem;animation:breathe 2.6s ease-in-out infinite}
@keyframes breathe{0%,100%{transform:scale(1);opacity:.65}50%{transform:scale(1.12);opacity:1}}
.note{font-size:.78rem;color:var(--muted);margin-top:.5rem;line-height:1.6}
.statgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.8rem;margin-bottom:1.2rem}
.stat{
  background:var(--surface);border:1px solid var(--line);color:var(--ink);
  border-radius:var(--radius);padding:1rem;text-align:center;
  box-shadow:var(--shadow-sm);
}
.stat .n{font-family:var(--mono);font-size:1.8rem;color:var(--primary);font-weight:700}
.stat .l{font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:.3rem}
.rules{font-size:.9rem;line-height:1.75}
.rules li{margin-left:1.2rem;margin-bottom:.4rem}
.toolbar{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:1rem}

/* ===== toasts ===== */
#toasts{position:fixed;right:1rem;bottom:1rem;z-index:100;display:flex;flex-direction:column;gap:.5rem;max-width:min(90vw,320px)}
.toast{
  background:var(--ink);color:#fff;padding:.7rem 1rem;border-radius:var(--radius-sm);
  font-size:.85rem;box-shadow:var(--shadow-md);border-left:4px solid var(--primary);
  animation:toastIn .3s var(--ease-spring);
}
.toast.ok{border-left-color:var(--success)}
.toast.err{border-left-color:var(--danger)}
.toast.leaving{animation:toastOut .25s var(--ease-out) forwards}
@keyframes toastIn{from{opacity:0;transform:translateX(30px) scale(.9)}to{opacity:1;transform:none}}
@keyframes toastOut{to{opacity:0;transform:translateX(30px) scale(.9)}}

/* ===== login ===== */
.loginwrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem;position:relative}
.loginwrap::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(circle at 50% 15%,rgba(150,225,255,.3),transparent 60%);
}
.loginbox{
  position:relative;z-index:1;overflow:hidden;
  background:rgba(255,255,255,.94);border-radius:28px;padding:2.2rem 2rem 1.8rem;max-width:380px;width:100%;
  border:1px solid rgba(255,255,255,.7);
  -webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);
  box-shadow:var(--shadow-lift);
  animation:itemIn .5s var(--ease-spring);
  transition:transform .15s var(--ease-out);
  will-change:transform;
}
.loginbox::after{
  content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;
  background:radial-gradient(circle at var(--sheen-x,50%) var(--sheen-y,15%), rgba(150,225,255,.4), transparent 60%);
  opacity:0;transition:opacity .4s var(--ease-out);
}
.loginbox:hover::after{opacity:1}
.login-badges{display:flex;justify-content:center;gap:1rem;margin-bottom:1.1rem}
.login-badges .logo-badge{width:68px;height:68px}
.loginbox h1{font-family:var(--disp);font-size:1.3rem;margin-bottom:.3rem;color:var(--ink);text-align:center}
.loginbox .sub2{color:var(--muted);font-size:.83rem;margin-bottom:1.4rem;text-align:center;line-height:1.55}
.loginbox .btn.gold{width:100%;margin-top:.4rem}
.err-msg{
  background:var(--danger-tint);color:var(--danger);border-radius:var(--radius-sm);
  padding:.6rem .8rem;font-size:.82rem;margin-bottom:1rem;animation:shake .4s var(--ease-out);
}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}

@media(max-width:560px){
  .pair{grid-template-columns:1fr}
  .pair .white{text-align:left}
  .vs{display:none}
  .logo-badge{width:64px;height:64px}
}
/* ===== FOOTER ===== */
.site-footer{
  text-align:center;padding:1.6rem 1rem 2.2rem;
  font-size:.78rem;color:var(--muted);
}
.site-footer a{color:inherit;font-weight:600;text-decoration:underline;text-decoration-color:rgba(91,114,134,.35);text-underline-offset:2px}
.site-footer a:hover{text-decoration-color:currentColor}
.site-footer.fixed{position:fixed;left:0;right:0;bottom:0;z-index:5;padding:1rem}

@media print{
  .navwrap,header .sub,.live-badge,.toolbar,.btn,.resbtns,#toasts,.site-footer{display:none!important}
  body{background:#fff}
  section{display:block!important}
}
@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
}
