:root{--bg-base: #1a1a2e;--bg-card: #16213e;--bg-card-hover: #1d2a50;--bg-input: #0f1629;--bg-header: #0d1117;--text-primary: #e8eaf0;--text-secondary: #8b9ab8;--text-muted: #4a5568;--text-code: #a8d8f0;--option1: #ff8c00;--option1-bg: rgba(255, 140, 0, .12);--option2: #4169e1;--option2-bg: rgba(65, 105, 225, .12);--option3: #228b22;--option3-bg: rgba(34, 139, 34, .12);--ws-connected: #00c853;--ws-disconnected: #f44336;--ws-reconnecting: #ff9800;--log-connected: #a5d6a7;--log-disconnected: #ef9a9a;--log-reconnecting: #ffcc80;--log-query: #64b5f6;--log-mutation: #ce93d8;--log-subscription: #a5d6a7;--log-error: #f44336;--log-ws: #80cbc4;--log-info: #b0bec5;--border: #2a3558;--radius: 8px;--radius-sm: 4px;--shadow: 0 2px 12px rgba(0, 0, 0, .4);--btn-primary-bg: #4169e1;--btn-primary-hover: #3558c8;--btn-secondary-bg: #2a3558;--btn-secondary-hover: #364475;--btn-accent-bg: #228b22;--btn-accent-hover: #1c7a1c;--btn-danger-bg: #b71c1c;--btn-danger-hover: #9c1414}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:Segoe UI,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px;line-height:1.6;background:var(--bg-base);color:var(--text-primary);min-height:100vh}code{font-family:JetBrains Mono,Fira Code,Cascadia Code,monospace;font-size:.85em;color:var(--text-code);word-break:break-all}.full-center{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:16px}.app{display:flex;flex-direction:column;min-height:100vh}.app-header{background:var(--bg-header);border-bottom:1px solid var(--border);padding:14px 24px;display:flex;align-items:center;justify-content:space-between;gap:12px;position:sticky;top:0;z-index:100}.header-left{display:flex;align-items:center;gap:12px}.header-right{display:flex;align-items:center;gap:10px}.header-user{color:var(--text-secondary);font-size:.9em}.app-title{font-size:1.1rem;font-weight:600;color:var(--text-primary);letter-spacing:.01em}.app-main{flex:1;padding:24px;max-width:1200px;margin:0 auto;width:100%}.dashboard-grid{display:grid;grid-template-columns:380px 1fr;gap:20px;align-items:start}@media (max-width: 800px){.dashboard-grid{grid-template-columns:1fr}}.dashboard-left{display:flex;flex-direction:column;gap:16px}.dashboard-right{display:flex;flex-direction:column;gap:16px;min-height:500px}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px;box-shadow:var(--shadow)}.card-title{font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary);margin-bottom:14px}.status-row{display:flex;gap:8px;padding:5px 0;border-bottom:1px solid var(--border);align-items:baseline;flex-wrap:wrap}.status-row:last-child{border-bottom:none}.status-label{color:var(--text-secondary);font-size:.82em;min-width:140px;flex-shrink:0}.status-value{color:var(--text-primary);font-size:.88em;word-break:break-all}.url-value{font-size:.78em}.muted{color:var(--text-muted)}.arch-badge{display:inline-block;font-size:.72em;font-weight:700;letter-spacing:.05em;padding:2px 8px;border-radius:3px;border:1px solid}.arch-badge--large{font-size:.82em;padding:3px 10px}.arch-option1{color:var(--option1);background:var(--option1-bg);border-color:var(--option1)}.arch-option2{color:var(--option2);background:var(--option2-bg);border-color:var(--option2)}.arch-option3{color:var(--option3);background:var(--option3-bg);border-color:var(--option3)}.badge{display:inline-block;font-size:.72em;font-weight:700;letter-spacing:.06em;padding:2px 8px;border-radius:3px}.badge--connected{background:#00c85326;color:var(--ws-connected);border:1px solid var(--ws-connected)}.badge--disconnected{background:#f4433626;color:var(--ws-disconnected);border:1px solid var(--ws-disconnected)}.badge--reconnecting{background:#ff980026;color:var(--ws-reconnecting);border:1px solid var(--ws-reconnecting);animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.55}}.action-row{display:flex;gap:10px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;border:none;border-radius:var(--radius-sm);font-size:.85em;font-weight:600;cursor:pointer;transition:background .15s,opacity .15s;white-space:nowrap}.btn:disabled{opacity:.45;cursor:not-allowed}.btn--primary{background:var(--btn-primary-bg);color:#fff}.btn--primary:hover:not(:disabled){background:var(--btn-primary-hover)}.btn--secondary{background:var(--btn-secondary-bg);color:var(--text-primary)}.btn--secondary:hover:not(:disabled){background:var(--btn-secondary-hover)}.btn--accent{background:var(--btn-accent-bg);color:#fff}.btn--accent:hover:not(:disabled){background:var(--btn-accent-hover)}.btn--danger{background:var(--btn-danger-bg);color:#fff}.btn--danger:hover:not(:disabled){background:var(--btn-danger-hover)}.btn--sm{padding:5px 10px;font-size:.78em}.btn--full{width:100%}.text-input{width:100%;background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:.9em;padding:9px 12px;outline:none;transition:border-color .15s}.text-input:focus{border-color:var(--btn-primary-bg)}.text-input::placeholder{color:var(--text-muted)}.text-input:disabled{opacity:.5}.message-form{display:flex;gap:10px;margin-top:8px}.message-error{margin-top:8px;color:var(--log-error);font-size:.85em}.message-success{margin-top:8px;color:var(--log-connected);font-size:.85em}.event-log-card{display:flex;flex-direction:column;flex:1}.event-log-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.event-log-header .card-title{margin-bottom:0}.event-log-scroll{flex:1;overflow-y:auto;max-height:540px;min-height:200px;font-family:JetBrains Mono,Fira Code,Cascadia Code,monospace;font-size:.78em;display:flex;flex-direction:column;gap:2px}.event-log-empty{color:var(--text-muted);text-align:center;margin-top:40px;font-family:inherit;font-size:1em}.log-line{display:flex;gap:8px;padding:2px 4px;border-radius:3px;line-height:1.5;flex-wrap:nowrap;align-items:baseline}.log-time{color:var(--text-muted);flex-shrink:0;min-width:70px}.log-type{font-weight:700;flex-shrink:0;min-width:90px}.log-msg{color:var(--text-primary);flex:1;word-break:break-word}.log-region{color:var(--text-muted);flex-shrink:0}.log-connected .log-type{color:var(--log-connected)}.log-disconnected .log-type{color:var(--log-disconnected)}.log-reconnecting .log-type{color:var(--log-reconnecting)}.log-query .log-type{color:var(--log-query)}.log-mutation .log-type{color:var(--log-mutation)}.log-subscription .log-type{color:var(--log-subscription)}.log-error .log-type{color:var(--log-error)}.log-ws .log-type{color:var(--log-ws)}.log-info .log-type{color:var(--log-info)}.log-error .log-msg{color:var(--log-error)}.login-overlay{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg-base);padding:24px}.login-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:40px 36px;width:100%;max-width:400px;box-shadow:var(--shadow);text-align:center}.login-logo{font-size:2.4rem;margin-bottom:12px}.login-title{font-size:1.2rem;font-weight:700;margin-bottom:6px}.login-subtitle{color:var(--text-secondary);font-size:.9em;margin-bottom:24px}.login-form{display:flex;flex-direction:column;gap:12px;text-align:left}.error-banner{background:#f443361f;border:1px solid rgba(244,67,54,.4);color:#ef9a9a;border-radius:var(--radius-sm);padding:8px 12px;font-size:.85em}.error-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:32px 28px;max-width:420px;text-align:center;display:flex;flex-direction:column;gap:12px;box-shadow:var(--shadow)}.spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--btn-primary-bg);border-radius:50%;animation:spin .75s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{color:var(--text-secondary);font-size:.9em}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-base)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#3d4f7a}
