/* Charte web DZ-IT v1.0.0 — variables, ponts Bootstrap et composants. Aplats uniquement, aucune ombre. */
:root{
 --dz-brand:#009673; --dz-primary:#00805F; --dz-deep:#00614A; --dz-ink:#1C2523; --dz-muted:#5F6567;
 --dz-bg:#F3F7F5; --dz-line:#DBE4E0; --dz-surface:#FFFFFF;
 --dz-danger:#D11A21; --dz-warn:#8A4B00; --dz-info:#237594;
 --dz-ok-bg:#E1F3EC; --dz-ok-fg:#00614A; --dz-warn-bg:#FFF1DC; --dz-warn-fg:#8A4B00;
 --dz-danger-bg:#FBE6E7; --dz-danger-fg:#D11A21; --dz-info-bg:#E3F1F7; --dz-info-fg:#237594;
 --dz-neutral-bg:#ECEFEE; --dz-neutral-fg:#5F6567;
 --dz-ok-bd:#b9e0d1; --dz-warn-bd:#f0d6a6; --dz-danger-bd:#f1bdc0; --dz-info-bd:#b7d8e5;
 --dz-banner:#00805F;
 --bs-body-font-family:"Century Gothic",CenturyGothic,"Apple Gothic","Segoe UI","Noto Sans Arabic",Tahoma,Arial,sans-serif;
 --bs-body-color:var(--dz-ink); --bs-body-bg:var(--dz-bg); --bs-body-font-size:.95rem;
 --bs-primary:#00805F; --bs-primary-rgb:0,128,95; --bs-success:#00805F; --bs-success-rgb:0,128,95;
 --bs-danger:#D11A21; --bs-danger-rgb:209,26,33; --bs-warning:#8A4B00; --bs-warning-rgb:138,75,0;
 --bs-info:#237594; --bs-info-rgb:35,117,148;
 --bs-link-color:var(--dz-deep); --bs-link-color-rgb:0,97,74; --bs-link-hover-color:var(--dz-primary);
 --bs-border-color:var(--dz-line); --bs-border-radius:.35rem; --bs-secondary-color:var(--dz-muted);
 --bs-focus-ring-color:rgba(0,150,115,.25);
}
:root[data-bs-theme="dark"]{
 color-scheme:dark;
 --dz-brand:#1FB68F; --dz-deep:#5FD6B3; --dz-ink:#E4ECE9; --dz-muted:#A0ADA9;
 --dz-bg:#111816; --dz-surface:#1A2421; --dz-line:#30403B;
 --dz-danger:#FF7378; --dz-warn:#F0B45A; --dz-info:#6FC1E0;
 --dz-ok-bg:#0F3A2E; --dz-ok-fg:#7FE0C0; --dz-warn-bg:#3E2D0E; --dz-warn-fg:#F2BC68;
 --dz-danger-bg:#44191C; --dz-danger-fg:#FF9A9E; --dz-info-bg:#12333F; --dz-info-fg:#86CBE6;
 --dz-neutral-bg:#26312E; --dz-neutral-fg:#B2BEBA;
 --dz-ok-bd:#1d5a48; --dz-warn-bd:#6b4d17; --dz-danger-bd:#7a2c31; --dz-info-bd:#1f5568;
 --dz-banner:#0B5C46;
 --bs-body-color:var(--dz-ink); --bs-body-bg:var(--dz-bg); --bs-border-color:var(--dz-line);
 --bs-link-color-rgb:95,214,179; --bs-focus-ring-color:rgba(31,182,143,.35);
}
*{box-shadow:none!important}
body{min-height:100vh;background:var(--dz-bg);color:var(--dz-ink)}
h1,h2,h3,h4,h5,.h1,.h2,.h3,.h4,.h5{color:var(--dz-deep);font-weight:700}
h1,.h1{font-size:1.3rem} h2,.h2{font-size:1.15rem} h3,.h3{font-size:1.05rem}
a{color:var(--dz-deep)} a:hover{color:var(--dz-primary)}
:focus-visible{outline:2px solid var(--dz-brand);outline-offset:1px}
.dz-muted{color:var(--dz-muted)}
.dz-req{color:var(--dz-danger)}
.dz-mono{font-family:ui-monospace,Consolas,"Courier New",monospace;direction:ltr;unicode-bidi:isolate}

