:root {
 --bg:#f4f7fb;--surface:#fff;--surface-2:#f8fafc;--border:#e2e8f0;--text:#172033;--muted:#64748b;
 --primary:#2563eb;--primary-dark:#1d4ed8;--primary-soft:#eff6ff;--success:#15803d;--success-bg:#f0fdf4;
 --warning:#b45309;--warning-bg:#fffbeb;--danger:#dc2626;--danger-bg:#fef2f2;--sidebar:#0f172a;
 --shadow:0 12px 30px rgba(15,23,42,.07),0 2px 6px rgba(15,23,42,.04);--radius:16px
}
*{box-sizing:border-box}html{min-width:0;-webkit-text-size-adjust:100%}
body{margin:0;min-width:0;min-height:100vh;min-height:100svh;overflow-x:hidden;font-family:Inter,"Noto Sans Thai","Leelawadee UI","Segoe UI",sans-serif;font-size:15px;line-height:1.6;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}
a{color:var(--primary);text-underline-offset:3px}button,input,select,textarea{font:inherit}::selection{color:#fff;background:var(--primary)}
.layout{display:flex;min-height:100vh;min-height:100svh}.layout--guest{display:block;background:radial-gradient(circle at 15% 10%,rgba(37,99,235,.13),transparent 28%),radial-gradient(circle at 90% 90%,rgba(14,165,233,.09),transparent 30%),#f7f9fc}
.content{flex:1;min-width:0;min-height:100vh;min-height:100svh;display:flex;flex-direction:column}
.main{flex:1;width:100%;max-width:1280px;margin:0 auto;padding:42px 44px 72px}.main--center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding-block:48px}
.sidebar{width:274px;flex:0 0 274px;height:100vh;position:sticky;top:0;z-index:40;display:flex;flex-direction:column;color:#fff;background:var(--sidebar);border-right:1px solid rgba(255,255,255,.06);box-shadow:8px 0 30px rgba(15,23,42,.05)}
.sidebar__brand{display:flex;align-items:center;gap:12px;min-height:76px;padding:16px 22px;color:#fff;text-decoration:none;font-size:1.05rem;font-weight:750;letter-spacing:-.02em;border-bottom:1px solid rgba(255,255,255,.08)}
.sidebar__logo{display:inline-grid;place-items:center;width:38px;height:38px;flex:0 0 38px;border-radius:11px;color:#fff;background:linear-gradient(145deg,#3b82f6,#2563eb 62%,#1d4ed8);box-shadow:0 8px 20px rgba(37,99,235,.3);font-size:0}
.sidebar__logo:after{content:"LM";font-size:.72rem;font-weight:850;letter-spacing:-.04em}
.sidebar__nav{flex:1;overflow-y:auto;padding:20px 14px;display:flex;flex-direction:column;gap:5px;scrollbar-width:thin}
.sidebar__label{margin:18px 10px 6px;color:#64748b;font-size:.68rem;font-weight:750;letter-spacing:.11em;text-transform:uppercase}
.side-link{display:flex;align-items:center;gap:11px;min-height:45px;padding:10px 12px;border:1px solid transparent;border-radius:10px;color:#94a3b8;text-decoration:none;font-size:.91rem;font-weight:600;transition:.18s}
.side-link__ic{display:grid;place-items:center;width:23px;flex:0 0 23px;filter:grayscale(1);opacity:.8}.side-link:hover{color:#f8fafc;background:rgba(255,255,255,.06)}
.side-link.is-active{color:#fff;background:rgba(37,99,235,.24);border-color:rgba(96,165,250,.2);box-shadow:inset 3px 0 #60a5fa}.side-link.is-active .side-link__ic{filter:none;opacity:1}.side-link--admin.is-active{color:#fff;background:rgba(37,99,235,.24)}
.sidebar__foot{padding:14px;border-top:1px solid rgba(255,255,255,.08)}.usercard{display:flex;align-items:center;gap:11px;padding:9px;border-radius:12px;background:rgba(255,255,255,.045)}
.usercard__avatar{display:grid;place-items:center;width:38px;height:38px;flex:0 0 38px;border-radius:10px;color:#fff;background:linear-gradient(135deg,#475569,#334155);font-weight:750}.usercard__meta{flex:1;min-width:0}
.usercard__name{color:#f8fafc;font-size:.88rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.usercard__role{color:#7f8da3;font-size:.73rem}.usercard__logout{margin:0}
.icon-btn{display:grid;place-items:center;width:35px;height:35px;border:1px solid rgba(255,255,255,.1);border-radius:9px;color:#94a3b8;background:transparent;cursor:pointer}.icon-btn:hover{color:#fff;background:rgba(220,38,38,.18)}
.mobilebar,.scrim{display:none}.auth-brand{display:flex;align-items:center;gap:12px;color:var(--text);text-decoration:none;font-size:1.25rem;font-weight:800;letter-spacing:-.025em}.auth-brand .sidebar__logo{width:42px;height:42px;flex-basis:42px}
.main--center>.flash{width:min(100%,460px)}.appfooter{display:flex;justify-content:center;flex-wrap:wrap;gap:9px;padding:20px;color:#94a3b8;font-size:.76rem}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:28px;flex-wrap:wrap}.page-head h1{margin:0;font-size:clamp(1.65rem,2.6vw,2.1rem);line-height:1.25;letter-spacing:-.035em}.page-head h2{letter-spacing:-.02em}.page-head p{max-width:760px;margin:7px 0 0;color:var(--muted)}
.card{padding:26px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:0 1px 2px rgba(15,23,42,.05)}.card+.card{margin-top:22px}.card h2:first-child,.card h3:first-child{margin-top:0}.card h3{margin:24px 0 7px}
.auth-wrap{width:100%;max-width:460px;margin:4px auto 36px;padding:34px;box-shadow:0 24px 60px rgba(15,23,42,.16)}.auth-wrap:before{content:"SECURE ACCESS";display:table;margin:0 auto 15px;color:var(--primary);font-size:.66rem;font-weight:800;letter-spacing:.14em}.auth-wrap h1{margin:0;text-align:center;font-size:1.75rem;letter-spacing:-.035em}.auth-wrap>.muted{margin:7px 0 25px;text-align:center}
.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:28px}.stat{position:relative;overflow:hidden;min-height:128px;padding:23px;border:1px solid var(--border);border-radius:var(--radius);background:#fff;box-shadow:0 1px 2px rgba(15,23,42,.05)}.stat:after{content:"";position:absolute;width:74px;height:74px;right:-24px;top:-24px;border-radius:50%;background:var(--primary-soft)}
.stat__num{position:relative;z-index:1;font-size:2rem;line-height:1.1;font-weight:780;letter-spacing:-.04em}.stat__label{position:relative;z-index:1;margin-top:11px;color:var(--muted);font-size:.84rem;font-weight:600}.stat--warn:after{background:var(--warning-bg)}.stat--danger:after{background:var(--danger-bg)}.stat--warn .stat__num{color:var(--warning)}.stat--danger .stat__num{color:var(--danger)}
.form-group{margin-bottom:19px}.form-row{display:flex;gap:18px;flex-wrap:wrap}.form-row .form-group{flex:1;min-width:190px}label{display:block;margin-bottom:7px;color:#334155;font-size:.84rem;font-weight:700}label .req{color:var(--danger)}
input,select,textarea{width:100%;min-width:0;padding:11px 13px;color:var(--text);background:#fff;border:1px solid #cbd5e1;border-radius:10px;outline:0;transition:.16s}input:hover,select:hover,textarea:hover{border-color:#94a3b8}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 4px rgba(37,99,235,.11)}textarea{min-height:100px;resize:vertical}.hint{margin-top:5px;color:var(--muted);font-size:.78rem}.input-with-btn{display:flex;gap:9px}.input-with-btn input{flex:1}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:42px;padding:9px 17px;border:1px solid transparent;border-radius:10px;font-size:.88rem;font-weight:700;line-height:1.35;text-decoration:none;cursor:pointer;transition:.15s}.btn:hover{transform:translateY(-1px)}.btn:active{transform:none}.btn--sm{min-height:35px;padding:6px 11px;border-radius:8px;font-size:.78rem}
.btn--primary{color:#fff;background:linear-gradient(180deg,#3b82f6,#2563eb);border-color:#2563eb;box-shadow:0 6px 14px rgba(37,99,235,.2)}.btn--primary:hover{background:linear-gradient(180deg,#2563eb,#1d4ed8)}.btn--ghost{color:#334155;background:#fff;border-color:#cbd5e1;box-shadow:0 1px 2px rgba(15,23,42,.05)}.btn--ghost:hover{background:var(--surface-2)}.btn--danger{color:#fff;background:var(--danger);border-color:var(--danger)}.btn--danger:hover{background:#b91c1c}.btn--block{width:100%;min-height:46px}.btn-row{display:flex;gap:10px;margin-top:10px}
.flash{position:relative;padding:13px 16px 13px 44px;margin-bottom:20px;border:1px solid;border-radius:11px;font-size:.88rem;font-weight:600}.flash:before{position:absolute;left:16px;top:12px}.flash--success{color:var(--success);background:var(--success-bg);border-color:#bbf7d0}.flash--success:before{content:"✓"}.flash--error{color:var(--danger);background:var(--danger-bg);border-color:#fecaca}.flash--error:before{content:"!"}.flash--info{color:#1d4ed8;background:var(--primary-soft);border-color:#bfdbfe}.flash--info:before{content:"i"}
.toolbar{padding:12px;margin-bottom:22px;border:1px solid var(--border);border-radius:13px;background:rgba(255,255,255,.8);box-shadow:0 1px 2px rgba(15,23,42,.05)}.toolbar form{display:flex;gap:9px;width:100%}.toolbar input{flex:1}.toolbar select{flex:0 1 320px}
.license-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(315px,1fr));gap:18px}.license{display:flex;flex-direction:column;gap:13px;min-width:0;padding:22px;border:1px solid var(--border);border-radius:var(--radius);background:#fff;box-shadow:0 1px 2px rgba(15,23,42,.05);transition:.18s}.license:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.license__head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.license__name{margin:0;font-size:1.04rem;font-weight:750}.license__ver{color:var(--muted);font-size:.77rem}.license__key{display:flex;align-items:center;gap:10px;min-width:0;padding:10px 10px 10px 12px;border:1px dashed #bfdbfe;border-radius:10px;color:#1e40af;background:#f8fbff;font-family:Consolas,monospace;font-size:.84rem;word-break:break-all}.license__key-value{flex:1;min-width:0}
.copy-btn{flex:0 0 auto;min-height:32px;padding:5px 9px;border:1px solid #bfdbfe;border-radius:7px;color:var(--primary);background:#fff;font-family:inherit;font-size:.72rem;font-weight:700;cursor:pointer}.copy-btn:hover{background:var(--primary-soft)}.copy-btn.is-copied{color:var(--success);border-color:#86efac}.copy-btn.is-error{color:var(--danger);border-color:#fca5a5}
.license__meta{display:flex;flex-wrap:wrap;gap:8px 15px;color:var(--muted);font-size:.8rem}.license__owner{display:flex;flex-direction:column;gap:1px;padding-top:11px;border-top:1px solid var(--border);font-size:.8rem}.license__actions{display:flex;gap:8px;margin-top:auto;padding-top:5px}
.badge{display:inline-flex;align-items:center;max-width:100%;padding:3px 9px;border-radius:999px;font-size:.7rem;line-height:1.4;font-weight:750;white-space:nowrap}.badge--type{color:#1d4ed8;background:#eff6ff}.badge--active{color:var(--success);background:var(--success-bg)}.badge--soon{color:var(--warning);background:var(--warning-bg)}.badge--expired,.badge--admin{color:var(--danger);background:var(--danger-bg)}
.empty{padding:66px 24px;text-align:center;color:var(--muted);border-style:dashed;box-shadow:none}.empty__icon{font-size:2.5rem}.empty h2{margin:12px 0 5px;color:var(--text)}.empty p{max-width:520px;margin:0 auto 18px}
.table-wrap{max-width:100%;overflow-x:auto;border:1px solid var(--border);border-radius:12px}.table{width:100%;border-collapse:separate;border-spacing:0;font-size:.84rem}.table th,.table td{padding:13px 14px;text-align:left;vertical-align:middle;border-bottom:1px solid var(--border)}.table th{color:#64748b;background:#f8fafc;font-size:.7rem;font-weight:800;letter-spacing:.055em;text-transform:uppercase;white-space:nowrap}.table tbody tr:last-child td{border-bottom:0}.table tbody tr:hover{background:#f8fafc}.table .num{text-align:right;white-space:nowrap}.table form{display:inline;margin:0}.row-actions{display:flex;gap:6px}.mono{padding:3px 7px;border-radius:6px;background:#eef2f7;font-family:Consolas,monospace;font-size:.8rem;word-break:break-all}
.qr-box{display:inline-block;padding:16px;margin:10px 0;border:1px solid var(--border);border-radius:14px;background:#fff;box-shadow:var(--shadow)}.qr-box svg{display:block;width:220px;height:220px}pre.code{padding:17px;overflow-x:auto;margin:9px 0 20px;border:1px solid #1e293b;border-radius:11px;background:#0f172a}pre.code code{color:#dbeafe;font-family:Consolas,monospace;font-size:.8rem;white-space:pre}.muted{color:var(--muted)}.text-center{text-align:center}
.qr-scanner,.qr-login-card{max-width:560px;margin:0 auto;text-align:center}.camera-panel{position:relative;overflow:hidden;aspect-ratio:1;border-radius:14px;background:#0f172a;margin-bottom:16px}.camera-panel video{width:100%;height:100%;object-fit:cover}.camera-frame{position:absolute;inset:15%;border:3px solid #60a5fa;border-radius:18px;box-shadow:0 0 0 999px rgba(15,23,42,.35)}.manual-qr{margin-top:24px;padding-top:18px;border-top:1px solid var(--border);text-align:left}.manual-qr summary{cursor:pointer;color:var(--muted);font-weight:700;text-align:center}.manual-qr form{margin-top:16px}.qr-login-card__icon{display:grid;place-items:center;width:58px;height:58px;margin:0 auto 14px;border-radius:50%;color:#fff;background:var(--success);font-size:1.7rem}.verify-code{margin:18px 0 8px;color:#1d4ed8;font-family:Consolas,monospace;font-size:clamp(2rem,8vw,3.2rem);font-weight:800;letter-spacing:.14em}
@media(max-width:1060px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:860px){.sidebar{position:fixed;left:0;top:0;width:min(86vw,300px);height:100dvh;transform:translateX(-105%);transition:transform .25s;box-shadow:0 24px 60px rgba(15,23,42,.3)}.nav-toggle:checked~.sidebar{transform:translateX(0)}.nav-toggle:checked~.content .scrim{display:block;position:fixed;inset:0;z-index:30;background:rgba(15,23,42,.58)}.mobilebar{display:flex;align-items:center;gap:12px;height:64px;padding:0 18px;position:sticky;top:0;z-index:20;border-bottom:1px solid var(--border);background:rgba(255,255,255,.9);backdrop-filter:blur(14px)}.mobilebar__title{display:flex;align-items:center;gap:9px;font-weight:750}.mobilebar .sidebar__logo{width:34px;height:34px;flex-basis:34px}.hamburger{display:inline-flex;flex-direction:column;justify-content:center;gap:4px;width:38px;height:38px;margin-left:-7px;cursor:pointer}.hamburger span{display:block;width:21px;height:2px;border-radius:2px;background:var(--text)}.main{padding:30px 22px 56px}}
@media(max-width:760px){.device-table{display:block;min-width:0;border:0}.device-table thead{display:none}.device-table tbody{display:grid;gap:12px}.device-table tr{display:grid;padding:13px 15px;border:1px solid var(--border);border-radius:11px;background:var(--surface-2)}.device-table td{display:grid;grid-template-columns:minmax(110px,28%) minmax(0,1fr);gap:12px;padding:10px 0;border-bottom:1px solid var(--border)!important;overflow-wrap:anywhere}.device-table td:last-child{border-bottom:0!important}.device-table td:before{content:attr(data-label);color:var(--muted);font-size:.72rem;font-weight:750}.device-table .row-actions{flex-wrap:wrap}}
@media(max-width:560px){.main{padding:23px 14px 45px}.main--center{justify-content:flex-start;padding-top:30px}.page-head{display:block;margin-bottom:21px}.page-head h1{font-size:1.55rem}.page-head>.btn{width:100%;margin-top:14px}.stats{gap:10px;margin-bottom:20px}.stat{min-height:108px;padding:17px}.stat__num{font-size:1.65rem}.card{padding:18px;border-radius:13px}.auth-wrap{padding:26px 20px}.form-row{display:block}.form-row .form-group{width:100%;min-width:0;max-width:none!important}input,select,textarea{min-height:45px;font-size:16px}.input-with-btn,.btn-row{flex-direction:column}.input-with-btn .btn,.btn-row .btn{width:100%}.toolbar form{flex-wrap:wrap}.toolbar form input,.toolbar form select{flex:1 0 100%}.toolbar form .btn{flex:1 1 auto}.license-grid{grid-template-columns:minmax(0,1fr);gap:12px}.license{padding:17px}.license__actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.license__actions .btn,.license__actions form,.license__actions form .btn{width:100%}.license__key{flex-direction:column;align-items:stretch}.table:not(.device-table){min-width:680px}}
@media(max-width:390px){.stats{grid-template-columns:1fr}.license__actions{grid-template-columns:1fr}.device-table td{grid-template-columns:1fr;gap:4px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
/* index.php — key list grouped by program */
.kstats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:18px}
.kstat{display:flex;align-items:center;gap:12px;padding:14px 16px;border:1px solid var(--border);border-radius:13px;color:var(--text);background:#fff;text-decoration:none;box-shadow:0 1px 2px rgba(15,23,42,.05);transition:.15s}
.kstat:hover{border-color:#94a3b8}
.kstat.is-current{border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.kstat__num{font-size:1.55rem;font-weight:780;line-height:1;letter-spacing:-.03em}
.kstat__label{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:.8rem;font-weight:650}
.kstat.is-active .kstat__num{color:var(--success)}.kstat.is-soon .kstat__num{color:var(--warning)}.kstat.is-expired .kstat__num{color:var(--danger)}
.dot{display:inline-block;flex:0 0 auto;width:7px;height:7px;border-radius:50%;background:currentColor}
.kstat.is-active .dot,.pill.is-active .dot{background:var(--success)}.kstat.is-soon .dot,.pill.is-soon .dot{background:#f59e0b}.kstat.is-expired .dot,.pill.is-expired .dot{background:var(--danger)}
.pill{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border-radius:999px;font-size:.72rem;font-weight:720;white-space:nowrap}
.pill.is-active{color:var(--success);background:var(--success-bg)}.pill.is-soon{color:var(--warning);background:var(--warning-bg)}.pill.is-expired{color:var(--danger);background:var(--danger-bg)}
.pgroup{margin-bottom:16px;border:1px solid var(--border);border-radius:14px;background:#fff;box-shadow:0 1px 2px rgba(15,23,42,.05);overflow:hidden}
.pgroup__head{display:flex;align-items:center;gap:12px;padding:13px 16px;background:var(--surface-2);cursor:pointer;list-style:none;user-select:none}
.pgroup__head::-webkit-details-marker{display:none}
.pgroup[open] .pgroup__head{border-bottom:1px solid var(--border)}
.pgroup__chevron{color:var(--muted);font-size:.8rem;transition:transform .15s}
.pgroup:not([open]) .pgroup__chevron{transform:rotate(-90deg)}
.pgroup__title{display:flex;flex-direction:column;min-width:0}
.pgroup__name{font-size:1rem;font-weight:780;letter-spacing:-.01em;overflow-wrap:anywhere}
.pgroup__sub{color:var(--muted);font-size:.76rem}
.pgroup__counts{display:flex;flex-wrap:wrap;gap:6px;margin-left:auto;justify-content:flex-end}
.pgroup__add{flex:0 0 auto}
.ktable__row{display:grid;grid-template-columns:112px minmax(275px,1.5fr) 112px 128px 70px minmax(120px,1fr) 74px;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid var(--border);font-size:.84rem}
.ktable__row:last-child{border-bottom:0}
.ktable__row:not(.ktable__row--head):hover{background:#fbfdff}
.ktable__row--head{padding-top:8px;padding-bottom:8px;color:#64748b;font-size:.68rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase}
.ktable__row>span{display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-width:0}
.ktable__row .kkey{flex-direction:row;align-items:center;gap:8px}
.kkey__value{flex:0 1 auto;overflow:hidden;min-width:0;padding:4px 8px;border-radius:7px;color:#1e40af;background:#f1f6ff;font-family:Consolas,monospace;font-size:.8rem;white-space:nowrap;text-overflow:ellipsis}
.kkey .copy-btn{min-height:28px;padding:3px 8px}
.ksub{color:var(--muted);font-size:.74rem}
.ksub.is-soon{color:var(--warning);font-weight:700}.ksub.is-expired{color:var(--danger);font-weight:700}
.kdev{padding:2px 7px;border-radius:7px;color:#334155;background:#f1f5f9;font-weight:700;font-size:.78rem;text-decoration:none;white-space:nowrap}
.kdev:hover{background:#e2e8f0}.kdev.is-full{color:var(--warning);background:var(--warning-bg)}
.knote__owner{font-weight:700;font-size:.8rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.knote__text{display:-webkit-box;overflow:hidden;max-width:100%;color:var(--muted);font-size:.78rem;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.ktable__row .kactions{flex-direction:row;align-items:center;justify-content:flex-end;gap:4px}
.kactions form{margin:0}
.icon-action{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid transparent;border-radius:8px;background:none;font-size:.95rem;text-decoration:none;cursor:pointer;transition:.15s}
.icon-action:hover{border-color:var(--border);background:var(--surface-2)}
.icon-action--danger:hover{border-color:#fca5a5;background:var(--danger-bg)}
.icon-action.is-locked{cursor:default;opacity:.55}.icon-action.is-locked:hover{border-color:transparent;background:none}
@media(max-width:1060px){.ktable__row{grid-template-columns:104px minmax(265px,1.5fr) 104px 120px 64px minmax(90px,1fr) 70px;gap:10px}}
@media(max-width:860px){
.kstats{grid-template-columns:repeat(2,minmax(0,1fr))}
.pgroup__head{flex-wrap:wrap}.pgroup__counts{order:3;width:100%;margin-left:22px;justify-content:flex-start}.pgroup__add{margin-left:auto}
.ktable__row--head{display:none}
.ktable__row{grid-template-columns:1fr 1fr;gap:9px 14px;padding:14px 16px}
.ktable__row>span[data-label]::before{content:attr(data-label);color:#94a3b8;font-size:.66rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase}
.ktable__row .kkey{grid-column:1/-1;flex-wrap:wrap}.ktable__row .kkey::before{width:100%}
.kkey__value{flex:1}
.ktable__row .knote{grid-column:1/-1}
.ktable__row .kactions{grid-column:1/-1;justify-content:flex-start;padding-top:6px;border-top:1px dashed var(--border)}
}
@media(max-width:390px){.kstats{grid-template-columns:1fr 1fr}.kstat{padding:12px}.kstat__num{font-size:1.3rem}}
/* purchase requests + menu permissions */
.side-link__badge{margin-left:auto;min-width:20px;padding:1px 7px;border-radius:999px;color:#fff;background:var(--danger);font-size:.72rem;font-weight:800;text-align:center}
.request-item{padding:16px 0;border-top:1px solid var(--border)}
.request-item:first-of-type{border-top:0}
.request-item__head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.request-item__form{display:grid;grid-template-columns:150px 120px 170px minmax(160px,1fr);gap:0 12px;align-items:start;margin-top:10px}
.request-item__form .form-group{margin-bottom:10px}
.request-item__actions{grid-column:1/-1;margin-top:0}
.menu-perms{display:grid;gap:8px;margin-bottom:18px}
.menu-perm{display:flex;align-items:center;gap:12px;margin:0;padding:12px 14px;border:1px solid var(--border);border-radius:10px;color:var(--text);font-size:.92rem;font-weight:600;cursor:pointer}
.menu-perm:hover{background:var(--surface-2)}
.menu-perm input{width:18px;height:18px;min-height:0;margin:0}
.menu-perm__icon{width:24px;text-align:center}
@media(max-width:760px){.request-item__form{grid-template-columns:1fr 1fr}.request-item__note{grid-column:1/-1}}
/* install.php */
.install{max-width:560px}
.install h3{margin:22px 0 10px}
.install-checks{display:grid;gap:6px;margin:0 0 16px;padding:0;list-style:none}
.install-checks li{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-radius:9px;background:var(--surface-2);font-size:.86rem}
.install-checks__icon{flex:0 0 22px;height:22px;border-radius:50%;color:#fff;font-size:.75rem;font-weight:800;line-height:22px;text-align:center}
.install-checks .is-ok .install-checks__icon{background:var(--success)}
.install-checks .is-fail .install-checks__icon{background:var(--danger)}
.install-checks .is-warn .install-checks__icon{background:#f59e0b}
