:root{--uphe-purple: #400095;--uphe-purple-light: #6e54dc;--uphe-purple-dark: #2d0066;--nbcu-yellow: #fcb711;--nbcu-red: #cc004c;--nbcu-green: #0db14b;--nbcu-blue: #0089d0;--nbcu-orange: #f37021;--st-green: #c6efce;--st-yellow: #ffeb9c;--st-red: #ffc7ce;--bg: #ffffff;--bg-2: #f6f5fb;--bg-3: #ecebf6;--text: #1a1a2e;--muted: #5b5b73;--border: #e3e1f0;--accent: var(--uphe-purple);--plate: var(--uphe-purple-dark);--font: Calibri, "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--radius: 10px;--nav-w: 264px;--nav-w-collapsed: 62px}:root[data-theme=dark]{--bg: #0d0d1a;--bg-2: #15152a;--bg-3: #1f1f3a;--text: #ececf5;--muted: #a3a3c4;--border: #2a2a48;--accent: #907ce4;--plate: #1a1a2e}*{box-sizing:border-box}:where(button,a,input,select,textarea,summary,[role=button],[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}html,body,#root{height:100%}body{margin:0;font-family:var(--font);font-size:.95rem;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}a{color:var(--accent)}.app{display:flex;min-height:100%}.nav{flex:0 0 var(--nav-w);width:var(--nav-w);background:var(--bg-2);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:16px 14px;gap:4px;position:sticky;top:0;height:100vh;transition:flex-basis .16s ease,width .16s ease,padding .16s ease}.nav.collapsed{flex-basis:var(--nav-w-collapsed);width:var(--nav-w-collapsed);padding-left:8px;padding-right:8px}.nav.collapsed .nav-text{display:none}.nav.collapsed .nav-link,.nav.collapsed .brand-row{justify-content:center}.nav.collapsed .nav-link{padding-left:0;padding-right:0}.nav.collapsed .brand-row{padding:4px 0 8px}.nav.collapsed .nav-foot{flex-wrap:wrap;justify-content:center;gap:6px}.nav.collapsed .foot-actions{width:100%;justify-content:center}.plate{background:var(--plate);border-radius:var(--radius);padding:13px 15px;margin-bottom:4px;overflow:hidden}.plate img{width:100%;display:block}.plate .logo-light{display:none}:root[data-theme=light] .plate{background:transparent;padding:6px 2px 10px}:root[data-theme=light] .plate .logo-dark{display:none}:root[data-theme=light] .plate .logo-light{display:block}.nav.collapsed .plate{padding:7px 4px}.nav.collapsed .plate img{width:608%;max-width:none}.brand-row{display:flex;align-items:center;gap:6px;padding:4px 4px 8px 8px}.wordmark{font-weight:700;color:var(--accent);font-size:1.02rem;letter-spacing:.01em;flex:1;min-width:0}.nav-link{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;border:0;border-radius:8px;background:transparent;color:var(--text);font:inherit;font-size:.92rem;text-align:left;cursor:pointer}.nav-link:hover{background:var(--bg-3)}.nav-link.active{background:var(--uphe-purple);color:#fff}.nav-link .ico{width:18px;text-align:center;opacity:.9;flex:0 0 18px}.nav-spacer{flex:1}.nav-foot{border-top:1px solid var(--border);margin-top:8px;padding-top:10px;display:flex;align-items:center;gap:8px;min-width:0}.avatar{flex:0 0 26px;height:26px;border-radius:50%;background:var(--uphe-purple);color:#fff;font-size:.68rem;font-weight:700;letter-spacing:.02em;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}.who-name{flex:1;min-width:0;font-size:.82rem;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-mark{color:var(--accent);font-size:.95rem;flex:0 0 auto;line-height:1}.foot-actions{display:flex;gap:2px;flex:0 0 auto}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--muted);font:inherit;font-size:.9rem;cursor:pointer}.icon-btn:hover{background:var(--bg-3);color:var(--text)}.icon-btn:focus-visible{outline:2px solid var(--uphe-purple-light);outline-offset:1px}.main{flex:1;min-width:0;padding:26px 32px 60px;overflow-x:hidden}.page-head{display:flex;align-items:center;gap:12px;margin:0 0 18px;flex-wrap:wrap}.page-head h1{font-size:1.32rem;color:var(--accent);margin:0;font-weight:700}.spacer{flex:1}.muted{color:var(--muted)}.small{font-size:.82rem}.btn{display:inline-flex;align-items:center;gap:8px;font:inherit;font-weight:600;font-size:.9rem;padding:9px 16px;border-radius:8px;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;text-decoration:none}.btn:hover:not(:disabled){background:var(--bg-2)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.brand{background:var(--uphe-purple);border-color:var(--uphe-purple);color:#fff}.btn.brand:hover:not(:disabled){background:var(--uphe-purple-light);border-color:var(--uphe-purple-light)}.btn.danger{background:var(--nbcu-red);border-color:var(--nbcu-red);color:#fff}.btn.ghost{background:transparent}.btn.sm{padding:5px 11px;font-size:.82rem}.seg{display:inline-flex}.seg .btn{border-radius:0;margin-left:-1px}.seg .btn:first-child{border-radius:8px 0 0 8px;margin-left:0}.seg .btn:last-child{border-radius:0 8px 8px 0}.seg .btn.on{background:var(--uphe-purple);color:#fff;border-color:var(--uphe-purple);z-index:1}.seg .btn.on:hover:not(:disabled){background:var(--uphe-purple)}.renameable{border-radius:6px;padding:0 6px;margin-left:-6px;outline:none}.renameable:hover{background:var(--bg-2)}.renameable:focus{background:var(--bg-2);box-shadow:0 0 0 2px var(--uphe-purple)}.acting-banner{position:fixed;inset:0 0 auto 0;z-index:100;display:flex;align-items:center;gap:10px;padding:8px 16px;font-size:.86rem;background:var(--st-yellow);color:#5a3d00;box-shadow:0 2px 12px #00000040}.acting-banner .btn{margin-left:auto}body:has(.acting-banner) .app{padding-top:38px}.doc-panel{margin-top:28px;border-top:1px solid var(--border);padding-top:18px}.doc-body{display:grid;grid-template-columns:minmax(160px,220px) 1fr;gap:24px}.doc-nav{display:flex;flex-direction:column;gap:2px;align-content:start}.doc-link{text-align:left;background:none;border:0;color:var(--text);font:inherit;font-size:.88rem;padding:5px 9px;border-radius:6px;cursor:pointer}.doc-link:hover{background:var(--bg-2)}.doc-link.on{background:var(--uphe-purple);color:#fff}.doc-page{min-width:0}.doc-page h2{font-size:1.15rem}.doc-page h3{font-size:1rem}.doc-page p,.doc-page li{line-height:1.6}.doc-table{border-collapse:collapse;width:100%;margin:12px 0;font-size:.88rem}.doc-table th{background:var(--bg-2);text-align:left}.doc-table th,.doc-table td{border:1px solid var(--border);padding:6px 10px}.doc-callout{border-left:3px solid var(--uphe-purple);background:var(--bg-2);padding:10px 14px;margin:12px 0;border-radius:0 6px 6px 0}.doc-callout.warning{border-left-color:var(--nbcu-red)}.doc-page figure{margin:16px 0}.doc-page figcaption{font-weight:700;margin-bottom:6px}.doc-page dt{font-weight:700;margin-top:6px}.doc-page dd{margin:0 0 2px 16px;color:var(--muted)}.menu{position:relative}.menu>summary{list-style:none;display:inline-flex}.menu>summary::-webkit-details-marker{display:none}.menu-body{position:absolute;right:0;top:calc(100% + 6px);z-index:20;min-width:190px;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:6px;box-shadow:0 12px 32px #00000047}.menu-group{padding:4px 0}.menu-group+.menu-group{border-top:1px solid var(--border)}.menu-label{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:4px 8px}.menu-item{display:block;padding:6px 8px;border-radius:6px;font-size:.86rem;color:var(--text);text-decoration:none}.menu-item:hover{background:var(--bg-2)}input.native,textarea.native,select.native{font:inherit;font-size:.95rem;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px 12px;width:100%}textarea.native{min-height:96px;resize:vertical;line-height:1.5}input.native:focus,textarea.native:focus,select.native:focus{outline:2px solid var(--uphe-purple-light);outline-offset:-1px;border-color:transparent}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.field label{font-weight:600;font-size:.88rem;color:var(--text)}.field .hint{font-size:.78rem;color:var(--muted)}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.card{background:var(--bg-2);border:1px solid var(--border);border-radius:14px;padding:16px 18px}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:14px}.card.click{cursor:pointer;transition:border-color .15s}.card.click:hover{border-color:var(--uphe-purple-light)}.card h3{margin:0 0 6px;font-size:1rem}.card .desc{font-size:.85rem;color:var(--muted);min-height:34px;line-height:1.45}.chip{font-size:.72rem;padding:2px 9px;border-radius:20px;background:var(--bg-3);color:var(--muted);white-space:nowrap}.chip.ok{background:var(--st-green);color:#14431f}.chip.err{background:var(--st-red);color:#7a0020}.chip.warn{background:var(--st-yellow);color:#6b4b00;display:inline-flex;align-items:center;gap:6px}.chip.brand{background:var(--uphe-purple);color:#fff}.empty{color:var(--muted);padding:44px;text-align:center;border:1px dashed var(--border);border-radius:12px}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:10px;max-height:460px}table.data{width:100%;border-collapse:collapse;font-size:.84rem}table.data th{background:var(--uphe-purple);color:#fff;text-align:left;padding:7px 10px;position:sticky;top:0;font-weight:600;white-space:nowrap}table.data td{padding:6px 10px;border-bottom:1px solid var(--border);white-space:nowrap}table.data tr:nth-child(2n) td{background:var(--bg-2)}.console{background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;font-family:var(--mono);font-size:.82rem;max-height:260px;overflow-y:auto;line-height:1.6}.console .line{padding:1px 0}.console .line:before{content:"› ";color:var(--uphe-purple-light)}.console .line.err{color:var(--nbcu-red)}.console .line.err:before{content:"✕ "}.gadget-frame{display:block;width:100%;border:1px solid var(--border);border-radius:12px;background:var(--bg)}.confirm{border:1px solid var(--border);border-radius:14px;background:var(--bg-2);color:var(--text);padding:0;max-width:420px;width:calc(100% - 32px);box-shadow:0 24px 64px #00000057}.confirm::backdrop{background:#00000075}.confirm-body{padding:20px 22px 18px}.confirm-body h2{margin:0 0 6px;font-size:1.05rem}.confirm-body p{margin:0 0 18px;line-height:1.5}.confirm-actions{display:flex;gap:8px;justify-content:flex-end}.login-wrap{display:flex;align-items:center;justify-content:center;width:100%;min-height:100vh}.login-card{width:380px;background:var(--bg);border:1px solid var(--border);border-radius:16px;padding:28px;box-shadow:0 22px 60px #00000038}.login-card .plate{margin-bottom:18px}.login-card h2{color:var(--accent);margin:0 0 4px;font-size:1.25rem}.toasts{position:fixed;bottom:20px;right:20px;display:flex;flex-direction:column;gap:8px;z-index:50}.toast{background:var(--bg);border:1px solid var(--border);border-left:4px solid var(--accent);border-radius:8px;padding:10px 14px;font-size:.86rem;box-shadow:0 8px 24px #0003;max-width:360px}.toast.error{border-left-color:var(--nbcu-red)}.toast.success{border-left-color:var(--nbcu-green)}.metrics{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0}.metric{background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:11px 15px;min-width:120px}.metric .n{font-size:1.35rem;font-weight:700;color:var(--accent)}.metric .l{font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.tablelist{max-height:420px;overflow:auto;border:1px solid var(--border);border-radius:10px;padding:6px}.tablerow{display:flex;align-items:center;gap:9px;padding:5px 8px;border-radius:6px;font-size:.86rem}.tablerow:hover{background:var(--bg-3)}.tablerow input{accent-color:var(--uphe-purple)}.tablerow code{font-family:var(--mono);font-size:.82rem}.drop{border:2px dashed var(--border);border-radius:var(--radius);padding:20px;text-align:center;color:var(--text);cursor:pointer;transition:border-color .15s,background .15s;margin-bottom:16px;background:var(--bg-2)}.drop:hover,.drop.over{border-color:var(--uphe-purple-light);background:var(--bg-3)}.drop strong{display:block;font-size:.95rem}.sheet-pick{border:1px solid var(--border);border-left:3px solid var(--uphe-purple-light);border-radius:var(--radius);background:var(--bg-2);padding:12px 14px;margin-bottom:16px}
