:root{--bg:#fff;--surface:#fff;--text:#1a2332;--muted:#5a6a7a;--border:#d0d7e2;--sidebar-active:#e8f1fa;--accent:#0056a4;--accent-hover:#00407a;--accent-bg:#e8f1fa;--danger:#b42318;--radius:2px;--font:"IBM Plex Sans", "Segoe UI", sans-serif;--font-display:"IBM Plex Sans", "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, monospace;--color-nav:#0056a4;--color-nav-text:#e8f1fa;--color-nav-muted:#b3cce6;--color-nav-active:#fff;--top-nav-height:40px;--side-nav-width:200px;--alarm:#c8102e;--amber:#d98e04;--green:#2f7d4f;--steel:#2c3e50}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;min-height:100%;margin:0}body{font-family:var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:13px;line-height:1.45}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.02em;color:var(--text);margin:0 0 .5rem;font-weight:600}p{color:var(--muted);margin:0 0 1rem}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{flex-direction:column;height:100%;display:flex}html.hub-embed,html.hub-embed body{--top-nav-height:0px}html.hub-embed .top-nav,body.hub-embed .top-nav,.app-shell--hub-embed .top-nav{display:none!important}.top-nav{height:var(--top-nav-height);background:var(--color-nav);color:var(--color-nav-text);flex-shrink:0;justify-content:space-between;align-items:center;padding:0 .85rem;display:flex}.top-nav__logo{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--color-nav-active);margin:0;font-size:.7rem;font-weight:500}.top-nav__meta{align-items:center;gap:1rem;display:flex}.top-nav__user{color:var(--color-nav-muted);font-size:.75rem}.top-nav__user strong{color:var(--color-nav-active);font-family:var(--font-mono)}.top-nav__role{text-transform:uppercase;letter-spacing:.04em;margin-left:.4rem}.top-nav__logout{border-radius:var(--radius);color:var(--color-nav-muted);background:0 0;border:1px solid #ffffff59;padding:.2rem .55rem;font-size:.7rem}.top-nav__logout:hover{color:var(--color-nav-active)}.app-body{flex:1;min-height:0;display:flex}.side-nav{width:var(--side-nav-width);border-right:1px solid var(--border);background:#f7f8fa;flex-direction:column;flex-shrink:0;min-height:0;display:flex}.side-nav__scroll{flex:1;padding:.5rem 0;overflow-y:auto}.side-nav__label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:.7rem .9rem .25rem;font-size:.65rem;font-weight:700}.side-nav__link{color:var(--muted);border-left:2px solid #0000;padding:.4rem .9rem;font-size:.8125rem;display:block}.side-nav__link:hover{color:var(--text);background:#fff}.side-nav__link--active{color:var(--accent);border-left-color:var(--accent);background:#fff;font-weight:600}.side-nav__footer{border-top:1px solid var(--border);flex-direction:column;flex-shrink:0;gap:.35rem;padding:.65rem .85rem;display:flex}.side-nav__who{word-break:break-word;font-size:.7rem;font-weight:600}.side-nav__ver{color:#aaa;text-align:center;font-size:.65rem}.main{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.topbar{border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;gap:1rem;padding:.5rem 1rem;display:flex}.topbar__picker{color:var(--muted);align-items:center;gap:.5rem;font-size:.7rem;font-weight:600;display:flex}.topbar__picker select{min-width:16rem}.topbar__meta{color:var(--muted);gap:.75rem;font-size:.75rem;display:flex}.content{flex:1;padding:.85rem 1rem 2rem;overflow:auto}.btn{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:var(--radius);padding:.35rem .75rem;font-size:.8125rem;font-weight:500}.btn:hover{border-color:var(--accent);color:var(--accent)}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover);color:#fff}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-ghost{background:0 0}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-row{flex-wrap:wrap;gap:.4rem;margin:.5rem 0;display:flex}.login-page{background:var(--bg);justify-content:center;align-items:center;min-height:100%;padding:2rem;display:flex}.login-form{flex-direction:column;gap:.75rem;width:100%;max-width:360px;display:flex}.login-form__brand{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--accent);text-align:center;margin:0;font-size:.7rem;font-weight:500}.login-form__title{text-align:center;margin:0;font-size:1.5rem}.login-form__hint{text-align:center;font-size:.875rem}.login-form__label{color:var(--muted);font-size:.75rem;font-weight:500}.login-form__input{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);outline:none;padding:.65rem .75rem}.login-form__input:focus{border-color:var(--accent)}.login-form__submit{border-radius:var(--radius);background:var(--accent);color:#fff;border:none;margin-top:.5rem;padding:.65rem 1rem;font-weight:500}.login-form__submit:hover:not(:disabled){background:var(--accent-hover)}.login-form__error{color:var(--danger);margin:0;font-size:.8125rem}table.data{border-collapse:collapse;width:100%;font-size:.78rem}table.data th,table.data td{border-bottom:1px solid var(--border);text-align:left;vertical-align:top;padding:.35rem .5rem}table.data th{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:#fff;font-size:.68rem;position:sticky;top:0}table.data .num{text-align:right;font-family:var(--font-mono)}table.data tbody tr{cursor:pointer}table.data tbody tr:hover{background:var(--accent-bg)}table.data .neg{color:var(--danger)}table.data .pos{color:var(--green)}.led{background:#ccc;border-radius:50%;width:8px;height:8px;display:inline-block}.led--red{background:var(--alarm)}.led--amber{background:var(--amber)}.led--green{background:var(--green)}.pill{letter-spacing:.03em;text-transform:uppercase;background:var(--accent-bg);color:var(--accent);border-radius:10px;padding:.1rem .45rem;font-size:.65rem;font-weight:700;display:inline-block}.pill.ok{color:var(--green);background:#e5f6ea}.pill.warn{color:#8a5e00;background:#fbeed3}.kpis{background:var(--border);border:1px solid var(--border);grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1px;margin-bottom:.85rem;display:grid}.kpi{background:#fff;padding:.65rem .75rem}.kpi .lbl{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:.65rem}.kpi .val{font-size:1.15rem;font-weight:600;font-family:var(--font-mono)}.chip{color:#fff;letter-spacing:.04em;text-transform:uppercase;padding:.2rem .55rem;font-size:.65rem;font-weight:700;display:inline-block}.card{background:#fff;border:1px solid #eee;border-radius:4px;margin-bottom:.75rem;padding:.85rem 1rem}.form-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.65rem 1rem;display:grid}.form-grid label{color:var(--muted);font-size:.7rem;font-weight:600;display:block}.form-grid input,.form-grid select,.form-grid textarea{border:1px solid var(--border);border-radius:var(--radius);width:100%;padding:.35rem .45rem}.page-msg{color:var(--muted);padding:2rem}.h2-sub{color:var(--muted);margin:-.25rem 0 .75rem;font-size:.78rem}.mstrip{gap:0;padding:.5rem 0 1rem;display:flex;overflow-x:auto}.mstep{text-align:center;min-width:88px;font-size:.7rem}.mstep .node{color:#fff;background:#ccc;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-weight:700;display:inline-flex}.mstep.done .node{background:var(--green)}.mstep.risk .node{background:var(--amber)}.mstep.next .node{background:var(--accent)}.mstep .lbl{margin-top:.25rem}.phase-strip{flex-wrap:wrap;gap:.4rem;margin-bottom:.5rem;display:flex}.phase{border:1px solid var(--border);padding:.3rem .5rem;font-size:.7rem}.phase.done{background:#e5f6ea}.phase.now{background:var(--accent-bg)}.phase.late{background:#fde8e8}.msg{margin:.35rem 0;font-size:.78rem}.msg.ok{color:var(--green)}.msg.err{color:var(--danger)}.drop{border:1px dashed var(--border);text-align:center;color:var(--muted);margin:.5rem 0;padding:1rem}@media (width<=820px){.app-body{flex-direction:column}.side-nav{border-right:none;border-bottom:1px solid var(--border);width:100%}}
