/* CỘNG ĐỒNG GX VIỆT — giao diện dùng chung của mọi app: màu (sáng / tối), chữ, nút, ô nhập, hộp thoại, thông báo,
   sơ đồ chỗ… Mỗi app tải file này trước file riêng của mình. */
/* ============================================================
   CỘNG ĐỒNG GX VIỆT — giao diện
   ============================================================ */
:root{
  color-scheme:dark;
  --bg:#0a0a0a;--bg2:#0f0f0f;--card:#141414;--card2:#1b1b1b;--line:#242424;--line2:#353535;
  --text:#f3f3ee;--text2:#c9c9c2;--muted:#9d9d96;--dim:#7e7e77;
  --accent:#c6ff00;--ink:#0a0a0a;--acc:var(--accent);
  --red:#ff4d4d;--red-fg:#ff6b6b;--on-red:#000;--danger-line:#5c2222;--danger-fg:#ff7a7a;
  --nav-bg:rgba(10,10,10,.82);--glow2:rgba(255,255,255,.05);--pop-shadow:rgba(0,0,0,.55);
  --s1:#101010;--s2:#161616;--s3:#181818;--s4:#222;
  --cell:#121212;--cell-line:#1d1d1d;--sess:#161616;--sess-line:#222;
  --stroke-faint:#1f1f1f;--stroke-mid:#333;
  --adm-bg:#0c0c0c;--adm-top:rgba(12,12,12,.94);
  --input:#0d0d0d;--input-line:#2c2c2c;--placeholder:#55554f;
  --add-line:#2a2a2a;--add-fg:#3a3a3a;
  --dialog:#121212;--backdrop:rgba(0,0,0,.74);
  --fd:'Anton','Impact','Arial Narrow Bold',sans-serif;
  --fb:'Be Vietnam Pro',system-ui,-apple-system,'Segoe UI',Roboto,Arial,sans-serif;
  --ease:cubic-bezier(.2,.75,.2,1);
  --navh:76px;
}
/* Giao diện sáng — bật bằng data-theme="light" trên <html>; mặc định là tối */
:root[data-theme="light"]{
  color-scheme:light;
  --bg:#f4f3ee;--bg2:#ebeae4;--card:#ffffff;--card2:#efeee8;--line:#dedcd3;--line2:#c8c6bc;
  --text:#121210;--text2:#3b3b36;--muted:#5d5d56;--dim:#63635c;
  --acc:var(--accent-deep,#5b7300);
  --red:#e53935;--red-fg:#c62828;--on-red:#fff;--danger-line:#efb3b3;--danger-fg:#c62828;
  --nav-bg:rgba(244,243,238,.86);--glow2:rgba(0,0,0,.04);--pop-shadow:rgba(18,18,16,.16);
  --s1:#e9e8e2;--s2:#e6e5de;--s3:#e3e2db;--s4:#d8d7ce;
  --cell:#ffffff;--cell-line:#e4e3db;--sess:#fbfbf8;--sess-line:#e0dfd7;
  --stroke-faint:#e3e2da;--stroke-mid:#c4c3b9;
  --adm-bg:#efeee8;--adm-top:rgba(239,238,232,.94);
  --input:#ffffff;--input-line:#cfcdc4;--placeholder:#9b9a92;
  --add-line:#d3d2c9;--add-fg:#b3b2a9;
  --dialog:#ffffff;--backdrop:rgba(18,18,16,.45);
}
*,*::before,*::after{box-sizing:border-box}
[hidden]{display:none!important}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--fb);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden}
img{max-width:100%;display:block}
a{color:inherit}
button,input,select,textarea{font:inherit;color:inherit}
::selection{background:var(--accent);color:var(--ink)}
:focus-visible{outline:2px solid var(--acc);outline-offset:3px}
a,button,summary,label{-webkit-tap-highlight-color:transparent}
.muted{color:var(--muted)}
/* ---------- loader ---------- */
.boot{position:fixed;inset:0;display:grid;place-items:center;background:var(--bg);z-index:500;transition:opacity .5s,visibility .5s}
.boot span{font-family:var(--fd);font-size:64px;color:var(--acc);animation:bootP 1s ease-in-out infinite alternate}
.boot.gone{opacity:0;visibility:hidden}
/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:15px 24px;font-weight:700;font-size:13px;letter-spacing:.14em;text-transform:uppercase;text-decoration:none;border:1px solid var(--text);background:transparent;color:var(--text);cursor:pointer;transition:background .25s,color .25s,border-color .25s,transform .25s;white-space:nowrap;border-radius:0}
@media (hover:hover){
  .btn:hover{background:var(--text);color:var(--bg)}
}
.btn-acc{background:var(--accent);border-color:var(--accent);color:var(--ink)}
@media (hover:hover){
  .btn-acc:hover{background:var(--text);border-color:var(--text);color:var(--bg)}
}
.btn .arr{transition:transform .25s}
@media (hover:hover){
  .btn:hover .arr{transform:translateX(4px)}
}
.btn-sm{padding:10px 15px;font-size:11px;letter-spacing:.12em;gap:8px}
.btn-ghost{border-color:var(--line2);color:var(--muted)}
@media (hover:hover){
  .btn-ghost:hover{border-color:var(--text)}
}
.btn-danger{border-color:var(--danger-line);color:var(--danger-fg)}
@media (hover:hover){
  .btn-danger:hover{background:var(--red);border-color:var(--red);color:var(--on-red)}
}
.btn[disabled]{opacity:.4;pointer-events:none}
.btn:active,.chip:active,.dv-tabs button:active{opacity:.8}
/* ---------- nav ---------- */
/* Nền mờ đặt ở ::before: nếu đặt backdrop-filter lên chính .nav, menu mobile (position:fixed) bên trong sẽ bị giới hạn trong khung header thay vì phủ toàn màn hình */
.nav{position:fixed;inset:0 0 auto;z-index:60}
.nav::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--nav-bg);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--line);opacity:0;transition:opacity .35s}
.nav.solid::before{opacity:1}
.logo{font-family:var(--fd);font-size:28px;line-height:1;letter-spacing:.02em;text-decoration:none;display:inline-flex;gap:.28em;align-items:baseline;text-transform:uppercase;white-space:nowrap}
.logo b{color:var(--acc);font-weight:400}
.logo small{font-family:var(--fb);font-size:11px;font-weight:700;letter-spacing:.25em;color:var(--muted);margin-left:6px}
/* ---------- hero ---------- */
.hero{position:relative;min-height:100vh;min-height:100svh;display:flex;align-items:center;padding:130px 0 90px;overflow:hidden}
.hero::before{content:"";position:absolute;inset:0;background:
  radial-gradient(60% 55% at 78% 30%,color-mix(in srgb,var(--accent) 17%,transparent),transparent 70%),
  radial-gradient(40% 40% at 5% 95%,var(--glow2),transparent 70%)}
