:root{--primary: #c8102e;--primary-dark: #970c23;--primary-soft: #fbe7ea;--bg: #fff5f6;--card: #ffffff;--text: #1a1a1a;--muted: #6b6b6b;--border: #ecd0d3;--ok: #2e7d32;--ok-soft: #e7f4e8;--warn: #b76a00;--danger: #970c23;--danger-soft: #fbe7ea;--info: #1d4ed8;--info-soft: #dbeafe;--radius: 10px;--shadow: 0 1px 3px rgba(200, 16, 46, .07), 0 4px 12px rgba(200, 16, 46, .05);--shadow-lg: 0 6px 24px rgba(15, 23, 42, .1), 0 2px 6px rgba(15, 23, 42, .05)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}.login-wrap{min-height:100vh;display:grid;place-items:center;background:radial-gradient(1200px 600px at 50% -10%,var(--primary-soft),var(--bg));padding:20px}.login-card{background:var(--card);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow-lg);padding:32px;width:100%;max-width:380px}.login-card .brand-badge{margin:0 auto 18px}.login-card h1{font-size:20px;margin:0 0 4px;text-align:center}.login-card p.sub{color:var(--muted);text-align:center;margin:0 0 22px;font-size:14px}.field{margin-bottom:14px}.field label{display:block;font-size:13px;font-weight:600;margin-bottom:6px;color:var(--text)}.input{width:100%;padding:11px 12px;border:1px solid var(--border);border-radius:var(--radius);font-size:14px;background:#fff;outline:none}.input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.btn{width:100%;padding:11px 14px;border:none;border-radius:var(--radius);font-size:15px;font-weight:600;cursor:pointer;transition:background .15s}.btn.primary{background:var(--primary);color:#fff}.btn.primary:hover{background:var(--primary-dark)}.btn.primary:disabled{opacity:.6;cursor:default}.err{color:var(--danger);font-size:13px;margin:0 0 12px;text-align:center}.app{display:flex;min-height:100vh}.sidebar{width:260px;flex-shrink:0;background:var(--card);border-right:1px solid var(--border);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand-badge{display:flex;align-items:center;gap:10px;font-weight:800;letter-spacing:.3px;color:#fff;background:linear-gradient(135deg,var(--primary),var(--primary-dark));padding:8px 12px;border-radius:12px;width:max-content}.brand-badge.lg{font-size:16px}.sidebar-head{padding:18px 16px;border-bottom:1px solid var(--border)}.sidebar-head .title{font-weight:700;font-size:15px;margin-top:12px}.sidebar-head .who{color:var(--muted);font-size:12px;margin-top:2px}.nav{padding:12px 10px;overflow-y:auto;flex:1}.nav-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:10px 12px;border:none;background:none;border-radius:var(--radius);font-size:14px;font-weight:600;color:var(--text);cursor:pointer;margin-bottom:4px}.nav-item:hover{background:var(--primary-soft)}.nav-item.active{background:linear-gradient(135deg,var(--primary),var(--primary-dark));color:#fff;box-shadow:0 2px 8px #c8102e4d}.nav-item .count{margin-left:auto;font-size:12px;font-weight:700;background:var(--primary-soft);color:var(--primary-dark);padding:1px 8px;border-radius:999px}.nav-item.active .count{background:#ffffff40;color:#fff}.sidebar-foot{padding:12px;border-top:1px solid var(--border)}.logout{display:flex;align-items:center;gap:8px;width:100%;justify-content:center;padding:9px;border:1px solid var(--border);background:#fff;border-radius:var(--radius);font-size:13px;font-weight:600;color:var(--muted);cursor:pointer}.logout:hover{border-color:var(--primary);color:var(--primary)}.btn-export{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:var(--radius);background:var(--primary);color:#fff;font-size:13px;font-weight:600;text-decoration:none;border:none;cursor:pointer;transition:background .15s}.btn-export:hover{background:var(--primary-dark)}.btn-export.full{width:100%;justify-content:center;margin-bottom:10px}.btn-refresh{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:var(--radius);background:#fff;color:var(--primary);border:1px solid var(--border);font-size:13px;font-weight:600;cursor:pointer;transition:border-color .15s,background .15s}.btn-refresh:hover{border-color:var(--primary);background:var(--primary-soft)}.btn-refresh:disabled{opacity:.6;cursor:default}.page-head .btn-refresh{margin-left:auto}.page-head .btn-refresh+.btn-export{margin-left:0}.main{flex:1;padding:28px 32px;max-width:1200px}.page-head{display:flex;align-items:center;gap:14px;margin-bottom:20px;flex-wrap:wrap}.page-head h1{font-size:24px;margin:0}.page-head .pill{font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;background:var(--primary-soft);color:var(--primary-dark)}.url-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin-bottom:24px}.url-card{background:var(--card);border:1px solid var(--border);border-left:4px solid var(--primary);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.url-card.test{border-left-color:var(--warn)}.url-card .row{display:flex;align-items:center;gap:8px}.url-card a{color:var(--primary);font-weight:700;text-decoration:none;word-break:break-all;font-size:14px}.url-card a:hover{text-decoration:underline}.url-meta{margin-top:8px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}.badge{font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;display:inline-flex;align-items:center;gap:4px}.badge.prod{background:var(--info-soft);color:var(--info)}.badge.test{background:#fff3e0;color:var(--warn)}.badge.port{background:var(--surface-2, #f1f3f9);color:var(--text-soft, #475569);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.badge.up{background:var(--ok-soft);color:var(--ok)}.badge.down{background:var(--danger-soft);color:var(--danger)}.badge.role{background:var(--primary-soft);color:var(--primary-dark)}.badge.status-actif{background:var(--ok-soft);color:var(--ok)}.badge.status-inactif{background:var(--danger-soft);color:var(--danger)}.toolbar{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}.search{position:relative;flex:1;min-width:220px;max-width:420px}.search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted)}.search input{width:100%;padding:10px 12px 10px 36px;border:1px solid var(--border);border-radius:var(--radius);font-size:14px;background:#fff}.search input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.count-note{color:var(--muted);font-size:13px}.table-wrap{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);overflow:auto;box-shadow:var(--shadow)}table{border-collapse:collapse;width:100%;font-size:13px}thead th{position:sticky;top:0;background:var(--primary-soft);color:var(--primary-dark);text-align:left;padding:10px 12px;font-weight:700;white-space:nowrap;font-size:12px;text-transform:uppercase;letter-spacing:.3px;border-bottom:1px solid var(--border)}tbody td{padding:9px 12px;border-bottom:1px solid #f3e7e9;white-space:nowrap}tbody tr:hover{background:#fff8f9}tbody tr:last-child td{border-bottom:none}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.pw{display:inline-flex;align-items:center;gap:6px}.pw button{border:none;background:none;cursor:pointer;color:var(--muted);padding:0;display:inline-flex}.pw button:hover{color:var(--primary)}.empty{padding:40px;text-align:center;color:var(--muted)}.loading{padding:60px;text-align:center;color:var(--muted)}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 760px){.app{flex-direction:column}.sidebar{width:100%;height:auto;position:static;flex-direction:row;flex-wrap:wrap}.nav{display:flex;flex-wrap:wrap}.main{padding:18px}}
