:root{--bg: #0f1420;--bg-soft: #131a29;--card: #1a2233;--card-2: #1f2939;--border: #2a3550;--border-soft: #232d43;--text: #e8edf6;--text-muted: #93a0b8;--accent: #3b82f6;--accent-hover: #2f6fe0;--accent-soft: rgba(59, 130, 246, .16);--green: #22c55e;--green-soft: rgba(34, 197, 94, .15);--red: #ef4444;--red-hover: #d93a3a;--red-soft: rgba(239, 68, 68, .14);--amber: #f59e0b;--amber-soft: rgba(245, 158, 11, .15);--radius: 10px;--radius-sm: 6px;--shadow: 0 6px 24px rgba(0, 0, 0, .35);--font: "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", Arial, sans-serif;--mono: "Consolas", "Cascadia Mono", "SFMono-Regular", Menlo, monospace}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0;font-weight:600;line-height:1.25}h2{font-size:22px}h3{font-size:16px}p{margin:0 0 10px}.mono{font-family:var(--mono)}.muted{color:var(--text-muted)}.small{font-size:12.5px}.center{text-align:center}.link{color:var(--accent);text-decoration:none}.link:hover{text-decoration:underline}.app-shell{min-height:100%;display:flex;flex-direction:column}.page{flex:1;width:100%;max-width:1100px;margin:0 auto;padding:24px 20px 48px}.page-inner{display:flex;flex-direction:column;gap:16px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:4px;flex-wrap:wrap}.topbar{position:sticky;top:0;z-index:50;background:#131a29eb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border-soft)}.topbar-inner{max-width:1100px;margin:0 auto;padding:10px 20px;display:flex;align-items:center;gap:24px}.brand{display:flex;align-items:center;gap:9px;color:var(--text);text-decoration:none;font-size:17px;font-weight:600;letter-spacing:.2px;white-space:nowrap}.brand-dot{width:10px;height:10px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px var(--accent);flex-shrink:0}.brand-dot-lg{width:14px;height:14px}.brand-accent{color:var(--accent)}.topnav{display:flex;gap:4px;flex:1}.topnav-link{color:var(--text-muted);text-decoration:none;padding:6px 12px;border-radius:var(--radius-sm);font-weight:500;transition:color .15s ease,background .15s ease}.topnav-link:hover{color:var(--text);background:var(--card-2)}.topnav-link.active{color:#fff;background:var(--accent-soft)}.topbar-user{display:flex;align-items:center;gap:12px}.user-block{display:flex;flex-direction:column;align-items:flex-end;line-height:1.2}.user-name{font-weight:600;font-size:13.5px}.user-role{font-size:11.5px;color:var(--text-muted)}.card{background:var(--card);border:1px solid var(--border-soft);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;flex-wrap:wrap}.empty-state{padding:40px 20px;text-align:center}.table-card{padding:8px 8px 12px}.table-scroll{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:14px;min-width:640px}.table th{text-align:left;color:var(--text-muted);font-weight:600;font-size:12.5px;text-transform:uppercase;letter-spacing:.4px;padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap}.table td{padding:10px 12px;border-bottom:1px solid var(--border-soft);vertical-align:middle}.table tbody tr:last-child td{border-bottom:none}.table tbody tr:hover td{background:#3b82f60d}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.badge-ok{color:var(--green);background:var(--green-soft)}.badge-warn{color:var(--amber);background:var(--amber-soft)}.badge-bad{color:var(--red);background:var(--red-soft)}.badge-info{color:var(--accent);background:var(--accent-soft)}.badge-neutral{color:var(--text-muted);background:#93a0b81f}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid transparent;border-radius:var(--radius-sm);padding:9px 16px;font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease,opacity .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-secondary{background:var(--card-2);border-color:var(--border);color:var(--text)}.btn-secondary:hover:not(:disabled){border-color:#3a4a6e;background:#27334b}.btn-ghost{background:transparent;color:var(--text-muted)}.btn-ghost:hover:not(:disabled){color:var(--text);background:var(--card-2)}.btn-danger{background:var(--red);color:#fff}.btn-danger:hover:not(:disabled){background:var(--red-hover)}.btn-danger-outline{background:transparent;border-color:#ef444480;color:var(--red)}.btn-danger-outline:hover:not(:disabled){background:var(--red-soft)}.btn-call{background:var(--green);color:#fff;font-size:16px;padding:13px 20px}.btn-call:hover:not(:disabled){background:#1cb353}.btn-active{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.btn-block{width:100%}.btn-sm{padding:6px 12px;font-size:13px}.btn-xs{padding:4px 10px;font-size:12.5px}.btn-lg{padding:12px 26px;font-size:16px}.btn-icon{background:transparent;border:none;color:var(--text-muted);font-size:18px;line-height:1;cursor:pointer;padding:4px 8px;border-radius:var(--radius-sm)}.btn-icon:hover{color:var(--text);background:var(--card-2)}.form{display:flex;flex-direction:column;gap:14px}.field{display:flex;flex-direction:column;gap:6px}.field-label{font-size:13px;font-weight:600;color:var(--text-muted)}input,select{width:100%;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:inherit;font-size:14.5px;padding:10px 12px;outline:none;transition:border-color .15s ease,box-shadow .15s ease}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px #3b82f62e}input:disabled,select:disabled{opacity:.55;cursor:not-allowed}input::placeholder{color:#5c6a86}select{cursor:pointer}.alert{padding:11px 14px;border-radius:var(--radius-sm);font-size:14px;border:1px solid transparent}.alert-error{color:#fca5a5;background:var(--red-soft);border-color:#ef444459}.alert-success{color:#86efac;background:var(--green-soft);border-color:#22c55e59}.alert-warn{color:#fcd34d;background:var(--amber-soft);border-color:#f59e0b59}.info-box{background:var(--accent-soft);border:1px solid rgba(59,130,246,.35);border-radius:var(--radius-sm);padding:10px 14px;font-size:14px}.spinner-wrap{display:flex;flex-direction:column;align-items:center;gap:12px;padding:28px 0}.spinner{width:30px;height:30px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.spinner-label{color:var(--text-muted);font-size:14px}.fullscreen-loader{min-height:60vh;display:flex;align-items:center;justify-content:center}@keyframes spin{to{transform:rotate(360deg)}}.auth-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(1200px 600px at 50% -10%,rgba(59,130,246,.14),transparent 60%),var(--bg)}.auth-card{width:100%;max-width:400px;background:var(--card);border:1px solid var(--border-soft);border-radius:14px;padding:32px 28px;box-shadow:var(--shadow)}.auth-brand{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:4px}.auth-brand h1{font-size:24px}.auth-subtitle{text-align:center;color:var(--text-muted);margin-bottom:22px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#05080fb8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:20px;animation:fadeIn .15s ease}.modal{width:100%;max-width:460px;max-height:90vh;overflow-y:auto;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);animation:popIn .16s ease}.modal-wide{max-width:640px}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border-soft)}.modal-body{padding:20px}.modal-foot{padding:14px 20px;border-top:1px solid var(--border-soft);display:flex;justify-content:flex-end;gap:10px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes popIn{0%{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}.incoming-modal{max-width:380px;text-align:center}.incoming-icon{position:relative;width:72px;height:72px;margin:8px auto 10px;display:flex;align-items:center;justify-content:center}.incoming-phone{position:relative;z-index:2;font-size:34px}.incoming-pulse{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:var(--green-soft);animation:pulse 1.4s ease-out infinite}@keyframes pulse{0%{transform:scale(.55);opacity:.9}to{transform:scale(1.15);opacity:0}}.incoming-number{font-size:20px;font-weight:700;margin-bottom:2px}.incoming-actions{display:flex;justify-content:center;gap:14px;margin-top:20px}.tabs{display:flex;gap:6px;border-bottom:1px solid var(--border);margin-bottom:2px;flex-wrap:wrap}.tab{background:transparent;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-family:inherit;font-size:14.5px;font-weight:600;padding:10px 16px;cursor:pointer;transition:color .15s ease,border-color .15s ease}.tab:hover{color:var(--text)}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.dialer-grid{align-items:center;max-width:460px;margin:0 auto}.dialer-card{width:100%;display:flex;flex-direction:column;gap:14px}.conn-status{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--text-muted)}.conn-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.conn-ready{background:var(--green);box-shadow:0 0 8px var(--green)}.conn-connecting{background:var(--amber);animation:blink 1.1s ease-in-out infinite}.conn-error{background:var(--red);box-shadow:0 0 8px var(--red)}.conn-offline{background:var(--amber);animation:blink 1.1s ease-in-out infinite}@keyframes blink{50%{opacity:.35}}.call-state-row{display:flex;flex-direction:column;gap:6px}.call-state-main{display:flex;align-items:center;gap:12px;font-size:15px;min-height:26px}.call-state-badge{font-weight:700;padding:4px 12px;border-radius:999px;font-size:14px}.state-active{color:var(--green);background:var(--green-soft)}.state-held{color:var(--amber);background:var(--amber-soft)}.state-ringing,.state-trying,.state-requesting,.state-early,.state-new,.state-answering,.state-recovering{color:var(--accent);background:var(--accent-soft)}.state-hangup,.state-destroy,.state-purge{color:var(--red);background:var(--red-soft)}.call-timer{font-size:18px;font-weight:700;color:var(--text)}.call-state-sub{display:flex;align-items:center;gap:8px;font-size:13.5px;flex-wrap:wrap;min-height:22px}.dest-row{display:flex}.dest-input{text-align:center;font-size:20px;letter-spacing:1px;padding:13px 12px}.keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.keypad-key{background:var(--card-2);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-size:20px;font-weight:600;font-family:inherit;padding:14px 0;cursor:pointer;transition:background .12s ease,transform .06s ease,border-color .12s ease}.keypad-key:hover{background:#27334b;border-color:#3a4a6e}.keypad-key:active{transform:scale(.96);background:var(--accent-soft);border-color:var(--accent)}.keypad-key:disabled{opacity:.4;cursor:not-allowed;transform:none}.keypad-back{font-size:18px}.dialer-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.dialer-actions .btn-secondary,.dialer-actions .btn-danger{flex:1;min-width:96px}.config-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;align-items:start}.device-list{display:flex;flex-direction:column;gap:10px;margin-top:12px}.device-row{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--bg-soft);border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:12px 14px}.device-info{display:flex;flex-direction:column;gap:2px;min-width:0}.device-kind{font-weight:600;font-size:13.5px}.device-label{color:var(--text-muted);font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.number-list{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:8px}.number-row{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--bg-soft);border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:10px 14px;font-size:15px}.cred-box{display:flex;flex-direction:column;gap:10px;margin-top:14px}.cred-row{display:flex;align-items:center;gap:10px;background:var(--bg-soft);border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:10px 12px;flex-wrap:wrap}.cred-key{font-size:12.5px;font-weight:600;color:var(--text-muted);min-width:84px}.cred-row code{flex:1;word-break:break-all;font-size:13.5px}.row-actions{display:flex;gap:6px;flex-wrap:wrap}.lines-count{font-weight:700;font-family:var(--mono)}.lines-full{color:var(--red)}.assign-row{display:flex;align-items:center;gap:8px}.assign-row select{min-width:220px}.invite-url-box{margin-top:18px;display:flex;flex-direction:column;gap:6px}.invite-url-row{display:flex;gap:8px}.invite-url-row input{flex:1;font-family:var(--mono);font-size:13px}@media (max-width: 768px){.topbar-inner{flex-wrap:wrap;gap:10px;padding:10px 14px}.topnav{order:3;width:100%;justify-content:center}.topbar-user{margin-left:auto}.user-block{display:none}.page{padding:16px 12px 40px}.config-grid{grid-template-columns:1fr}.assign-row{flex-direction:column;align-items:stretch}.assign-row select{min-width:0}.modal{max-width:100%}}.copy-field{margin-bottom:14px}.copy-row{display:flex;align-items:center;gap:8px;margin-top:4px;flex-wrap:wrap}.copy-row code{background:#0d1420;border:1px solid #24304a;padding:6px 10px;border-radius:6px;word-break:break-all;flex:1;min-width:150px;color:#cfe3ff}.steps-list{padding-left:18px;line-height:1.75;margin:10px 0 0}.steps-list ul{margin:4px 0 6px;list-style:disc;padding-left:20px}.steps-list code{background:#0d1420;border:1px solid #24304a;padding:1px 6px;border-radius:4px;color:#cfe3ff}.steps-list a{color:#3b82f6}
