:root{--bg: #f5f6f8;--sidebar: #1e293b;--sidebar-text: #cbd5e1;--accent: #2563eb;--card: #ffffff;--border: #e2e8f0;--text: #0f172a;--muted: #64748b;--danger: #dc2626}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;font-family:Segoe UI,system-ui,-apple-system,sans-serif;color:var(--text)}body{background:var(--bg)}.app{display:flex;height:100vh}.sidebar{width:268px;background:var(--sidebar);color:var(--sidebar-text);display:flex;flex-direction:column;padding:20px 0 12px}.sidebar .brand{padding:0 24px 24px;font-size:20px;font-weight:700;color:#fff;line-height:1.15}.brand span{display:block;font-size:12px;font-weight:400;color:#94a3b8;margin-top:4px}.sidebar nav{display:flex;flex-direction:column;flex:1}.nav-groupe{display:flex;flex-direction:column;margin-bottom:18px}.nav-groupe-titre{padding:0 24px 6px;font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:#64748b}.sidebar nav a.nav-item{display:flex;align-items:center;gap:11px;padding:9px 24px;color:var(--sidebar-text);text-decoration:none;border-left:3px solid transparent}.sidebar nav a.nav-item:hover{background:#ffffff0f}.sidebar nav a.nav-item.active{background:#2563eb26;border-left-color:var(--accent);color:#fff}.nav-icone{font-size:16px;line-height:1}.nav-textes{display:flex;flex-direction:column;min-width:0}.nav-label{font-size:14px;font-weight:600}.nav-desc{font-size:11px;color:#94a3b8;margin-top:1px}.side-user{padding:12px 16px 0;margin:0 8px;border-top:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;gap:8px}.side-user-id{display:flex;align-items:center;gap:10px;padding:8px;border-radius:8px;text-decoration:none;color:var(--sidebar-text)}.side-user-id:hover,.side-user-id.active{background:#ffffff14}.avatar{flex:0 0 32px;height:32px;border-radius:999px;background:var(--accent);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}.side-user-textes{display:flex;flex-direction:column;gap:3px;min-width:0}.side-user-nom{font-size:13px;font-weight:600;color:#fff}.side-user button{background:none;border:1px solid rgba(255,255,255,.2);color:var(--sidebar-text);font-size:13px;padding:8px 12px}.side-user button:hover{background:#ffffff14}.role-tag{align-self:flex-start;font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;border:1px solid transparent}.role-tag.admin{background:#2563eb40;color:#dbeafe;border-color:#93c5fd80}.role-tag.support{background:#16a34a33;color:#dcfce7;border-color:#86efac73}.role-tag.none{background:#dc262633;color:#fecaca;border-color:#fca5a573}.content{flex:1;padding:32px 40px;overflow:auto}.login{height:100vh;display:flex;align-items:center;justify-content:center;background:var(--sidebar)}.login-card{background:var(--card);padding:36px;border-radius:12px;width:360px;box-shadow:0 10px 40px #0000004d;display:flex;flex-direction:column;gap:14px}.login-card .brand.center{text-align:center;color:var(--text)}.login-card h1{font-size:18px;margin:4px 0 8px;font-weight:600}label{display:flex;flex-direction:column;gap:6px;font-size:14px;font-weight:500}input{padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit}input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb26}button{background:var(--accent);color:#fff;border:none;padding:10px 16px;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer}button:hover{background:#1d4ed8}button:disabled{opacity:.6;cursor:default}button.link{background:none;color:var(--accent);padding:4px 0;font-weight:500;width:fit-content}button.link:hover{background:none;text-decoration:underline}.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}h1{font-size:24px;margin:0 0 16px}.btn{background:var(--accent);color:#fff;padding:9px 14px;border-radius:8px;text-decoration:none;font-size:14px;font-weight:600}.btn:hover{background:#1d4ed8}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:18px}.card h3{margin:0;font-size:16px}.form{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:24px;max-width:560px;display:flex;flex-direction:column;gap:16px}.field{display:flex;flex-direction:column;gap:8px;font-size:14px;font-weight:500}.row{display:flex;gap:8px}.row input{flex:1}.error{background:#fef2f2;color:var(--danger);padding:10px 12px;border-radius:8px;font-size:13px;border:1px solid #fecaca}.code{background:#0f172a;color:#e2e8f0;padding:14px;border-radius:8px;font-family:Cascadia Code,Consolas,monospace;font-size:13px;white-space:pre-wrap;overflow-x:auto;margin:0}.code.wrap{word-break:break-all}.muted{color:var(--muted);font-size:13px}.toolbar{display:flex;gap:12px;align-items:center;margin-bottom:16px;flex-wrap:wrap}.toolbar input{flex:1;max-width:340px;min-width:220px}.head-actions{display:flex;align-items:center;gap:10px}.vue-switch{display:flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--card)}.vue-switch button{background:none;color:var(--muted);border:none;border-radius:0;padding:8px 12px;font-size:13px}.vue-switch button:hover{background:#f1f5f9}.vue-switch button.on{background:#eff6ff;color:var(--accent)}.filtres{display:flex;gap:6px;flex-wrap:wrap}.chip{background:var(--card);color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:6px 12px;font-size:12px;font-weight:600}.chip b{color:var(--text);margin-left:2px}.chip:hover:not(:disabled){background:#f8fafc;border-color:#a5b4fc}.chip.on{background:#eff6ff;border-color:var(--accent);color:var(--accent)}.chip.on b{color:var(--accent)}.chip:disabled{opacity:.45;cursor:default}.table-wrap{overflow-x:auto;border-radius:10px}.table.parc td{vertical-align:middle}.table.parc th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.table.parc th.sortable:hover{color:var(--accent)}.table.parc tbody tr:hover{background:#f8fafc}.table .col-action{text-align:right;white-space:nowrap}.cell-link{color:var(--text);font-weight:600;text-decoration:none}.cell-link:hover{color:var(--accent);text-decoration:underline}.link-btn{color:var(--accent);font-size:13px;font-weight:600;text-decoration:none}.link-btn:hover{text-decoration:underline}.row-bloque{background:#fff7f7}.row-actions{display:flex;gap:6px;justify-content:flex-end}.row-actions button{padding:5px 10px;font-size:12px}.etat{display:inline-flex;align-items:center;gap:6px;font-size:13px;white-space:nowrap}.etat.on{color:#15803d;font-weight:600}.etat.off{color:var(--muted)}.etat.bloque{color:var(--danger);font-weight:600}.tags{display:flex;flex-wrap:wrap;gap:4px}.tag{font-size:11px;font-weight:600;padding:2px 8px;border-radius:6px;background:#f1f5f9;color:#475569;border:1px solid var(--border)}.tag.more{background:#fff;color:var(--muted)}.tag.infotec{background:#fffbeb;color:#b45309;border-color:#fde68a}.tenant-card{gap:8px}.tenant-card.bloque{border-color:#fecaca;background:snow}.tc-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.card.link{text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:6px;transition:border-color .15s,box-shadow .15s}.card.link:hover{border-color:var(--accent);box-shadow:0 2px 10px #2563eb1f}.actions{display:flex;gap:10px;margin-bottom:16px}button.secondary{background:#fff;color:var(--accent);border:1px solid var(--accent)}button.secondary:hover{background:#eff6ff}.ok{background:#f0fdf4;color:#15803d;padding:10px 12px;border-radius:8px;font-size:13px;border:1px solid #bbf7d0;margin-bottom:12px}.icon-btn{background:none;color:var(--muted);border:1px solid var(--border);padding:0 12px;font-weight:700}.icon-btn:hover{background:#fef2f2;color:var(--danger);border-color:#fecaca}button.danger{background:var(--danger)}button.danger:hover{background:#b91c1c}.cred{display:flex;flex-direction:column;gap:8px}.cred-row{display:flex;gap:8px;align-items:center}.cred-row code{flex:1;background:#0f172a;color:#e2e8f0;padding:8px 10px;border-radius:6px;font-family:Cascadia Code,Consolas,monospace;font-size:12px;overflow-x:auto;white-space:nowrap}.cred-row button{padding:6px 12px;font-size:12px}select{padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit;background:#fff;color:var(--text);cursor:pointer}select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb26}.config-tab{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));align-items:start;gap:16px;max-width:1400px}.config-tab .span-2,.config-alerts{grid-column:1 / -1}.config-alerts .ok:last-child,.config-alerts .error:last-child{margin-bottom:0}.form-user{max-width:760px}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.card.sec{display:flex;flex-direction:column;gap:14px;padding:22px 24px;border-radius:12px}.sec h2{margin:0;font-size:17px;display:flex;align-items:center;gap:8px}.sec-sub{color:var(--muted);font-size:13px;margin:4px 0 0}.sec-tag{font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;background:#eff6ff;color:var(--accent);border:1px solid #bfdbfe}.sec .actions{margin-bottom:0}.dest{font-size:13px;background:#fffbeb;border:1px dashed #fde68a;border-radius:8px;padding:9px 12px}.subsec{border-top:1px solid var(--border);padding-top:14px;display:flex;flex-direction:column;gap:8px}.subsec h3{margin:0;font-size:14px}.cle-bloc{display:flex;gap:14px;padding:16px;border:1px solid var(--border);border-radius:10px;background:#fcfcfd}.cle-bloc.prete{border-color:#bbf7d0;background:#f6fef9}.cle-num{flex:0 0 26px;height:26px;border-radius:999px;display:grid;place-items:center;font-size:13px;font-weight:700;color:var(--muted);background:#eef2f7;border:1px solid var(--border)}.cle-bloc.prete .cle-num{color:#15803d;background:#dcfce7;border-color:#bbf7d0}.cle-corps{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}.cle-titre{font-size:15px;font-weight:600;display:flex;align-items:center;gap:8px}.cle-pastille{font-size:11px;font-weight:700;padding:1px 8px;border-radius:999px;background:#dcfce7;color:#15803d;border:1px solid #bbf7d0}.cle-role,.cle-etat{margin:0;font-size:13px;color:var(--muted)}.cle-dest{font-size:13px;background:#fffbeb;border:1px dashed #fde68a;border-radius:8px;padding:8px 11px}.cle-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.cle-copier{font-weight:600}.cle-valeur{margin:0;font-size:12px}.cle-alerte{font-size:12.5px;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:8px 11px}.cles-suite{display:flex;flex-direction:column;gap:12px}@media (max-width: 560px){.cle-bloc{flex-direction:column;gap:10px}}.seg{display:flex;gap:10px}.seg-opt{flex:1;display:flex;flex-direction:column;gap:2px;padding:10px 14px;border:1px solid var(--border);border-radius:10px;cursor:pointer;background:#fff}.seg-opt:hover{border-color:#a5b4fc}.seg-opt.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset;background:#eff6ff}.seg-opt input{display:none}.seg-opt b{font-size:14px}.seg-opt span{font-size:12px;color:var(--muted);font-weight:400}.card.danger-zone{border-color:#fecaca}.danger-zone h2{color:var(--danger)}.tabs{display:flex;gap:4px;border-bottom:2px solid var(--border);margin-bottom:20px}.tab{background:none;color:var(--muted);border:none;border-bottom:2px solid transparent;margin-bottom:-2px;border-radius:0;padding:10px 18px;font-weight:600}.tab:hover{background:none;color:var(--text)}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;margin-left:4px}.badge-ok{background:#f0fdf4;color:#15803d;border:1px solid #bbf7d0}.badge-off{background:#fef2f2;color:var(--danger);border:1px solid #fecaca}.badge-warn{background:#fffbeb;color:#b45309;border:1px solid #fde68a}.badge-muted{background:#f1f5f9;color:var(--muted);border:1px solid var(--border)}.table{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--border);border-radius:10px;overflow:hidden;font-size:14px}.table th{text-align:left;padding:10px 14px;background:#f8fafc;border-bottom:1px solid var(--border);font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.table td{padding:10px 14px;border-bottom:1px solid var(--border);vertical-align:top}.table tr:last-child td{border-bottom:none}.row-muted{opacity:.55}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-bottom:24px}.kpi{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:16px 18px;display:flex;flex-direction:column;gap:4px}.kpi-label{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.kpi-value{font-size:20px;font-weight:700}.resume h2{font-size:17px;margin:18px 0 10px}.logbar{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}.logbar select{padding:8px 10px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit;background:var(--card)}.switch-label{display:flex;flex-direction:row;align-items:center;gap:8px;font-size:14px;font-weight:600;background:var(--card);border:1px solid var(--border);border-radius:8px;padding:8px 12px}.switch-label input{accent-color:var(--accent);width:16px;height:16px}.logs-table td{font-size:13px}.arch-page{display:flex;flex-direction:column;height:100%}.arch-canvas{flex:1;min-height:540px;background:var(--card);border:1px solid var(--border);border-radius:12px;overflow:hidden}.svc-node{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:10px 14px;min-width:200px;font-size:12px;box-shadow:0 2px 8px #0000000f}.svc-node.infra{background:#f8fafc}.svc-node.exited{opacity:.55;border-color:#fecaca}.svc-node.svc-card{display:flex;align-items:stretch;padding:0}.svc-node.svc-card .svc-body{flex:1;min-width:0;padding:10px 14px}.svc-dbs{display:flex;flex-direction:column;justify-content:center;gap:5px;padding:6px 9px;border-left:1px dashed #a5b4fc;background:#eef2ff;border-radius:0 10px 10px 0}.swagger-drawer{width:min(920px,96vw);z-index:60}.swagger-drawer .swagger-ui .info{margin:8px 0 12px}.swagger-drawer .swagger-ui .scheme-container{padding:8px 0;box-shadow:none;background:transparent}.swagger-drawer .swagger-ui .opblock{margin:0 0 8px}.db-drawer{width:min(1240px,98vw);z-index:60;display:flex;flex-direction:column;overflow:hidden}.db-drawer .page-head{flex:none}.db-grid{display:flex;flex-direction:column;min-height:0;flex:1;gap:8px}.db-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;flex:none}.db-search{flex:0 1 260px;padding:5px 9px;font-size:12px;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:inherit}.db-pager{display:inline-flex;align-items:center;gap:8px;color:var(--muted)}.db-scroll{flex:1;min-height:140px;overflow:auto;border:1px solid var(--border);border-radius:10px}.db-scroll table{border-collapse:separate;border-spacing:0;min-width:100%;font-size:12px}.db-scroll th,.db-scroll td{padding:5px 9px;text-align:left;border-bottom:1px solid var(--border);max-width:320px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.db-scroll th{position:sticky;top:0;z-index:1;background:var(--bg);font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.db-scroll tbody tr{cursor:pointer}.db-scroll tbody tr:hover td{background:#6d5dd30f}.db-scroll tbody tr.on td{background:#6d5dd324}.db-scroll td.db-json{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:#4a5568}.db-num{width:46px;text-align:right;color:var(--muted)}.db-null{color:var(--muted);font-style:italic}.db-detail{flex:0 1 auto;max-height:42%;overflow:auto;border:1px solid var(--border);border-radius:10px;padding:10px 12px;background:var(--bg)}.db-detail-head{display:flex;align-items:center;gap:10px;margin-bottom:4px;font-size:13px}.db-champ{margin-top:8px}.db-champ-nom{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.db-detail pre{margin:2px 0 0;padding:8px;max-height:260px;overflow:auto;white-space:pre-wrap;word-break:break-word;font-size:12px;background:var(--card);border:1px solid var(--border);border-radius:8px}.link-tester{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.link-tester .lt-label{font-weight:700;font-size:13px}.link-tester .lt-arrow{color:var(--muted);font-weight:700}.link-tester select{padding:6px 10px;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text);font:inherit;font-size:13px;cursor:pointer;min-width:190px}.link-tester select:hover{border-color:#a5b4fc}.arch-counts{white-space:nowrap}.health-panel{position:absolute;top:12px;right:12px;z-index:10;width:230px;max-height:70%;overflow:auto;background:#fffffff5;border:1px solid var(--border);border-radius:10px;padding:10px 12px;box-shadow:0 4px 16px #00000014;font-size:12px}.health-panel .hp-head{font-weight:700;margin-bottom:6px;display:flex;align-items:center;gap:6px}.hp-count{background:#dc2626;color:#fff;border-radius:999px;padding:0 7px;font-size:11px}.hp-ok{color:#16a34a;font-weight:600}.hp-item{display:flex;align-items:center;gap:7px;padding:6px 4px;border-top:1px solid var(--border)}.hp-item.red{background:#fef2f2}.hp-item.orange{background:#fff7ed}.hp-info{display:flex;flex-direction:column;flex:1;min-width:0}.hp-info b{font-size:12px}.hp-status{color:var(--muted);font-size:11px}.hp-restart{border:1px solid var(--border);background:#fff;border-radius:7px;width:26px;height:26px;cursor:pointer;font-size:14px;line-height:1}.hp-restart:hover{background:#eef2ff;border-color:#a5b4fc}.reach-row{border-top:1px solid var(--border);padding:8px 0}.reach-head{display:flex;align-items:center;gap:8px}.reach-head b{font-size:13px}.reach-badge{font-size:10px;font-weight:700;padding:1px 7px;border-radius:999px}.reach-badge.direct{background:#dcfce7;color:#15803d}.reach-badge.indirect{background:#fef3c7;color:#92400e}.reach-test{margin-left:auto;font-size:11px;font-weight:700;padding:4px 12px;border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:7px;cursor:pointer}.reach-test:hover:not(:disabled){filter:brightness(1.08)}.reach-test:disabled{opacity:.5;cursor:default}.reach-flux{display:flex;align-items:center;flex-wrap:wrap;gap:3px;margin-top:5px}.reach-arrow{color:var(--muted);margin:0 3px}.reach-hop{font-size:11px;font-weight:600;padding:2px 8px;border-radius:6px;border:1px solid}.reach-hop.green{background:#f0fdf4;color:#15803d;border-color:#bbf7d0}.reach-hop.orange{background:#fff7ed;color:#b45309;border-color:#fed7aa}.reach-hop.red{background:#fef2f2;color:#b91c1c;border-color:#fecaca}.reach-hop.gray{background:#f8fafc;color:#64748b;border-color:var(--border)}.reach-report{margin-top:6px;border:1px solid var(--border);border-radius:8px;padding:6px 8px;background:#fafbff}.reach-verdict{font-weight:700;font-size:12px;margin-bottom:4px}.reach-verdict.ok{color:#15803d}.reach-verdict.ko{color:#b91c1c}.reach-probe{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:11px;padding:2px 0}.reach-probe .rp-role{font-weight:600;min-width:130px}.reach-probe .rp-state.ok{color:#15803d}.reach-probe .rp-state.ko{color:#b91c1c}.reach-probe .rp-meta{color:var(--muted);font-family:Consolas,monospace}.kind-filter{display:flex;flex-wrap:wrap;gap:8px;padding:8px 2px 4px}.kind-chip{font-size:12px;font-weight:600;padding:5px 12px;border-radius:999px;border:1px solid var(--border);cursor:pointer;background:#fff;color:var(--text)}.kind-chip.on{background:#eef2ff;border-color:#a5b4fc;color:#3730a3}.kind-chip.off{opacity:.5;text-decoration:line-through}.kf-sep{width:1px;align-self:stretch;background:var(--border);margin:0 4px}.kf-label{font-size:12px;font-weight:600;color:var(--muted);align-self:center}.svc-db{display:flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:#3730a3;white-space:nowrap;background:none;border:none;margin:0;padding:2px 4px;border-radius:6px;cursor:pointer;font-family:inherit}.svc-db:hover{background:#e0e7ff}.svc-db .db-ico{font-size:13px}.svc-tag{font-size:9px;font-weight:800;letter-spacing:.03em;padding:1px 6px;border-radius:6px}.svc-tag.front{background:#ede9fe;color:#6d28d9}.svc-node.ppgroup{border-left:3px solid #7c3aed}.svc-head{display:flex;align-items:center;gap:6px;font-size:14px}.dot{width:9px;height:9px;border-radius:50%}.dot.on{background:#16a34a}.dot.off{background:var(--danger)}.dot.warn{background:#d97706}.svc-badge{margin-left:auto;background:#eff6ff;color:var(--accent);border:1px solid #bfdbfe;border-radius:999px;padding:1px 8px;font-size:10px;font-weight:700}.svc-desc{margin-top:3px;font-size:11px;color:var(--text);opacity:.85;max-width:240px}.svc-meta{color:var(--muted);margin-top:2px}.svc-url{color:var(--accent);margin-top:2px;font-family:Consolas,monospace;font-size:11px}.react-flow__handle{opacity:0;transition:opacity .15s}.react-flow__node:hover .react-flow__handle{opacity:.6}.arch-canvas.connecting .react-flow__handle{opacity:.85;width:10px;height:10px;background:#6366f1}.edge-label{position:absolute;font-size:10px;font-weight:600;color:#334155;background:#ffffffeb;border:1px solid var(--border);border-radius:5px;padding:1px 5px;pointer-events:none;white-space:nowrap}.svc-fronts{margin-top:5px;display:flex;flex-direction:column;gap:4px}.svc-front-chip{display:flex;align-items:center;gap:5px;font-size:11px;background:#faf7ff;border:1px solid #ddd6fe;border-radius:7px;padding:2px 6px}.svc-front-chip b{font-size:11px;color:#5b21b6}.svc-front-chip .fc-btn{margin-left:2px;font-size:10px;font-weight:600;padding:1px 7px;border:1px solid #c4b5fd;background:#fff;color:#6d28d9;border-radius:6px;cursor:pointer}.svc-front-chip .fc-btn:hover{background:#ede9fe}.svc-front-chip .fc-btn:last-child{margin-left:auto}.svc-front-url{margin-top:3px;display:inline-block;font-family:Consolas,monospace;font-size:11px;font-weight:600;color:#6d28d9;background:#f3f0ff;border:1px solid #ddd6fe;border-radius:6px;padding:1px 6px}.ctx-menu{position:fixed;z-index:50;background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 30px #0000002e;display:flex;flex-direction:column;min-width:170px;overflow:hidden}.ctx-title{padding:8px 14px;font-weight:700;font-size:13px;border-bottom:1px solid var(--border)}.ctx-menu button{background:none;color:var(--text);border:none;border-radius:0;text-align:left;padding:9px 14px;font-weight:500}.ctx-menu button:hover{background:#eff6ff}.ctx-menu button:disabled{opacity:.45;cursor:not-allowed}.drawer{position:fixed;top:0;right:0;width:520px;height:100vh;background:var(--card);border-left:1px solid var(--border);box-shadow:-10px 0 40px #00000026;padding:24px;overflow:auto;z-index:40}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;background:#0006;display:flex;align-items:center;justify-content:center}.modal-card{width:min(520px,94vw);background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 20px 60px #0000004d;padding:22px}.modal-input{width:100%;margin:12px 0 8px;padding:10px 12px;font-size:14px;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:inherit;box-sizing:border-box}.modal-created{margin-top:12px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:#00a05a14;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.modal-starter{display:flex;gap:10px;margin:12px 0 4px}.starter-chip{flex:1;display:flex;flex-direction:column;gap:2px;align-items:flex-start;padding:10px 12px;text-align:left;cursor:pointer;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:inherit}.starter-chip.on{border-color:var(--accent, #4f46e5);box-shadow:0 0 0 1px var(--accent, #4f46e5) inset}.starter-chip .muted{font-size:11px}.modal-loading{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;padding:28px 12px}.modal-loading .muted{max-width:380px}.spinner{width:34px;height:34px;border-radius:50%;border:3px solid var(--border);border-top-color:var(--accent, #4f46e5);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.flow-result{position:fixed;left:280px;bottom:20px;width:560px;max-height:46vh;overflow:auto;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 30px #0000002e;padding:16px;z-index:45}.arch-canvas{position:relative}.legend{position:absolute;left:12px;bottom:12px;z-index:10;background:#fffffff2;border:1px solid var(--border);border-radius:10px;padding:10px 14px;font-size:12px;display:flex;flex-direction:column;gap:5px;max-width:430px}.leg-line{display:inline-block;width:26px;height:0;border-top:2.5px solid;vertical-align:middle;margin-right:6px}.leg-line.tyk{border-color:#2563eb;border-top-style:solid;border-top-width:4px}.leg-line.dep{border-color:#16a34a;border-top-style:solid;border-top-width:2.5px}.leg-line.front{border-color:#7c3aed;border-top-style:dashed;border-top-width:3px}.leg-line.static{border-color:#94a3b8;border-top-style:dotted;border-top-width:3px}.svc-node.front{background:#faf7ff;border-color:#c4b5fd;border-left:3px solid #7c3aed}.col-title{display:flex;flex-direction:column;gap:1px;min-width:220px;border-bottom:3px solid var(--accent);padding-bottom:4px}.col-title b{font-size:15px;letter-spacing:.02em}.col-title span{font-size:11px;color:var(--muted)}.svc-node.front.idle{opacity:.7;border-color:var(--border)}.dot.idle{background:#94a3b8}.legend .dot{display:inline-block;vertical-align:middle}.svc-node.ppgroup{min-width:230px;border-width:2px}.svc-node.ppgroup.has-issues{border-color:#fbbf24}.svc-node.pp{min-width:210px;background:#fbfcfe}.issue{color:#b45309}.pp-toggle{margin-top:8px;width:100%;padding:6px 10px;font-size:12px;background:#eff6ff;color:var(--accent);border:1px solid #bfdbfe}.pp-toggle:hover{background:#dbeafe}.hist-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--border);font-size:13px}.drawer h2{margin:0;font-size:20px}.drawer h3{font-size:14px;margin:14px 0 6px}.page-head h1{margin:0}.page-sub{margin:4px 0 0;font-size:13px;color:var(--muted)}.profil{max-width:620px}.profil .infos{margin:0;display:flex;flex-direction:column;gap:12px}.profil .infos>div{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:start}.profil dt{font-size:13px;color:var(--muted)}.profil dd{margin:0;font-size:14px}.profil .role-tag{display:inline-block}.pwd-form{display:flex;flex-direction:column;gap:12px}.pwd-form .muted,.error-inline{font-size:12px}.error-inline{color:var(--danger);font-weight:600}