/* Bandeau, filet, sous-barre */
.dz-banner{position:relative;z-index:1030;background:var(--dz-banner);color:#fff;min-height:52px;display:flex;align-items:center;gap:.75rem;padding:.35rem .9rem;flex-wrap:wrap}
.dz-banner .dz-brand{font-weight:700;letter-spacing:.06em;color:#fff;text-decoration:none;white-space:nowrap}
.dz-banner .dz-tag{font-size:.78rem;white-space:nowrap}
.dz-banner .btn-banner{color:#fff;border:1px solid rgba(255,255,255,.55);background:transparent;font-size:.82rem;font-weight:600;padding:.3rem .6rem;border-radius:.35rem}
.dz-banner .btn-banner:hover,.dz-banner .btn-banner:focus-visible{background:var(--dz-deep);color:#fff}
:root[data-bs-theme="dark"] .dz-banner .btn-banner:hover{background:#094636}
.dz-banner .dz-search{max-width:22rem;min-width:9rem;flex:1 1 9rem}
.dz-banner .dz-search input{border-color:#fff}
.dz-filet{height:4px;background:var(--dz-brand)}
.dz-subbar{background:var(--dz-surface);border-bottom:1px solid var(--dz-line);padding:.4rem .9rem;display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;position:sticky;top:0;z-index:1020}
.dz-subbar .form-select{max-width:16rem}
.dz-tabs{display:flex;gap:1.1rem;flex-wrap:wrap;border-bottom:1px solid var(--dz-line);margin-bottom:1rem}
.dz-tabs a{padding:.45rem 0;text-decoration:none;color:var(--dz-muted);border-bottom:3px solid transparent;font-weight:600}
.dz-tabs a.active{color:var(--dz-deep);font-weight:700;border-bottom-color:var(--dz-brand)}

/* Menu latéral */
.dz-side{background:var(--dz-surface);border:1px solid var(--dz-line);border-radius:.35rem}
.dz-side .dz-side-title{font-size:.74rem;text-transform:uppercase;font-weight:700;color:var(--dz-muted);padding:.7rem .9rem .3rem;letter-spacing:.03em}
.dz-side a{display:flex;justify-content:space-between;align-items:center;gap:.5rem;padding:.5rem .9rem;color:var(--dz-ink);text-decoration:none;border-inline-start:3px solid transparent;min-height:44px}
.dz-side a:hover{background:var(--dz-bg)}
.dz-side a.active{background:var(--dz-ok-bg);color:var(--dz-ok-fg);font-weight:700;border-inline-start-color:var(--dz-brand)}
@media (min-width:992px){.dz-side-wrap{width:15rem;flex:0 0 15rem}.dz-side{position:sticky;top:4rem}}
.offcanvas-lg{background:var(--dz-surface)}
.dz-main{flex:1 1 0;min-width:0}

/* Cartes, tableaux */
.card{background:var(--dz-surface);border:1px solid var(--dz-line);border-radius:.35rem;color:var(--dz-ink)}
.card-header{background:var(--dz-surface);border-bottom:1px solid var(--dz-line);color:var(--dz-deep);font-weight:700}
.dz-table{--bs-table-bg:var(--dz-surface);--bs-table-color:var(--dz-ink);--bs-table-border-color:var(--dz-line);font-size:.88rem}
.dz-table>thead>tr>th{background:var(--dz-banner);color:#fff;font-size:.72rem;font-weight:700;text-transform:uppercase;height:38px;vertical-align:middle;border-color:var(--dz-banner);white-space:nowrap}
.dz-table>tbody>tr:nth-child(even)>td{background:var(--dz-bg)}
.dz-table>tbody>tr>td{vertical-align:middle;color:var(--dz-ink)}
.dz-table.dz-click>tbody>tr[data-id]{cursor:pointer}
.dz-table.dz-click>tbody>tr[data-id]:hover>td{background:var(--dz-ok-bg)}
.dz-table tr.dz-total>td{background:var(--dz-ok-bg)!important;color:var(--dz-ok-fg);font-weight:700;border-top:2px solid var(--dz-brand)}
.dz-filter{max-width:13rem}

/* Saisies, boutons */
.form-label{font-size:.78rem;font-weight:700;margin-bottom:.2rem}
.form-control,.form-select{background-color:var(--dz-surface);border:1px solid var(--dz-brand);color:var(--dz-ink);border-radius:.35rem}
.form-control:focus,.form-select:focus{border-color:var(--dz-primary);background-color:var(--dz-surface);color:var(--dz-ink);outline:3px solid rgba(0,150,115,.2);outline-offset:0}
.form-control:disabled,.form-select:disabled,.form-control[readonly]{background-color:var(--dz-bg);border-color:var(--dz-line);color:var(--dz-ink)}
.form-control::placeholder{color:var(--dz-muted)}
.form-control.is-invalid,.form-select.is-invalid{border-color:var(--dz-danger)}
.invalid-feedback{color:var(--dz-danger);font-size:.78rem}
.invalid-feedback:empty{display:none!important}
.btn{font-weight:600;border-radius:.35rem}
.btn-primary,.btn-success{background:var(--dz-primary);border-color:var(--dz-primary);color:#fff}
.btn-primary:hover,.btn-primary:active,.btn-primary:focus-visible,.btn-primary:disabled{background:#00614A!important;border-color:#00614A!important;color:#fff!important}
.btn-outline-secondary{color:var(--dz-ink);border-color:var(--dz-muted);background:transparent}
.btn-outline-secondary:hover,.btn-outline-secondary:active,.btn-outline-secondary.show{background:var(--dz-neutral-bg)!important;color:var(--dz-ink)!important;border-color:var(--dz-muted)!important}
.btn-outline-danger{color:var(--dz-danger);border-color:var(--dz-danger)}
.btn-outline-danger:hover{background:var(--dz-danger-bg);color:var(--dz-danger-fg);border-color:var(--dz-danger)}
.btn-danger{background:#D11A21;border-color:#D11A21;color:#fff}
@media (max-width:991.98px){.btn:not(.btn-close),.form-control,.form-select{min-height:44px}}
.dropdown-menu,.modal-content{background:var(--dz-surface);color:var(--dz-ink);border:1px solid var(--dz-line);border-radius:.35rem}
.dropdown-item{color:var(--dz-ink)} .dropdown-item:hover,.dropdown-item:focus{background:var(--dz-ok-bg);color:var(--dz-ok-fg)}
.modal-header,.modal-footer{border-color:var(--dz-line)}

/* Statuts, alertes, notes, chiffres clés */
.dz-badge{display:inline-block;padding:.15rem .5rem;border-radius:.35rem;font-size:.74rem;font-weight:700;white-space:nowrap}
.dz-badge.ok{background:var(--dz-ok-bg);color:var(--dz-ok-fg)} .dz-badge.warn{background:var(--dz-warn-bg);color:var(--dz-warn-fg)}
.dz-badge.danger{background:var(--dz-danger-bg);color:var(--dz-danger-fg)} .dz-badge.info{background:var(--dz-info-bg);color:var(--dz-info-fg)}
.dz-badge.neutral{background:var(--dz-neutral-bg);color:var(--dz-neutral-fg)}
.alert{border-radius:.35rem;padding:.6rem .9rem}
.dz-alert-ok{background:var(--dz-ok-bg);color:var(--dz-ok-fg);border:1px solid var(--dz-ok-bd)}
.dz-alert-warn{background:var(--dz-warn-bg);color:var(--dz-warn-fg);border:1px solid var(--dz-warn-bd)}
.dz-alert-danger{background:var(--dz-danger-bg);color:var(--dz-danger-fg);border:1px solid var(--dz-danger-bd)}
.dz-alert-info{background:var(--dz-info-bg);color:var(--dz-info-fg);border:1px solid var(--dz-info-bd)}
.dz-note{font-size:.78rem;color:var(--dz-muted)}
.dz-stat{background:var(--dz-surface);border:1px solid var(--dz-line);border-radius:.35rem;text-align:center;padding:.8rem .5rem;height:100%;display:block;text-decoration:none}
.dz-stat:hover{border-color:var(--dz-brand)}
.dz-stat .lbl{font-size:.72rem;text-transform:uppercase;color:var(--dz-muted);font-weight:700}
.dz-stat .val{font-size:1.9rem;font-weight:700;color:var(--dz-deep);line-height:1.2}
.dz-token{font-family:ui-monospace,Consolas,monospace;background:var(--dz-bg);border:1px dashed var(--dz-brand);border-radius:.35rem;padding:.4rem .6rem;user-select:all;direction:ltr}
#toasts{position:fixed;inset-block-end:1rem;inset-inline-end:1rem;z-index:2000;max-width:min(26rem,calc(100vw - 2rem))}
dl.dz-dl{display:grid;grid-template-columns:minmax(8rem,auto) 1fr;gap:.25rem .9rem;margin:0}
dl.dz-dl dt{font-size:.78rem;font-weight:700;color:var(--dz-muted)} dl.dz-dl dd{margin:0;overflow-wrap:anywhere}

/* Jauge d'utilisation et carte de sous-réseau */
.dz-meter{background:var(--dz-neutral-bg);border-radius:.35rem;height:.6rem;min-width:5rem;overflow:hidden}
.dz-meter>span{display:block;height:100%;background:var(--dz-primary)}
.dz-meter.warn>span{background:var(--dz-warn)} .dz-meter.danger>span{background:var(--dz-danger)}
.dz-map{display:grid;grid-template-columns:repeat(auto-fill,minmax(2.35rem,1fr));gap:3px;direction:ltr}
.dz-cell{border:1px solid var(--dz-line);border-radius:.25rem;font-size:.7rem;text-align:center;padding:.3rem 0;background:var(--dz-surface);color:var(--dz-muted);cursor:pointer;line-height:1.1;font-family:inherit}
.dz-cell:hover{border-color:var(--dz-brand)}
.dz-cell.used{background:var(--dz-ok-bg);color:var(--dz-ok-fg);border-color:var(--dz-ok-bd);font-weight:700}
.dz-cell.gw{background:var(--dz-primary);color:#fff;border-color:var(--dz-primary);font-weight:700}
.dz-cell.dhcp{background:var(--dz-info-bg);color:var(--dz-info-fg);border-color:var(--dz-info-bd)}
.dz-cell.resv{background:var(--dz-warn-bg);color:var(--dz-warn-fg);border-color:var(--dz-warn-bd)}
.dz-cell.excl,.dz-cell.net{background:var(--dz-neutral-bg);color:var(--dz-neutral-fg)}
.dz-cell.net{cursor:default;text-decoration:line-through}
.dz-cell.obs{background:var(--dz-danger-bg);color:var(--dz-danger-fg);border-color:var(--dz-danger-bd)}
.dz-legend{display:flex;flex-wrap:wrap;gap:.4rem .9rem;font-size:.78rem}
.dz-legend .dz-cell{display:inline-block;width:1.6rem;cursor:default;margin-inline-end:.3rem}
.dz-indent{display:inline-block}
.dz-login{max-width:26rem;margin:8vh auto 2rem}

[dir="rtl"] .me-auto{margin-right:0!important;margin-left:auto!important}
[dir="rtl"] .dz-note-prefix{display:none}

@media print{
 .no-print,.dz-banner,.dz-filet,.dz-subbar,.dz-side-wrap,#toasts{display:none!important}
 :root,:root[data-bs-theme="dark"]{--dz-bg:#fff;--dz-surface:#fff;--dz-ink:#000;--dz-muted:#333;--dz-line:#bbb;--dz-deep:#000;--dz-banner:#00805F}
 body{background:#fff;color:#000}
}

/* Phase 2 : cases à cocher multiples (VLAN autorisés), fiche équipement */
fieldset legend.form-label{float:none;width:auto;margin-bottom:.2rem}
.dz-multi{border:1px solid var(--dz-brand);border-radius:.35rem;padding:.4rem .6rem;max-height:9rem;overflow:auto;background:var(--dz-surface)}
.form-check-input{border-color:var(--dz-brand);background-color:var(--dz-surface)}
.form-check-input:checked{background-color:var(--dz-primary);border-color:var(--dz-primary)}
[dir="rtl"] .modal-header .btn-close{margin-left:0;margin-right:auto}

/* Phase 4 : carte de topologie */
.dz-topo{border-top:1px solid var(--dz-line);border-bottom:1px solid var(--dz-line);background:var(--dz-surface);touch-action:none;direction:ltr}
.dz-topo svg{display:block;width:100%;height:min(68vh,640px);min-height:340px;cursor:grab;user-select:none}
.dz-topo .tp-node{cursor:move} .dz-topo .tp-link[data-open]{cursor:pointer} .dz-topo [tabindex]:focus-visible{outline:2px solid var(--dz-brand);outline-offset:2px}
.dz-legend svg.tp-link{vertical-align:middle}
.dz-legend .tp-link line{stroke-width:2.2;stroke:var(--dz-primary)} .dz-legend .tp-fiber line{stroke:var(--dz-info)} .dz-legend .tp-lag line{stroke:var(--dz-warn);stroke-width:4} .dz-legend .tp-wan line{stroke:var(--dz-danger)}
.dz-legend .tp-wifi line{stroke:var(--dz-muted);stroke-dasharray:3 4} .dz-legend .tp-dac line{stroke:var(--dz-deep)} .dz-legend .tp-other line{stroke:var(--dz-muted);stroke-dasharray:7 4}
@media print{.dz-topo svg{height:auto}}

/* Version 1.5.0 : étiquette QR (aperçu et impression de la seule étiquette) */
.dz-qr-label svg{max-width:100%;height:auto;border-radius:.35rem}
@media print{body.dz-print-label>*:not(.modal){display:none!important} body.dz-print-label .modal{position:static!important;display:block!important} body.dz-print-label .modal-dialog{max-width:none;margin:0}
 body.dz-print-label .modal-content{border:0} body.dz-print-label .modal-header,body.dz-print-label .modal-footer,body.dz-print-label .dz-note,body.dz-print-label .dz-token,body.dz-print-label .modal-backdrop{display:none!important}}

/* 1.5.1 : le menu du bandeau (compte, déconnexion) passe au-dessus de la barre de projet collante (z-index 1020) */
.dz-banner .dropdown-menu{z-index:1040}
