:root{--bg:#f6f7f9;--panel:#ffffff;--border:#e2e5ea;--text:#1d2330;--muted:#67707f;--primary:#2456d6;--primary-hover:#1c46b3;--danger:#c23b3b;--ok:#1d8a4e;--warn:#b57708;--sidebar:#171c26;--sidebar-text:#aeb6c4;--sidebar-active:#ffffff}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Hiragino Sans,Noto Sans JP,sans-serif;font-size:14px}a{color:var(--primary);text-decoration:none}.shell{display:flex;min-height:100vh}.sidebar{width:220px;flex-shrink:0;background:var(--sidebar);color:var(--sidebar-text);display:flex;flex-direction:column;padding:16px 0}.sidebar .brand{color:#fff;font-weight:700;font-size:15px;padding:8px 20px 20px}.sidebar nav{display:flex;flex-direction:column}.sidebar nav a{color:var(--sidebar-text);padding:10px 20px;font-size:13px}.sidebar nav a:hover{color:#fff;background:rgba(255,255,255,.06)}.sidebar nav a.active{color:var(--sidebar-active);background:rgba(255,255,255,.1);border-left:3px solid var(--primary);padding-left:17px}.sidebar .foot{margin-top:auto;padding:16px 20px;font-size:12px;border-top:1px solid rgba(255,255,255,.08)}.sidebar .foot button{margin-top:8px}.main{flex:1 1;padding:28px 36px;max-width:1200px}.main h1{font-size:20px;margin:0 0 4px}.main .sub{color:var(--muted);font-size:13px}.main .sub,.panel{margin-bottom:20px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:20px}.panel h2{font-size:15px;margin:0 0 12px}table{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--border);border-radius:8px;overflow:hidden}td,th{text-align:left;padding:10px 12px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:top}th{background:#fafbfc;color:var(--muted);font-weight:600;font-size:12px}tr:last-child td{border-bottom:none}.mono,td.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;word-break:break-all}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}.badge.ok{background:#e5f5ec;color:var(--ok)}.badge.warn{background:#fdf3e0;color:var(--warn)}.badge.muted{background:#eef0f3;color:var(--muted)}.badge.danger{background:#fbe9e9;color:var(--danger)}.badge.info{background:#e8eefc;color:var(--primary)}.btn,button{background:var(--primary);color:#fff;border:none;border-radius:6px;padding:8px 14px;font-size:13px;cursor:pointer;font-weight:600}.btn:hover,button:hover{background:var(--primary-hover)}button.secondary{background:#fff;color:var(--text);border:1px solid var(--border)}button.secondary:hover{background:#f2f4f7}button.danger{background:var(--danger)}button.danger:hover{background:#a52f2f}button:disabled{opacity:.5;cursor:not-allowed}button.sm{padding:4px 10px;font-size:12px}label{display:block;font-size:12px;color:var(--muted);font-weight:600;margin:12px 0 4px}input[type=password],input[type=text],select,textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff;color:var(--text)}input:focus,select:focus,textarea:focus{outline:2px solid #b9cbf5;border-color:var(--primary)}.error{color:var(--danger);background:#fbe9e9;border:1px solid #f1c6c6;border-radius:6px}.error,.notice{padding:10px 12px;margin:12px 0;font-size:13px}.notice{color:var(--warn);background:#fdf3e0;border:1px solid #f0dcb0;border-radius:6px}.success{color:var(--ok);background:#e5f5ec;border:1px solid #bfe5cf;border-radius:6px;padding:10px 12px;margin:12px 0;font-size:13px}.row{display:flex;gap:12px;align-items:center}.row.wrap{flex-wrap:wrap}.spacer{flex:1 1}.secretbox{background:#171c26;color:#e8ecf3;border-radius:8px;padding:16px;margin:12px 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;line-height:1.8;word-break:break-all}.secretbox .k{color:#8fa3c4}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--sidebar)}.login-card{background:var(--panel);border-radius:10px;padding:36px;width:380px}.login-card h1{font-size:18px;margin:0 0 4px}.login-card .sub{color:var(--muted);font-size:13px;margin-bottom:16px}details.json>summary{cursor:pointer;color:var(--primary);font-size:12px}details.json pre{background:#f4f6f9;border:1px solid var(--border);border-radius:6px;padding:10px;font-size:11px;overflow-x:auto}