:root {
  --latar: #080b10;
  --kad: #111720;
  --kad-2: #161e2a;
  --garis: #243042;
  --teks: #e7ecf3;
  --pudar: #8d9bb0;
  --biru: #2b7bea;
  --biru-terang: #5aa0ff;
  --perak: #d3d9e2;
  --hijau: #3ccf8e;
  --merah: #ef5b72;
  --kuning: #f2b544;
  --jejari: 14px;
}
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0; min-height: 100vh; color: var(--teks); font: 15px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  background-color: var(--latar);
  background-image:
    radial-gradient(circle at 50% -10%, rgba(43, 123, 234, .18), transparent 55%),
    radial-gradient(circle, transparent 7px, rgba(255, 255, 255, .028) 8px, transparent 9px, transparent 12px, rgba(255, 255, 255, .02) 13px, transparent 14px);
  background-size: 100% 600px, 32px 32px;
  background-repeat: no-repeat, repeat;
}
a { color: var(--biru-terang); }
button, input, select, textarea { font: inherit; color: inherit; }
img { max-width: 100%; display: block; }
.tersembunyi { display: none !important; }
.pudar { color: var(--pudar); }
.kecil { font-size: 13px; }

/* jenama */
.jenama { font-weight: 800; font-style: italic; letter-spacing: .06em; text-transform: uppercase; }
.jenama b { color: var(--biru-terang); font-weight: 800; }
.jenama span { background: linear-gradient(180deg, #f4f6f9, #9aa5b4); -webkit-background-clip: text; background-clip: text; color: transparent; }

/* log masuk */
.masuk { max-width: 420px; margin: 0 auto; padding: 28px 18px 40px; }
.masuk .logo { width: 150px; height: 150px; border-radius: 22px; margin: 6px auto 14px; box-shadow: 0 0 0 1px var(--garis), 0 18px 50px rgba(43, 123, 234, .25); }
.masuk h1 { text-align: center; margin: 0; font-size: 24px; }
.masuk .sub { text-align: center; color: var(--pudar); margin: 2px 0 22px; }
.senarai-ign { display: grid; gap: 8px; }
.ign-btn {
  display: flex; align-items: center; gap: 12px; width: 100%; padding: 12px 14px; border-radius: 12px; cursor: pointer;
  background: var(--kad); border: 1px solid var(--garis); text-align: left; font-weight: 700; font-size: 16px;
  transition: border-color .15s, transform .15s, background .15s;
}
.ign-btn:hover { border-color: var(--biru); }
.ign-btn:active { transform: scale(.98); }
.ign-btn[aria-pressed="true"] { border-color: var(--biru); background: rgba(43, 123, 234, .14); }
.avatar { flex: none; width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; font-weight: 800; font-size: 14px; background: linear-gradient(145deg, #2b7bea, #164a92); color: #fff; }
.avatar.igl { background: linear-gradient(145deg, #e9edf2, #8792a2); color: #0b1018; }
.tag-igl { margin-left: auto; font-size: 11px; letter-spacing: .1em; color: var(--perak); border: 1px solid var(--garis); padding: 2px 8px; border-radius: 99px; }

/* borang */
label.medan { display: block; margin: 12px 0 0; font-size: 13px; color: var(--pudar); font-weight: 600; }
label.medan > input, label.medan > select, label.medan > textarea { margin-top: 5px; }
input[type=text], input[type=password], input[type=email], input[type=number], input[type=date], input[type=time], select, textarea {
  width: 100%; padding: 11px 12px; border-radius: 10px; background: #0b1017; border: 1px solid var(--garis); outline: none; min-height: 44px;
}
input:focus-visible, select:focus-visible, textarea:focus-visible { border-color: var(--biru); box-shadow: 0 0 0 3px rgba(43, 123, 234, .25); }
input[type=date], input[type=time] { color-scheme: dark; }
textarea { resize: vertical; min-height: 70px; }
.pin { text-align: center; font-size: 26px; letter-spacing: .5em; font-weight: 700; padding-left: .5em; }
.baris { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.baris3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; }
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; padding: 10px 16px; border-radius: 10px;
  border: 1px solid var(--garis); background: var(--kad-2); cursor: pointer; font-weight: 700; text-decoration: none; color: var(--teks);
  transition: background .15s, border-color .15s, transform .1s;
}
.btn:hover { border-color: #3a4a62; }
.btn:active { transform: scale(.98); }
.btn:disabled { opacity: .55; cursor: wait; }
.btn:focus-visible, .ign-btn:focus-visible, .tab:focus-visible, .seg button:focus-visible { outline: 2px solid var(--biru-terang); outline-offset: 2px; }
.btn.utama { background: var(--biru); border-color: var(--biru); color: #fff; }
.btn.utama:hover { background: #3b88f3; }
.btn.bahaya { color: #ffb1bd; border-color: rgba(239, 91, 114, .45); background: rgba(239, 91, 114, .08); }
.btn.penuh { width: 100%; margin-top: 16px; }
.btn.kecil { min-height: 36px; padding: 6px 12px; font-size: 13px; }
.pautan { background: none; border: 0; color: var(--biru-terang); cursor: pointer; padding: 8px 0; text-decoration: underline; text-underline-offset: 3px; }
.mesej { margin-top: 12px; padding: 10px 12px; border-radius: 10px; font-size: 14px; }
.mesej.ralat { background: rgba(239, 91, 114, .12); color: #ffc2cb; border: 1px solid rgba(239, 91, 114, .35); }
.mesej.ok { background: rgba(60, 207, 142, .1); color: #b6f2d6; border: 1px solid rgba(60, 207, 142, .35); }
.mesej.info { background: rgba(43, 123, 234, .1); color: #c6dcff; border: 1px solid rgba(43, 123, 234, .35); }
.seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px; padding: 4px; border-radius: 12px; background: #0b1017; border: 1px solid var(--garis); }
.seg button { min-height: 42px; border: 0; border-radius: 9px; background: transparent; cursor: pointer; font-weight: 800; color: var(--pudar); transition: background .15s, color .15s; }
.seg button[aria-pressed="true"] { background: var(--biru); color: #fff; }
.seg button.tak[aria-pressed="true"] { background: #3a2230; color: #ffc2cb; }
.semak { display: flex; gap: 10px; align-items: flex-start; margin-top: 14px; font-size: 14px; cursor: pointer; }
.semak input { width: 20px; height: 20px; margin: 1px 0 0; accent-color: var(--biru); flex: none; }

/* kepala aplikasi */
.kepala { position: sticky; top: 0; z-index: 10; background: rgba(8, 11, 16, .86); backdrop-filter: blur(10px); border-bottom: 1px solid var(--garis); }
.kepala-dalam { max-width: 960px; margin: 0 auto; display: flex; align-items: center; gap: 10px; padding: 10px 16px; }
.kepala img { width: 38px; height: 38px; border-radius: 9px; }
.kepala .jenama { font-size: 15px; line-height: 1.1; }
.kepala .saya { margin-left: auto; text-align: right; font-size: 13px; line-height: 1.25; }
.kepala .saya b { display: block; font-size: 14px; }
.tabs { max-width: 960px; margin: 0 auto; display: flex; gap: 4px; padding: 0 12px; overflow-x: auto; scrollbar-width: none; }
.tabs::-webkit-scrollbar { display: none; }
.tab { flex: none; background: none; border: 0; border-bottom: 2px solid transparent; padding: 10px 10px 9px; cursor: pointer; color: var(--pudar); font-weight: 700; white-space: nowrap; }
.tab[aria-selected="true"] { color: var(--teks); border-bottom-color: var(--biru); }
main { max-width: 960px; margin: 0 auto; padding: 16px 14px 60px; }
h2.bahagian { font-size: 13px; letter-spacing: .12em; text-transform: uppercase; color: var(--pudar); margin: 22px 2px 10px; display: flex; align-items: center; gap: 10px; }
h2.bahagian::after { content: ""; flex: 1; height: 1px; background: var(--garis); }
.grid-dua { display: grid; gap: 14px; }
@media (min-width: 860px) { .grid-dua { grid-template-columns: 340px 1fr; align-items: start; } .grid-dua > .melekat { position: sticky; top: 112px; } }

/* kad latihan */
.kad { background: var(--kad); border: 1px solid var(--garis); border-radius: var(--jejari); padding: 16px; margin-bottom: 12px; animation: naik .35s ease both; }
.kad h3 { margin: 0 0 4px; font-size: 17px; }
@keyframes naik { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .kad { animation: none; } * { transition: none !important; } }
.kad.lepas { opacity: .82; }
.kad.kini { border-color: rgba(43, 123, 234, .7); box-shadow: 0 0 0 1px rgba(43, 123, 234, .35), 0 10px 30px rgba(43, 123, 234, .12); }
.kad-atas { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.lencana { font-size: 12px; font-weight: 800; letter-spacing: .08em; padding: 3px 9px; border-radius: 6px; font-style: italic; }
.lencana.ft { background: rgba(43, 123, 234, .18); color: var(--biru-terang); border: 1px solid rgba(43, 123, 234, .45); }
.lencana.tour { background: linear-gradient(180deg, #eef1f5, #a8b2c0); color: #0b1018; }
.masa-label { font-size: 12px; color: var(--pudar); margin-left: auto; }
.masa-label.hidup { color: var(--hijau); font-weight: 700; }
.butiran { display: flex; flex-wrap: wrap; gap: 4px 16px; color: var(--perak); font-size: 14px; }
.butiran span b { color: var(--teks); }
.nota { margin-top: 8px; font-size: 14px; color: var(--pudar); border-left: 2px solid var(--garis); padding-left: 10px; }
.status { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 700; padding: 3px 10px; border-radius: 99px; }
.status::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.status.join { color: var(--hijau); background: rgba(60, 207, 142, .1); }
.status.tak { color: var(--merah); background: rgba(239, 91, 114, .1); }
.status.belum { color: var(--kuning); background: rgba(242, 181, 68, .1); }
.kad-bawah { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--garis); }
.kad-bawah .btn { margin-left: auto; }
.borang-hadir { margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--garis); }
.muat { display: grid; place-items: center; gap: 4px; margin-top: 12px; padding: 18px; border: 1.5px dashed #34445c; border-radius: 12px; text-align: center; cursor: pointer; color: var(--pudar); background: rgba(43, 123, 234, .04); }
.muat:hover, .muat:focus-within { border-color: var(--biru); color: var(--teks); }
.muat input { position: absolute; width: 1px; height: 1px; opacity: 0; }
.muat b { color: var(--biru-terang); }
.ss-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(88px, 1fr)); gap: 8px; margin-top: 10px; }
.ss { position: relative; aspect-ratio: 16 / 10; border-radius: 9px; overflow: hidden; background: #0b1017; border: 1px solid var(--garis); }
.ss img { width: 100%; height: 100%; object-fit: cover; cursor: zoom-in; }
.ss .buang { position: absolute; top: 4px; right: 4px; width: 28px; height: 28px; border-radius: 50%; border: 0; background: rgba(0, 0, 0, .75); color: #fff; cursor: pointer; font-weight: 800; line-height: 1; }

/* IGL: jadual kehadiran */
.kiraan { display: flex; gap: 6px; flex-wrap: wrap; }
.jadual-hadir { width: 100%; border-collapse: collapse; margin-top: 12px; font-size: 14px; }
.jadual-hadir td { padding: 9px 6px; border-top: 1px solid var(--garis); vertical-align: top; }
.jadual-hadir td:first-child { font-weight: 700; white-space: nowrap; }
.jadual-hadir .ss-mini { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
.jadual-hadir .ss-mini img { width: 64px; height: 40px; object-fit: cover; border-radius: 6px; cursor: zoom-in; border: 1px solid var(--garis); }
.tindakan { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.bar { height: 8px; border-radius: 99px; background: #0b1017; overflow: hidden; display: flex; border: 1px solid var(--garis); }
.bar i { display: block; height: 100%; }
.bar .j { background: var(--hijau); } .bar .t { background: var(--merah); } .bar .b { background: #3d4757; }
.stat-baris { display: grid; grid-template-columns: 120px 1fr 52px; gap: 10px; align-items: center; padding: 10px 0; border-top: 1px solid var(--garis); }
.stat-baris:first-of-type { border-top: 0; }
.stat-baris b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.peratus { text-align: right; font-weight: 800; font-variant-numeric: tabular-nums; }
.ahli-baris { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-top: 1px solid var(--garis); flex-wrap: wrap; }
.ahli-baris:first-child { border-top: 0; }
.ahli-baris .info { flex: 1; min-width: 160px; }
.ahli-baris .info b { display: block; }
.kosong { text-align: center; padding: 30px 16px; color: var(--pudar); border: 1px dashed var(--garis); border-radius: var(--jejari); }

/* kotak dialog & paparan SS */
dialog { border: 1px solid var(--garis); background: var(--kad); color: var(--teks); border-radius: 16px; padding: 20px; width: min(420px, calc(100vw - 32px)); }
dialog::backdrop { background: rgba(0, 0, 0, .7); }
dialog.ss-besar { width: min(1100px, calc(100vw - 16px)); padding: 8px; background: #000; }
dialog.ss-besar img { width: 100%; max-height: 82vh; object-fit: contain; }
.pin-besar { font-size: 34px; font-weight: 800; letter-spacing: .3em; text-align: center; margin: 12px 0; font-variant-numeric: tabular-nums; }
.toast { position: fixed; left: 50%; bottom: 18px; transform: translateX(-50%); z-index: 50; padding: 12px 18px; border-radius: 12px; background: #1c2635; border: 1px solid var(--garis); box-shadow: 0 10px 30px rgba(0, 0, 0, .5); font-weight: 600; max-width: calc(100vw - 24px); }
.kaki { text-align: center; font-size: 12px; color: var(--pudar); margin-top: 26px; }
.privasi { max-width: 680px; margin: 0 auto; padding: 24px 18px 60px; }
.privasi h1 { font-size: 22px; }
.privasi h2 { font-size: 16px; margin-top: 22px; }
.label-atas { margin: 0 0 8px; }
.penuh-lebar { width: 100%; }
.status.akan { color: var(--biru-terang); background: rgba(43, 123, 234, .12); }
.panduan li { margin: 4px 0; }
.panduan h3 { font-size: 15px; margin: 18px 0 6px; color: var(--perak); }
.panduan figure { margin: 14px 0; }
.panduan figure img { border-radius: 12px; border: 1px solid var(--garis); width: 100%; max-width: 420px; height: auto; }
.panduan figcaption { font-size: 13px; color: var(--pudar); margin-top: 6px; }
.panduan-logo { border-radius: 14px; margin: 8px 0; }
.isi-kandungan ol { margin: 8px 0 0; padding-left: 22px; }
.senarai-status { list-style: none; padding: 0; }
.senarai-status li { margin: 8px 0; }
.soalan dt { font-weight: 700; margin-top: 14px; }
.soalan dd { margin: 4px 0 0; color: var(--perak); }
.tab { text-decoration: none; }
