:root{--bg: #fdfcf8;--panel: #ffffff;--panel-2: #f5f4f0;--border: #e5e5e5;--text: #2c2c24;--muted: #7a7a7a;--primary: #5d7052;--primary-dark: #4a5a42;--primary-light: #7a8f6d;--ok: #4a5a42;--warn: #b7791f;--danger: #c0392b;--radius: 10px}*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text)}a{color:var(--primary);text-decoration:none}a:hover{color:var(--primary-dark)}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.center{display:grid;place-items:center;height:100vh}.page-loader{display:flex;flex-direction:column;align-items:center;gap:4px}.muted{color:var(--muted)}.small{font-size:.85rem}.error{color:var(--danger)}.app{display:grid;grid-template-columns:240px 1fr;height:100vh;overflow:hidden}.sidebar{background:var(--panel);border-right:1px solid var(--border);padding:20px 16px;display:flex;flex-direction:column;height:100vh;overflow-y:auto}.brand{font-weight:700;font-size:1.1rem;margin-bottom:24px;color:var(--primary)}.sidebar nav{display:flex;flex-direction:column;gap:4px}.sidebar nav a{padding:8px 12px;border-radius:8px;color:var(--text)}.sidebar nav a:hover{background:var(--panel-2)}.sidebar nav a.active{background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--primary);font-weight:600}.sidebar-foot{margin-top:auto;display:flex;flex-direction:column;gap:6px}.content{padding:28px 40px;width:100%;min-width:0;height:100vh;overflow-y:auto}.topbar,.sidebar-overlay{display:none}.hamburger{display:inline-flex;flex-direction:column;justify-content:center;gap:4px;width:40px;height:40px;padding:9px;background:transparent;border:1px solid var(--border);border-radius:8px;cursor:pointer}.hamburger span{display:block;height:2px;background:var(--text);border-radius:2px}.stack{display:flex;flex-direction:column;gap:20px}h1{margin:0;font-size:1.6rem}h3{margin:0 0 12px;font-size:1.05rem}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:18px;box-shadow:0 1px 3px #2c2c240a}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px}.site-card{display:flex;flex-direction:column;gap:6px;color:var(--text);transition:border-color .12s,box-shadow .12s}.site-card:hover{border-color:var(--primary);box-shadow:0 4px 14px #5d70521f}.site-card-head{display:flex;justify-content:space-between;align-items:center}.stat{background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.stat-warn{border-color:var(--warn)}.stat-value{font-size:1.8rem;font-weight:700}.stat-label{color:var(--muted);font-size:.85rem}.stat-warn-text{color:var(--warn);font-size:.8rem;margin-top:4px}label{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;font-size:.9rem}input,select{background:#fff;border:1px solid var(--border);color:var(--text);padding:9px 11px;border-radius:8px;font-size:.95rem}input:focus,select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 15%,transparent)}.row-form{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.row-form input{flex:1;min-width:140px}.btn{border:1px solid var(--border);background:#fff;color:var(--text);padding:9px 14px;border-radius:7px;cursor:pointer;font-size:.9rem;font-weight:600;transition:background .12s,border-color .12s,color .12s}.btn:hover{border-color:var(--primary);color:var(--primary);background:var(--panel-2)}.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.primary:hover{background:var(--primary-dark);border-color:var(--primary-dark);color:#fff}.btn.ghost{background:transparent;border-color:transparent}.btn.ghost:hover{background:var(--panel-2);border-color:var(--border)}.btn.small{padding:5px 9px;font-size:.8rem}.btn:disabled{opacity:.5;cursor:default}.tbl{width:100%;border-collapse:collapse;font-size:.9rem}.tbl th,.tbl td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--border)}.tbl th{color:var(--muted);font-weight:600}.badge{background:var(--panel-2);border:1px solid var(--border);padding:2px 8px;border-radius:999px;font-size:.75rem}.badge.ok{color:var(--ok);border-color:var(--ok);background:color-mix(in srgb,var(--ok) 10%,transparent)}.badge.warn{color:var(--warn);border-color:var(--warn);background:color-mix(in srgb,var(--warn) 10%,transparent)}.freshkey{background:color-mix(in srgb,var(--primary) 8%,transparent);border:1px solid var(--primary);border-radius:8px;padding:12px;margin-bottom:12px;display:flex;flex-direction:column;gap:8px}.freshkey code{word-break:break-all;font-size:.95rem}.grant{display:flex;gap:6px;align-items:center}.grant select{padding:5px 7px;font-size:.8rem}.crumbs{color:var(--muted);font-size:.9rem}.page-head{display:flex;align-items:center;justify-content:space-between;gap:16px}.head-actions{display:flex;gap:10px;align-items:center}.action-menu{position:relative}.action-menu-list{position:absolute;top:calc(100% + 6px);right:0;z-index:40;min-width:190px;display:flex;flex-direction:column;padding:6px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 12px 32px #2c2c2429}.menu-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;justify-content:flex-start;padding:9px 12px;border:none;background:transparent;color:var(--text);border-radius:7px;cursor:pointer;font-size:.9rem;font-weight:500}.menu-item:hover{background:var(--panel-2);color:var(--primary)}.menu-item.danger{color:var(--danger)}.menu-item.danger:hover{background:color-mix(in srgb,var(--danger) 8%,transparent);color:var(--danger)}.menu-item:disabled{opacity:.5;cursor:default}.menu-ico{width:1.2em;flex:0 0 auto;display:grid;place-items:center}.btn svg,.menu-item svg,.h3-icon svg{flex:0 0 auto}.h3-icon{display:inline-flex;align-items:center;gap:8px}.h3-icon svg{color:var(--primary)}.refresh-in-menu{display:none}.tbl tr.row-clickable{cursor:pointer}.tbl tr.row-clickable:hover td{background:var(--panel-2)}.tbl tr.row-update td{background:color-mix(in srgb,var(--warn) 12%,transparent)}.tbl tr.row-update td:first-child{box-shadow:inset 3px 0 0 var(--warn);font-weight:600}.tbl tr.row-ours td{background:color-mix(in srgb,var(--brand, #2f3a29) 8%,transparent)}.tbl tr.row-ours td:first-child{box-shadow:inset 3px 0 0 var(--brand, #2f3a29);font-weight:600}.tbl tr.row-ours.row-update td{background:color-mix(in srgb,var(--warn) 12%,transparent)}.plugin-name{display:inline-flex;align-items:center;gap:6px}.plugin-name .ours-icon{color:var(--brand, #2f3a29);flex-shrink:0}.badge.ours-badge{color:#fff;background:var(--brand, #2f3a29);border-color:var(--brand, #2f3a29);font-size:.68rem;letter-spacing:.04em;padding:1px 6px}.stepper{list-style:none;display:flex;gap:0;padding:0;margin:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);overflow:hidden}.stepper-item{flex:1;display:flex;align-items:center;gap:10px;padding:14px 18px;color:var(--muted);position:relative}.stepper-item:not(:last-child):after{content:"";position:absolute;right:0;top:0;bottom:0;width:1px;background:var(--border)}.stepper-item.current{color:var(--text);background:var(--panel-2)}.stepper-item.done{color:var(--primary)}.stepper-dot{width:26px;height:26px;border-radius:999px;flex:0 0 auto;display:grid;place-items:center;font-size:.85rem;font-weight:700;border:1px solid var(--border);background:var(--bg)}.stepper-item.current .stepper-dot{border-color:var(--primary);color:var(--primary)}.stepper-item.done .stepper-dot{border-color:var(--primary);color:var(--primary);background:color-mix(in srgb,var(--primary) 10%,transparent)}.stepper-label{font-size:.95rem}.type-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}.type-card{text-align:left;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:20px;cursor:pointer;color:var(--text);display:flex;flex-direction:column;gap:8px;transition:border-color .12s,transform .12s,box-shadow .12s}.type-card:hover:not(.disabled){border-color:var(--primary);transform:translateY(-2px);box-shadow:0 6px 18px #5d705224}.type-card.disabled{opacity:.45;cursor:not-allowed}.type-icon{color:var(--primary);display:flex}.type-title{font-weight:700;font-size:1.1rem}.type-desc{line-height:1.4}.wizard-card{max-width:640px}.wizard-actions{display:flex;justify-content:space-between;gap:12px;margin-top:18px}.howto{line-height:1.9;padding-left:20px}.btn.inline{display:inline-flex;vertical-align:middle}.btn.danger{color:var(--danger)}.btn.danger:hover{border-color:var(--danger);color:var(--danger);background:color-mix(in srgb,var(--danger) 8%,transparent)}h4{margin:10px 0 4px}.site-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.site-card{gap:10px}.ellip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-metrics{display:flex;gap:18px;margin-top:4px}.metric{display:flex;flex-direction:column}.metric-val{font-size:1.3rem;font-weight:700}.metric-lbl{font-size:.75rem;color:var(--muted)}.metric-warn .metric-val{color:var(--warn)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#2c2c2459;display:grid;place-items:center;z-index:50;padding:20px}.modal{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);width:100%;max-width:480px;max-height:85vh;overflow:auto;box-shadow:0 20px 60px #2c2c242e}.modal-wide{max-width:720px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--panel)}.modal-head h3{margin:0}.modal-body{padding:18px}.spinner{display:inline-block;border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle}@keyframes spin{to{transform:rotate(360deg)}}.btn{display:inline-flex;align-items:center;gap:7px;justify-content:center}.btn.primary .spinner{border-top-color:#fff}.btn .spinner,.btn.ghost .spinner{border-top-color:var(--primary)}.loading-row{display:flex;align-items:center;justify-content:center;gap:10px;color:var(--muted);padding:48px 16px;text-align:center}.loading-centered{justify-content:center;padding:48px 16px}.user-filters{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:4px}.user-search{flex:1;min-width:220px}.core-update-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;border-color:var(--warn);flex-wrap:wrap}.inline-field{flex-direction:row;align-items:center;gap:8px;margin-bottom:0}.inline-field>select{flex:1}.filter-field{display:flex;flex-direction:column;gap:4px;margin-bottom:0}.filter-field>select,.filter-field>input{width:100%}.license-filters{align-items:flex-end}.license-filters .user-search{flex:0 1 260px;min-width:160px}.license-filters .filter-field{flex:1 1 220px;min-width:180px}.user-list-filters .user-search{flex:0 1 260px;min-width:160px}.user-list-filters .inline-field{flex:1 1 240px}.user-list-filters .inline-field>select{padding:10px 16px;font-size:.95rem}.form-field{display:flex;flex-direction:column;gap:4px;flex:1;min-width:160px}.form-field>input,.form-field>select,.form-field>textarea{width:100%}.form-field>textarea{resize:vertical;font-family:inherit}.role-legend{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.role-legend-item{display:flex;align-items:center;gap:10px}.role-badge{background:color-mix(in srgb,var(--primary) 12%,transparent);border-color:var(--primary);color:var(--primary-dark);font-weight:600}.user-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}.user-card{display:flex;flex-direction:column;gap:14px}.user-card-disabled{opacity:.65}.user-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.user-ident{min-width:0}.user-name{font-weight:700;font-size:1.05rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-card-body{display:flex;flex-direction:column;gap:10px}.user-actions{display:flex;gap:8px;flex-wrap:wrap}.user-grants{border-top:1px solid var(--border);padding-top:12px}.grant-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.grant-chip{display:inline-flex;align-items:center;gap:6px;background:var(--panel-2);border:1px solid var(--border);border-radius:999px;padding:3px 4px 3px 10px;font-size:.8rem}.chip-level{background:color-mix(in srgb,var(--primary) 14%,transparent);color:var(--primary-dark);border-radius:999px;padding:1px 8px;font-size:.72rem;font-weight:600}.chip-x{border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:1rem;line-height:1;width:20px;height:20px;border-radius:50%;display:grid;place-items:center}.chip-x:hover{background:color-mix(in srgb,var(--danger) 12%,transparent);color:var(--danger)}.grant-add{flex-wrap:wrap}.grant-add select{padding:6px 8px;font-size:.85rem}.login-wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;min-height:100vh;padding:24px;position:relative;isolation:isolate;background:#2f3a29}.login-wrap:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background:radial-gradient(1200px 600px at 15% -10%,rgba(122,143,109,.55),transparent 60%),radial-gradient(900px 500px at 100% 110%,rgba(93,112,82,.45),transparent 55%),linear-gradient(160deg,#3a4733,#2f3a29 55%,#232c1f)}.login-wrap:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;opacity:.4;background-image:linear-gradient(rgba(255,255,255,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.03) 1px,transparent 1px);background-size:28px 28px;-webkit-mask-image:radial-gradient(circle at 50% 40%,#000 0%,transparent 75%);mask-image:radial-gradient(circle at 50% 40%,#000 0%,transparent 75%)}.login-panel{width:100%;max-width:400px;display:flex;flex-direction:column;align-items:center;animation:login-rise .5s cubic-bezier(.22,1,.36,1) both}@keyframes login-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.login-brand{display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:24px}.login-logo{display:block;width:164px;height:auto;filter:drop-shadow(0 4px 14px rgba(0,0,0,.25))}.login-brand-name{color:#ffffffc7;font-weight:500;font-size:.95rem;letter-spacing:.18em;text-transform:uppercase}.login-card{width:100%;display:flex;flex-direction:column;gap:14px;padding:28px 26px;background:color-mix(in srgb,var(--panel) 96%,transparent);border:1px solid rgba(255,255,255,.08);border-radius:16px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 24px 60px #0006}.login-card.shake{animation:login-shake .5s cubic-bezier(.36,.07,.19,.97) both,login-flash .6s ease-out both}@keyframes login-shake{10%,90%{transform:translate(-2px)}20%,80%{transform:translate(4px)}30%,50%,70%{transform:translate(-8px)}40%,60%{transform:translate(8px)}}@keyframes login-flash{0%{border-color:var(--danger);box-shadow:0 24px 60px #0006,0 0 0 3px color-mix(in srgb,var(--danger) 55%,transparent)}to{border-color:#ffffff14;box-shadow:0 24px 60px #0006,0 0 color-mix(in srgb,var(--danger) 0%,transparent)}}@media(prefers-reduced-motion:reduce){.login-card.shake{animation:login-flash .6s ease-out both}}.login-head{text-align:center;margin-bottom:2px}.login-head h1{margin:0 0 4px;font-size:1.5rem;letter-spacing:-.01em}.login-head .muted{margin:0;font-size:.9rem}.login-card .field{display:flex;flex-direction:column;gap:6px;font-size:.82rem;font-weight:500;color:var(--muted)}.login-card .field input{width:100%;padding:11px 13px;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:var(--text);font-size:.95rem;transition:border-color .15s ease,box-shadow .15s ease}.login-card .field input::placeholder{color:color-mix(in srgb,var(--muted) 70%,transparent)}.login-card .field input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 20%,transparent)}.otp-field{align-items:center}.otp-field>span{align-self:flex-start}.otp-input{display:flex;gap:10px;justify-content:center;width:100%;margin-top:2px}.otp-cell{width:48px;height:56px;padding:0;text-align:center;font-size:1.5rem;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;border:1px solid var(--border);border-radius:12px;background:var(--bg);transition:border-color .15s ease,box-shadow .15s ease,transform .08s ease}.otp-cell.filled{border-color:color-mix(in srgb,var(--primary) 55%,var(--border))}.otp-cell:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 22%,transparent);transform:translateY(-1px)}.otp-cell:disabled{opacity:.6}@media(max-width:420px){.otp-input{gap:7px}.otp-cell{width:42px;height:50px;font-size:1.3rem}}.login-submit{width:100%;margin-top:4px;padding:11px;font-size:.95rem}.login-ghost{width:100%}.login-card .error,.login-info{margin:0;font-size:.88rem}.login-footer{color:#fff9;letter-spacing:.03em}@media(max-width:820px){.app{display:block;min-height:100vh;height:auto;overflow:visible}.topbar{display:flex;align-items:center;gap:12px;padding:10px 16px;padding-top:calc(10px + env(safe-area-inset-top));background:var(--panel);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:30}.topbar-brand{font-weight:700;color:var(--primary)}.sidebar{position:fixed;top:0;left:0;bottom:0;width:260px;max-width:82vw;transform:translate(-100%);transition:transform .22s ease;z-index:50;padding-top:calc(20px + env(safe-area-inset-top))}.sidebar.open{transform:translate(0);box-shadow:0 0 40px #00000080}.sidebar-overlay{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#00000080}.content{padding:18px 16px;height:auto;overflow-y:visible}h1{font-size:1.35rem}.page-head{flex-direction:column;align-items:flex-start;gap:10px}.head-actions{width:100%;flex-wrap:wrap}.refresh-action{display:none}.refresh-in-menu{display:flex}.row-form{flex-direction:column;align-items:stretch}.row-form input,.row-form select,.row-form .btn{width:100%}.tbl{display:block;overflow-x:auto;white-space:nowrap}.modal{max-width:100%}.user-filters{flex-direction:column;align-items:stretch}.user-search{min-width:0}}@media(max-width:420px){.content{padding:14px 12px}.grid-cards{grid-template-columns:1fr 1fr}}.install-prompt{position:fixed;left:50%;transform:translate(-50%);bottom:calc(16px + env(safe-area-inset-bottom));z-index:60;width:min(520px,calc(100% - 24px));display:flex;align-items:center;justify-content:space-between;gap:14px;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 16px;box-shadow:0 8px 30px #00000073}.install-prompt-body{display:flex;flex-direction:column;gap:2px;min-width:0}.install-prompt-actions{display:flex;gap:8px;flex:0 0 auto}@media(max-width:480px){.install-prompt{flex-direction:column;align-items:stretch;gap:10px}.install-prompt-actions{justify-content:flex-end}}.panel-toggle{display:flex;align-items:center;gap:10px;width:100%;background:transparent;border:none;cursor:pointer;color:var(--text);padding:0;text-align:left}.panel-toggle h3{margin:0;flex:1}.panel-toggle-icon{color:var(--muted);display:inline-flex;align-items:center}.debug-grid{display:flex;flex-direction:column;gap:10px}.debug-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}.debug-row.disabled{opacity:.55}.debug-log-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:6px}.debug-log-head .head-actions{margin-left:auto}.debug-log{background:#0a0c11;border:1px solid var(--border);border-radius:8px;padding:12px;font-size:.8rem;line-height:1.5;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-word;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.stat-sub{margin-top:4px}.dash-metrics{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px}.dash-metric{display:flex;flex-direction:column;gap:2px;padding:12px 14px;background:var(--panel-2);border:1px solid var(--border);border-radius:8px}.dash-metric-value{font-size:1.5rem;font-weight:700}.dash-metric-value.warn{color:var(--warn)}.dash-dist{display:flex;flex-direction:column;gap:8px}.dist-row{display:flex;align-items:center;gap:12px}.dist-label{width:90px;flex:0 0 auto;font-size:.9rem}.dist-bar{flex:1;height:10px;background:var(--panel-2);border-radius:999px;overflow:hidden}.dist-fill{height:100%;background:var(--primary);border-radius:999px}.dist-count{width:28px;text-align:right;flex:0 0 auto;color:var(--muted);font-size:.9rem}.settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:20px;align-items:start}.badge.danger-badge{color:var(--danger);border-color:var(--danger)}.block-reason{margin-top:4px;max-width:260px;white-space:normal}.toast-stack{position:fixed;z-index:100;top:calc(16px + env(safe-area-inset-top));right:16px;display:flex;flex-direction:column;gap:10px;max-width:min(380px,calc(100vw - 32px));pointer-events:none}.toast{pointer-events:auto;cursor:pointer;display:flex;align-items:center;gap:11px;padding:13px 15px;border-radius:12px;background:var(--panel);border:1px solid var(--border);color:var(--text);box-shadow:0 10px 34px #00000073;animation:toast-in .32s cubic-bezier(.21,1.02,.73,1) both;border-left:4px solid var(--muted)}.toast-leaving{animation:toast-out .25s ease forwards}.toast-icon{flex:0 0 auto;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:.8rem;font-weight:700;color:#fff}.toast-msg{font-size:.9rem;line-height:1.35}.toast-success{border-left-color:var(--ok)}.toast-success .toast-icon{background:var(--ok)}.toast-error{border-left-color:var(--danger)}.toast-error .toast-icon{background:var(--danger)}.toast-info{border-left-color:var(--primary)}.toast-info .toast-icon{background:var(--primary)}@keyframes toast-in{0%{opacity:0;transform:translate(120%) scale(.96)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes toast-out{0%{opacity:1;transform:translate(0) scale(1)}to{opacity:0;transform:translate(120%) scale(.96)}}@media(max-width:480px){.toast-stack{left:16px;right:16px;max-width:none}@keyframes toast-in{0%{opacity:0;transform:translateY(-120%) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes toast-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-120%)}}}.site-card-title{display:flex;align-items:center;gap:8px;min-width:0}.site-card-title strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.site-type-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;background:var(--panel-2);border:1px solid var(--border);color:var(--primary)}.fm-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.fm-crumbs{display:flex;align-items:center;gap:2px;flex-wrap:wrap;font-size:.9rem}.fm-crumb{background:transparent;border:none;color:var(--primary);cursor:pointer;padding:2px 4px;border-radius:6px;font-size:.9rem}.fm-crumb:hover{background:var(--panel-2)}.fm-sep{color:var(--muted)}.fm-row{cursor:default}.fm-row:hover{background:var(--panel-2)}.fm-table td{vertical-align:middle;line-height:1.4}.fm-icon-cell{width:24px;cursor:pointer;text-align:center;padding-right:0!important;padding-left:14px!important}.fm-icon-cell svg{vertical-align:middle;display:inline-block}.fm-name{cursor:pointer;font-weight:500;padding-left:8px!important}.fm-name svg{vertical-align:middle;margin-right:6px}.fm-name:hover{color:var(--primary)}.fm-dir{color:var(--warn)}.fm-file{color:var(--muted)}.fm-actions{white-space:nowrap;text-align:right}.icon-btn{background:transparent;border:1px solid transparent;cursor:pointer;color:var(--muted);padding:5px;border-radius:6px;vertical-align:middle}.icon-btn:hover{background:var(--panel-2);color:var(--text);border-color:var(--border)}.icon-btn.danger:hover{color:var(--danger);border-color:var(--danger)}.editor-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;display:flex;flex-direction:column;background:#0b0d12}.editor-topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;padding-top:calc(12px + env(safe-area-inset-top));background:var(--panel);border-bottom:1px solid var(--border);flex:0 0 auto}.editor-title{display:flex;align-items:center;gap:8px;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9rem}.editor-title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editor-title svg{color:var(--primary);flex:0 0 auto}.editor-actions{display:flex;gap:10px;flex:0 0 auto}.editor-host{flex:1 1 auto;overflow:hidden}.code-editor{height:100%}.code-editor .cm-editor{height:100%;font-size:.9rem}.code-editor .cm-scroller{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.files-page .fm-crumbs{padding:10px 14px}.files-page .fm-card{padding:0;overflow:hidden}.files-page .fm-card .tbl{margin:0}.files-page h1{display:flex;align-items:center;gap:6px}.files-page h1 .icon-btn{display:inline-flex}.icon-actions{display:flex;gap:8px;align-items:center;flex-shrink:0}.icon-action{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border-radius:8px;cursor:pointer;border:1px solid var(--border);background:var(--panel-2);color:var(--text);transition:background .12s,border-color .12s,color .12s}.icon-action:hover{background:var(--panel)}.icon-action.primary{background:var(--primary);border-color:var(--primary);color:#fff}.icon-action.primary:hover{background:var(--primary-dark);border-color:var(--primary-dark)}.icon-action.danger{color:var(--danger)}.icon-action.danger:hover{background:color-mix(in srgb,var(--danger) 10%,transparent);border-color:var(--danger)}.table-scroll{margin-top:12px;overflow-x:auto}.tbl .icon-action{width:28px;height:28px;border-radius:6px}.tbl .icon-action svg{display:block}.versions-tbl{table-layout:fixed}.versions-tbl th,.versions-tbl td{padding:5px 10px;vertical-align:middle}.versions-tbl .col-version{width:150px;white-space:nowrap}.versions-tbl .col-version .version-tag{font-weight:600;margin-right:6px}.versions-tbl .col-size{width:80px;white-space:nowrap;color:var(--muted)}.versions-tbl .col-downloads{width:110px;white-space:nowrap}.versions-tbl .col-status{width:120px;white-space:nowrap}.versions-tbl .col-actions{width:92px;white-space:nowrap;text-align:right}.versions-tbl .col-actions .icon-action+.icon-action{margin-left:4px}.versions-tbl .col-changelog{min-width:180px}.dl-counts{display:inline-flex;gap:10px}.dl-count{display:inline-flex;align-items:center;gap:3px;font-size:.8rem;color:var(--muted)}.dl-count svg{opacity:.7}.changelog-cell{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.82rem;color:var(--muted)}.versions-tbl .badge{padding:1px 7px;font-size:.72rem}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.btn>svg{display:block}.license-head{gap:10px}.key-chip{display:inline-flex;align-items:center;gap:4px;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;padding:3px 6px 3px 9px;color:var(--muted);font-size:.78rem}.key-chip code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.key-chip-btn{display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;cursor:pointer;color:var(--muted);padding:3px;border-radius:4px;flex:0 0 auto}.key-chip-btn:hover{background:var(--panel);color:var(--text)}.move-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;border-color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,var(--panel))}.running-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.running-bar .loading-row{padding:0;justify-content:flex-start;text-align:left;flex:1 1 auto}.pw-field{display:flex;align-items:stretch;gap:0;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--panel-2)}.pw-field input{flex:1;min-width:0;border:none;background:transparent;padding:9px 10px;color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.pw-field input:focus{outline:none}.pw-field:focus-within{border-color:var(--primary)}.pw-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;border:none;border-left:1px solid var(--border);background:transparent;color:var(--muted);cursor:pointer;transition:background .12s,color .12s}.pw-btn:hover:not(:disabled){background:var(--panel);color:var(--text)}.pw-btn:disabled{opacity:.4;cursor:default}.pw-btn.pw-gen{color:var(--primary)}.pw-btn.pw-gen:hover{background:color-mix(in srgb,var(--primary) 12%,transparent)}.product-picker{display:flex;flex-direction:column;gap:8px;margin-top:4px}.product-picker .product-add{max-width:100%}.chip-list{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:6px;background:color-mix(in srgb,var(--primary) 12%,transparent);border:1px solid color-mix(in srgb,var(--primary) 45%,transparent);color:var(--text);border-radius:999px;padding:3px 4px 3px 10px;font-size:.82rem}.chip-kind{color:var(--muted);font-size:.72rem}.chip-x{display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;cursor:pointer;color:var(--muted);border-radius:999px;padding:2px}.chip-x:hover{background:color-mix(in srgb,var(--danger) 15%,transparent);color:var(--danger)}.meta-row{display:flex;flex-wrap:wrap;gap:6px 28px;margin:0;padding:2px 0;border-top:1px solid var(--border)}.license-detail .meta-row{padding-top:12px}.meta-item{display:flex;flex-direction:column;gap:1px}.meta-item dt{font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.meta-item dd{margin:0;font-size:.86rem;color:var(--text)}.detail-label{margin-bottom:4px;text-transform:uppercase;letter-spacing:.04em;font-size:.68rem}.compact-tbl th,.compact-tbl td{padding:5px 8px;font-size:.84rem}.protect-card{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.protect-info{display:flex;align-items:center;gap:12px;min-width:0}.protect-icon{flex:0 0 auto;width:38px;height:38px;border-radius:9px;display:grid;place-items:center}.protect-icon.on{background:color-mix(in srgb,var(--primary) 15%,transparent);color:var(--primary)}.protect-icon.off{background:color-mix(in srgb,var(--warn) 15%,transparent);color:var(--warn)}.vuln-badge{color:var(--danger);border-color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,transparent);white-space:nowrap}
