:root{--navy: #0b1220;--navy-panel: #111a2c;--navy-panel-alt: #16223a;--ivory: #f4f1ea;--ivory-dim: #c9c4b6;--gold: #b89b5e;--gold-dim: #8a7644;--border: #2a3550;--green: #4caf7d;--red: #d9756a;--amber: #cf9b4a}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:Georgia,Times New Roman,serif;background:var(--navy);color:var(--ivory)}button,input{font-family:inherit}code{font-family:Courier New,monospace}.app-shell{display:flex;min-height:100vh}.sidebar{width:220px;flex-shrink:0;background:var(--navy-panel);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:24px 16px}.sidebar__brand{font-size:20px;letter-spacing:.06em;color:var(--gold);margin-bottom:32px;text-transform:uppercase}.sidebar__nav{display:flex;flex-direction:column;gap:4px}.sidebar__link{color:var(--ivory-dim);text-decoration:none;padding:10px 12px;border-radius:4px;font-size:14px}.sidebar__link:hover{background:var(--navy-panel-alt);color:var(--ivory)}.sidebar__link.active{background:var(--navy-panel-alt);color:var(--gold);border-left:2px solid var(--gold)}.sidebar__logout{margin-top:auto;background:transparent;border:1px solid var(--border);color:var(--ivory-dim);padding:10px 12px;border-radius:4px;cursor:pointer}.sidebar__logout:hover{border-color:var(--gold-dim);color:var(--ivory)}.app-shell__main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 32px;border-bottom:1px solid var(--border);background:var(--navy-panel)}.topbar__identity{display:flex;align-items:baseline;gap:10px}.topbar__email{color:var(--ivory);font-size:14px}.topbar__role{color:var(--gold);font-size:12px;text-transform:uppercase;letter-spacing:.06em;border:1px solid var(--gold-dim);border-radius:3px;padding:2px 8px}.app-shell__content{flex:1;padding:32px;overflow-y:auto}.health-badge{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ivory-dim)}.health-badge__dot{width:8px;height:8px;border-radius:50%;background:var(--ivory-dim)}.health-badge--healthy .health-badge__dot{background:var(--green)}.health-badge--unhealthy .health-badge__dot{background:var(--red)}.health-badge--checking .health-badge__dot{background:var(--amber)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--navy)}.login-card{width:360px;background:var(--navy-panel);border:1px solid var(--border);border-radius:6px;padding:40px 32px}.login-card__brand{font-size:24px;letter-spacing:.06em;color:var(--gold);text-transform:uppercase;text-align:center}.login-card__subtitle{text-align:center;color:var(--ivory-dim);font-size:13px;margin:6px 0 20px}.login-form{display:flex;flex-direction:column;margin-top:20px}.login-form__label{font-size:12px;color:var(--ivory-dim);margin:12px 0 6px;text-transform:uppercase;letter-spacing:.04em}.login-form input{background:var(--navy);border:1px solid var(--border);border-radius:4px;color:var(--ivory);padding:10px 12px;font-size:14px}.login-form input:focus{outline:none;border-color:var(--gold-dim)}.login-form__error{margin-top:14px;color:var(--red);font-size:13px}.login-form__submit{margin-top:24px;background:var(--gold);color:var(--navy);border:none;border-radius:4px;padding:12px;font-size:14px;font-weight:700;cursor:pointer}.login-form__submit:disabled{opacity:.6;cursor:default}.login-form__submit:not(:disabled):hover{background:#c7ad72}.dashboard,.routes-page{display:flex;flex-direction:column;gap:24px}.panel{background:var(--navy-panel);border:1px solid var(--border);border-radius:6px;padding:24px}.panel__title{font-size:15px;color:var(--gold);text-transform:uppercase;letter-spacing:.05em;margin-bottom:16px}.panel__hint{color:var(--ivory-dim);font-size:13px;margin:-8px 0 16px}.hero-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:20px}.hero-item__label{font-size:11px;color:var(--ivory-dim);text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px}.hero-item__value{font-size:16px}.module-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.module-card{background:var(--navy-panel-alt);border:1px solid var(--border);border-radius:5px;padding:14px}.module-card__name{font-size:14px;color:var(--ivory);margin-bottom:4px}.module-card__route{font-family:Courier New,monospace;font-size:12px;color:var(--ivory-dim);margin-bottom:10px}.module-card__status{display:inline-block;font-size:11px;text-transform:uppercase;letter-spacing:.04em;padding:3px 8px;border-radius:3px;border:1px solid var(--border);color:var(--ivory-dim)}.module-card__status--reachable{color:var(--green);border-color:var(--green)}.module-card__status--protected{color:var(--amber);border-color:var(--amber)}.module-card__status--not-implemented{color:var(--ivory-dim)}.module-card__status--error{color:var(--red);border-color:var(--red)}.route-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}.route-card{background:var(--navy-panel-alt);border:1px solid var(--border);border-radius:5px;padding:14px}.route-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.route-card__path{font-family:Courier New,monospace;font-size:12px}.route-card__tag{font-size:10px;color:var(--gold);border:1px solid var(--gold-dim);border-radius:3px;padding:2px 6px;text-transform:uppercase}.route-card__button,.probe-button{background:transparent;border:1px solid var(--gold-dim);color:var(--gold);border-radius:4px;padding:8px 14px;font-size:13px;cursor:pointer}.route-card__button:hover,.probe-button:hover{background:var(--navy-panel)}.route-card__result,.probe-result{margin-top:12px;font-size:12px;border-top:1px solid var(--border);padding-top:10px}.route-card__result--ok,.probe-result--ok{color:var(--green)}.route-card__result--error,.probe-result--error{color:var(--red)}.route-card__body,.probe-result pre{white-space:pre-wrap;word-break:break-word;color:var(--ivory-dim);max-height:160px;overflow-y:auto;margin:6px 0 0}.not-found{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--navy);color:var(--ivory)}.not-found__code{font-size:64px;color:var(--gold)}.not-found__message{font-size:16px;color:var(--ivory-dim);margin:8px 0 24px}.not-found__link{color:var(--gold);text-decoration:none;border:1px solid var(--gold-dim);padding:10px 20px;border-radius:4px}.not-found__link:hover{background:var(--navy-panel-alt)}@media (max-width: 720px){.app-shell{flex-direction:column}.sidebar{width:auto;flex-direction:row;align-items:center;padding:12px 16px}.sidebar__nav{flex-direction:row}.sidebar__logout{margin-top:0;margin-left:auto}.app-shell__content{padding:16px}.topbar{padding:12px 16px;flex-wrap:wrap;gap:10px}}.page{display:flex;flex-direction:column;gap:20px}.page__header{display:flex;align-items:center;justify-content:space-between;gap:12px}.page__title{font-size:20px;color:var(--ivory);margin:0}.page__actions{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border);color:var(--ivory-dim);padding:10px 16px;border-radius:4px;font-size:14px;cursor:pointer;text-decoration:none}.btn:hover{border-color:var(--gold-dim);color:var(--ivory)}.btn:disabled{opacity:.6;cursor:default}.btn--primary{background:var(--gold);border-color:var(--gold);color:var(--navy);font-weight:700}.btn--primary:hover{background:#c7ad72;color:var(--navy)}.filter-bar{display:flex;gap:10px;flex-wrap:wrap}.filter-bar .form-field__input{min-width:160px}.table-wrap{background:var(--navy-panel);border:1px solid var(--border);border-radius:6px;overflow-x:auto}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table th,.data-table td{text-align:left;padding:12px 16px;border-bottom:1px solid var(--border);white-space:nowrap}.data-table th{color:var(--gold);text-transform:uppercase;font-size:11px;letter-spacing:.04em}.data-table tbody tr:hover{background:var(--navy-panel-alt)}.data-table a{color:var(--ivory)}.data-table a:hover{color:var(--gold)}.table-actions{display:flex;gap:8px;flex-wrap:wrap}.table-action{background:transparent;border:1px solid var(--border);color:var(--ivory-dim);padding:5px 10px;border-radius:3px;font-size:12px;cursor:pointer;text-decoration:none;white-space:nowrap}.table-action:hover{border-color:var(--gold-dim);color:var(--ivory)}.table-action--danger{border-color:var(--red);color:var(--red)}.table-action--danger:hover{background:var(--red);color:var(--ivory)}.confirm-action{display:inline-flex;gap:6px}.form-card{background:var(--navy-panel);border:1px solid var(--border);border-radius:6px;padding:28px;display:flex;flex-direction:column;gap:4px;max-width:640px}.form-field{display:flex;flex-direction:column;margin-bottom:14px}.form-field__label{font-size:12px;color:var(--ivory-dim);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px}.form-field__required{color:var(--red);margin-left:4px}.form-field__input{background:var(--navy);border:1px solid var(--border);border-radius:4px;color:var(--ivory);padding:10px 12px;font-size:14px}.form-field__input:focus{outline:none;border-color:var(--gold-dim)}.form-field__input:disabled{opacity:.6}.form-field__textarea{resize:vertical;font-family:inherit}.form-field__hint{font-size:12px;color:var(--ivory-dim);margin-top:4px}.form-field__error{font-size:12px;color:var(--red);margin-top:4px}.inline-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px}.inline-form{margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}.error-box{background:#d9756a1f;border:1px solid var(--red);color:var(--red);padding:12px 16px;border-radius:4px;font-size:13px}.success-box{background:#4caf7d1f;border:1px solid var(--green);color:var(--green);padding:12px 16px;border-radius:4px;font-size:13px}.notice-box{background:#cf9b4a1f;border:1px solid var(--amber);color:var(--amber);padding:12px 16px;border-radius:4px;font-size:13px}.loading-state{color:var(--ivory-dim);font-size:13px;padding:20px 0}.status-badge{display:inline-block;font-size:11px;text-transform:uppercase;letter-spacing:.03em;padding:3px 10px;border-radius:3px;border:1px solid var(--border);color:var(--ivory-dim)}.status-badge--positive{color:var(--green);border-color:var(--green)}.status-badge--negative{color:var(--red);border-color:var(--red)}.status-badge--warn{color:var(--amber);border-color:var(--amber)}.status-badge--neutral{color:var(--ivory-dim);border-color:var(--border)}.empty-state{text-align:center;padding:40px 20px;color:var(--ivory-dim)}.empty-state__title{font-size:14px;margin-bottom:6px}.empty-state__hint{font-size:12px}.empty-state__action{margin-top:14px}.empty-state__action a{color:var(--gold)}.password-reveal{background:var(--navy);border:1px solid var(--gold-dim);border-radius:4px;padding:16px}.password-reveal__row{display:flex;align-items:center;gap:10px;margin-bottom:10px}.password-reveal__label{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ivory-dim);min-width:140px}.password-reveal__value{color:var(--ivory)}.password-reveal__password{background:var(--navy-panel-alt);border:1px solid var(--border);border-radius:3px;padding:4px 10px;color:var(--gold);font-size:14px}.password-reveal__copy{background:transparent;border:1px solid var(--border);color:var(--ivory-dim);padding:4px 10px;border-radius:3px;cursor:pointer;font-size:12px}.password-reveal__copy:hover{border-color:var(--gold-dim);color:var(--ivory)}.password-reveal__warning{color:var(--amber);font-size:12px;margin-top:6px}.detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px}.detail-list{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;margin:0}.detail-list dt{color:var(--ivory-dim);font-size:12px;text-transform:uppercase;letter-spacing:.03em}.detail-list dd{margin:0;color:var(--ivory)}.simple-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.simple-list li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)}.simple-list--stacked li{flex-direction:column;align-items:flex-start;gap:4px}.simple-list__meta{font-size:12px;color:var(--ivory-dim)}.simple-list a{color:var(--ivory)}.simple-list a:hover{color:var(--gold)}