.hero::after{content:"";position:absolute;inset:0;opacity:.5;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:88px 88px;-webkit-mask-image:radial-gradient(70% 60% at 60% 40%,#000,transparent 75%);mask-image:radial-gradient(70% 60% at 60% 40%,#000,transparent 75%)}
.sec-title em,.acc{font-style:normal;color:var(--acc)}
/* about */
.about{overflow:hidden}
.pillars{position:relative;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:0;margin-top:80px;border-top:1px solid var(--line)}
.cls{position:relative;display:flex;flex-direction:column;min-height:380px;padding:30px 28px 26px;background:var(--bg);outline:1px solid var(--line);overflow:hidden;cursor:pointer;text-align:left;border:0;color:var(--text);isolation:isolate;transition:color .35s}
.cls::before{content:"";position:absolute;inset:auto 0 0;height:0;background:var(--c);transition:height .5s var(--ease);z-index:-1}
.cls:focus-visible{color:#0a0a0a}
@media (hover:hover){
  .cls:hover{color:#0a0a0a}
}
.cls:focus-visible::before{height:100%}
@media (hover:hover){
  .cls:hover::before{height:100%}
}
.chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.chips>span{font-size:11px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--dim);margin-right:4px}
.chip{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border:1px solid var(--line2);background:transparent;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;color:var(--muted);transition:.2s}
.chip i{width:9px;height:9px;border-radius:50%;background:var(--c,var(--text))}
@media (hover:hover){
  .chip:hover{border-color:var(--text);color:var(--text)}
}
.chip.on{background:var(--text);border-color:var(--text);color:var(--bg)}
.sg{display:grid;grid-template-columns:92px repeat(7,minmax(0,1fr));gap:6px}
.sg-corner{background:transparent}
.sg-day{display:flex;flex-direction:column;align-items:center;gap:0;padding:12px 6px;background:var(--s3);border-top:3px solid var(--line2);text-align:center}
.sg-day span{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}
.sg-day b{font-family:var(--fd);font-weight:400;font-size:22px;line-height:1.1;color:var(--muted)}
.sg-day.today{border-top-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--s3))}
.sg-day.today b{color:var(--acc)}
.sg-time{display:flex;flex-direction:column;justify-content:center;align-items:center;background:var(--s3);font-family:var(--fd);font-size:22px;line-height:1.15;color:var(--text);padding:8px 4px}
.sg-time b{font-weight:400}
.sg-time b+b{color:var(--muted)}
.sg-cell{position:relative;min-height:122px;background:var(--cell);border:1px solid var(--cell-line);padding:7px;display:flex}
.sg-cell.today{background:color-mix(in srgb,var(--accent) 4%,var(--cell));border-color:color-mix(in srgb,var(--accent) 22%,var(--cell-line))}
.sg-div{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:16px;padding:12px;background:var(--accent);color:var(--ink);font-family:var(--fd);font-size:22px;letter-spacing:.06em;text-transform:uppercase;margin:8px 0}
.sess{position:relative;flex:1;display:flex;flex-direction:column;gap:6px;padding:10px 10px 11px;background:linear-gradient(160deg,color-mix(in srgb,var(--c) 16%,var(--sess)),var(--sess) 70%);border:1px solid color-mix(in srgb,var(--c) 30%,var(--sess-line));border-left:3px solid var(--c);transition:opacity .3s,transform .3s,filter .3s;min-width:0;text-align:left;color:var(--text)}
.sess-tag{display:flex;align-items:center;gap:8px;min-width:0}
.ico{flex:none;width:26px;height:26px;display:grid;place-items:center;background:var(--c);color:#0a0a0a}
/* logo bộ môn: nền tối cố định để logo trắng hay logo màu đều đọc được ở cả giao diện sáng và tối */
.logo-tile{flex:none;display:flex;align-items:center;justify-content:center;height:28px;max-width:100%;min-width:0;padding:4px 9px;background:#0d0d0d;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c,#333) 55%,#0d0d0d)}
.logo-tile img{height:100%;width:auto;max-width:100%;object-fit:contain}
.sess .logo-tile{height:34px}
.sess-name{font-size:12.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;line-height:1.2;overflow:hidden;text-overflow:ellipsis}
.sess.long .sess-tag{flex-direction:column;align-items:flex-start;gap:6px}
.sess.long .sess-name{max-width:100%}
@media (max-width:1180px){
  .sess.long .sess-name{font-size:11px;letter-spacing:.02em}
}
.sess-time{font-family:var(--fd);font-size:21px;line-height:1;margin-top:auto;white-space:nowrap}
.sess-coach{font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sess-note{align-self:flex-start;font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;background:var(--text);color:var(--bg);padding:2px 6px}
.live{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;gap:5px;font-size:9.5px;font-weight:800;letter-spacing:.14em;color:var(--acc)}
.live::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent);animation:pulse 1.6s infinite}
.tag{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;border:1px solid color-mix(in srgb,var(--c) 45%,transparent);color:var(--text);background:color-mix(in srgb,var(--c) 10%,transparent)}
.tag i{width:7px;height:7px;background:var(--c)}
/* join */
.join{overflow:hidden;background:var(--accent);color:var(--ink)}
.join::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(-45deg,rgba(0,0,0,.05) 0 2px,transparent 2px 22px)}
.join p{font-size:18px;max-width:560px;margin:26px 0 34px;white-space:pre-line}
.join .btn{border-color:var(--ink);color:var(--ink)}
@media (hover:hover){
  .join .btn:hover{background:var(--ink);color:var(--accent)}
}
.join .btn-acc{background:var(--ink);color:var(--accent)}
@media (hover:hover){
  .join .btn-acc:hover{background:transparent;color:var(--ink)}
}
.ct-list{display:flex;flex-direction:column}
.map{position:relative;min-height:420px;border:1px solid var(--line);background:var(--card2);overflow:hidden}
.map iframe{position:absolute;inset:0;width:100%;height:100%;border:0;filter:invert(.92) hue-rotate(180deg) grayscale(.6) contrast(.95)}
/* form liên hệ: bong bóng chat nổi + khung chat */
.chat{position:fixed;right:max(20px,env(safe-area-inset-right));bottom:max(20px,env(safe-area-inset-bottom));z-index:56}
body:not(.pub) .chat{display:none}
@media (max-width:700px){
  .chat{right:max(14px,env(safe-area-inset-right));bottom:calc(70px + env(safe-area-inset-bottom))}
}
@media print{
  .chat{display:none!important}
}
/* ---------- trang giới thiệu từng bộ môn (#bo-mon/<mã>) ---------- */
/* màu của bộ môn thay cho màu nhấn trong phạm vi trang; --accent-hi / --accent-deep là bản đủ tương phản để làm chữ */
.cls{text-decoration:none}
.cp{--acc:var(--accent-hi)}
:root[data-theme="light"] .cp{--acc:var(--accent-deep)}
.pill{font-size:10px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;padding:4px 8px;background:var(--accent);color:var(--ink);white-space:nowrap}
:root[data-theme="light"] .map iframe{filter:grayscale(.25)}
::view-transition-old(root),::view-transition-new(root){animation-duration:.35s}
/* nút chuyển giao diện sáng / tối */
.theme-btn{flex:none;width:46px;height:46px;display:grid;place-items:center;padding:0;border:1px solid var(--line2);background:transparent;color:var(--text);cursor:pointer;transition:border-color .2s}
.theme-btn svg{width:20px;height:20px}
.theme-btn .i-moon,.theme-inline .i-moon{display:none}
:root[data-theme="light"] .theme-btn .i-sun,:root[data-theme="light"] .theme-inline .i-sun{display:none}
:root[data-theme="light"] .theme-btn .i-moon,:root[data-theme="light"] .theme-inline .i-moon{display:block}
@media (hover:hover){
  .theme-btn:hover{border-color:var(--text)}
}
@media (max-width:900px){
  .hero{padding-top:110px;min-height:auto}
  .pillars{margin-top:50px}
  .map{min-height:320px}
}
@media (max-width:700px){
  :root{--navh:66px}
  .chips{flex:1 1 100%;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:-16px;padding:2px 16px 4px;-webkit-overflow-scrolling:touch}
  .chips::-webkit-scrollbar{display:none}
  .chips>span,.chip{flex:none}
  .chip{min-height:40px}
  .logo{font-size:min(24px,6.4vw)}
  .cls{min-height:320px}
}
.mem-av{flex:none;display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--accent);color:var(--ink);font-size:11px;font-weight:800;letter-spacing:.04em;line-height:1}
.mem-av.big{width:52px;height:52px;font-size:17px}
/* ô lịch đặt được */
.sess[data-book],.dv-item[data-book]{cursor:pointer}
@media (hover:hover){
  .sess[data-book]:hover{transform:translateY(-2px);border-color:var(--c)}
}
.seat-room{padding:14px;background:var(--bg2);border:1px solid var(--line)}
.seat-stage,.seat-back{text-align:center;font-size:11px;font-weight:800;letter-spacing:.24em;text-transform:uppercase;color:var(--muted)}
.seat-stage{padding:9px;margin-bottom:16px;background:var(--s4);border-bottom:3px solid var(--c);color:var(--text)}
.seat-back{margin-top:12px;font-weight:700;letter-spacing:.2em;color:var(--dim)}
.seat-map{display:grid;grid-template-columns:repeat(var(--cols,6),minmax(0,1fr));gap:8px}
.seat{display:grid;place-items:center;min-height:44px;padding:4px 0;border:1px solid var(--line2);background:var(--card);color:var(--text);font-family:var(--fd);font-size:18px;line-height:1;cursor:pointer;transition:background .15s,border-color .15s,color .15s,transform .15s}
.seat-room.round .seat{border-radius:50%;aspect-ratio:1;min-height:0;max-width:62px;justify-self:center;width:100%}
@media (hover:hover){
  .seat:not([disabled]):hover{border-color:var(--accent);transform:translateY(-1px)}
}
.seat.x,.seat[disabled]{cursor:not-allowed}
.seat.x{background:repeating-linear-gradient(135deg,var(--s4) 0 5px,var(--s3) 5px 10px);color:var(--dim);border-color:var(--line)}
.seat[disabled]:not(.x):not(.me){opacity:.45}
.seat.sel,.seat.me{background:var(--accent);border-color:var(--accent);color:var(--ink)}
.seat.me{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 35%,transparent)}
@media (max-width:700px){
  .seat-map{gap:6px}
  .seat{min-height:40px;font-size:16px}
  .seat-room{padding:10px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
}
@media print{
  .nav,.mbar,.mq-wrap,.grain::after,.hero,.boot{display:none!important}
}
.f{display:grid;gap:7px;margin-bottom:16px;align-content:start;min-width:0}
.f>span{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.in{width:100%;background:var(--input);border:1px solid var(--input-line);color:var(--text);padding:11px 12px;font-size:14px;border-radius:0;transition:border-color .2s,box-shadow .2s}
.in:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}
.in::placeholder{color:var(--placeholder)}
.in:disabled{opacity:.45}
textarea.in{resize:vertical;min-height:92px;line-height:1.55}
select.in{appearance:none;-webkit-appearance:none;padding-right:34px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23999' stroke-width='1.6' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}
input[type=color].in{padding:3px;height:44px;cursor:pointer}
.hint{color:var(--dim);font-size:12px;line-height:1.5}
.err{color:var(--red-fg);font-size:13px;min-height:1.2em;margin:0 0 12px}
.ck-line{display:flex;align-items:center;gap:10px;font-size:14px;cursor:pointer;margin-bottom:12px}
.ck-line input{width:18px;height:18px;accent-color:var(--accent);flex:none}
.pick{display:flex;flex-wrap:wrap;gap:8px}
.count{font-size:12px;color:var(--dim);font-weight:600}
.bk{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;background:var(--s1);border:1px solid var(--line);font-size:14px}
.bk small{color:var(--dim)}
.chip small{font-size:11px;font-weight:700;opacity:.75}
.ct-list{display:grid;gap:8px}
.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(60% 50% at 75% 15%,color-mix(in srgb,var(--accent) 13%,transparent),transparent 70%),var(--bg)}
dialog{background:var(--dialog);color:var(--text);border:1px solid var(--line2);padding:0;width:min(620px,calc(100% - 24px));max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);overflow:auto;overscroll-behavior:contain}
dialog::backdrop{background:var(--backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.dlg{padding:26px}
.dlg-head{margin-bottom:20px}
.dlg-head h3{font-family:var(--fd);font-weight:400;font-size:36px;text-transform:uppercase;margin:0;line-height:1}
.dlg-head p{margin:6px 0 0;color:var(--muted);font-size:14px}
.dlg-foot{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:12px;border-top:1px solid var(--line);padding-top:18px}
.dlg-foot .sp{flex:1}
/* thông báo popup khi mở website (và nút “Xem thử” của trang quản trị); nội dung dựng bằng noticeHTML() trong core.js.
   Máy tính: ảnh bên trái, nội dung bên phải. Điện thoại: ảnh phía trên. Nút × đứng yên khi nội dung cuộn. */
dialog.ntc-dlg{width:min(920px,calc(100% - 24px));overflow:hidden;border-top:3px solid var(--accent);box-shadow:0 30px 90px var(--pop-shadow)}
dialog.ntc-dlg:has(.no-img){width:min(620px,calc(100% - 24px))}
dialog.ntc-dlg[open]{animation:ntc-in .45s var(--ease) both}
dialog.ntc-dlg[open]::backdrop{animation:ntc-fade .45s ease both}
@keyframes ntc-in{from{opacity:0;transform:translateY(18px) scale(.98)}to{opacity:1;transform:none}}
@keyframes ntc-fade{from{opacity:0}to{opacity:1}}
.ntc{display:grid;grid-template-columns:minmax(0,45fr) minmax(0,55fr);max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px)}
.ntc.no-img{grid-template-columns:minmax(0,1fr)}
.ntc-x{position:absolute;top:12px;right:12px;z-index:2;width:40px;height:40px;display:grid;place-items:center;padding:0;border:1px solid var(--line2);background:color-mix(in srgb,var(--dialog) 84%,transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:var(--text);cursor:pointer}
.ntc-x svg{width:18px;height:18px}
@media (hover:hover){
  .ntc-x:hover{border-color:var(--text)}
}
.ntc-img{position:relative;min-height:440px;background:var(--card2)}
.ntc-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 50%}
.ntc-left img{object-position:22% 50%}
.ntc-right img{object-position:78% 50%}
.ntc-body{padding:42px 40px 32px;overflow:auto;overscroll-behavior:contain}
.ntc-tag{display:flex;align-items:center;gap:10px;margin:0 0 14px;font-size:11px;font-weight:800;letter-spacing:.2em;text-transform:uppercase;color:var(--acc)}
.ntc-tag::before{content:'';flex:none;width:26px;height:2px;background:var(--accent)}
.ntc-t{margin:0 0 18px;font-family:var(--fd);font-weight:400;font-size:clamp(32px,3.4vw,46px);line-height:1;letter-spacing:.01em;text-transform:uppercase}
.ntc-t em{font-style:normal;color:var(--acc)}
.no-img .ntc-t{margin-right:44px}
.ntc-text p{margin:0 0 12px;font-size:15px;line-height:1.65;color:var(--text2)}
.ntc-text b{font-weight:700;color:var(--text)}
.ntc-sign{margin:18px 0 0;padding-top:14px;border-top:1px solid var(--line);font-size:14px;line-height:1.6;color:var(--muted)}
.ntc-sign em{font-style:normal;color:var(--text)}
.ntc-btns{display:flex;flex-wrap:wrap;gap:10px;margin-top:24px}
@media (max-width:760px){
  dialog.ntc-dlg,dialog.ntc-dlg:has(.no-img){width:calc(100% - 20px)}
  .ntc{display:block;overflow:auto;overscroll-behavior:contain}
  .ntc-img{min-height:0;aspect-ratio:16/9}
  .ntc-body{padding:22px 20px 20px;overflow:visible}
  .ntc-t{font-size:32px}
  .ntc-text p{font-size:14.5px;line-height:1.6}
  .ntc-btns{position:sticky;bottom:0;margin:18px -20px -20px;padding:12px 20px calc(12px + env(safe-area-inset-bottom));background:var(--dialog);border-top:1px solid var(--line)} /* nút luôn thấy, không phải cuộn */
  .ntc-btns .btn{flex:1 1 auto;padding:14px 16px}
}
@media (prefers-reduced-motion:reduce){
  dialog.ntc-dlg[open],dialog.ntc-dlg[open]::backdrop{animation:none}
}
.toast{position:fixed;left:50%;bottom:26px;z-index:400;transform:translate(-50%,16px);background:var(--text);color:var(--bg);padding:13px 20px;font-size:14px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .3s,transform .3s;max-width:calc(100% - 32px);box-shadow:0 12px 40px rgba(0,0,0,.5)}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast.err{background:var(--red);color:var(--on-red)}
@media (max-width:860px){
  .adm-status,.hide-sm{display:none}
}
/* iOS tự phóng to khi chạm vào ô nhập có cỡ chữ < 16px */
@media (max-width:860px),(pointer:coarse){
  .in,select.in,textarea.in{font-size:16px}
}
.noscript{padding:40px;text-align:center}
/* nếu không tải được JavaScript, màn hình chờ tự ẩn thay vì che trang mãi */
.boot{animation:bootOut .4s 6s forwards}
.src{display:inline-block;margin-left:8px;padding:2px 6px;border:1px solid var(--line2);font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);vertical-align:1px;white-space:nowrap}
.hint.err{color:var(--red-fg)}
@keyframes bootP{from{opacity:.25;transform:scale(.96)}to{opacity:1;transform:scale(1)}}
@keyframes pulse{70%{box-shadow:0 0 0 12px transparent}100%{box-shadow:0 0 0 0 transparent}}
@keyframes mq{to{transform:translateX(-50%)}}
@keyframes bootOut{to{opacity:0;visibility:hidden}}
