:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0a0f0d;--surface:#101512;--surface-2:#161f1a;--surface-inset:#0c110e;--border:#8cffd217;--border-strong:#8cffd233;--ink:#eaf5ef;--ink-secondary:#a9c4ba;--ink-muted:#7e9a91;--ink-faint:#56746c;--accent:#22d3a6;--accent-bright:#6ef0c9;--accent-ink:#06120d;--accent-soft:#22d3a61f;--accent-glow:#22d3a652;--success:var(--accent);--success-bright:var(--accent-bright);--success-soft:var(--accent-soft);--warning:#f2b93d;--warning-soft:#f2b93d1f;--danger:#ff6b6b;--danger-ink:#250606;--danger-soft:#ff6b6b1f;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--shadow-sm:0 0 0 1px var(--border);--shadow-md:0 0 0 1px var(--border-strong), 0 0 28px -10px var(--accent-glow);--shadow-lg:0 30px 60px -20px #000000a6, 0 0 0 1px var(--border-strong);--ease-out:cubic-bezier(.23, 1, .32, 1);color:var(--ink);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:IBM Plex Sans,IBM Plex Sans Thai,Noto Sans Thai,system-ui,sans-serif}*{box-sizing:border-box}body{min-width:320px;margin:0;position:relative}body:before{content:"";pointer-events:none;z-index:0;background-image:repeating-linear-gradient(0deg,#8cffd205 0 1px,#0000 1px 3px);position:fixed;inset:0}#root{z-index:1;position:relative}::selection{background:var(--accent-soft);color:var(--accent-bright)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--surface-2);border:2px solid var(--bg);border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}button,input,select{font:inherit}button{cursor:pointer;transition:background-color .14s var(--ease-out), border-color .14s var(--ease-out), color .14s var(--ease-out), transform .1s var(--ease-out), box-shadow .14s var(--ease-out)}button:active:not(:disabled){transform:scale(.97)}button:disabled{cursor:not-allowed;opacity:.45}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.mono-num{font-variant-numeric:tabular-nums}.center-screen,.login-page{justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.center-screen{color:var(--ink-muted);flex-direction:column;gap:14px;font-size:14px}.login-page{background:radial-gradient(620px circle at 12% -10%, #22d3a61a, transparent 55%), radial-gradient(520px circle at 100% 110%, #22d3a612, transparent 50%), var(--bg);position:relative}.login-panel{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);z-index:1;width:100%;max-width:380px;animation:rise-in .36s var(--ease-out);gap:18px;padding:32px;display:grid;position:relative}.brand-mark{background:var(--accent);border-radius:var(--radius-md);box-shadow:0 0 0 1px var(--border-strong), 0 0 32px -6px var(--accent-glow);color:var(--accent-ink);justify-content:center;align-items:center;width:46px;height:46px;display:flex}.brand-tagline{color:var(--ink-muted);margin-top:2px;font-size:13px}h1,h2,h3,p{margin:0}h1{letter-spacing:-.01em;font-size:24px;font-weight:700}h2{letter-spacing:-.01em;text-wrap:balance;font-size:24px;font-weight:700}h3{letter-spacing:-.005em;font-size:14px;font-weight:600}label{color:var(--ink-secondary);gap:7px;font-size:13px;font-weight:500;display:grid}.field-caption{color:var(--ink-secondary);margin-bottom:-6px;font-size:13px;font-weight:500}input,select{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--ink);width:100%;min-height:40px;transition:border-color .14s var(--ease-out), box-shadow .14s var(--ease-out), background-color .14s var(--ease-out);padding:9px 12px}input::placeholder{color:var(--ink-faint)}input:hover,select:hover{border-color:var(--border-strong)}input:focus,select:focus{background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow);outline:none}select{min-height:40px}.field-error{animation:rise-in .16s var(--ease-out);color:var(--danger);margin-top:-2px;font-family:IBM Plex Mono,Consolas,monospace;font-size:12px;font-weight:500}.login-panel button,.compact-form button,.form-grid>button,.button-primary,.outline-button{border-radius:var(--radius-sm);border:1px solid #0000;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:9px 14px;font-size:13.5px;font-weight:600;display:inline-flex}.login-panel button,.compact-form button,.form-grid>button,.button-primary{background:var(--accent);color:var(--accent-ink)}.login-panel button:hover:not(:disabled),.compact-form button:hover:not(:disabled),.form-grid>button:hover:not(:disabled),.button-primary:hover:not(:disabled){background:var(--accent-bright);box-shadow:0 0 20px -4px var(--accent-glow)}.outline-button{border-color:var(--border-strong);color:var(--ink);background:0 0}.outline-button:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-bright)}.outline-button.danger{color:var(--danger)}.outline-button.danger:hover{background:var(--danger-soft);color:var(--danger);border-color:#ff6b6b66}.icon-button{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--ink-secondary);flex:none;justify-content:center;align-items:center;width:36px;height:36px;padding:0;display:inline-flex}.icon-button:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent);color:var(--accent-bright)}.icon-button.danger:hover:not(:disabled){background:var(--danger-soft);color:var(--danger);border-color:#ff6b6b66}.icon-button.spinning svg{animation:.7s linear infinite spin}.app-shell{grid-template-columns:316px minmax(0,1fr);min-height:100vh;display:grid;position:relative}.sidebar{background:var(--bg);border-right:1px solid var(--border);flex-direction:column;gap:20px;padding:22px;display:flex}.sidebar-head,.workspace-head,.table-toolbar,.new-key-box{justify-content:space-between;align-items:center;gap:14px;display:flex}.sidebar-head h1{font-size:19px}.eyebrow{color:var(--ink-muted);letter-spacing:.04em;text-transform:uppercase;font-family:IBM Plex Mono,Consolas,monospace;font-size:11px;font-weight:600}.eyebrow:before{color:var(--ink-faint);content:"[ "}.eyebrow:after{color:var(--ink-faint);content:" ]"}.compact-form{gap:10px;display:grid}.section-label{color:var(--ink-faint);letter-spacing:.03em;margin:4px 0 -6px;font-family:IBM Plex Mono,Consolas,monospace;font-size:11px;font-weight:600}.section-label:before{content:"// "}.game-list{gap:6px;display:grid;overflow:auto}.game-item{border-radius:var(--radius-md);color:var(--ink);text-align:left;background:0 0;border:1px solid #0000;align-items:center;gap:10px;min-height:56px;padding:9px 10px;display:flex}.game-item:hover{background:var(--surface);border-color:var(--border)}.game-item span{flex:1;gap:2px;min-width:0;display:grid}.game-item.disabled{opacity:.55}.game-item strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.game-item small{color:var(--ink-muted);font-size:12px}.game-item.active{background:var(--surface);border-color:var(--accent);box-shadow:var(--shadow-md)}.game-item.active small{color:var(--accent-bright)}.game-item .icon-slot{background:var(--accent-soft);border-radius:var(--radius-sm);color:var(--accent-bright);flex:none;justify-content:center;align-items:center;width:34px;height:34px;display:flex}.game-item.active .icon-slot{background:var(--accent);color:var(--accent-ink)}.ring-badge{flex:none;display:inline-flex;position:relative}.ring-badge svg{display:block;transform:rotate(-90deg)}.ring-badge circle{fill:none}.ring-badge .ring-track{stroke:var(--border-strong)}.ring-badge .ring-value{stroke-linecap:round;transition:stroke-dashoffset .32s var(--ease-out)}.ring-badge.tone-accent .ring-value{stroke:var(--accent)}.ring-badge.tone-success .ring-value{stroke:var(--success)}.ring-badge.tone-warning .ring-value{stroke:var(--warning)}.ring-badge.tone-danger .ring-value{stroke:var(--danger)}.ring-badge.tone-muted .ring-value{stroke:var(--ink-faint)}.workspace{flex-direction:column;gap:20px;min-width:0;padding:28px 32px;display:flex;position:relative}.head-actions{gap:8px;display:flex}.notice{animation:rise-in .2s var(--ease-out);background:var(--success-soft);border-radius:var(--radius-md);color:var(--accent-bright);border:1px solid #22d3a64d;align-items:center;gap:10px;padding:11px 14px;font-size:13.5px;font-weight:500;display:flex}.notice.error{background:var(--danger-soft);color:var(--danger);border-color:#ff6b6b4d}.notice svg{flex:none}.new-key-box{background:var(--accent-soft);border-radius:var(--radius-md);color:var(--accent-bright);animation:rise-in .22s var(--ease-out);border:1px solid #22d3a652;padding:12px 14px}.new-key-box span{align-items:center;gap:10px;min-width:0;display:flex}.new-key-box strong{text-overflow:ellipsis;white-space:nowrap;font-family:IBM Plex Mono,Consolas,monospace;overflow:hidden}.stat-row{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.stat-card{background:var(--surface);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);gap:6px;padding:14px 16px;display:grid}.stat-card .stat-label{color:var(--ink-muted);letter-spacing:.03em;text-transform:uppercase;align-items:center;gap:6px;font-family:IBM Plex Mono,Consolas,monospace;font-size:11px;font-weight:600;display:flex}.stat-card .stat-value{color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:26px;font-weight:600}.stat-card.tone-accent .stat-value{color:var(--accent-bright)}.stat-card.tone-warning .stat-value{color:var(--warning)}.stat-card.tone-danger .stat-value{color:var(--danger)}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md)}.form-grid{align-content:start;gap:12px;padding:18px;display:grid}.quick-days{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.day-button{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--ink-secondary);justify-content:center;align-items:center;gap:4px;min-height:34px;padding:6px 8px;font-family:IBM Plex Mono,Consolas,monospace;font-size:12px;font-weight:500;display:inline-flex}.day-button:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-bright)}.day-button.ghost{background:0 0}.expiry-preview{color:var(--ink-secondary);font-size:13px}.expiry-preview strong{color:var(--accent-bright)}.form-grid>button.link-toggle{box-shadow:none;color:var(--accent);background:0 0;border:0;align-self:start;align-items:center;gap:6px;min-height:0;padding:2px 0;font-size:12.5px;font-weight:500;display:inline-flex}.form-grid>button.link-toggle:hover:not(:disabled){box-shadow:none;color:var(--accent-bright);background:0 0}.link-toggle svg{transition:transform .16s var(--ease-out)}.link-toggle svg.rotated,.rotated{transform:rotate(180deg)}.advanced-expiry{animation:rise-in .16s var(--ease-out);border-top:1px solid var(--border);gap:12px;padding-top:12px;display:grid}.custom-expiry{grid-template-columns:minmax(0,1fr) 120px 100px;gap:8px;display:grid}.form-grid h3{color:var(--ink-secondary);align-items:center;gap:8px;display:flex}.form-grid h3 svg{color:var(--accent)}.custom-expiry input,.custom-expiry select{min-height:36px}.key-panel{overflow:hidden}.table-toolbar{border-bottom:1px solid var(--border);padding:14px 16px}.toolbar-actions{gap:8px;display:flex}.search-box{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:8px;width:100%;max-width:420px;padding:0 12px;display:flex}.search-box:focus-within{background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.search-box svg{color:var(--ink-muted);flex:none}.search-box input{background:0 0;border:0;min-width:0;padding:9px 0}.search-box input:focus{box-shadow:none;outline:none}.table-wrap{position:relative;overflow:auto}.table-wrap.loading{opacity:.55;pointer-events:none}table{border-collapse:collapse;width:100%;min-width:960px}th,td{border-bottom:1px solid var(--border);text-align:left;vertical-align:middle;padding:12px 16px}thead th{background:var(--bg);z-index:1;position:sticky;top:0}th{color:var(--ink-muted);letter-spacing:.03em;text-transform:uppercase;font-family:IBM Plex Mono,Consolas,monospace;font-size:11px;font-weight:600}tbody tr:hover{background:var(--surface-2)}.mono{color:var(--ink-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-family:IBM Plex Mono,Consolas,monospace;font-size:12px;overflow:hidden}.copy-key{border-radius:var(--radius-sm);color:var(--ink);background:0 0;border:0;align-items:center;gap:8px;margin:-4px -6px;padding:4px 6px;display:inline-flex}.copy-key:hover{background:var(--accent-soft);color:var(--accent-bright)}.copy-key span{font-family:IBM Plex Mono,Consolas,monospace;font-size:12px}.copy-key svg{color:var(--ink-faint);flex:none}.row-actions{justify-content:flex-end;align-items:center;gap:6px;display:flex}.action-divider{background:var(--border);width:1px;height:20px;margin:0 2px}.status-cell{align-items:center;gap:8px;display:flex}.extend-row td{background:var(--surface-inset);padding:14px 16px 18px}.extend-panel{flex-direction:column;gap:12px;display:flex}.extend-top{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.extend-title{color:var(--ink-secondary);font-family:IBM Plex Mono,Consolas,monospace;font-size:12px;font-weight:600}.extend-presets{flex-wrap:wrap;gap:8px;display:flex}.extend-close{margin-left:auto}.extend-custom{align-content:start;gap:8px;display:grid}.extend-custom-fields{grid-template-columns:minmax(74px,1fr) 110px 72px;gap:8px;display:grid}.extend-custom input,.extend-custom select{min-height:34px;padding:6px 8px}.extend-panel .day-button.ghost{color:var(--ink-muted)}.extend-panel .day-button.ghost:hover{background:var(--surface);color:var(--ink)}.status{border:1px solid var(--border-strong);border-radius:var(--radius-sm);letter-spacing:.02em;background:0 0;align-items:center;gap:6px;padding:5px 9px 5px 8px;font-family:IBM Plex Mono,Consolas,monospace;font-size:11.5px;font-weight:600;display:inline-flex}.status:before{content:"";border-radius:999px;width:6px;height:6px}.status.active{background:var(--accent-soft);color:var(--accent-bright);border-color:#22d3a659}.status.active:before{animation:pulse-dot 1.8s var(--ease-out) infinite;background:var(--accent-bright)}.status.expiring{background:var(--warning-soft);color:var(--warning);border-color:#f2b93d59}.status.expiring:before{background:var(--warning)}.status.disabled,.status.expired{background:var(--danger-soft);color:var(--danger);border-color:#ff6b6b59}.status.disabled:before,.status.expired:before{background:var(--danger)}.danger-text{color:var(--danger)}.empty,.form-message{color:var(--ink-muted);font-size:14px}.empty-cell{padding:0}.empty-state{color:var(--ink-muted);flex-direction:column;align-items:center;gap:10px;padding:40px 20px;font-size:13.5px;display:flex}.empty-state svg{color:var(--ink-faint)}.empty-panel{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:320px;padding:40px;display:flex}.empty-panel .icon-slot{background:var(--accent-soft);border-radius:var(--radius-lg);color:var(--accent-bright);justify-content:center;align-items:center;width:56px;height:56px;display:flex}.empty-panel p{color:var(--ink-muted);max-width:280px;font-size:13.5px}.spinner{border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:999px;flex:none;width:18px;height:18px;animation:.7s linear infinite spin}.spinner.lg{width:26px;height:26px}.dialog-overlay{animation:fade-in .16s var(--ease-out);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:50;background:#03070699;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.dialog-panel{animation:dialog-in .2s var(--ease-out);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);gap:16px;width:100%;max-width:400px;padding:24px;display:grid}.modal-panel{max-width:460px;max-height:calc(100vh - 40px);overflow:auto}.modal-head{justify-content:space-between;align-items:center;display:flex}.modal-head h3{font-size:16px}.modal-panel .form-grid{gap:14px;padding:0}.dialog-panel .icon-slot{background:var(--danger-soft);border-radius:var(--radius-md);color:var(--danger);justify-content:center;align-items:center;width:44px;height:44px;display:flex}.dialog-panel h3{margin-bottom:4px;font-size:16px}.dialog-panel p{color:var(--ink-secondary);font-size:13.5px;line-height:1.55}.dialog-actions{justify-content:flex-end;gap:8px;display:flex}.dialog-actions button{min-width:96px}.danger-button{background:var(--danger);border-radius:var(--radius-sm);color:var(--danger-ink);border:1px solid #0000;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:9px 14px;font-size:13.5px;font-weight:600;display:inline-flex}.danger-button:hover:not(:disabled){background:#f88;box-shadow:0 0 20px -4px #ff6b6b73}@keyframes rise-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes dialog-in{0%{opacity:0;transform:translateY(6px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-dot{0%,to{opacity:1;box-shadow:0 0 0 0 var(--accent-glow)}50%{opacity:.75;box-shadow:0 0 0 4px #0000}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important}}@media (width<=1080px){.stat-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=940px){.app-shell{grid-template-columns:1fr}.sidebar{border-bottom:1px solid var(--border);border-right:0}.game-list{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}}@media (width<=560px){.workspace,.sidebar{padding:16px}.workspace-head,.table-toolbar,.new-key-box{flex-direction:column;align-items:stretch}.head-actions{width:100%}.head-actions .outline-button{flex:1}.quick-days,.custom-expiry{grid-template-columns:repeat(2,minmax(0,1fr))}.custom-expiry .day-button{grid-column:1/-1}.extend-custom-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.extend-custom-fields .day-button{grid-column:1/-1}.extend-close{margin-left:0}.stat-row{grid-template-columns:repeat(2,minmax(0,1fr))}.dialog-actions{flex-direction:column-reverse}.dialog-actions button{width:100%}}
