@import "https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@300;400;500;600;700&display=swap";:root{--bg:#0f1117;--bg-card:#1a1d27;--bg-hover:#242736;--bg-secondary:#161922;--border:#2e3144;--border-subtle:#252838;--text:#e4e4e7;--text-secondary:#a1a1aa;--text-muted:#8b8fa3;--primary:#6366f1;--primary-hover:#818cf8;--primary-subtle:#6366f114;--danger:#ef4444;--danger-hover:#f87171;--success:#22c55e;--warning:#f59e0b;--primary-focus:#6366f11a;--primary-ring:#6366f140;--primary-selection:#6366f14d;--primary-badge:#6366f11f;--primary-badge-strong:#6366f133;--success-badge:#22c55e24;--danger-badge:#ef44441f;--danger-subtle:#ef444414;--danger-border:#ef44444d;--warning-badge:#f59e0b24;--neutral-badge:#8b8fa324;--overlay:#000000b8;--shadow-menu:#0006;--shadow-toast:#0000004d;--radius:8px;--radius-lg:12px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;--sp-10:40px;--transition-fast:.12s ease;--transition-base:.2s ease;--transition-slow:.35s ease}[data-theme=light]{--bg:#f5f7fb;--bg-card:#fff;--bg-hover:#eef2f7;--bg-secondary:#eceff5;--border:#d5dae3;--border-subtle:#e6eaf0;--text:#0f172a;--text-secondary:#475569;--text-muted:#64748b;--primary:#4f46e5;--primary-hover:#6366f1;--primary-subtle:#4f46e514;--danger:#dc2626;--danger-hover:#ef4444;--success:#059669;--warning:#d97706;--primary-focus:#4f46e524;--primary-ring:#4f46e540;--primary-selection:#4f46e538;--primary-badge:#4f46e51a;--primary-badge-strong:#4f46e529;--success-badge:#0596691f;--danger-badge:#dc26261a;--danger-subtle:#dc262612;--danger-border:#dc262647;--warning-badge:#d977061f;--neutral-badge:#4755691a;--overlay:#0f172a73;--shadow-menu:#0f172a2e;--shadow-toast:#0f172a24}[data-theme=toko]{--bg:#faf6f7;--bg-card:#fff;--bg-hover:#f5edef;--bg-secondary:#f3eaec;--border:#e2d3d6;--border-subtle:#ece0e2;--text:#181a1e;--text-secondary:#5b5f66;--text-muted:#7a7e86;--primary:#7b292f;--primary-hover:#a83b42;--primary-subtle:#7b292f14;--danger:#b92329;--danger-hover:#d33a40;--success:#37c086;--warning:#fb9100;--primary-focus:#7b292f24;--primary-ring:#7b292f40;--primary-selection:#7b292f33;--primary-badge:#7b292f1a;--primary-badge-strong:#7b292f2e;--success-badge:#37c08624;--danger-badge:#b923291a;--danger-subtle:#b9232912;--danger-border:#b9232947;--warning-badge:#fb910024;--neutral-badge:#7a7e8624;--overlay:#181a1e8c;--shadow-menu:#181a1e38;--shadow-toast:#181a1e29}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Noto Sans JP,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;line-height:1.7}a{color:var(--primary);transition:color var(--transition-fast);text-decoration:none}a:hover{color:var(--primary-hover)}h1{letter-spacing:-.01em;font-size:22px;font-weight:700;line-height:1.3}h2{letter-spacing:-.005em;font-size:17px;font-weight:600;line-height:1.4}h3{font-size:14px;font-weight:600;line-height:1.5}h4{color:var(--text-secondary);font-size:13px;font-weight:600;line-height:1.5}::selection{background:var(--primary-selection)}.app-layout{min-height:100vh;display:flex}.sidebar{background:var(--bg-card);border-right:1px solid var(--border-subtle);width:220px;height:100vh;padding:var(--sp-5) 0;flex-direction:column;flex-shrink:0;display:flex;position:sticky;top:0}.sidebar-brand{padding:0 var(--sp-5) var(--sp-5);border-bottom:1px solid var(--border-subtle);letter-spacing:.04em;font-size:16px;font-weight:700}.sidebar-brand small{color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;margin-top:2px;font-size:10px;font-weight:400;display:block}.sidebar-nav{padding:var(--sp-3) 0;flex:1;overflow-y:auto}.sidebar-nav a{align-items:center;gap:var(--sp-2);padding:9px var(--sp-5);color:var(--text-muted);transition:all var(--transition-fast);border-left:2px solid #0000;font-size:13px;font-weight:400;display:flex;position:relative}.sidebar-nav a:hover{background:var(--bg-hover);color:var(--text);border-left-color:var(--border)}.sidebar-nav a.active{background:var(--primary-subtle);color:var(--primary-hover);border-left-color:var(--primary);font-weight:500}.sidebar-footer{padding:var(--sp-4) var(--sp-5);border-top:1px solid var(--border-subtle);color:var(--text-muted);font-size:12px;line-height:1.5}.sidebar-footer .user-name{color:var(--text);font-size:13px;font-weight:500}.sidebar-footer button{margin-top:var(--sp-2);border:1px solid var(--border);color:var(--text-muted);border-radius:var(--radius);cursor:pointer;width:100%;transition:all var(--transition-fast);background:0 0;padding:5px 12px;font-size:11px}.sidebar-footer button:hover{border-color:var(--danger);color:var(--danger)}.main-content{padding:var(--sp-8);flex:1;min-width:0;overflow-y:auto}.card{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);padding:var(--sp-5);margin-bottom:var(--sp-4);transition:border-color var(--transition-base)}.card:hover{border-color:var(--border)}.stats-grid{gap:var(--sp-4);margin-bottom:var(--sp-6);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.stat-card{text-align:center;padding:var(--sp-5) var(--sp-4)}.stat-card .stat-value{color:var(--primary);letter-spacing:-.02em;font-size:28px;font-weight:700;line-height:1.2}.stat-card .stat-label{color:var(--text-muted);margin-top:var(--sp-1);text-transform:uppercase;letter-spacing:.05em;font-size:11px}table{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}th{text-align:left;padding:var(--sp-2) var(--sp-3);color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border);white-space:nowrap;font-size:11px;font-weight:500}td{padding:10px var(--sp-3);border-bottom:1px solid var(--border-subtle);vertical-align:middle}tbody tr:hover td{background:var(--bg-hover)}tr:last-child td{border-bottom:none}.btn{border-radius:var(--radius);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap;border:none;justify-content:center;align-items:center;gap:6px;padding:7px 16px;font-family:inherit;font-size:13px;font-weight:500;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover);transform:translateY(-1px)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:var(--danger-hover)}.btn-ghost{color:var(--text-muted);border:1px solid var(--border);background:0 0}.btn-ghost:hover:not(:disabled){border-color:var(--text-secondary);color:var(--text)}.btn-sm{padding:4px 10px;font-size:11px}input,select,textarea{font-family:inherit;font-size:13px}.form-group{margin-bottom:var(--sp-4)}.form-group label{color:var(--text-muted);margin-bottom:var(--sp-1);font-size:12px;font-weight:500;display:block}.form-group input,.form-group select,.form-group textarea{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:8px 12px;font-size:13px}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-focus);outline:none}.form-group input::placeholder,.form-group textarea::placeholder{color:var(--text-muted);opacity:.6}input:not([type=radio]):not([type=checkbox]),select{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:8px 12px;font-size:13px}input:not([type=radio]):not([type=checkbox]):focus,select:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-focus);outline:none}.form-row{gap:var(--sp-4);grid-template-columns:1fr 1fr;display:grid}input[type=radio]{accent-color:var(--primary);cursor:pointer;width:14px;height:14px}.badge{letter-spacing:.01em;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600;line-height:1.5;display:inline-block}.badge-active{background:var(--success-badge);color:var(--success)}.badge-inactive{background:var(--danger-badge);color:var(--danger)}.badge-pending{background:var(--warning-badge);color:var(--warning)}.badge-role{background:var(--primary-badge);color:var(--primary)}.modal-overlay{z-index:100;background:var(--overlay);animation:fadeIn var(--transition-base);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--sp-6);width:100%;max-width:620px;max-height:85vh;animation:modalSlideUp var(--transition-slow);overflow-y:auto}.modal h2{margin-bottom:var(--sp-4);font-size:17px}.modal-actions{justify-content:flex-end;gap:var(--sp-2);margin-top:var(--sp-5);display:flex}@keyframes fadeIn{0%{opacity:0}}@keyframes modalSlideUp{0%{opacity:0;transform:translateY(12px)}}.login-page{justify-content:center;align-items:center;min-height:100vh;display:flex}.login-card{width:100%;max-width:360px}.login-card h1{text-align:center;margin-bottom:var(--sp-2);font-size:20px}.login-card p{text-align:center;color:var(--text-muted);margin-bottom:var(--sp-6);font-size:13px}.login-error{background:var(--danger-subtle);border:1px solid var(--danger-border);color:var(--danger);padding:var(--sp-2) var(--sp-3);border-radius:var(--radius);margin-bottom:var(--sp-4);font-size:12px}.page-header{margin-bottom:var(--sp-6);justify-content:space-between;align-items:center;gap:var(--sp-3);flex-wrap:wrap;display:flex}.page-header h1{font-size:22px;font-weight:600}.toast{bottom:var(--sp-6);right:var(--sp-6);background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:var(--sp-3) var(--sp-5);z-index:200;animation:toastSlideIn var(--transition-slow);box-shadow:0 8px 24px var(--shadow-toast);font-size:13px;position:fixed}.toast-success{border-color:var(--success)}.toast-error{border-color:var(--danger)}@keyframes toastSlideIn{0%{opacity:0;transform:translateY(8px)scale(.97)}}.empty{text-align:center;padding:var(--sp-10);color:var(--text-muted);font-size:13px}.checkbox-grid{gap:var(--sp-2) var(--sp-3);grid-template-columns:repeat(4,1fr);display:grid}.checkbox-grid label{align-items:center;gap:var(--sp-2);color:var(--text);cursor:pointer;white-space:nowrap;font-size:13px;display:flex}.checkbox-grid input[type=checkbox]{accent-color:var(--primary);flex-shrink:0;width:15px;height:15px}.checkbox-grid-3{grid-template-columns:repeat(3,1fr)}.form-group>label>input[type=checkbox]{accent-color:var(--primary);vertical-align:middle;width:15px;height:15px;margin-right:var(--sp-2)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@media (width<=768px){.sidebar{width:180px}.sidebar-brand{font-size:14px}.sidebar-nav a{padding:8px var(--sp-4);font-size:12px}.main-content{padding:var(--sp-5)}.stats-grid{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}}@media (width<=520px){.form-row{grid-template-columns:1fr}.checkbox-grid{grid-template-columns:repeat(2,1fr)}.modal{max-width:calc(100vw - 24px);padding:var(--sp-5)}}.ts-tabs{background:var(--bg-secondary);border-radius:var(--radius);gap:2px;padding:3px;display:inline-flex}.ts-tab{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:6px 16px;font-family:inherit;font-size:13px;font-weight:500}.ts-tab.active{background:var(--primary);color:#fff}.ts-toolbar{align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-4);flex-wrap:wrap;display:flex}.ts-toolbar .spacer{flex:1}.ts-dirty-dot{color:var(--warning);font-weight:600}.ts-layout{gap:var(--sp-4);grid-template-columns:1fr 300px;align-items:start;display:grid}@media (width<=1100px){.ts-layout{grid-template-columns:1fr}}.ts-main{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);min-height:420px;overflow:hidden}.kind-badge{letter-spacing:.02em;border-radius:8px;padding:1px 7px;font-size:10px;font-weight:600;display:inline-block}.kind-root{background:var(--primary-badge-strong);color:var(--primary-hover)}.kind-domain{background:var(--primary-badge);color:var(--primary-hover)}.kind-program{background:var(--success-badge);color:var(--success)}.kind-category{background:var(--warning-badge);color:var(--warning)}.kind-course{background:var(--neutral-badge);color:var(--text-secondary)}.ts-list{padding:var(--sp-2) 0}.ts-row{align-items:center;gap:var(--sp-2);padding:5px var(--sp-4);font-size:13px;display:flex;position:relative}.ts-row:hover{background:var(--bg-hover)}.ts-row.selected{background:var(--primary-subtle)}.ts-row .caret{text-align:center;cursor:pointer;width:16px;color:var(--text-muted);-webkit-user-select:none;user-select:none;flex-shrink:0}.ts-row .caret.leaf{visibility:hidden}.ts-row .name{cursor:default;flex:1}.ts-row .name.editable{cursor:text}.ts-row .row-actions{align-items:center;gap:4px;display:flex}.ts-row .count{color:var(--text-muted);margin-left:4px;font-size:11px}.ts-note{color:var(--text-muted);padding:2px var(--sp-4) 4px 52px;font-size:12px}.ts-move-btn{border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:4px;width:20px;height:20px;font-size:11px;line-height:1}.ts-move-btn:hover:not(:disabled){border-color:var(--text-secondary);color:var(--text)}.ts-move-btn:disabled{opacity:.3;cursor:not-allowed}.ts-menu-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:15px}.ts-menu-btn:hover{color:var(--text)}.ts-menu{right:var(--sp-4);z-index:50;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 24px var(--shadow-menu);min-width:180px;padding:4px;position:absolute;top:100%}.ts-menu button{text-align:left;width:100%;color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:5px;padding:7px 12px;font-family:inherit;font-size:12px;display:block}.ts-menu button:hover{background:var(--bg-hover)}.ts-menu button.danger{color:var(--danger)}.ts-inline-input{width:100%;font-size:13px;padding:2px 6px!important}.ts-canvas-wrap{cursor:grab;background:var(--bg-secondary);height:560px;position:relative;overflow:hidden}.ts-canvas-wrap.panning{cursor:grabbing}.ts-canvas-inner{transform-origin:0 0;position:absolute;top:0;left:0}.ts-zoom-bar{right:var(--sp-3);top:var(--sp-3);z-index:20;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:4px;padding:3px 6px;display:flex;position:absolute}.ts-zoom-bar button{color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:4px;width:24px;height:22px;font-size:14px}.ts-zoom-bar button:hover{background:var(--bg-hover)}.ts-zoom-bar .zval{color:var(--text-muted);text-align:center;min-width:38px;font-size:11px}.ts-node-card{box-sizing:border-box;border:1px solid var(--border);background:var(--bg-card);color:var(--text);cursor:pointer;border-radius:7px;align-items:center;gap:5px;padding:5px 9px;font-size:12px;display:flex;position:absolute;overflow:hidden}.ts-node-card.selected{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-ring)}.ts-node-card.k-root{border-left:3px solid var(--primary)}.ts-node-card.k-domain{border-left:3px solid var(--primary);background:var(--bg-hover)}.ts-node-card.k-program{border-left:3px solid var(--success)}.ts-node-card.k-category{border-left:3px solid var(--warning)}.ts-node-card.k-course{border-left:3px solid var(--border)}.ts-node-card .nc-caret{cursor:pointer;color:var(--text-muted)}.ts-node-card .nc-info{color:var(--primary-hover);cursor:help}.ts-node-card .nc-name{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ts-popover{z-index:30;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);max-width:240px;padding:var(--sp-2) var(--sp-3);color:var(--text-secondary);box-shadow:0 8px 24px var(--shadow-menu);font-size:12px;position:absolute}.ts-panel{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-lg);padding:var(--sp-4)}.ts-panel h3,.ts-panel .field{margin-bottom:var(--sp-3)}.ts-panel .field label{color:var(--text-muted);margin-bottom:3px;font-size:11px;display:block}.ts-panel .field input,.ts-panel .field select,.ts-panel .field textarea{width:100%}.ts-panel .meta{color:var(--text-muted);word-break:break-all;font-size:11px}.ts-diff-row{gap:var(--sp-2);border-bottom:1px solid var(--border-subtle);align-items:baseline;padding:4px 0;font-size:12px;display:flex}.ts-diff-tag{flex-shrink:0;width:64px;font-weight:600}.ts-diff-path{color:var(--text-secondary);word-break:break-all}.ts-diff-detail{color:var(--text-muted);margin-left:4px;font-size:11px}.ts-snap-row{align-items:center;gap:var(--sp-2);padding:7px var(--sp-2);border-bottom:1px solid var(--border-subtle);font-size:12px;display:flex}.ts-snap-row .snap-main{flex:1}.ts-snap-row .snap-meta{color:var(--text-muted);font-size:11px}.settings-rows{flex-direction:column;display:flex}.settings-row{border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;gap:var(--sp-4);padding:10px 0;display:flex}.settings-row:last-child{border-bottom:none}.settings-label{color:var(--text-muted);font-size:13px}.settings-value{color:var(--text);text-align:right;font-size:13px;font-weight:500}.theme-switcher{gap:var(--sp-2);max-width:480px;display:flex}.theme-chip{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-muted);cursor:pointer;transition:all var(--transition-fast);flex:1;justify-content:center;align-items:center;gap:7px;padding:10px 8px;font-family:inherit;font-size:13px;font-weight:500;display:inline-flex}.theme-chip:hover{border-color:var(--text-secondary);color:var(--text)}.theme-chip.active{border-color:var(--primary);color:var(--primary-hover);background:var(--primary-subtle)}.theme-dot{border:1px solid var(--border);border-radius:50%;flex-shrink:0;width:12px;height:12px}.theme-dot-dark{background:linear-gradient(135deg,#1a1d27 50%,#6366f1 50%);border-color:#2e3144}.theme-dot-light{background:linear-gradient(135deg,#fff 50%,#4f46e5 50%);border-color:#d5dae3}.theme-dot-toko{background:linear-gradient(135deg,#faf6f7 50%,#7b292f 50%);border-color:#e2d3d6}
