@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(../media/bfd813093b8ca1bb-s.p.1hx5ub3m4e03a.woff2)format("woff2");unicode-range:U+2D7,U+303,U+331,U+E01-E5B,U+200C-200D,U+25CC}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(../media/acc5f86302586f33-s.43ie5mg9jzk6i.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Noto Sans Thai;font-style:normal;font-weight:100 900;font-stretch:100%;font-display:swap;src:url(../media/f304c3cf3765fb5f-s.p.1_02jizf7_zt7.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans Thai Fallback;src:local(Arial);ascent-override:99.79%;descent-override:42.32%;line-gap-override:0.0%;size-adjust:106.33%}.noto_sans_thai_f4d4da2c-module__0ivnlq__className{font-family:Noto Sans Thai,Noto Sans Thai Fallback;font-style:normal}.noto_sans_thai_f4d4da2c-module__0ivnlq__variable{--font-body:"Noto Sans Thai", "Noto Sans Thai Fallback"}
@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/5e05ae5b48faa55e-s.31-2bzhq1gx_9.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/a7afbb44bec2bb18-s.3xauquyg2sixn.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/02263ebadd758ea4-s.2taws-qdxmzlf.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/68757d6cddeff913-s.0htwiiqufp3l9.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/effe91970fc4db64-s.p.28xcb7557rbh2.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/6ff74e33ebd7bca3-s.2ontrj8z1-o25.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/1a69062cfe6f77f8-s.33iiebxkijmxa.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/9a4838fcda0d1bca-s.2nzetymcmw3t7.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/2e95a7d252b9825a-s.0_f09-l1omku8.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/23b7a97ae3b5c134-s.p.0fcfx2a-jndc5.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono Fallback;src:local(Arial);ascent-override:76.16%;descent-override:20.43%;line-gap-override:0.0%;size-adjust:134.59%}.ibm_plex_mono_df05b8e4-module__T_3vAq__className{font-family:IBM Plex Mono,IBM Plex Mono Fallback;font-style:normal}.ibm_plex_mono_df05b8e4-module__T_3vAq__variable{--font-utility:"IBM Plex Mono", "IBM Plex Mono Fallback"}
:root{--ink:#3c3540;--muted:#7d7076;--paper:#fff9ef;--white:#fffdf9;--blue:#675762;--sky:#ffe8d1;--mint:#dcebd9;--sage:#88b49e;--apricot:#ffd6a5;--coral:#f28b6d;--line:#eadfd5}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:radial-gradient(circle at 8% 6%, #ffd6a54d, transparent 28rem), radial-gradient(circle at 94% 18%, #88b49e29, transparent 26rem), var(--paper);color:var(--ink);font-family:var(--font-body), sans-serif;margin:0;font-size:14px}button,a{font:inherit}button{color:inherit}.app-shell{min-height:100vh}.topbar{border-bottom:1px solid var(--line);z-index:10;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fffffff0;grid-template-columns:220px 1fr auto;align-items:center;height:72px;padding:0 28px;display:grid;position:sticky;top:0}.brand{color:var(--ink);align-items:center;gap:11px;text-decoration:none;display:flex}.brand-logo{object-fit:contain;filter:drop-shadow(0 5px 8px #68494421);width:46px;height:46px}.brand strong{font:600 14px var(--font-utility), monospace;letter-spacing:-.03em;display:block}.brand small{color:var(--muted);margin-top:1px;font-size:10px;display:block}.session-switcher{background:#fff4e5;border:1px solid #f0dec9;border-radius:11px;justify-self:center;align-items:center;gap:9px;padding:8px 12px;display:flex}.session-switcher b{border-left:1px solid #ead2bd;padding-left:9px}.live-dot{background:var(--sage);border-radius:50%;width:7px;height:7px;display:inline-block;box-shadow:0 0 0 4px #88b49e26}.profile-button{cursor:pointer;background:0 0;border:0;align-items:center;gap:9px;display:flex}.avatar{background:var(--sky);width:34px;height:34px;color:var(--blue);border-radius:50%;place-items:center;font-weight:700;display:grid}.workspace{grid-template-columns:220px minmax(0,1fr);min-height:calc(100vh - 72px);display:grid}.sidebar{border-right:1px solid var(--line);background:#fffdf9d1;flex-direction:column;justify-content:space-between;padding:26px 18px;display:flex}.sidebar nav{gap:7px;display:grid}.nav-item{color:#60778b;border-radius:10px;align-items:center;gap:11px;padding:11px 13px;font-weight:600;text-decoration:none;display:flex}.nav-item span{text-align:center;color:#8fa2b4;width:18px}.nav-item.active{color:var(--ink);background:#fff0df}.nav-item.active span{color:var(--coral)}.viewer-link{border:1px solid var(--line);background:linear-gradient(145deg,#fffdf9,#f2f7ef);border-radius:14px;padding:14px}.viewer-link small,.viewer-link strong{display:block}.viewer-link small{color:var(--muted)}.viewer-link strong{margin:3px 0 10px}.viewer-link button{color:var(--blue);cursor:pointer;background:0 0;border:0;padding:0;font-weight:700}.viewer-link a{color:var(--blue);font-weight:700;text-decoration:none}.profile-button button{color:var(--muted);cursor:pointer;background:0 0;border:0;margin-left:4px;padding:0;font-size:11px}.dashboard{width:100%;max-width:1500px;margin:0 auto;padding:34px clamp(24px,4vw,56px) 60px}.page-heading{justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:24px;display:flex}.eyebrow,.panel-index{color:var(--coral);font:600 10px var(--font-utility), monospace;letter-spacing:.12em;margin:0 0 5px}.page-heading h1{letter-spacing:-.045em;margin:0;font-size:clamp(25px,3vw,38px);line-height:1.22}.page-heading p:last-child{color:var(--muted);margin:7px 0 0}.primary-button{color:#fff;background:var(--coral);cursor:pointer;border:0;border-radius:12px;padding:12px 16px;font-weight:700;box-shadow:0 6px 16px #f28b6d40}.primary-button span{color:#fff1e9;margin-right:5px;font-size:18px}.court-stage{background:#4b424b;border-radius:22px;padding:18px;box-shadow:0 20px 44px #3c354029}.stage-title{color:#e7f0f8;justify-content:space-between;align-items:center;margin:0 3px 14px;font-weight:700;display:flex}.stage-title div{align-items:center;gap:9px;display:flex}.stage-title>span{color:#8da2b6;font-size:11px;font-weight:500}.court-grid{grid-template-columns:1fr 1fr;gap:13px;display:grid}.court-card{background:#dcebd9;border-radius:15px;grid-template-columns:56px 1fr 74px;min-height:188px;display:grid;overflow:hidden}.court-card.coral{background:#ffe2c2}.court-number{color:var(--blue);border-right:1px solid #184f8226;place-content:center;justify-items:center;display:grid}.court-number span{font:600 8px var(--font-utility),monospace;letter-spacing:.1em}.court-number b{font:600 32px var(--font-utility),monospace}.court-lines{border:1px solid #184f8266;grid-template-rows:1fr 1fr;grid-template-columns:1fr 1fr;place-items:center;margin:14px;display:grid;position:relative}.court-lines:after{content:"";border-left:1px dashed #184f8240;position:absolute;inset:0 50% 0 auto}.net{background:#184f82a6;height:1px;position:absolute;top:50%;left:-5px;right:-5px;box-shadow:0 2px #fff9}.player-chip{z-index:1;text-align:center;background:#fffdf9eb;border-radius:10px;justify-content:center;align-items:center;gap:5px;min-width:92px;min-height:42px;padding:5px 7px;font-weight:700;display:flex;box-shadow:0 3px 9px #523f3c17}.player-chip>strong{text-overflow:ellipsis;white-space:nowrap;max-width:92px;font-size:12px;overflow:hidden}.finish-game{color:var(--blue);cursor:pointer;white-space:nowrap;background:#ffffff8c;border:1px solid #184f8240;border-radius:9px;place-self:center;padding:8px 10px;font-weight:700;transform:rotate(-90deg)}.empty-court{color:var(--blue);border:1px dashed #184f824d;place-content:center;justify-items:center;gap:2px;margin:14px;display:grid}.empty-court span{font-weight:700}.empty-court small{color:#68829a}.court-spacer{width:1px}.court-counter{align-items:center;gap:6px!important;display:flex!important}.court-counter button{color:#fff;cursor:pointer;background:#263f58;border:1px solid #4c647b;border-radius:7px;width:28px;height:28px}.court-counter b{text-align:center;min-width:20px}.lower-grid{grid-template-columns:1.15fr .85fr;gap:17px;margin-top:17px;display:grid}.panel{border:1px solid var(--line);background:#fffdf9f0;border-radius:18px;padding:18px}.panel-heading{justify-content:space-between;align-items:flex-start;display:flex}.panel-heading h2{margin:0;font-size:18px}.panel-heading button{color:var(--blue);cursor:pointer;background:0 0;border:0;font-weight:700}.next-match{grid-template-columns:42px 1fr auto 1fr;align-items:center;gap:13px;margin-top:19px;display:grid}.queue-order{background:var(--mint);color:#157454;height:42px;font:600 12px var(--font-utility);border-radius:10px;place-items:center;display:grid}.team{grid-template-columns:1fr auto 1fr;align-items:center;gap:5px;display:grid}.team span{text-align:center;background:#f3f6f9;border-radius:9px;padding:10px 7px;font-weight:700}.team b{color:#9aacba}.next-match em{font:600 10px var(--font-utility);color:var(--coral);font-style:normal}.queue-note{color:var(--muted);margin:14px 0 0 55px;font-size:11px}.queue-note span{background:var(--mint);color:#157454;border-radius:10px;margin-right:4px;padding:3px 7px;font-weight:700}.player-list{margin-top:10px}.player-row{border-top:1px solid #edf1f4;grid-template-columns:24px 1fr 38px 62px 48px;align-items:center;gap:6px;min-height:41px;display:grid}.check-status{color:#a0adba;background:#eff3f6;border-radius:50%;place-items:center;width:18px;height:18px;font-size:10px;display:grid}.check-status[data-arrived=true]{color:#fff;background:#21b780}.level-badge{min-width:max-content;color:var(--blue);font:600 9px var(--font-utility);align-items:center;gap:3px;display:inline-flex}.level-badge img{object-fit:contain;flex:none}.level-badge b{min-width:17px}.level-P{color:#a85842}.level-BG{color:#71846f}.player-row small{color:var(--muted)}.player-row>b{color:#526a7f;font-size:11px}.toast{z-index:30;color:#176b4d;cursor:pointer;background:#effcf6;border:1px solid #bcdcca;border-radius:11px;justify-content:space-between;align-items:center;gap:18px;max-width:min(390px,100vw - 32px);padding:11px 14px;font-weight:600;display:flex;position:fixed;top:85px;right:24px;box-shadow:0 10px 30px #112b4624}.toast span{color:#5f8576;font-size:18px}.admin-lower-grid{grid-template-columns:.8fr 1.2fr;align-items:start;gap:17px;margin-top:17px;display:grid}.admin-queue-list{gap:10px;margin-top:14px;display:grid}.admin-queue-card{background:#f6f9fb;border:1px solid #e4ebf0;border-radius:12px;grid-template-columns:38px 1fr auto;align-items:center;gap:10px;padding:10px;display:grid}.admin-queue-card .team{font-size:12px}.admin-queue-card .team span{background:#fff;padding:7px 5px}.versus-line{text-align:center;color:var(--coral);height:7px;font-size:9px;font-weight:700;line-height:7px}.court-actions{gap:5px;min-width:82px;display:grid}.court-actions button{color:var(--blue);cursor:pointer;background:#eaf5fc;border:1px solid #b9d2e5;border-radius:7px;padding:6px 8px;font-size:11px;font-weight:700}.court-actions small{color:var(--muted);text-align:center}.empty-message{color:var(--muted);text-align:center;border:1px dashed #cad6df;border-radius:10px;margin-top:12px;padding:22px}.admin-player-list{margin-top:12px}.admin-player-row{border-top:1px solid #f0e7de;grid-template-columns:24px minmax(100px,1fr) 88px 110px 52px auto;align-items:center;gap:8px;min-height:58px;display:grid}.admin-player-row.has-duplicate{background:#fff7f4;margin-inline:-8px;padding-inline:8px}.arrival-toggle{color:#fff;cursor:pointer;background:#fff;border:1px solid #b8c7d3;border-radius:50%;place-items:center;width:20px;height:20px;display:grid}.arrival-toggle.arrived{background:#20b67e;border-color:#20b67e}.player-identity{min-width:0}.player-identity input{width:100%;color:var(--ink);background:0 0;border:0;outline:none;padding:1px 0;font-weight:700;display:block}.player-identity input:focus{box-shadow:0 2px var(--blue)}.player-identity small{color:var(--muted)}.admin-player-row select{color:#655861;background:#fffdf9;border:1px solid #e2d6cc;border-radius:7px;min-width:0;padding:6px;font-size:11px}.player-level-control{align-items:center;gap:3px;display:flex}.player-level-control .level-badge b{display:none}.player-level-control select{width:48px}.admin-player-row>b{text-align:right;color:var(--blue)}.admin-player-row>b small{color:var(--muted);font-weight:500}.remove-player{color:#9baab7;cursor:pointer;background:0 0;border:0;font-size:18px}.duplicate-fix{color:#a63f29;cursor:pointer;background:#ffe1d8;border:0;border-radius:7px;padding:5px 7px;font-size:9px;font-weight:700}.modal-backdrop{z-index:50;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#071c2f8c;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.import-modal{background:#fff;border-radius:18px;width:min(620px,100%);max-height:calc(100vh - 36px);padding:22px;overflow:auto;box-shadow:0 30px 90px #0416264d}.modal-heading{justify-content:space-between;align-items:flex-start;display:flex}.modal-heading h2{margin:0;font-size:24px}.modal-heading>button{cursor:pointer;background:#edf2f6;border:0;border-radius:50%;width:30px;height:30px;font-size:18px}.import-modal>p{color:var(--muted);margin:8px 0 14px}.import-modal textarea{resize:vertical;width:100%;min-height:190px;color:var(--ink);font:500 14px/1.7 var(--font-body),sans-serif;background:#f9fbfc;border:1px solid #c7d5e0;border-radius:11px;outline:none;padding:13px}.import-modal textarea:focus{border-color:var(--blue);box-shadow:0 0 0 3px #184f821a}.import-preview{margin-top:13px}.import-preview>small{color:var(--muted)}.import-preview>div{flex-wrap:wrap;gap:6px;margin-top:7px;display:flex}.import-preview span{color:var(--blue);background:#e9f4fb;border-radius:8px;padding:5px 8px;font-size:11px}.import-preview span.duplicate{color:#a63f29;background:#ffe2da}.modal-actions{justify-content:flex-end;gap:8px;margin-top:20px;display:flex}.modal-actions>button:first-child{cursor:pointer;background:#fff;border:1px solid #d5dfe6;border-radius:10px;padding:10px 14px}.modal-actions .primary-button:disabled{opacity:.5;cursor:not-allowed}.viewer-shell{background:linear-gradient(#fff9ef66 0,#fff9efd9 68%,#f2f7ef 100%);min-height:100vh}.viewer-topbar{border-bottom:1px solid var(--line);z-index:10;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#ffffffed;grid-template-columns:1fr auto 1fr;align-items:center;height:72px;padding:0 clamp(18px,4vw,58px);display:grid;position:sticky;top:0}.viewer-badge{color:#557b68;font:600 9px var(--font-utility);letter-spacing:.08em;background:#f1f7ef;border:1px solid #cfe0d5;border-radius:20px;align-items:center;gap:9px;padding:7px 12px;display:flex}.admin-link{color:var(--blue);justify-self:end;font-weight:700;text-decoration:none}.viewer-main{width:min(1120px,100% - 36px);margin:0 auto;padding:48px 0 80px}.viewer-heading{text-align:center;margin-bottom:27px}.viewer-heading h1{letter-spacing:-.055em;margin:0;font-size:clamp(31px,5vw,52px)}.viewer-heading>p:last-child{color:var(--muted);margin:7px 0 0}.viewer-stage{padding:20px}.viewer-queue,.scoreboard{border:1px solid var(--line);background:#fffdf9f0;border-radius:19px;margin-top:22px;padding:21px}.section-title-row{justify-content:space-between;align-items:end;gap:20px;display:flex}.section-title-row h2{margin:0;font-size:21px}.section-title-row>p{color:var(--muted);margin:0;font-size:12px}.viewer-queue-list{gap:9px;margin-top:16px;display:grid}.public-queue-row{background:#f8fafc;border:1px solid #e4ebf0;border-radius:12px;grid-template-columns:42px 1fr auto 1fr;align-items:center;gap:13px;padding:10px;display:grid}.public-queue-row em{font:600 10px var(--font-utility);color:var(--coral);font-style:normal}.score-grid{grid-template-columns:repeat(6,1fr);gap:8px;margin-top:16px;display:grid}.score-card{background:#f7f3ed;border-radius:11px;grid-template-rows:auto auto;grid-template-columns:auto 1fr auto;align-items:center;gap:2px 6px;min-width:0;padding:10px;display:grid}.score-card .level-badge{grid-row:1/3}.score-card strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.score-card b{font:600 20px var(--font-utility);color:var(--blue);grid-area:1/3/3}.score-card small{display:none}@media (max-width:900px){.topbar{grid-template-columns:1fr auto;padding:0 18px}.session-switcher{display:none}.workspace{grid-template-columns:1fr}.sidebar{display:none}.dashboard{padding:26px 18px 90px}.court-grid,.lower-grid,.admin-lower-grid{grid-template-columns:1fr}.score-grid{grid-template-columns:repeat(4,1fr)}}@media (max-width:580px){.topbar{height:64px}.brand small,.profile-button span:last-child{display:none}.page-heading{flex-direction:column;align-items:stretch}.primary-button{width:100%}.court-card{grid-template-columns:43px 1fr}.finish-game{display:none}.court-lines{margin:10px}.player-chip{min-width:59px;font-size:12px}.next-match{grid-template-columns:34px 1fr}.next-match em{display:none}.team:last-child{grid-column:2}.queue-note{margin-left:47px}.player-row{grid-template-columns:22px 1fr 34px 54px 43px;font-size:12px}.viewer-topbar{grid-template-columns:1fr auto;height:64px}.viewer-badge{display:none}.admin-link{font-size:11px}.viewer-main{width:min(100% - 24px,1120px);padding-top:30px}.viewer-stage{padding:13px}.stage-title>span,.section-title-row>p{display:none}.public-queue-row{grid-template-columns:32px 1fr}.public-queue-row em{display:none}.public-queue-row .team:last-child{grid-column:2}.score-grid{grid-template-columns:repeat(2,1fr)}.admin-player-row{grid-template-columns:22px minmax(90px,1fr) 88px 88px 46px auto;gap:5px;overflow-x:auto}.players-panel{overflow-x:auto}.admin-queue-card{grid-template-columns:32px 1fr}.court-actions{grid-column:2;grid-template-columns:repeat(2,auto);justify-content:start}.import-modal{padding:18px}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
