:root{--th-text:#5f6878;--bg:#f3f5f8;--panel:#fff;--panel2:#f8fafc;--text:#17202b;--muted:#636b7a;--line:#e3e7ee;--accent:#334155;--accent2:#111827;--ok:#dff6e7;--warn:#fff2cc;--danger:#fee2e2;--shadow:0 6px 24px rgba(15,23,42,.06);--radius:18px;--sidebar:230px}
[data-theme="dark"]{--th-text:var(--muted);--bg:#11151c;--panel:#181e27;--panel2:#202733;--text:#edf2f7;--muted:#9ba6b5;--line:#2b3441;--accent:#cbd5e1;--accent2:#f8fafc;--ok:#173b2a;--warn:#44391d;--danger:#4a2427;--shadow:0 8px 30px rgba(0,0,0,.22)}
*{box-sizing:border-box}html{min-height:100%}body{margin:0;min-height:100vh;font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;background:var(--bg);color:var(--text)}a{color:inherit}.app-shell{min-height:100vh;display:grid;grid-template-columns:var(--sidebar) 1fr}.sidebar{position:sticky;top:0;height:100vh;background:#111827;color:#e5e7eb;border-right:1px solid rgba(255,255,255,.06);padding:18px 14px;display:flex;flex-direction:column;gap:18px}.brand-wrap{display:flex;align-items:center;gap:10px;padding:5px 8px}.brand-mark{width:34px;height:34px;border-radius:10px;display:block;object-fit:cover;flex:0 0 auto}.brand{font-weight:900;letter-spacing:.13em;text-decoration:none}.sidebar nav{display:grid;gap:5px}.sidebar nav a{display:flex;align-items:center;gap:10px;padding:10px 11px;border-radius:10px;color:#cfd6df;text-decoration:none;font-size:14px}.sidebar nav a:hover,.sidebar nav a.active{background:rgba(255,255,255,.09);color:#fff}.sidebar-spacer{flex:1}.plan-chip{margin:0 7px;padding:9px 10px;border:1px solid rgba(255,255,255,.13);border-radius:12px;font-size:12px;color:#cfd6df}.content-shell{min-width:0}.topbar{position:sticky;top:0;z-index:15;height:64px;background:color-mix(in srgb,var(--panel) 92%, transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 22px;gap:14px}.top-left,.top-right{display:flex;align-items:center;gap:10px}.back-btn,.icon-btn{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:10px;padding:8px 10px;text-decoration:none;cursor:pointer}.page-title{font-weight:750;font-size:15px}.user-box{display:flex;align-items:center;gap:9px;padding:6px 9px;border-radius:12px;background:var(--panel2);border:1px solid var(--line)}.avatar{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--accent2);color:var(--panel);font-size:12px;font-weight:800}.user-meta{line-height:1.15}.user-name{font-size:13px;font-weight:700}.user-role{font-size:11px;color:var(--muted)}main{max-width:1320px;margin:0 auto;padding:22px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.page-head h1,.toolbar h1{margin:0;font-size:26px;letter-spacing:-.025em}.page-sub{color:var(--muted);font-size:13px;margin-top:5px}footer{color:var(--muted);font-size:11px;padding:18px 22px 28px;text-align:right}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:18px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:17px;box-shadow:var(--shadow)}.card.compact{padding:14px}.card h2,.card h3{margin:0 0 12px}.bento-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.bento-title{font-weight:750}.collapse-btn{border:0;background:transparent;color:var(--muted);padding:4px 6px;cursor:pointer}.bento.collapsed .bento-body{display:none}.bento.collapsed .bento-head{margin-bottom:0}.kpi{font-size:12px;color:var(--muted)}.kpi strong{display:block;font-size:29px;line-height:1.1;color:var(--text);margin-top:7px}.big{font-size:32px;font-weight:800}.muted{color:var(--muted)}.badge{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);font-size:11px}.urgent{background:var(--danger)}.high{background:#ffedd5;color:#7c2d12}.done{background:var(--ok)}.waiting{background:var(--warn)}.btn,button{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:0;border-radius:10px;background:var(--accent2);color:var(--panel);padding:10px 14px;text-decoration:none;cursor:pointer;font-weight:650}.btn.secondary,button.secondary{background:var(--panel2);color:var(--text);border:1px solid var(--line)}.btn.danger,button.danger{background:#b91c1c;color:white}.btn.small,button.small{padding:7px 9px;font-size:12px}form{display:grid;gap:12px}label{font-weight:650;font-size:12px;color:var(--text)}input,select,textarea{width:100%;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--panel);color:var(--text);outline:none}input:focus,select:focus,textarea:focus{border-color:#94a3b8;box-shadow:0 0 0 3px rgba(148,163,184,.15)}textarea{min-height:110px}.row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.toolbar{display:flex;gap:10px;justify-content:space-between;align-items:center;flex-wrap:wrap;margin-bottom:16px}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:15px;background:var(--panel)}table{width:100%;border-collapse:collapse;background:var(--panel)}th,td{padding:11px 12px;border-bottom:1px solid var(--line);text-align:left;font-size:13px;white-space:nowrap}th{background:var(--panel2);font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--th-text,var(--muted))}tr:last-child td{border-bottom:0}.flash{padding:12px 14px;border-radius:11px;margin-bottom:14px;border:1px solid var(--line)}.flash.ok{background:var(--ok)}.flash.err{background:var(--danger)}.timeline{border-left:2px solid var(--line);margin-left:8px;padding-left:18px}.event{margin:0 0 15px}.photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px}.photos img{width:100%;height:120px;object-fit:cover;border-radius:11px;border:1px solid var(--line)}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at top left,#e2e8f0,transparent 35%),var(--bg)}[data-theme="dark"] .login-page{background:radial-gradient(circle at top left,#263246,transparent 35%),var(--bg)}.login{width:min(430px,100%)}.login-brand{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:16px}.login-brand .brand-mark{width:42px;height:42px;border-radius:12px}.filterbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 14px}.pill{display:inline-flex;align-items:center;border:1px solid var(--line);background:var(--panel);border-radius:999px;padding:7px 10px;font-size:12px;color:var(--muted)}hr{border:0;border-top:1px solid var(--line);margin:18px 0}.mobile-nav-btn{display:none}
@media(max-width:1000px){.kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.app-shell{grid-template-columns:78px 1fr}.sidebar{padding:18px 10px}.brand span,.sidebar nav a span,.plan-chip{display:none}.sidebar nav a{justify-content:center;font-size:18px}.brand-wrap{justify-content:center}}
@media(max-width:700px){.app-shell{display:block}.sidebar{position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;height:64px;z-index:20;flex-direction:row;padding:7px 8px;border-right:0;border-top:1px solid rgba(255,255,255,.08)}.brand-wrap,.sidebar-spacer,.plan-chip{display:none}.sidebar nav{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;width:100%;gap:4px}.sidebar nav a{padding:7px 4px;justify-content:center;font-size:11px;flex-direction:column;gap:2px}.sidebar nav a span{display:block;font-size:10px}.sidebar nav a:nth-child(n+6){display:none}.topbar{height:58px;padding:0 12px}.page-title{display:none}.user-role{display:none}.user-box{padding:5px}.user-name{max-width:105px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kpi-grid{grid-template-columns:1fr 1fr}.row{grid-template-columns:1fr}main{padding:14px 12px 88px}.page-head,.toolbar{align-items:stretch;flex-direction:column}.toolbar>.btn,.page-head>.btn{width:100%}.grid{grid-template-columns:1fr}.card{border-radius:15px}.table-wrap{margin:0 -2px}footer{padding-bottom:82px;text-align:center}}
/* v0.1.5-op — accès admin garanti et Turnstile résilient */
.eyebrow{font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#7aaeff;margin-bottom:6px}.big-title{font-size:28px}.admin-entry{margin-top:18px;padding-top:14px;border-top:1px solid var(--line);text-align:center}.admin-entry a{font-size:11px;color:var(--muted);text-decoration:none}.admin-entry a:hover{color:var(--text);text-decoration:underline}.wide-login{width:min(620px,calc(100vw - 32px))}.checkline{display:flex;gap:9px;align-items:flex-start;font-weight:500;line-height:1.4}.checkline input{width:auto;margin-top:3px}.super-login-page{background:radial-gradient(circle at top left,#1d2b42,transparent 38%),#0d1118}.setting-row{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 0;border-bottom:1px solid var(--line)}.setting-row:last-of-type{margin-bottom:14px}.setting-row form{display:block}.status-chip{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:999px;padding:8px 12px;font-size:12px;font-weight:800;color:var(--muted);white-space:nowrap}.status-chip.ok{color:#58e0b2;border-color:rgba(88,224,178,.35);background:rgba(31,126,96,.14)}.status-chip.bad{color:#fca5a5;border-color:rgba(252,165,165,.35);background:rgba(127,29,29,.16)}.mail-card{margin-top:14px}.mail-card .bento-head{padding-bottom:15px;border-bottom:1px solid var(--line)}.field-help{display:block;margin-top:6px;color:var(--muted);font-size:11px;font-weight:400}.diagnostic{margin-top:16px;padding:12px 14px;border-radius:12px;background:var(--panel2);border:1px solid var(--line);font-size:12px;line-height:1.7}button:disabled,input:disabled{opacity:.55;cursor:not-allowed}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:2px 5px}
@media(max-width:700px){.setting-row{align-items:stretch;flex-direction:column}.setting-row form,.setting-row button{width:100%}.wide-login{width:100%}.mail-card .bento-head{align-items:flex-start}.status-chip{align-self:flex-start}}

/* v0.1.5-op — lien plateforme toujours visible sur les écrans publics */
.public-admin-entry{margin:14px auto 0;text-align:center;min-height:24px}.public-admin-entry a{display:inline-block;padding:7px 10px;font-size:11px;color:var(--muted);text-decoration:none;border-radius:8px}.public-admin-entry a:hover,.public-admin-entry a:focus{color:var(--text);background:var(--panel2);outline:none}.super-login-page .public-admin-entry a{color:#9ba6b5}
/* v0.1.7-op */
.lang-switch{display:inline-flex;gap:3px;padding:3px;border:1px solid var(--line);background:var(--panel);border-radius:9px}.lang-switch a{font-size:10px;text-decoration:none;color:var(--muted);padding:4px 5px;border-radius:6px}.lang-switch a.active{background:var(--accent2);color:var(--panel)}.public-lang{text-align:right;margin-bottom:8px}.action-row{display:flex;gap:6px;flex-wrap:wrap}.form-actions{display:flex;gap:8px;flex-wrap:wrap}.danger-zone{border-color:#fecaca}.doc-preview{background:white;color:#18202b;border:1px solid #d9dee6;border-radius:12px;padding:20px}.address-line{white-space:normal;min-width:170px}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;background:#94a3b8}.status-dot.on{background:#22c55e}.template-help{font-size:11px;color:var(--muted);line-height:1.6}.template-help code{margin-right:4px}.warning-inline{padding:9px 11px;border-radius:9px;background:var(--warn);font-size:12px}
@media print{.sidebar,.topbar,footer,.no-print{display:none!important}.app-shell{display:block}main{padding:0}.card{box-shadow:none;border:0}}
.public-version{text-align:center;margin-top:10px;font-size:10px;color:var(--muted)}
/* v0.1.8-op — dashboard aging + work-order templates */
.age-legend{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px;font-size:11px;color:var(--muted)}
.legend{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:999px;padding:5px 8px}.legend.warning{background:#fff7d6;color:#7a5b00;border-color:#f2d87b}.legend.critical{background:#fee2e2;color:#991b1b;border-color:#fecaca}
[data-theme="dark"] .legend.warning{background:#4d3b12;color:#fde68a;border-color:#70591c}[data-theme="dark"] .legend.critical{background:#512121;color:#fecaca;border-color:#7f2d2d}
tr.age-warning td{background:rgba(245,158,11,.10)}tr.age-critical td{background:rgba(220,38,38,.11)}tr.age-critical td:first-child{box-shadow:inset 4px 0 0 #dc2626}tr.age-warning td:first-child{box-shadow:inset 4px 0 0 #f59e0b}
.template-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:14px}.template-lang textarea{min-height:120px}.brand-preview{display:flex;align-items:center;justify-content:center;min-height:120px;border:1px dashed var(--line);border-radius:12px;background:var(--panel2);margin-bottom:12px;padding:12px}.brand-preview img{max-width:100%;max-height:120px;object-fit:contain}.watermark-preview img{opacity:.18}.sticky-actions{position:sticky;bottom:12px;z-index:5;display:flex;justify-content:flex-end;margin-top:16px;padding:10px;background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--line);border-radius:13px;backdrop-filter:blur(6px)}
@media(max-width:900px){.template-grid{grid-template-columns:1fr}}

.public-trust{margin-top:14px;text-align:center;font-size:.84rem;color:var(--muted)}

/* v0.1.9-op — Swiss hosting trust mark */
.public-trust,.swiss-hosting-inline{display:inline-flex;align-items:center;justify-content:center;gap:6px}.public-trust{display:flex}.swiss-hosting-icon{position:relative;display:inline-flex;width:16px;height:16px;min-width:16px;border-radius:4px;background:#e21d2f;vertical-align:middle;box-shadow:inset 0 0 0 1px rgba(255,255,255,.18)}.swiss-hosting-icon:before,.swiss-hosting-icon:after{content:"";position:absolute;left:50%;top:50%;background:#fff;border-radius:.5px;transform:translate(-50%,-50%)}.swiss-hosting-icon:before{width:9px;height:3px}.swiss-hosting-icon:after{width:3px;height:9px}

/* v0.1.12-cl : le logo des pages publiques ramène à la page commerciale */
.login-brand{text-decoration:none;color:inherit}

/* v0.1.13-cl — fonctions Pro */
.pro-upsell{border:1px dashed #9db8ff;background:color-mix(in srgb,var(--panel) 85%,#4a86ff 15%)}
.pro-upsell .eyebrow{color:#2f6be0}
.role-legend{margin:0;padding-left:18px;color:var(--muted)}.role-legend li{margin:6px 0}
.source-badge{background:#e7efff;color:#1f4fb8}
.qr-mini{display:block;width:180px;height:180px;margin:6px 0 10px;border-radius:8px;border:1px solid var(--line)}
.hp-field{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.vendor-page .photos img,.report-page .photos img{max-width:120px;border-radius:8px}
.poster-body{background:#fff;color:#101626;margin:0}
.poster{max-width:780px;margin:0 auto;padding:28px 34px;text-align:center}
.poster-head{display:flex;align-items:center;gap:14px;justify-content:center;text-align:left;margin-bottom:12px;font-size:15px}.poster-head img{border-radius:10px}
.poster-lang h2{margin:8px 0 2px;font-size:22px}.poster-lang p{margin:0 0 6px;color:#3d4757;font-size:14px}
.poster-qr{width:300px;height:300px;margin:14px auto 6px;display:block}
.poster-url{font-size:11px;color:#5f6b7c;word-break:break-all}.poster-note{font-size:11px;color:#5f6b7c;margin-top:10px}
@media print{.no-print{display:none!important}.poster{padding:10mm}}

/* v0.1.13-cl : petits formulaires en ligne (filtre d'année, actions de tableau) */
form.inline{display:inline-flex;gap:6px;align-items:center}form.inline select{width:auto}

/* v0.1.17-cl : Health check aux couleurs de Nexikos (succès #0F9F6E / #37D399, alerte #D97706 / #F5A623, danger #DC2626 / #FF6B6B) */
:root{--hc-ok:#0F9F6E;--hc-warn:#D97706;--hc-ko:#DC2626;--hc-off:#64748B}[data-theme="dark"]{--hc-ok:#37D399;--hc-warn:#F5A623;--hc-ko:#FF6B6B;--hc-off:#94A3B8}
.hc-badge{display:inline-flex;align-items:center;gap:7px;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:700;color:var(--hc-c);background:color-mix(in srgb,var(--hc-c) 14%,transparent);border:1px solid color-mix(in srgb,var(--hc-c) 30%,transparent)}
.hc-dot{width:8px;height:8px;border-radius:50%;background:var(--hc-c);flex:0 0 auto}
.hc-ok{--hc-c:var(--hc-ok)}.hc-warn{--hc-c:var(--hc-warn)}.hc-ko{--hc-c:var(--hc-ko)}.hc-off{--hc-c:var(--hc-off)}
tr.hc-row td:first-child{box-shadow:inset 3px 0 0 var(--hc-c)}
.hc-summary{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:10px 12px;margin-bottom:10px;border-radius:12px;color:var(--hc-c);background:color-mix(in srgb,var(--hc-c) 12%,transparent);border:1px solid color-mix(in srgb,var(--hc-c) 30%,transparent)}.hc-summary .hc-dot{width:10px;height:10px}.hc-counts{color:var(--muted);font-size:12px;margin-left:auto}
/* v0.1.18-cl : avertissement de sauvegarde (inscription, export) et bandeau « conditions mises à jour » */
.backup-notice{font-size:12px;line-height:1.5;color:var(--muted);border-left:3px solid var(--line);padding:4px 0 4px 10px;margin:0 0 14px}
.terms-banner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;margin:0 0 16px;border-radius:11px;border:1px solid #D97706;background:color-mix(in srgb,#D97706 12%,var(--panel))}.terms-banner p{margin:0;flex:1 1 320px;font-size:13px}.terms-banner .action-row{display:flex;gap:8px;align-items:center}

/* v0.1.21-cl (exigence commune §7) : toute liste défile dans son cadre, en-tête de tableau toujours visible (fond opaque, deux thèmes). */
.table-wrap{max-height:clamp(320px,70vh,640px);overflow:auto;overscroll-behavior-y:auto;overscroll-behavior-x:contain} /* 0.2.2 : la molette passe à la page quand la liste ne déborde pas ou est à sa fin */
.table-wrap.hc-wrap{max-height:none} /* v0.2.0 : Health check entier, sans défilement interne (la ligne « Sauvegarde horaire » repoussait la dernière ligne sous la carte suivante) */
.hc-help{font-weight:400;font-size:12px;line-height:1.4;margin-top:3px;max-width:42ch} /* 0.2.6 : aide de la ligne « Base de données » (seuils, passage à Postgres ou MariaDB) */
.table-wrap th{position:sticky;top:0;z-index:2;background:var(--panel2);box-shadow:inset 0 -1px 0 var(--line)}

/* v0.1.23-cl : bandeau rouge « mot de passe par défaut encore actif » (administrateurs) */
.default-pw-banner{margin:0 0 14px;padding:12px 14px;border-radius:12px;background:#DC2626;color:#fff;font-size:14px;box-shadow:0 4px 14px rgba(220,38,38,.25)}[data-theme="dark"] .default-pw-banner{background:#B91C1C}

/* v0.1.26-cl : bandeau permanent du mode superpower */
.superpower-banner{margin:0 0 14px;padding:10px 14px;border-radius:12px;background:#7C3AED;color:#fff;font-size:13px}.superpower-banner a{color:#fff;text-decoration:underline}[data-theme="dark"] .superpower-banner{background:#6D28D9}

/* v0.1.26-cl : panneau de connexion au standard Nexikos — une seule carte compacte et centrée (logo + version en tête, formulaire,
   liens discrets centrés, langues en pied de carte), « Administration » et mention suisse sous la carte. */
.auth-shell{width:min(420px,100%);display:flex;flex-direction:column;align-items:stretch;gap:14px}
.auth-shell:has(.wide-login){width:min(620px,100%)}
.auth-card{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:26px 28px 18px;box-shadow:0 18px 50px rgba(15,23,42,.10)}
.auth-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}
.auth-head .login-brand{margin:0;justify-content:flex-start}.auth-head .login-brand .brand-mark{width:36px;height:36px;border-radius:10px}
.auth-version{font-size:11px;color:var(--muted);white-space:nowrap}
.auth-card .login.card,.auth-card .card{background:transparent;border:0;box-shadow:none;padding:0;width:auto;margin:0}
.auth-card h1{font-size:20px;letter-spacing:-.01em;margin:0 0 4px}.auth-card h1+p.muted,.auth-card .muted{font-size:13px}
.auth-card form{gap:12px;margin-top:12px}.auth-card form>a{justify-self:center;font-size:13px;color:var(--muted);text-decoration:none}
.auth-card form>a:hover,.auth-card form>a:focus{color:var(--text);text-decoration:underline}
.auth-card form>a.btn{justify-self:stretch;color:var(--text);font-size:14px}
.auth-card form>button{width:100%}
.auth-langs{margin-top:16px;padding-top:12px;border-top:1px solid var(--line);display:flex;justify-content:center}
.auth-langs .lang-switch{display:flex;gap:4px}.auth-langs .lang-switch a{font-size:12px;padding:4px 8px;border-radius:8px;text-decoration:none;color:var(--muted)}.auth-langs .lang-switch a.active{color:var(--text);font-weight:700;background:var(--panel2)}
.auth-foot{display:flex;flex-direction:column;align-items:center;gap:6px}.auth-foot .public-admin-entry{margin:0}.auth-foot .public-trust{margin:0;font-size:12px}
.auth-card .flash{font-size:13px}
@media(max-width:480px){.auth-card{padding:20px 18px 14px;border-radius:15px}}
.env-badge{display:inline-flex;align-items:center;padding:3px 9px;border-radius:7px;color:#fff;font-weight:800;font-size:11px;letter-spacing:.06em;text-transform:uppercase;line-height:1.4}.env-prod{background:#c62828}.env-ctlq{background:#18762f}.env-other{background:#3a3f4b}.auth-head .env-badge{margin-left:8px}
.poster-actions{display:flex;gap:10px;justify-content:center;margin-top:10px}
.mc-backdrop{position:fixed;inset:0;z-index:100;background:rgba(15,23,42,.55);display:grid;place-items:center;padding:16px}.mc-dialog{width:min(620px,100%);max-height:calc(100vh - 32px);overflow:auto;background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:16px;padding:20px;box-shadow:0 20px 60px rgba(0,0,0,.35)}.mc-dialog h2{margin:0 0 4px}.mc-grid{display:grid;grid-template-columns:150px 1fr;gap:8px 14px;margin:14px 0}.mc-grid dt{font-weight:700;font-size:12px;color:var(--muted)}.mc-grid dd{margin:0;word-break:break-word}.mc-list{margin:2px 0 0;padding-left:18px}.mc-note{font-size:12px}.mc-actions{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}.scroll-list{max-height:none} /* 0.2.8 : liste jamais dans une petite boîte à défilement — la page défile */
@media(max-width:560px){.mc-grid{grid-template-columns:1fr}.mc-grid dt{margin-top:6px}}
/* v0.1.35-cl (exigence commune §21) : le contenu suit la largeur de la fenêtre, de 320 à 2560 px, sans défilement horizontal de la page. */
main{max-width:none;padding:22px clamp(12px,2.2vw,40px)}
.grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}
.kpi-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr))}
.row{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr))}
.photos{grid-template-columns:repeat(auto-fill,minmax(min(100%,140px),1fr))}
.template-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr))}
.topbar{flex-wrap:wrap;height:auto;min-height:64px;padding-top:8px;padding-bottom:8px}.top-left,.top-right,.toolbar,.page-head,.action-row,.filterbar,.lang-switch{flex-wrap:wrap;min-width:0}.top-left>*,.top-right>*{min-width:0}
.grid>*,.kpi-grid>*,.row>*,.template-grid>*,.card{min-width:0}
img,video,iframe,canvas,svg{max-width:100%}.badge,.pill{white-space:normal;overflow-wrap:break-word;word-break:normal;hyphens:manual}.card,.flash,dd,p,label{overflow-wrap:break-word}
input,select,textarea{max-width:100%;min-width:0}
@media(max-width:700px){.sidebar nav{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}.sidebar nav a{min-width:64px}}
/* v0.1.36-cl : signalement de bugs */
.bug-link{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:650}.bug-sev{border:1px solid var(--line);border-radius:12px;padding:10px 12px;display:grid;gap:6px;margin:0}.bug-sev legend{font-weight:650;font-size:12px;padding:0 4px}
.bug-sev-bloquant{background:#fee2e2;color:#7f1d1d}.bug-sev-genant{background:#ffedd5;color:#7c2d12}.bug-sev-mineur{background:var(--panel2)}
.bug-system{background:#e0e7ff;color:#312e81;font-weight:600} /* v0.1.89 : bug créé automatiquement par le serveur */
.bug-st-nouveau{background:#dbeafe;color:#1e3a8a}.bug-st-en_cours{background:#fef3c7;color:#78350f}.bug-st-resolu{background:#dcfce7;color:#14532d}.bug-st-rejete{background:#e5e7eb;color:#374151}
td.wrap{white-space:normal;min-width:160px}.pre-wrap{white-space:pre-wrap;overflow-wrap:anywhere}.bug-errors{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px;margin:0;max-height:220px;overflow:auto;background:var(--panel2);padding:8px;border-radius:8px}.bug-shot{max-width:100%;border:1px solid var(--line);border-radius:10px}.filterbar .pill.active{background:var(--accent2);color:var(--panel);border-color:transparent}
@media(max-width:700px){.bug-link-label{display:none}}
/* v0.1.38-cl : pastilles du Health check cliquables */
a.hc-link{color:inherit;text-decoration:none;cursor:pointer}a.hc-link:hover,a.hc-link:focus-visible{text-decoration:underline}a.hc-link:hover .hc-badge,a.hc-link:focus-visible .hc-badge{filter:brightness(.95);box-shadow:0 0 0 2px color-mix(in srgb,currentColor 25%,transparent)}
.card[id]{scroll-margin-top:84px}.card.hc-target{box-shadow:0 0 0 3px #f59e0b;transition:box-shadow .3s}
/* v0.1.44-cl (§21 précisé) : la page suit la fenêtre, mais une carte ne s'étire pas — grilles en auto-fill (jamais auto-fit),
   une carte mesure entre N et environ 2N px, et c'est le nombre de cartes par ligne qui augmente. */
.grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,380px),1fr))}
.grid>.card:has(.table-wrap),.grid>.card.full{grid-column:1/-1}
.kpi-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,190px),1fr))}
.row{grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr))}
.template-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,460px),1fr))}
input,select,textarea{max-width:min(100%,1100px)}
.filterbar,.action-row,.lang-switch,.mc-actions{width:fit-content;max-width:100%}
main p,.muted{max-width:120ch}
/* v0.1.46-cl (§23) : réglages avancés de la liaison Zeus, repliés */
details.advanced{margin-top:12px;border-top:1px solid var(--line);padding-top:10px}details.advanced>summary{cursor:pointer;color:var(--muted);font-size:13px}[data-zeus-link]{font-family:ui-monospace,Consolas,monospace;font-size:12px;word-break:break-all}
/* 0.2.2 : tableau de bord de la Super console (apps-core console-dash) — mêmes teintes que les autres applications et que le Health check (--hc-*) : clair #0F9F6E / #D97706 / #DC2626 / #2563EB, sombre #37D399 / #F5A623 / #FF6B6B / #4C8DFF, violet #7D74E8. Les variables --ok/--warn/--danger de Fixly sont des fonds de badges, jamais des couleurs de texte ou de tracé. Contraste WCAG AA : chiffres (grand texte) ≥ 3:1, puces et libellés ≥ 4,5:1. */
body .acd{--acd-ok:var(--hc-ok);--acd-warn:var(--hc-warn);--acd-danger:var(--hc-ko);--acd-primary:#2563EB;--acd-lilac:#7D74E8;--acd-muted:#5D6677}
body .acd .acd-trend.good{color:color-mix(in srgb,var(--acd-ok) 68%,#000)}body .acd .acd-trend.bad{color:color-mix(in srgb,var(--acd-danger) 68%,#000)}
[data-theme="dark"] body .acd{--acd-primary:#4C8DFF;--acd-muted:#9BA6B5}
[data-theme="dark"] body .acd .acd-trend.good{color:var(--acd-ok)}[data-theme="dark"] body .acd .acd-trend.bad{color:var(--acd-danger)}
/* v0.1.47-cl (§24, précisé) : tableau de bord de l'Administration en « verre dépoli », dans les couleurs de Fixly (aucun gris chaud).
   Police système (Segoe UI Variable), cartes translucides floutées, arrondis de 18 px, graisses ≤ 600, pastilles en pilule aux couleurs inchangées. */
body.page-dashboard{font-family:"Segoe UI Variable Text","Segoe UI Variable","Segoe UI",system-ui,-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;font-weight:400;
  background:radial-gradient(900px 520px at 12% -8%,color-mix(in srgb,#3b82f6 14%,transparent),transparent 70%),radial-gradient(760px 480px at 92% 8%,color-mix(in srgb,#6366f1 12%,transparent),transparent 70%),var(--bg);background-attachment:fixed}
body.page-dashboard .card,body.page-dashboard .topbar,body.page-dashboard .table-wrap,body.page-dashboard .hc-summary{background:color-mix(in srgb,var(--panel) 88%,transparent);-webkit-backdrop-filter:blur(22px) saturate(140%);backdrop-filter:blur(22px) saturate(140%);border:1px solid color-mix(in srgb,var(--line) 75%,transparent)}
[data-theme="dark"] body.page-dashboard .card,[data-theme="dark"] body.page-dashboard .topbar,[data-theme="dark"] body.page-dashboard .table-wrap,[data-theme="dark"] body.page-dashboard .hc-summary{background:color-mix(in srgb,var(--panel) 82%,transparent);border-color:rgba(255,255,255,.08)}
body.page-dashboard .tg-track{font-weight:600} /* 0.2.9 : libellé ON/OFF de l'interrupteur (apps-core toggle, 700) ramené à la graisse maximale du tableau de bord */
body.page-dashboard .card,body.page-dashboard .table-wrap{border-radius:18px;box-shadow:var(--shadow)}
body.page-dashboard :is(h1,h2,h3,h4,h5,h6,strong,b,dt,.bento-title,.page-title,.brand,.big,.kpi strong,.user-name,.eyebrow,.env-badge){font-weight:600}
body.page-dashboard :is(button,.btn,label,th,.badge,.hc-badge,.status-chip,.pill,a.hc-link,.avatar){font-weight:500}
body.page-dashboard th{text-transform:none;letter-spacing:0;background:transparent}
body.page-dashboard :is(.hc-badge,.status-chip,.badge){border-radius:999px}
/* v0.1.49-cl (§26) : jauges de consommation et bandeau de limite */
.flash.warn{background:var(--warn)}.quota-gauge{margin:10px 0}.quota-head{display:flex;justify-content:space-between;gap:10px;font-size:13px}.quota-bar{height:8px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);overflow:hidden;margin-top:4px}.quota-bar span{display:block;height:100%;background:#16a34a}.quota-warn .quota-bar span{background:#f59e0b}.quota-full .quota-bar span{background:#dc2626}

/* v0.1.52-cl : contacts des artisans */
fieldset.contacts{border:1px solid var(--line,rgba(127,127,127,.25));border-radius:12px;padding:12px;margin:12px 0}fieldset.contacts legend{font-weight:600;padding:0 6px}
.contact-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;align-items:end;padding:8px 0;border-top:1px dashed var(--line,rgba(127,127,127,.25))}.contact-row:first-of-type{border-top:0}
ul.vendor-contacts{list-style:none;margin:6px 0 0;padding:0;font-size:13px}ul.vendor-contacts li{margin:2px 0;overflow-wrap:break-word}

/* v0.1.53-cl : menu latéral en mode clair — fond clair, texte foncé (le menu sombre reste réservé au mode sombre) */
:root:not([data-theme="dark"]) .sidebar{background:var(--panel);color:var(--text);border-right:1px solid var(--line)}
:root:not([data-theme="dark"]) .sidebar nav a{color:#475569}
:root:not([data-theme="dark"]) .sidebar nav a:hover,:root:not([data-theme="dark"]) .sidebar nav a.active{background:#e8eef7;color:#0f172a}
:root:not([data-theme="dark"]) .sidebar .brand{color:#0f172a}
:root:not([data-theme="dark"]) .plan-chip{border-color:var(--line);color:var(--muted)}
@media(max-width:700px){:root:not([data-theme="dark"]) .sidebar{border-right:0;border-top:1px solid var(--line);box-shadow:0 -4px 18px rgba(15,23,42,.06)}}
/* v0.1.53-cl : boutons des réglages jamais écrasés lettre par lettre */
.setting-row>div{min-width:0;flex:1 1 auto}.setting-row form{flex:0 0 auto}.setting-row button{white-space:nowrap}
@media(max-width:700px){.setting-row button{white-space:normal}}

/* v0.1.54-cl : modèles d'envoi */
input[type="color"]{height:42px;min-width:72px;padding:4px;cursor:pointer;background:var(--panel)}
.tpl-pick{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end}.tpl-pick label{flex:1 1 260px;margin:0}.tpl-pick button{width:auto}.tpl-pick a{align-self:center}
.tpl-form .grid{align-items:start}details.tpl-lang>summary{cursor:pointer;padding:2px 0 8px}ul.tpl-list{margin:6px 0 12px;padding-left:18px}

/* v0.1.55-cl : modèles d'envoi par zones (comme les modèles de facture de Billix), pastilles des forfaits */
.tpl-zones{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,380px),1fr));gap:16px;align-items:start}.tpl-zones .card{margin:0}
.tpl-assets{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,160px),1fr));gap:12px}.tpl-asset{display:grid;gap:6px;align-content:start}
.tpl-thumb{height:64px;display:flex;align-items:center;justify-content:center;border:1px dashed var(--line);border-radius:10px;background:var(--panel2);overflow:hidden}.tpl-thumb img{max-height:56px;max-width:100%}
.badge-row{display:flex;flex-wrap:wrap;gap:4px;min-width:96px}.badge-row .badge{white-space:nowrap;word-break:keep-all}td.num{text-align:right;font-variant-numeric:tabular-nums}
details.quick-building{border:1px dashed var(--line);border-radius:12px;padding:10px 12px;margin:4px 0 12px;background:var(--panel2)}details.quick-building>summary{cursor:pointer;font-weight:600}

/* v0.1.57-cl (§33) : « Compris » sur le bandeau du forfait */
.quota-banner{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}.quota-banner .quota-dismiss{margin:0 0 0 auto}.quota-banner .quota-dismiss button{white-space:nowrap}
/* v0.1.57-cl : récapitulatif du ticket aux couleurs de la société (fiche du ticket) et réglage des couleurs */
.ticket-bento{background:var(--bento-surface,#f4f2ee);color:var(--bento-text,#1c1c1c);border-left:6px solid var(--bento-accent,#8b7355);border-radius:12px;padding:16px 20px;margin:0 0 14px}.ticket-bento-kicker{font-size:12px;letter-spacing:2px;text-transform:uppercase;opacity:.7}.ticket-bento-title{font-size:18px;font-weight:600;margin:6px 0 10px;overflow-wrap:break-word}.ticket-bento dl{display:grid;grid-template-columns:minmax(110px,38%) 1fr;gap:4px 16px;margin:0}.ticket-bento dt{opacity:.72}.ticket-bento dd{margin:0;font-weight:600;overflow-wrap:break-word}@media (max-width:480px){.ticket-bento dl{grid-template-columns:1fr}.ticket-bento dd{margin-bottom:6px}}.color-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px 14px}.color-field input[type=color]{width:100%;height:38px;padding:2px;cursor:pointer}.brand-mail-preview{background:#fff;color:#1c1c1c;border:1px solid var(--line,#e3e3e3);border-radius:10px;padding:4px 16px;margin-top:10px;overflow:auto}
/* v0.1.60-cl (§43) : mise à jour annoncée */
.announce-banner{font-weight:600}
/* v0.1.61-cl : pied de page aligné (texte et pastille « hébergé en Suisse » sur la même ligne, centrés verticalement) */
footer{display:flex;flex-wrap:wrap;justify-content:center;text-align:center;align-items:center;column-gap:6px;row-gap:4px;line-height:16px}footer.acd-zoom-foot{justify-content:flex-end;text-align:right} /* 0.2.6 (RULE_FOOTER_CENTER) : pied de page groupé et centré ; le lien d'une carte agrandie de la console reste à droite */footer .swiss-hosting-inline{line-height:16px}
@media(max-width:700px){footer{justify-content:center}}
[data-ticket-actions]{flex-wrap:nowrap;gap:6px}[data-ticket-actions] form{margin:0}
/* v0.1.61-cl : formulaires de création repliés (artisans, immeubles) */
details.new-form{padding:0;background:transparent;border:0;box-shadow:none}details.new-form>summary{display:inline-flex;list-style:none;cursor:pointer;margin:0 0 4px}details.new-form>summary::-webkit-details-marker{display:none}details.new-form[open]{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow,none);padding:18px;border-radius:18px}details.new-form[open]>summary{margin-bottom:12px}details.new-form form{max-width:1100px}
/* v0.1.61-cl (§44) : forfait offert */
.offer-badge{white-space:nowrap;font-size:.95em}
/* v0.1.61-cl : listes Artisans et Immeubles lisibles (« la liste des artisans n'est pas visible ») : contacts et adresses passent à la ligne, actions toujours visibles */
[data-vendor-list] td,[data-building-list] td{white-space:normal;overflow-wrap:break-word;vertical-align:top}[data-vendor-list] td:nth-child(3){min-width:180px}
[data-vendor-list] td:last-child,[data-building-list] td:last-child{white-space:nowrap;width:1%}[data-vendor-list] td:last-child .action-row,[data-building-list] td:last-child .action-row{flex-direction:column;align-items:stretch;flex-wrap:nowrap;gap:6px}[data-vendor-list] td:last-child .action-row form,[data-building-list] td:last-child .action-row form{display:block;margin:0}[data-vendor-list] td:last-child .action-row button,[data-vendor-list] td:last-child .action-row .btn,[data-building-list] td:last-child .action-row button,[data-building-list] td:last-child .action-row .btn{width:100%;text-align:center}
[data-vendor-list] th:last-child,[data-building-list] th:last-child{width:1%}
/* v0.1.63-cl (§40) : menu du compte */
.account-menu{position:relative}.account-menu>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;padding:5px 10px 5px 5px;border:1px solid var(--line);border-radius:999px;background:var(--panel);font-weight:600;font-size:13px;max-width:260px}.account-menu>summary::-webkit-details-marker{display:none}
.account-menu .account-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.account-menu .menu-panel{position:absolute;right:0;top:calc(100% + 8px);z-index:60;min-width:270px;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 40px rgba(15,23,42,.18);padding:8px;display:flex;flex-direction:column}
.account-menu .menu-head{padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:6px}.account-menu .menu-head strong{display:block}.account-menu .menu-head small{display:block;font-size:12px;overflow-wrap:break-word}
.account-menu .menu-panel>a,.account-menu .menu-panel>.menu-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:9px;color:var(--text);text-decoration:none;background:none;border:0;font:inherit;font-size:14px;text-align:left;cursor:pointer;width:100%}
.account-menu .menu-panel>a:hover,.account-menu .menu-panel>.menu-item:hover,.account-menu .menu-panel>a:focus-visible,.account-menu .menu-panel>.menu-item:focus-visible{background:var(--soft,rgba(100,116,139,.12))}
.account-menu .menu-langs{display:flex;gap:4px;padding:8px 10px}.account-menu .menu-sep{border:0;border-top:1px solid var(--line);margin:6px 0}
.ico-mail{vertical-align:-3px}
@media(max-width:700px){.account-menu .account-name{display:none}.account-menu .menu-panel{position:fixed;left:12px;right:12px;top:60px;min-width:0}}
.feedback-dialog{border:1px solid var(--line);border-radius:16px;padding:20px;max-width:520px;width:calc(100% - 32px);background:var(--panel);color:var(--text)}.feedback-dialog::backdrop{background:rgba(15,23,42,.45)}
.feedback-dialog h2{display:flex;align-items:center;gap:8px;margin-top:0}.feedback-dialog .segmented{display:flex;gap:8px;margin:6px 0 10px}.feedback-dialog textarea{width:100%}
dl.kv{display:grid;grid-template-columns:minmax(140px,max-content) minmax(0,1fr);gap:6px 14px;margin:0}dl.kv>dd{min-width:0;margin:0;overflow-wrap:break-word}@media(max-width:480px){dl.kv{grid-template-columns:minmax(0,1fr);gap:2px}dl.kv>dd{margin-bottom:8px}} /* 0.2.8 : valeurs longues sur plusieurs lignes, entre les mots ; téléphone : libellé au-dessus de la valeur */dl.kv dt{color:var(--muted)}dl.kv dd{margin:0;overflow-wrap:break-word}

/* v0.1.63-cl : Organisations — « Forfait et rabais » replié, formulaires libellés, sans défilement horizontal */
.org-edit{min-width:0}.org-edit>summary{list-style:none;cursor:pointer;display:inline-block;white-space:nowrap}.org-edit>summary::-webkit-details-marker{display:none}
.org-edit-body{display:grid;gap:12px;margin-top:10px;min-width:240px;max-width:340px}.org-edit-form{display:grid;gap:8px;padding:10px;border:1px solid var(--line,rgba(127,127,127,.25));border-radius:12px}.org-edit-form label{display:grid;gap:4px;font-size:13px}.org-edit-form button{justify-self:start}
/* v0.1.63-cl : entrées-boutons du menu alignées à gauche comme les liens ; langues sans cadre */
.account-menu .menu-panel>.menu-item{justify-content:flex-start;font-weight:400;box-shadow:none;min-height:0;height:auto;margin:0}
.account-menu .menu-langs.lang-switch{border:0;background:none;box-shadow:none;align-self:flex-start}
/* v0.1.63-cl : fenêtre « Envoyer un message » — Message / Suggestion côte à côte, bouton radio devant le libellé */
.feedback-dialog .segmented{display:flex;gap:18px;margin:6px 0 12px}.feedback-dialog .segmented label{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-weight:500;margin:0}.feedback-dialog .segmented input{width:auto;margin:0}
.feedback-dialog h2{display:flex;align-items:center;gap:8px}
/* v0.1.63-cl : tableau des organisations sans défilement horizontal (en-têtes et e-mails à la ligne) */
.table-wrap:has([data-org-edit]) th{white-space:normal}.table-wrap:has([data-org-edit]) td{overflow-wrap:break-word}
/* v0.1.64-cl (§45, §46) : Mon compte — zones « Résilier » et « Supprimer », choix de la portée */
.danger-zone{margin-top:10px}.danger-zone>summary{list-style:none;cursor:pointer;display:inline-flex}.danger-zone>summary::-webkit-details-marker{display:none}
.danger-zone[open]>summary{margin-bottom:10px}.danger-zone .warn-text{border-left:3px solid var(--danger,#b91c1c);padding:6px 0 6px 12px;margin:10px 0}
.segmented-v{border:1px solid var(--line);border-radius:12px;padding:8px 12px;margin:8px 0;display:grid;gap:6px}.segmented-v legend{padding:0 6px;font-weight:600;font-size:13px}
.segmented-v label{display:flex;flex-direction:row;align-items:center;gap:8px;font-weight:500;margin:0}.segmented-v input{width:auto;margin:0}

/* v0.1.66-cl (§30) : pagination « 1–100 sur 5 000 » et recherche des listes */
.pager{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin:8px 0;font-size:13px}.pager-range{color:var(--muted,#64748b);font-weight:600}.pager-btns{display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.pager-btn{padding:4px 10px;border:1px solid var(--line);border-radius:8px;text-decoration:none;color:var(--text)}.pager-btn:hover{background:var(--soft,rgba(100,116,139,.12))}.pager-btn.disabled{opacity:.45;pointer-events:none}.pager-pos{padding:0 6px;color:var(--muted,#64748b)}
.list-search{align-items:flex-end;gap:8px;margin:6px 0}.list-search label{flex:1 1 220px}

/* v0.1.67-cl : cloche des notifications (actions externes), lues à l'ouverture */
.notify-menu{position:relative}.notify-menu>summary{list-style:none;cursor:pointer;position:relative}.notify-menu>summary::-webkit-details-marker{display:none}
.notify-count{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#dc2626;color:#fff;font:600 11px/18px system-ui,sans-serif;text-align:center}
.notify-panel{position:absolute;right:0;top:calc(100% + 8px);z-index:60;width:min(380px,calc(100vw - 24px));max-height:70vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 40px rgba(15,23,42,.18);padding:8px;display:flex;flex-direction:column}
.notify-panel .menu-head{padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:6px;display:grid;gap:2px}.notify-item{display:flex;gap:10px;padding:8px 10px;border-radius:9px;color:var(--text);text-decoration:none;align-items:flex-start}.notify-item:hover{background:var(--soft,rgba(100,116,139,.12))}
.notify-item.unread{background:rgba(37,99,235,.08)}.notify-item.unread strong::after{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;background:#2563eb;margin-left:6px;vertical-align:middle}.notify-txt{display:grid;gap:2px;min-width:0}.notify-txt small{overflow-wrap:break-word}.notify-empty{padding:10px}
.notify-list{display:flex;flex-direction:column}.notify-status{padding:6px 10px}.notify-status:empty{display:none}.notify-status p{margin:0}.notify-more{width:100%;margin-top:2px}.notify-error{display:grid;gap:8px}.notify-error-text{color:#b91c1c;font-weight:600}/* v0.1.90 : liste chargée à l'ouverture, « Voir plus » */
@media(max-width:700px){.notify-panel{position:fixed;left:12px;right:12px;top:60px;width:auto}}

/* v0.1.69-cl : compte rendu du test d'e-mail et du test de connexion SMTP (Super console) */
.mail-test-report{margin-top:12px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}.mail-test-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:8px}.mail-test-report dl{display:grid;grid-template-columns:minmax(120px,max-content) 1fr;gap:4px 12px;margin:0;font-size:13px}.mail-test-report dt{color:var(--muted)}.mail-test-report dd{margin:0;overflow-wrap:break-word}.mail-test-report details{margin-top:8px}.mail-test-report summary{cursor:pointer;font-size:12px;color:var(--muted)}.smtp-trace{margin:6px 0 0;padding:10px;max-height:320px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.45 ui-monospace,Consolas,monospace;background:var(--panel);border:1px solid var(--line);border-radius:8px}.status-chip.warn{background:var(--warn)}
@media (max-width:640px){.mail-test-report dl{grid-template-columns:1fr}.mail-test-report dt{margin-top:6px}}
/* v0.1.70-cl : version discrète en bas de la barre latérale (comme Nexikos) */
.sidebar-version{display:grid;gap:3px;margin:0 9px;padding:12px 2px 2px;border-top:1px solid rgba(255,255,255,.08);font-size:10.5px;line-height:1.25;color:#6b7689}.sv-line{display:flex;align-items:center;gap:6px;white-space:nowrap}.sv-dot{width:6px;height:6px;border-radius:50%;background:#22c55e;opacity:.8;flex:0 0 auto}.sv-ch{display:flex;align-items:center;gap:4px;font-size:9.5px;opacity:.85;white-space:nowrap}.sv-flag{flex:0 0 auto;width:10px;height:10px;border-radius:2px}
html[data-theme="light"] .sidebar-version{color:#98a2b3;border-top-color:#eef2f6}
/* v0.1.70-cl : quittance d'envoi qui disparaît après quelques secondes */
.flash.toast{position:fixed;right:18px;bottom:18px;z-index:300;max-width:min(420px,calc(100vw - 32px));margin:0;box-shadow:0 10px 30px rgba(0,0,0,.18);font-weight:500;transition:opacity .45s ease,transform .45s ease}.flash.toast.toast-out{opacity:0;transform:translateY(8px);pointer-events:none}
/* v0.1.70-cl : pipeline des tickets (tableau de bord et fiche) */
.pipeline{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;counter-reset:pipe}.pipe-stage a{display:flex;flex-direction:column;gap:4px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--panel2);text-decoration:none;position:relative}.pipe-stage a:hover{border-color:#94a3b8}.pipe-count{font-size:24px;font-weight:600;line-height:1}.pipe-label{font-size:12px;color:var(--muted)}.pipe-empty .pipe-count{color:var(--muted);font-weight:600}.pipe-stage a::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:3px;background:var(--pipe-c,#94a3b8)}
.pipe-open,.pipeline-steps [data-stage=open]{--pipe-c:#64748b}.pipe-assigned,.pipeline-steps [data-stage=assigned]{--pipe-c:#6366f1}.pipe-sent,.pipeline-steps [data-stage=sent]{--pipe-c:#0ea5e9}.pipe-in_progress,.pipeline-steps [data-stage=in_progress]{--pipe-c:#f59e0b}.pipe-waiting,.pipeline-steps [data-stage=waiting]{--pipe-c:#a855f7}.pipe-done,.pipeline-steps [data-stage=done]{--pipe-c:#16a34a}
.pipeline-steps{list-style:none;margin:0 0 16px;padding:10px 12px;display:flex;flex-wrap:wrap;gap:6px 4px;border:1px solid var(--line);border-radius:12px;background:var(--panel)}.pipeline-steps li{display:flex;align-items:center;gap:6px;padding:4px 10px 4px 4px;border-radius:999px;font-size:12px;color:var(--muted)}.pipeline-steps li+li::before{content:"›";margin:0 6px 0 -2px;color:var(--muted)}.step-dot{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;border:1px solid var(--line);font-size:11px;font-weight:600}.step-done .step-dot{background:var(--pipe-c);border-color:var(--pipe-c);color:#fff}.step-current{background:var(--panel2);color:var(--text);font-weight:600}.step-current .step-dot{background:var(--pipe-c);border-color:var(--pipe-c);color:#fff;box-shadow:0 0 0 3px color-mix(in srgb,var(--pipe-c) 25%,transparent)}.pipe-cancelled{display:inline-flex;padding:4px 10px;border-radius:999px;background:var(--danger);font-size:12px;font-weight:600}
@media(max-width:1000px){.sidebar-version{display:none}} /* v0.1.70-cl : comme l’ancien encart, masquée en barre étroite ou mobile */
/* v0.1.71-cl : vue Pipeline des tickets (colonnes par statut, inspirée de Billix Evo) */
.view-switch{display:inline-flex;gap:4px;padding:4px;margin:0 0 12px;border:1px solid var(--line);border-radius:12px;background:var(--panel)}.view-switch a{padding:7px 14px;border-radius:9px;text-decoration:none;font-size:13px;font-weight:500;color:var(--muted)}.view-switch a.active{background:var(--panel2);color:var(--text);font-weight:600}
.pipe-filter{margin-bottom:14px}
.ticket-board{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(230px,1fr);gap:12px;overflow-x:auto;padding-bottom:8px;align-items:start;scroll-snap-type:x proximity}
.ticket-board .lane{scroll-snap-align:start;display:flex;flex-direction:column;min-width:0;min-height:10rem;max-height:calc(100vh - 230px);background:var(--panel);border:1px solid var(--line);border-top:4px solid var(--pipe-c,#94a3b8);border-radius:var(--radius);padding:10px 10px 8px;box-shadow:var(--shadow)}
.ticket-board .lane-head{flex:none;display:flex;flex-direction:column;gap:2px;margin-bottom:8px}.ticket-board .lane-head h2{font-size:14px;margin:0;font-weight:600}.lane-count{display:inline-grid;place-items:center;min-width:22px;height:22px;padding:0 6px;border-radius:999px;background:var(--panel2);font-size:12px;font-weight:500;margin-left:4px}
.ticket-board .lane-cards{display:flex;flex-direction:column;gap:8px;overflow-y:auto;min-height:0}.lane-empty{margin:4px 2px}.lane-more{padding:2px 4px}
.lane-open{--pipe-c:#64748b}.lane-assigned{--pipe-c:#6366f1}.lane-sent{--pipe-c:#0ea5e9}.lane-in_progress{--pipe-c:#f59e0b}.lane-waiting{--pipe-c:#a855f7}.lane-done{--pipe-c:#16a34a}
.pipe-card{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:7px 9px;display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:1.3;min-width:0}.pipe-card.age-warning{border-left:3px solid #f59e0b}.pipe-card.age-critical{border-left:3px solid #dc2626}
.pipe-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.pipe-top a{white-space:nowrap}.pipe-top strong{font-weight:600}.pipe-age{margin-left:auto;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}.pipe-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
.pipe-meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0 6px;font-size:12px}.pipe-meta>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.pipe-menu{margin-left:auto}.pipe-menu[open]{flex-basis:100%}.pipe-menu>summary{list-style:none;cursor:pointer;display:block;width:fit-content;margin-left:auto;padding:0 7px;border-radius:6px;font-size:16px;line-height:1.3;letter-spacing:.05em;color:var(--muted)}.pipe-menu>summary::-webkit-details-marker{display:none}.pipe-menu>summary:hover,.pipe-menu[open]>summary{background:var(--panel);color:var(--text)}
.pipe-actions{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px;align-items:center}.pipe-actions form{margin:0;display:inline}.pipe-actions .btn.small,.pipe-actions button.small{padding:4px 8px;font-size:12px}
.pipe-filter{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px}.pipe-filter label{flex:0 1 280px}.pipe-filter button{width:auto}.lane-empty{font-size:13px}
/* v0.1.71-cl : envois du ticket (statut et erreur exacte de chaque tentative) */
.send-log td.send-err{white-space:normal;color:#b91c1c;max-width:420px;overflow-wrap:break-word}.send-log .st-sent{color:#15803d;font-weight:600}.send-log .st-failed,.send-log .st-blocked{color:#b91c1c;font-weight:600}
/* v0.1.72-cl : carte des envois compacte (3 visibles, le reste replié et défilant) */
.send-log h3{margin-bottom:8px}.send-log table.compact td,.send-log table.compact th{padding:6px 10px;font-size:12.5px}.send-log td{white-space:nowrap}.send-log td:nth-child(3),.send-log td:nth-child(4){white-space:normal;overflow-wrap:break-word}.send-log .send-by{font-size:12px}.send-older{margin-top:8px}.send-older summary{cursor:pointer;font-size:12.5px;color:var(--muted)}.send-older-wrap{overflow-x:auto;margin-top:6px}
/* v0.1.72-cl (§51) : titres de colonnes triables */
th.sortable,th[data-sort-col]{user-select:none}th .sort-link{color:inherit;text-decoration:none}th .sort-h:hover,th .sort-h:focus-visible{color:var(--text)}/* 0.2.5 apps-core sort-header : icône ⇅ sans transparence (couleur du titre), ▲ / ▼ en couleur du texte */:root{--sort-h-active:var(--text)}
/* v0.1.73-cl : retours de l'artisan (fiche ticket) */
.vendor-feedback{margin-bottom:16px}.vendor-feedback h3{margin-bottom:8px}.vf-appt{margin:0 0 8px}.vf-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.vf-list li{font-size:13px;line-height:1.4;overflow-wrap:break-word}.vf-date{color:var(--muted);font-variant-numeric:tabular-nums;font-size:12px}.vf-kind{display:inline-block;padding:1px 7px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);font-size:11px;font-weight:500;margin:0 4px}.vf-done{background:var(--ok)}.vf-older{margin-top:6px}.vf-older summary{cursor:pointer;font-size:12.5px;color:var(--muted)}
/* v0.1.74-cl : lien « Supprimer » discret dans l'en-tête du ticket */
button.link-danger{background:none;border:0;padding:6px 4px;color:#b91c1c;font-size:12.5px;font-weight:500;text-decoration:underline;text-underline-offset:2px;cursor:pointer}button.link-danger:hover{color:#7f1d1d}
/* v0.1.74-cl : libellé court du menu sur mobile (« Entretiens périodiques » → « Entretiens ») */
.sidebar nav a em{font-style:normal}.sidebar nav a em.ns{display:none}@media(max-width:700px){.sidebar nav a em.nl{display:none}.sidebar nav a em.ns{display:inline}}
.mc-sending{margin:10px 0 0;font-size:13px;color:var(--muted)}.mc-sending::before{content:"";display:inline-block;width:12px;height:12px;margin-right:8px;vertical-align:-2px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:mcspin .8s linear infinite}@keyframes mcspin{to{transform:rotate(360deg)}} /* v0.1.74-cl */
/* v0.1.76-cl (§57) : assistant de démarrage */
.onboarding{max-width:820px;margin:0 auto}.ob-top{display:flex;justify-content:flex-end;gap:8px;align-items:center;margin-bottom:10px}.ob-progress{margin-bottom:14px}.ob-progress-head{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:6px}.ob-bar{height:8px;border-radius:999px;background:var(--panel2);border:1px solid var(--line);overflow:hidden}.ob-bar span{display:block;height:100%;background:#2563eb;transition:width .3s}
.ob-steps{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px}.ob-steps li{padding:4px 10px;border-radius:999px;border:1px solid var(--line);font-size:12px;color:var(--muted)}.ob-steps li.current{color:var(--text);font-weight:600;border-color:#2563eb}.ob-steps li.done{background:var(--ok);color:var(--text)}.ob-steps li.skipped{text-decoration:line-through}
.ob-form h2{margin:0 0 6px}.ob-why{margin:0 0 4px}.ob-where{margin:0 0 12px}.ob-nav{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}.ob-recap{margin:8px 0 14px;padding-left:18px;display:grid;gap:4px}
.ob-card{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px;border-left:4px solid #2563eb}button.link-small{background:none;border:0;padding:0 2px;color:#2563eb;font-size:12px;font-weight:500;text-decoration:underline;cursor:pointer}

/* v0.1.77 — fiche du ticket : deux colonnes, récapitulatif compact, champs présentés comme un formulaire, actions en blocs */
.ticket-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);gap:16px;align-items:start;margin:0 0 16px}
.ticket-sheet{padding:0;overflow:hidden}
.ticket-sheet .ticket-bento{margin:0;border-radius:0;padding:14px 18px 12px}
.ticket-sheet .ticket-bento-title{margin:4px 0 10px}
.ticket-sheet .ticket-bento dl{display:flex;flex-wrap:wrap;gap:8px 26px}
.ticket-sheet .ticket-bento .tb-item{min-width:0}
.ticket-sheet .ticket-bento dt{font-size:11px;letter-spacing:.04em;text-transform:uppercase}
.ticket-sheet .ticket-bento dd{margin:2px 0 0;font-size:14px}
.tfield-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,220px),1fr));gap:14px;padding:16px 18px 18px}
.tfield{display:flex;flex-direction:column;gap:6px;min-width:0}
.tfield.wide{grid-column:1/-1}
.tfield-label{font-size:12px;font-weight:650;color:var(--muted)}
.tfield-value{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:9px 12px;min-height:38px;line-height:1.45;overflow-wrap:break-word}
.tfield-photos .tfield-value{background:transparent;border:0;padding:0}
.tfield .badge-row{display:flex;flex-wrap:wrap;gap:8px}
.ticket-actions{padding:16px 18px}
.ticket-actions h3{margin:0 0 4px}
.act-block{display:grid;gap:8px;margin:0;padding:12px 0 0;border-top:1px solid var(--line)}
.ticket-actions h3+.act-block{border-top:0;padding-top:6px}
.act-block+.act-block{margin-top:12px}
.act-title{font-size:11px;font-weight:750;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.act-sub{display:grid;gap:5px;font-weight:600;color:var(--muted)}
.act-row{display:flex;gap:8px;align-items:center}
.act-row select{flex:1 1 auto;min-width:0}
.act-row button{flex:0 0 auto;width:auto;margin:0}
.act-row.end{justify-content:flex-end}
.ticket-actions textarea{min-height:56px;resize:vertical}
.ticket-tools{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
@media (max-width:1100px){.ticket-layout{grid-template-columns:minmax(0,1fr)}}
/* v0.1.78 (§61, §62) — sablier apps-core : couleurs de Fixly (panneau, texte, bordure), clair comme sombre */
:root,[data-theme]{--surface:var(--panel);--border:var(--line)}
/* v0.1.77 (§60) — aucun élément ne touche un autre : au moins 4 px entre champs, cases et boutons empilés */
label+.action-row,.color-grid~.checkline,.row+.checkline,form+form,form+.action-row,.checkline+button{margin-top:10px}
label.check{display:inline-flex;gap:8px;align-items:center}label.check input[type=checkbox]{width:auto;margin:0}
form.inline{flex-wrap:wrap;gap:10px}.bento-body>form.inline{margin:6px 10px 6px 0}
.tfield-value{font-size:14px}.tfield-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr))}
.ticket-actions textarea,.ticket-actions select{font:inherit;font-size:14px}.ticket-actions textarea::placeholder{font-family:inherit}

/* v0.1.78 — pipeline sur la largeur de la page, sans défilement horizontal (« ça devrait tenir sur la page sans scroll, les bentos sont trop larges ») */
.ticket-board{grid-auto-flow:row;grid-auto-columns:auto;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;overflow-x:visible;scroll-snap-type:none}
.ticket-board .lane{padding:8px 8px 6px;min-height:8rem}
.ticket-board .pipe-card{padding:6px 8px}
.ticket-board .pipe-meta span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pipe-filter{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px}
.pipe-filter label{display:flex;align-items:center;gap:8px;margin:0;font-size:13px}
.pipe-filter select{width:auto;min-width:180px;max-width:100%}
.pipe-filter button{width:auto}
@media (max-width:1100px){.ticket-board{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:760px){.ticket-board{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:520px){.ticket-board{grid-template-columns:minmax(0,1fr)}.ticket-board .lane{max-height:none}}.pipe-filter label{white-space:nowrap;flex:0 1 auto}.pipe-filter select{width:260px;min-width:0}
/* v0.1.81 (§64) — double authentification : rien ne dépasse sur téléphone (sélecteur du niveau, QR, codes de secours) */
[data-twofa-policy]{max-width:100%}[data-twofa-policy] label{min-width:0;max-width:100%}[data-twofa-policy] select{width:100%;max-width:100%;min-width:0;text-overflow:ellipsis}
.twofa-qr{max-width:220px}.twofa-qr svg{width:100%;height:auto;display:block;background:#fff;padding:8px;border-radius:10px}
.twofa-codes{white-space:pre-wrap;font-family:ui-monospace,Consolas,monospace;font-size:14px;line-height:1.6;columns:2;margin:8px 0}
[data-twofa-key]{overflow-wrap:anywhere}
/* v0.1.87 — Bon en 1 clic : formulaire court, puces des artisans récents, barre d'action collante, compte à rebours d'annulation */
.bx{display:grid;gap:14px}
.bx fieldset.bx-step{border:0;margin:0;padding:0;min-width:0;display:grid;gap:10px}
.bx legend{font-weight:600;font-size:15px;margin:0 0 6px;padding:0}
.bx-chips{display:flex;flex-wrap:wrap;gap:8px}
.bx-chip{width:auto;margin:0;padding:7px 12px;border-radius:999px;border:1px solid var(--line);background:var(--panel2);color:var(--text);font-weight:600;font-size:14px;line-height:1.2;cursor:pointer;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bx-chip.is-active{background:var(--accent2);border-color:var(--accent2);color:var(--panel)}
.bx-search{position:relative;display:block;max-width:360px}
.bx-again-search{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px} /* v0.1.95 : « Rechercher » ne touche plus le premier « Refaire » (contrôle des chevauchements) */
.bx-again-search .bx-search{flex:1 1 220px;margin:0}
.bx-search input{padding-left:34px}
.bx-ico{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:17px;pointer-events:none}
.bx-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.bx-to{margin:0;display:flex;flex-wrap:wrap;gap:6px;align-items:baseline;overflow-wrap:break-word}
.bx-to[hidden],.bx-email[hidden]{display:none}
.bx-reuse{margin:6px 0 2px}.bx-reuse[hidden]{display:none}.bx-reuse button.link-small{font-size:13px;min-height:24px;text-align:left} /* 0.2.12 : lien discret sous la Description */
.bx-more{border:1px solid var(--line);border-radius:12px;padding:8px 12px}
.bx-more summary{cursor:pointer;color:var(--muted);font-size:14px}
.bx-more[open] summary{margin-bottom:8px}
.bx-actions{position:sticky;bottom:12px;z-index:5;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:10px;padding:10px;background:color-mix(in srgb,var(--panel) 94%,transparent);border:1px solid var(--line);border-radius:13px;backdrop-filter:blur(6px)}
.bx-actions button{width:auto;margin:0}
.bx-actions [data-bx-save]{order:0}
.bx-keys{order:1;font-size:13px}
.bx-again{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.bx-again li{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0}
.bx-again-txt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bx-again .btn{flex:0 0 auto}
.bx-meta::before{content:" · "}
.bx-dash{margin-bottom:16px}
.bx-dash-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.bx-next{margin-bottom:14px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}
.bx-check{display:flex;flex-wrap:wrap;gap:6px;align-items:baseline}
@media(max-width:700px){.bx-actions{bottom:72px}.bx-actions button{flex:1 1 140px}.bx-keys{display:none}.bx-again li{flex-wrap:wrap}.bx-again-txt{white-space:normal}}
.bx-dash strong,.bx-again strong,.bx-next strong,.bx-to strong{font-weight:600}

/* v0.1.88 — « aucun texte d'exemple grisé » (« Oui, partout ») : l'exemple passe en infobulle ; les champs de recherche montrent une loupe */
input[name="q"],input[type="search"]{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238b95a5' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4.3-4.3'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:10px center;background-size:15px 15px;padding-left:32px!important}
/* 0.2.13 : la feuille commune feedback.css (même classe .fb-field) effaçait la loupe de la recherche des tickets */
main .filter-bar .fb-field input[name="q"]{background-color:var(--panel);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238b95a5' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4.3-4.3'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:10px center;background-size:15px 15px;padding-left:32px}
/* 0.2.10 : nouveau logo (carré orange-rouge, « F » maison et clé ; coins arrondis transparents) et mot « Fixly » comme sur le logo horizontal */
.brand-mark,.login-brand .brand-mark,.auth-head .login-brand .brand-mark{border-radius:0}.brand,.login-brand .brand{font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;font-weight:600;letter-spacing:.01em;text-transform:none}
/* v0.1.94 — pastilles de priorité et d'état : fond neutre, point de couleur, lisibles en clair et en sombre */
.tk-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px 3px 8px;border-radius:999px;border:1px solid var(--line);background:var(--panel);color:var(--text);font-size:12px;font-weight:500;white-space:nowrap;line-height:1.5}
.tk-dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--tk-c,#94a3b8)}
.prio-low{--tk-c:#94a3b8}.prio-normal{--tk-c:#3b82f6}.prio-high{--tk-c:#f59e0b}.prio-urgent{--tk-c:#ef4444;border-color:color-mix(in srgb,#ef4444 45%,var(--line));font-weight:650}
.st-active{--tk-c:#3b82f6}.st-waiting{--tk-c:#f59e0b}.st-done{--tk-c:#10b981}.st-cancelled{--tk-c:#94a3b8;color:var(--muted)}
.st-done{border-color:color-mix(in srgb,#10b981 40%,var(--line))}
tr:has(.st-done) td,tr:has(.st-cancelled) td{color:var(--muted)}tr:has(.st-done) td a,tr:has(.st-cancelled) td a{color:inherit}

/* v0.1.95 : lien permanent vers les CGA (barre latérale, pages de connexion), Super console « CGA » (texte en 4 langues, versions, historique) */
.sv-terms{font-size:10px;color:inherit;opacity:.85;text-decoration:none;justify-self:start}.sv-terms:hover,.sv-terms:focus{opacity:1;text-decoration:underline}
.auth-terms{font-size:11px}.auth-terms .terms-link{color:var(--muted);text-decoration:none;padding:4px 8px;border-radius:8px}.auth-terms .terms-link:hover,.auth-terms .terms-link:focus{color:var(--text);text-decoration:underline}
.terms-tabs{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px}.terms-tabs a{padding:7px 12px;border:1px solid var(--line);border-radius:999px;background:var(--panel);color:var(--muted);text-decoration:none;font-size:13px;font-weight:500}.terms-tabs a.active{color:var(--text);border-color:var(--text)}
.terms-langs{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:14px}.terms-lang{border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:0;min-width:0;background:var(--panel)}.terms-lang legend{padding:0 6px;font-weight:600;font-size:13px}
.terms-body{width:100%;min-height:320px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.5;color:var(--text);background:var(--panel)}
.terms-confirm{margin:14px 0 6px;padding:10px 12px;border:1px solid color-mix(in srgb,#D97706 55%,var(--line));border-radius:10px;background:color-mix(in srgb,#D97706 10%,var(--panel))}
.terms-version-view summary{list-style:none;cursor:pointer}.terms-version-view[open]{min-width:min(70vw,640px)}.terms-version-lang{margin:10px 0}.terms-version-text{white-space:pre-wrap;max-height:260px;overflow:auto;font-size:12px;color:var(--muted);border:1px solid var(--line);border-radius:8px;padding:8px;margin-top:4px}
.terms-filters{align-items:flex-end;flex-wrap:wrap}
/* v0.1.95 : onglet « Connexions » (apps-core session-chart) — --ok de Fixly est un fond pâle : vert lisible pour « en ligne », bordures de Fixly */
[data-super-connections] .ac-sess{--acs-online:#15803d;--acs-border:var(--line)}[data-theme="dark"] [data-super-connections] .ac-sess{--acs-online:#4ade80}
/* v0.1.95 : « Super Leo » (picto, bandeaux, page d'appel, Super console) */
.leo-picto{flex:none;vertical-align:middle}.menu-panel>a[data-leo-link] .leo-picto{margin:0 1px}
.leo-banner{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:0 0 14px;padding:10px 14px;border-radius:12px;background:#fff4e0;color:#5a3410;border:1px solid #f0c48a;font-size:14px}.leo-banner>span{flex:1 1 240px;min-width:0}.leo-banner-form{display:block}.leo-banner-form button{white-space:nowrap}
.leo-banner-live{background:#fde7e7;color:#6e1d1d;border-color:#f2b1b1}
.leo-banner-helper{background:#1f3a8a;color:#fff;border-color:#18306f}.leo-banner-helper button.secondary{background:transparent;color:#fff;border-color:rgba(255,255,255,.65)}
.leo-head{display:flex;align-items:center;gap:16px;margin-bottom:12px}.leo-head h1{margin:0 0 4px;font-size:24px}.leo-head p{margin:0}
.leo-points{margin:0 0 16px;padding-left:20px;display:grid;gap:6px}.leo-form-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:10px}.leo-status{display:grid;gap:6px}.leo-status p{margin:0}
.leo-facts{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0 0 16px}.leo-facts dt{font-weight:650}.leo-facts dd{margin:0;min-width:0;overflow-wrap:break-word}
.leo-actions{margin:0 0 8px}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}
[data-leo-state]{white-space:nowrap;word-break:keep-all}.leo-state-live{background:#fde7e7;color:#8a1f1f;border-color:#f2b1b1}.leo-state-open{background:#fff4e0;color:#7a4a10;border-color:#f0c48a}.leo-state-active{background:#e0e8ff;color:#1f3a8a;border-color:#b8c7f5}
.leo-bug-hint{display:flex;align-items:center;gap:8px;margin:10px 0 0;font-size:14px}.leo-bug-hint a{font-weight:650}
[data-theme="dark"] .leo-banner{background:#3a2a12;color:#f6dcb4;border-color:#6b4a1c}[data-theme="dark"] .leo-banner-live{background:#3d1b1b;color:#f8caca;border-color:#6e2c2c}[data-theme="dark"] .leo-banner-helper{background:#1e3170;color:#fff;border-color:#2c4596}
[data-theme="dark"] .leo-state-live{background:#3d1b1b;color:#f8caca;border-color:#6e2c2c}[data-theme="dark"] .leo-state-open{background:#3a2a12;color:#f6dcb4;border-color:#6b4a1c}[data-theme="dark"] .leo-state-active{background:#1e2a52;color:#c7d4ff;border-color:#2c4596}
@media(max-width:700px){.leo-facts{grid-template-columns:1fr}.leo-head{align-items:flex-start}.leo-head .leo-picto-lg{width:48px;height:48px}.leo-banner-form,.leo-banner-form button{width:100%}}
/* v0.1.96 — mise en page sur grand écran (règle générale : boutons près du contenu principal, jamais à l'autre bout de l'écran) :
   contenu en cartes et formulaires limité à 1240 px, aligné à gauche ; listes à la largeur de leurs colonnes (1240 px au moins, plus si le
   tableau l'exige) ; en-têtes de page avec les boutons juste après le titre ; boutons d'action d'une ligne côte à côte ; formulaires
   avec les boutons à gauche sous les champs ; libellés au-dessus des champs. La zone principale garde toute la largeur (§21). */
:root{--content-max:1240px;--form-max:960px}
@media(min-width:701px){.toolbar,.page-head{justify-content:flex-start;column-gap:24px;align-items:center}}
.toolbar>div:first-child,.page-head>div:first-child{min-width:0}
main>*{max-width:var(--content-max)}
main>.card:has(table),main>.table-wrap,main>form:has(table),main>details.card:has(table){width:fit-content;min-width:min(100%,var(--content-max));max-width:100%}
main .table-wrap{max-width:100%}
td:has(>.action-row),th.actions-col{width:1%;white-space:nowrap}
td>.action-row{flex-wrap:nowrap;align-items:center;gap:6px;width:max-content}
td>.action-row>form,td>.action-row form.inline{display:inline-flex;margin:0}
td>.action-row .btn,td>.action-row button{width:auto;white-space:nowrap}
[data-vendor-list] td:last-child .action-row,[data-building-list] td:last-child .action-row{flex-direction:row;align-items:center;flex-wrap:nowrap}
[data-vendor-list] td:last-child .action-row button,[data-vendor-list] td:last-child .action-row .btn,[data-building-list] td:last-child .action-row button,[data-building-list] td:last-child .action-row .btn{width:auto}
[data-vendor-list] td,[data-building-list] td{padding-top:9px;padding-bottom:9px;vertical-align:middle}
label>input:not([type=checkbox]):not([type=radio]):not([type=hidden]),label>select,label>textarea{display:block;margin-top:5px}
form.card.bx,.bx-again-card,main>.bx-check,main>[data-bx-from],main>form.card:not(:has(table)),main>.card.edit-form{max-width:var(--form-max)}
.bx-actions{justify-content:flex-start}
.bx-dash-head{justify-content:flex-start}
.bx-again li{justify-content:flex-start}
.bx-again .btn{order:-1}
@media(max-width:700px){td>.action-row{flex-wrap:wrap;width:auto;max-width:100%}td:has(>.action-row){white-space:normal}}
/* artisans et immeubles (contacts et adresses longs) : sous 1280 px, les boutons passent à la ligne plutôt que de faire défiler la liste */
@media(max-width:1279px){[data-vendor-list] td:last-child .action-row,[data-building-list] td:last-child .action-row{flex-wrap:wrap;width:auto;min-width:96px}[data-vendor-list] td:last-child,[data-building-list] td:last-child{white-space:normal}}
.sticky-actions,.act-row.end{justify-content:flex-start;gap:10px;flex-wrap:wrap}
textarea{font:inherit}
@media(min-width:701px){main form:not(.inline)>button,main form:not(.inline)>.btn,main form:not(.inline)>a.btn{justify-self:start;width:auto;min-width:140px}}
/* v0.1.96 — accueil convivial (comme Billix) : Créer rapidement, 4 indicateurs, « À faire maintenant » ; « Vue détaillée » = tableau de bord complet */
:root{--home-tile:#e8eefc;--home-tile-ico:#1d4ed8;--home-danger:#b91c1c;--home-ok:#15803d;--home-warn:#a16207;--home-info:#1d4ed8}
[data-theme="dark"]{--home-tile:#1e2a4a;--home-tile-ico:#93b4ff;--home-danger:#f87171;--home-ok:#4ade80;--home-warn:#fbbf24;--home-info:#93b4ff}
.home-page{display:grid;gap:18px;max-width:var(--content-max)}
.home-page>.toolbar{margin-bottom:0}.home-head h1{font-size:26px}
.home-quick h2,.home-now h2{font-size:17px;margin:0 0 10px}
.home-quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.home-quick-tile{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:92px;padding:14px;border-radius:var(--radius);background:var(--home-tile);color:var(--text);font-weight:650;text-decoration:none;border:1px solid transparent}
.home-quick-tile:hover,.home-quick-tile:focus-visible{border-color:var(--home-tile-ico)}
.home-quick-ico{font-size:22px;line-height:1;color:var(--home-tile-ico)}
.home-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.home-kpi{display:flex;flex-direction:column;gap:4px;padding:16px 18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:var(--shadow);color:var(--text);text-decoration:none;min-width:0}
.home-kpi:hover{border-color:var(--accent)}
.home-kpi-label{color:var(--muted);font-size:14px}
.home-kpi-value{font-size:30px;font-weight:600;line-height:1.15;font-variant-numeric:tabular-nums}
.home-kpi-value.is-danger{color:var(--home-danger)}.home-kpi-value.is-ok{color:var(--home-ok)}.home-kpi-value.is-warn{color:var(--home-warn)}
.home-kpi-sub{color:var(--muted);font-size:13px}
.home-actions{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.home-action{display:flex;align-items:center;gap:14px;padding:12px 14px;border:1px solid var(--line);border-left:4px solid var(--home-info);border-radius:12px;background:var(--panel2)}
.home-action.tone-danger{border-left-color:var(--home-danger)}.home-action.tone-warn{border-left-color:var(--home-warn)}.home-action.tone-ok{border-left-color:var(--home-ok)}
.home-action-go{order:-1;flex:0 0 auto;white-space:nowrap;min-width:108px;justify-content:center}
.home-action-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 auto}
.home-action-text strong{font-weight:650;overflow-wrap:break-word}.home-action-text small{color:var(--muted);font-size:13px;overflow-wrap:break-word}
.home-empty{color:var(--home-ok);margin:0}.home-more{margin:10px 0 0}
@media(max-width:900px){.home-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.home-quick-grid{gap:8px}.home-quick-tile{min-height:76px;padding:10px;font-size:14px}.home-kpis{gap:8px}.home-kpi{padding:12px}.home-kpi-value{font-size:22px}
.home-action{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}.home-action-go{order:0;justify-self:start}}
/* v0.1.96 — numéro de version lisible (« écrit trop petit ») : taille du texte secondaire, contraste suffisant en clair et en sombre */
.sidebar-version{font-size:13px;line-height:1.35;gap:4px;color:#a9b3c1}
html[data-theme="light"] .sidebar-version{color:#5b6474}
.sv-line{font-weight:600}.sv-dot{width:8px;height:8px}
.sv-ch,.sv-terms{font-size:12px;opacity:1}.sv-flag{width:12px;height:12px}
.auth-version{font-size:13px}
[data-preview-inert]{cursor:default}
/* v0.1.96 — très grand écran (> 1600 px) : notifications et compte de la barre du haut s'arrêtent au bord droit des cartes (1240 px),
   au lieu de rester seuls à l'extrême droite ; la barre d'actions collante des formulaires suit déjà le bord du formulaire. */
@media(min-width:1601px){.topbar{padding-right:max(22px,calc(100% - clamp(12px,2.2vw,40px) - var(--content-max)))}}
/* v0.1.97 — écran rapide : « + » à côté des listes Artisan et Immeuble, panneau de création sur place */
.bx-pick{display:flex;align-items:flex-end;gap:8px;min-width:0}.bx-pick>label{flex:1 1 auto;min-width:0}
.bx-add{flex:0 0 auto;width:44px;height:42px;padding:0;font-size:22px;line-height:1;font-weight:600;justify-content:center}
.bx-new{border:1px solid var(--line);border-radius:12px;padding:12px;background:var(--panel2);display:grid;gap:10px}
.bx-new[hidden]{display:none}.bx-new-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-start}
.bx-new-actions button{width:auto;margin:0}[data-bx-new-err][hidden],[data-bx-new-ok][hidden]{display:none}
/* v0.1.98 — Super console « Utilisateurs » : formulaire d'ajout près du contenu (grand écran), une colonne sur téléphone */
.cu-page{display:grid;gap:16px;max-width:1080px}.cu-card{max-width:860px}.cu-form [hidden]{display:none!important}.cu-mode{border:1px solid var(--line);border-radius:12px;padding:10px 14px;display:grid;gap:8px;min-width:0;margin:0}.cu-mode legend{font-weight:650;font-size:12px;padding:0 4px}.cu-help{margin:-4px 0 0}.cu-search{grid-template-columns:minmax(0,2fr) minmax(0,1fr) auto}
@media(max-width:700px){.cu-form .row,.cu-search{grid-template-columns:minmax(0,1fr)}.cu-card,.cu-page{max-width:none}}
/* v0.1.99 : acceptation explicite des CGA (case obligatoire) et annonce d’une nouvelle version */
.terms-accept-form{flex:1 1 100%;display:flex;flex-direction:column;gap:8px;margin:0}.terms-accept-form .checkline{display:flex;gap:8px;align-items:flex-start;font-size:13px;font-weight:600;margin:0}.terms-accept-form .checkline input{flex:0 0 auto;margin-top:2px}.terms-banner.terms-upcoming{border-color:#2563EB;background:color-mix(in srgb,#2563EB 10%,var(--panel))}
/* v0.1.99 : Face ID / clés d'accès (connexion et Mon compte), utilisable à 390 px */
.passkey-login{margin-top:14px;display:flex;flex-direction:column;gap:8px}.passkey-or{text-align:center}.passkey-btn,.passkey-add button{display:inline-flex;align-items:center;justify-content:center;gap:8px}.passkey-btn{width:100%}.passkey-hint{margin:0;text-align:center}
.passkey-add{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-top:10px}.passkey-add label{flex:1 1 220px;min-width:0}.passkey-add button{flex:0 1 auto;max-width:100%;white-space:normal}
.passkey-login[hidden],.passkey-add[hidden],[data-passkey-unsupported][hidden],[data-passkey-message][hidden]{display:none!important}.passkey-table td{vertical-align:top}
/* 0.1.101 : « Connexion chiffrée » — en HTTPS seulement ; texte sur grand écran, cadenas seul sur téléphone et tablette ;
   dans la barre du haut seulement quand la version de la barre latérale est masquée (≤ 1000 px), sans jamais chevaucher les boutons. */
.secure-chip{display:inline-flex;align-items:center;gap:4px;margin-left:6px;padding:1px 7px;border-radius:999px;font-size:11px;font-weight:600;line-height:1.5;color:#15803d;background:rgba(22,163,74,.12);white-space:nowrap;flex:none;vertical-align:middle}
html[data-theme="dark"] .secure-chip,.sidebar .secure-chip{color:#4ade80;background:rgba(74,222,128,.12)}
html[data-theme="light"] .sidebar .secure-chip{color:#15803d;background:rgba(22,163,74,.12)}
.secure-chip svg{flex:none}
.secure-top{display:none;margin-left:0}
@media(max-width:1000px){.secure-top{display:inline-flex}}
@media(max-width:1024px){.secure-txt{display:none}.secure-chip{padding:2px 5px}}
/* 0.1.101 (tests en 4 langues) : sur téléphone, la règle générale « main{padding:22px …} » écrasait la marge du bas : le dernier
   bouton restait caché sous la barre de navigation fixe (64 px). */
@media(max-width:700px){main{padding-bottom:96px}}
/* 0.1.101 : barre de navigation du bas — colonnes compressibles (libellés allemands longs à 320 px), texte coupé proprement. */
@media(max-width:700px){.sidebar nav{grid-auto-columns:minmax(0,1fr)}.sidebar nav a{min-width:0;overflow:hidden}.sidebar nav a span{max-width:100%;overflow:hidden;text-overflow:clip;white-space:nowrap}}
/* 0.1.101 : en-tête des écrans de connexion — passe à la ligne plutôt que de déborder (cadenas, pastille d'environnement). */
.auth-head{flex-wrap:wrap;row-gap:6px}.auth-head>*{min-width:0}
/* 0.1.101 (tests en 4 langues, 320 px) : nom d'artisan très long dans les puces et les listes du bon en 1 clic — jamais plus
   large que l'écran (coupé avec « … », nom complet dans la liste). */
.bx-step>*,.bx-chips{min-width:0;max-width:100%}
.bx-chip{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bx-step select,.bx-step input,.bx-step label{max-width:100%;min-width:0}
.bx-step{grid-template-columns:minmax(0,1fr)}.bx-step select{width:100%}
/* v0.1.102 — aide contextuelle : « ? » discret à côté du titre ; 0.2.10 : ouvre le panneau « Aide et documentation » */
.ctx-help{position:relative;display:inline-grid;flex:0 0 auto;place-items:center;width:22px;height:22px;border-radius:50%;border:1px solid var(--line);color:var(--muted);font-size:12px;font-weight:600;line-height:1;text-decoration:none;user-select:none}
.ctx-help:hover,.ctx-help:focus-visible{color:var(--text);border-color:var(--accent)}
/* v0.1.104 : Administration → « Conformité » et veille technologique semestrielle */
.cpl-summary{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.cpl-card{margin:14px 0;padding:18px}.cpl-card h2{margin:0 0 6px}.cpl-card h3{margin:16px 0 6px;font-size:15px}
.cpl-cat{margin:22px 0 8px;font-size:17px}
.cpl-item{margin:8px 0;padding:0}.cpl-item>summary{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;padding:14px 16px;cursor:pointer;list-style:none}
.cpl-item>summary::-webkit-details-marker{display:none}.cpl-item>summary strong{flex:1 1 220px;min-width:0;overflow-wrap:break-word}
.cpl-next{color:var(--muted);font-size:12.5px}
.cpl-body{padding:0 16px 16px;border-top:1px solid var(--line)}.cpl-body form{display:grid;gap:10px;margin-top:10px}
.cpl-note{white-space:normal;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;overflow-wrap:break-word}
.cpl-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px}.cpl-grid label,.cpl-body label{display:grid;gap:4px;min-width:0}
.cpl-form{margin-top:8px}.cpl-form>summary{display:inline-flex;cursor:pointer;list-style:none}.cpl-form>summary::-webkit-details-marker{display:none}.cpl-form form{display:grid;gap:10px;margin-top:12px}
.cpl-facts{margin:0;padding-left:18px;color:var(--muted);font-size:13px;overflow-wrap:break-word}
/* 0.2.2 : « Lancer la veille » */
.cpl-watch-actions{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 12px}.cpl-watch-actions form{margin:0}
.cpl-watch-table td{vertical-align:top;overflow-wrap:break-word}
[data-watch-mark-form]{margin:6px 0}[data-watch-mark-form] summary{max-width:100%;white-space:normal;text-align:left}
@media(max-width:640px){.cpl-watch-table thead{display:none}.cpl-watch-table tr{display:block;padding:8px 0;border-bottom:1px solid var(--line,#e5e7eb)}.cpl-watch-table td{display:block;border:0;padding:2px 8px}.cpl-watch-table td:first-child{font-weight:600}}
.cpl-watch-row{border-top:1px solid var(--line);padding:8px 0}.cpl-watch-row>summary{cursor:pointer;overflow-wrap:break-word}
.cpl-kv{display:grid;grid-template-columns:minmax(120px,max-content) 1fr;gap:4px 12px;margin:8px 0 0}.cpl-kv dt{font-weight:600}.cpl-kv dd{margin:0;overflow-wrap:break-word}
@media(max-width:560px){.cpl-kv{grid-template-columns:1fr}.cpl-card{padding:14px}}
/* v0.1.107 — fiche du ticket : « Prochaine étape » (seul bouton principal), assignation immédiate de l'artisan, « Supprimer » discret */
.next-step-card{margin:6px 0 12px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}
.next-step-card .act-title{display:block;margin:0 0 8px}
.next-step-form{margin:0}
.btn.next-step-btn,button.next-step-btn{display:flex;width:100%;min-height:48px;padding:12px 14px;font-size:16px;font-weight:600;justify-content:center;align-items:center;flex-wrap:wrap;gap:2px 6px;text-align:center;white-space:normal;overflow-wrap:break-word;background:var(--accent2);color:var(--panel)}
a.btn.next-step-btn{color:var(--panel)}
.btn.next-step-btn.secondary,button.next-step-btn.secondary{background:var(--panel);color:var(--text);border:1px solid var(--line);font-size:15px}
.next-step-btn:focus-visible{outline:3px solid #2563eb;outline-offset:2px}
.next-step-sub{margin:6px 0 0;font-size:13px;color:var(--muted);text-align:center;overflow-wrap:break-word}
.assign-status{margin:6px 0 0;font-size:13px;color:var(--muted)}
.assign-status:empty{display:none}
.assign-status.ok{color:#15803d}
.assign-status.err{color:#b91c1c}
[data-theme="dark"] .assign-status.ok{color:#86efac}
[data-theme="dark"] .assign-status.err{color:#fca5a5}
[data-ticket-delete-head] button.danger{background:transparent;color:#b91c1c;border:1px solid #fca5a5}
[data-ticket-delete-head] button.danger:hover{background:#fef2f2}
[data-theme="dark"] [data-ticket-delete-head] button.danger{color:#fca5a5;border-color:#7f1d1d}
[data-theme="dark"] [data-ticket-delete-head] button.danger:hover{background:rgba(239,68,68,.12)}
/* Bureau : prochaine étape en tête du panneau « Actions » ; mobile (une colonne, actions sous la fiche) : même bloc avant la fiche.
   Un seul des deux est affiché (l'autre en display:none : ni visible, ni atteignable au clavier, ni lu). */
.ticket-layout .next-step-mobile{display:none;margin:0;padding:14px 16px;background:var(--panel)}
@media (max-width:1023.98px){.ticket-layout .next-step-mobile{display:block}.ticket-actions .next-step-desk{display:none}}
/* v0.2.1 (tests multi-navigateurs) : WebKit (Safari) compte la largeur de l'option la plus longue d'une liste dans le débordement de son libellé → défilement horizontal à 390 px (nouveau ticket, entretien : liste des immeubles). Même correctif que billix-core. */
label:has(select){min-width:0;overflow-x:clip;overflow-clip-margin:4px}
label select{max-width:100%}
.badge+.badge{margin-left:4px} /* v0.2.1 : badges côte à côte toujours séparés (Firefox arrondit l’espace à moins de 4 px) */
/* 0.2.1 : exploitant — chaque champ sur sa ligne, pastille « à compléter » détachée du champ voisin (contrôle des chevauchements) */
.operator-fields label{display:block;margin:0 0 12px}.operator-fields label .badge{display:inline-block;margin:0 0 4px 6px}
/* 0.2.2 : erreurs d'envoi quittancées (grisées, jamais supprimées) */
tr.bug-acked td{opacity:.62}tr.bug-acked td.bug-ack-cell{opacity:1}.bug-ack-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.bug-ack-bar form{margin:0}.bug-ack-cell{white-space:nowrap}@media (max-width:560px){.bug-ack-cell{white-space:normal}.bug-ack-bar .btn,.bug-ack-bar button{white-space:normal;text-align:left}}tr.mail-acked td{opacity:.62}tr.mail-acked td [data-mail-acked],tr.mail-acked td [data-mail-unack]{opacity:1}
.mail-ack-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}.mail-ack-bar form{display:flex;flex-wrap:wrap;gap:6px;align-items:flex-end;margin:0}.mail-ack-bar input[name=note],.mail-ack-one input[name=note]{max-width:220px}
.mail-ack-one{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.mail-pick{display:inline-flex;gap:4px;align-items:center}
/* 0.2.2 : deux choix l'un sous l'autre (« Clés utilisées par la Super console ») : écart de 10 px, jamais deux boutons radio qui se touchent (§60) */
fieldset.plain .checkline+.checkline{margin-top:10px}
.ht-table td.num,.ht-table th.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.ht-table tr.ht-total td{font-weight:600}.ht-trend{color:var(--hc-warn)}.ht-spark{display:block;max-width:100%}@media (max-width:560px){.ht-table .ht-trend svg{width:80px}} /* 0.2.3 : page « Temps de réponse » */
/* 0.2.3 : grands écrans — conteneur fluide (jusqu'à 1920 px, marges qui grandissent avec la fenêtre) ; tableaux, cartes et indicateurs
   utilisent la largeur ; les textes longs gardent une ligne lisible (environ 80 caractères) ; rien ne change sous 1320 px. */
/* consigne du 2026-10-25 (« garder une taille max, car sur grand écran cela devient vraiment très large ») : conteneur centré de 1 680 px
   au plus, marges = clamp(.75rem, 2.5vw, 4rem) ; en-tête (barre du haut) aligné sur le même conteneur ; recherche ≤ 640 px. */
:root{--fx-gutter:clamp(.75rem,2.5vw,4rem);--fx-container:1680px}
main{width:100%;max-width:calc(var(--fx-container) + 2 * var(--fx-gutter));margin-inline:auto;padding-inline:var(--fx-gutter)}
main .list-search input,main input[type=search]{max-width:640px}
/* 0.2.3 (consigne du 2026-10-25 : « le menu compte est loin du reste des éléments ») : au-delà de 1600 px, le contenu remplit le conteneur
   (cartes, tableaux, filtres jusqu'à 1 680 px) et l'en-tête (titre, boutons, menu compte) finit au même bord droit que le contenu. */
@media (min-width:1601px){:root{--content-max:100%}.home-page{max-width:none}main>.card:has(table),main>.table-wrap,main>form:has(table),main>details.card:has(table){width:auto;min-width:0}.topbar{padding-inline:max(var(--fx-gutter),calc((100% - var(--fx-container)) / 2))}}
.kpi-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,220px),1fr))}
@media (min-width:1600px){.template-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.ticket-layout{grid-template-columns:minmax(0,1fr) minmax(320px,420px)}}
.cu-card,.onboarding,.poster,.legal-intro,.hint,.muted.long,details.new-form .hint{max-width:min(100%,82ch)}

/* 0.2.3 : notification d'un ticket supprimé (grisée, sans lien, « Retirer ») ; page « introuvable » dans la mise en page */
.notify-item.notify-gone{opacity:.6;cursor:default;display:flex;gap:8px;align-items:flex-start}.notify-item.notify-gone .notify-txt{flex:1;min-width:0}.notify-gone-label{font-style:italic}.not-found .row-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
/* 0.2.4 — Administration : navigation standard (apps-core console-nav) en haut, plus de barre latérale ; contenu dans le conteneur borné */
.app-shell.console-shell{display:block}
.console-shell .content-shell{min-width:0}
.console-shell main section[id],.console-shell main .card[id]{scroll-margin-top:150px}
.cn-top .am-menu{margin-left:0}
/* 0.2.4 — listes déroulantes suivant le thème (signalement Nexikos 0.80.82 : options claires sur blanc en sombre) : fenêtre native du thème, options à couleurs explicites */
:root{color-scheme:light}[data-theme="dark"]{color-scheme:dark}
select option,select optgroup{background-color:var(--panel);color:var(--text)}
/* 0.2.5 (« les bentos sont mal organisés ») — fiches de détail : grille commune à deux colonnes dans le conteneur commun
   min(100 % − 2 × marge, 1 680 px). Colonne principale (≈ 2/3) : cartes empilées avec l'écart standard, sans trou ; colonne latérale
   (≈ 1/3) : « Actions » collante sous la barre du haut. Sous 1 024 px : une colonne, la colonne latérale juste après la fiche. */
main>.detail-layout{max-width:none}
.detail-layout{display:grid;grid-template-columns:minmax(0,2fr) minmax(300px,1fr);gap:16px;align-items:start;width:100%;max-width:none;margin:0 0 16px}
.detail-main,.detail-side{display:grid;gap:16px;align-content:start;min-width:0}
.detail-main>*,.detail-side>*{margin:0;width:auto;max-width:none;min-width:0}
.detail-side{position:sticky;top:76px;max-height:calc(100vh - 92px);overflow-y:auto;scrollbar-width:thin} /* défile puis rend la main à la page (aucun overscroll-behavior contain, groupe 127) */
.detail-main>.timeline h2{margin:0 0 10px;font-size:18px}
.ticket-actions .act-docs .act-row{display:flex;flex-wrap:wrap;gap:8px}
@media (max-width:1023.98px){.detail-layout{grid-template-columns:minmax(0,1fr)}.detail-main{display:contents}.detail-side{position:static;max-height:none;overflow:visible}.detail-main>*{order:3}.detail-main>:first-child,.detail-main>[data-ticket-details]{order:1}.detail-main>.next-step-mobile{order:0}.detail-side{order:2}}
@media print{.detail-layout{display:block}.detail-side{position:static;max-height:none;overflow:visible}}
.plain-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.plain-list li{min-width:0;overflow-wrap:break-word}.related-tickets h3{margin:0 0 8px}
/* 0.2.5 (« ici aussi c'est mal organisé ») — page « Forfait » : titre, consommation et grille sur les mêmes bords du conteneur commun ;
   grille remplie (N colonnes égales, 4 au plus), cartes de même hauteur, bouton en bas ; jauges contrastées (≥ 3:1), « illimité » sans barre. */
main>.plan-page{max-width:none}
.plan-page{display:grid;gap:16px;width:100%;min-width:0}.plan-page>*{margin:0;max-width:none;min-width:0}
.plan-grid{display:grid;grid-template-columns:repeat(var(--plans,3),minmax(0,1fr));gap:16px;align-items:stretch}
@media (max-width:1100px){.plan-grid{grid-template-columns:repeat(min(var(--plans,3),2),minmax(0,1fr))}}
@media (max-width:640px){.plan-grid{grid-template-columns:minmax(0,1fr)}}
.plan-card{display:flex;flex-direction:column;gap:8px;margin:0;min-width:0}.plan-card h2{margin:0}.plan-card .plan-price{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.plan-card .plan-tag{margin:0}
.plan-card.is-current{border:2px solid var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}
.plan-features{list-style:none;margin:4px 0 0;padding:0;display:grid;gap:5px;font-size:14px}.plan-features .plan-no{color:var(--muted)}.plan-features s{text-decoration-thickness:1px}
.plan-foot{margin-top:auto;padding-top:8px}.plan-foot form{margin:0}.plan-foot button{width:100%}.plan-foot .plan-base{margin:0}
.badge.plan-current{font-size:13px;padding:6px 12px;background:var(--accent);color:var(--panel);border-color:var(--accent)}
:root{--quota-track:#e5e7eb;--quota-ok:#15803d;--quota-warn:#b45309;--quota-full:#b91c1c}
[data-theme="dark"]{--quota-track:#2b3441;--quota-ok:#4ade80;--quota-warn:#fbbf24;--quota-full:#f87171}
.plan-page .quota-bar{height:10px;background:var(--quota-track);border:0}.plan-page .quota-bar span{background:var(--quota-ok)}.plan-page .quota-warn .quota-bar span{background:var(--quota-warn)}.plan-page .quota-full .quota-bar span{background:var(--quota-full)}
.quota-unlimited{margin-top:4px;font-size:13px;color:var(--muted);font-style:italic}

/* 0.2.5 : Administration › Forfaits — jauge de consommation par organisation (mêmes couleurs contrastées que la page Forfait) */
.quota-cell .quota-bar-sm{height:6px;min-width:72px;background:var(--quota-track);border:0}
.quota-cell .quota-bar-sm span{background:var(--quota-ok)}
.quota-cell.quota-warn .quota-bar-sm span{background:var(--quota-warn)}
.quota-cell.quota-full .quota-bar-sm span{background:var(--quota-full)}
/* 0.2.5 : menu du compte — « Envoyer un message » et « Se déconnecter » sont des <button class="am-item"> : la règle générale
   button{justify-content:center} les centrait (≈ 75 px de décalage). Icône et libellé alignés à gauche comme les liens du menu. */
button.am-item{justify-content:flex-start;text-align:left;margin:0;box-shadow:none;min-width:0;letter-spacing:normal;text-transform:none}
.am-item .ico-mail{vertical-align:middle;display:block;margin:0 auto}
/* 0.2.5 : Administration › fiche d'un forfait — le formulaire occupe la largeur du conteneur (plus de carte seule à 960 px) */
main>form.card.plan-form{max-width:none;width:100%}
/* 0.2.6 — Super console › Utilisateurs : « Mot de passe » (petite fenêtre) et action groupée « Envoyer un lien de réinitialisation » */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.cu-pw-dialog{width:min(520px,calc(100vw - 32px));max-width:min(520px,calc(100vw - 32px));box-sizing:border-box;overflow-x:hidden}
.cu-pw-dialog form{display:grid;gap:10px;min-width:0}
.cu-pw-dialog fieldset{border:0;padding:0;margin:0;display:grid;gap:6px;min-width:0}
.cu-pw-dialog .checkline{display:flex;align-items:flex-start;gap:8px;min-width:0;overflow-wrap:break-word}
.cu-pw-dialog .checkline input{flex:0 0 auto;margin-top:3px}
.cu-pw-help{margin:-2px 0 4px 26px}
.cu-pw-who{margin:0;overflow-wrap:break-word}
.cu-pw-temp{display:grid;gap:8px;padding:10px;border:1px solid var(--line);border-radius:12px;min-width:0}
.cu-pw-form:has(input[name="method"][value="link"]:checked) .cu-pw-temp{display:none}
.cu-pw-temp[hidden]{display:none}
.cu-pw-row{display:flex;gap:8px;align-items:center;min-width:0}
.cu-pw-row .password-wrap,.cu-pw-row>input{flex:1 1 auto;min-width:0}
.cu-pw-row button{flex:0 0 auto;min-height:40px}
.cu-pw-dialog .action-row{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
.cu-pw-open{white-space:nowrap}
.cu-table .cu-sel{width:44px;text-align:center}
.cu-table .cu-sel input{width:20px;height:20px}
.cu-bulk{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
/* 0.2.6 — « Mobile : les listes sont difficiles à faire défiler » : jusqu'à 760 px, la PAGE défile (aucun bloc de hauteur limitée qui défile
   dans le contenu), les longues listes deviennent des cartes touchables (recherche et pagination gardées), le tri reste visible au-dessus
   des cartes, cibles tactiles de 44 px au moins ; un tableau qui garde la forme d'un tableau ne défile qu'horizontalement. */
@media (max-width:760px){
  main .table-wrap,main .scroll-list,main .send-older-wrap,main .terms-version-text,main .bug-errors,main .smtp-trace,main .mc-list,main .brand-mail-preview,
  main .ticket-board .lane,main .ticket-board .lane-cards,main .detail-side{max-height:none!important}
  main .send-older-wrap,main .terms-version-text,main .bug-errors,main .smtp-trace,main .mc-list,main .ticket-board .lane-cards,main .detail-side{overflow:visible}
  main .table-wrap{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}
  main .table-wrap.m-cards{overflow:visible;border:0;background:transparent;border-radius:0}
  main .m-cards table{display:block;min-width:0;width:100%;border:0}
  main .m-cards tbody,main .m-cards thead{display:block}
  main .m-cards tr{display:block}
  main .m-cards tr.m-head{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px;padding:0;border:0;background:transparent}
  main .m-cards tr.m-head th{display:flex;align-items:center;min-height:44px;max-width:100%;padding:0 12px;border:1px solid var(--line);border-radius:999px;background:var(--panel);font-size:13px;white-space:nowrap;overflow-wrap:normal;word-break:normal;text-transform:none;letter-spacing:0;text-align:left}
  main .m-cards tr.m-head th:empty,main .m-cards tr.m-head th.m-nolabel{display:none}
  main .m-cards tr.m-head th a{display:flex;align-items:center;min-height:44px}
  main .m-cards tr:not(.m-head){position:relative;margin:0 0 10px;padding:10px 14px;border:1px solid var(--line);border-radius:14px;background:var(--panel);box-shadow:var(--shadow)}
  main .m-cards tr[data-m-href]{cursor:pointer}
  main .m-cards td{display:block;width:auto!important;max-width:none;padding:3px 0;border:0;white-space:normal!important;overflow-wrap:break-word;text-align:left}
  main .m-cards td[data-label]:not(:first-child)::before{content:attr(data-label);display:block;margin-bottom:1px;color:var(--muted);font-size:12px;font-weight:600}
  main .m-cards td:first-child{font-weight:600;font-size:15px}
  main .m-cards td:empty{display:none}
  main .m-cards td a,main .m-cards td button,main .m-cards td .btn,main .m-cards td select{min-height:44px}
  main .m-cards td a:not(.btn){display:inline-flex;align-items:center}
  main .m-cards td input[type=checkbox]{width:24px;height:24px}
  main .m-cards td .action-row{display:flex;flex-wrap:wrap;gap:8px}
  main .pager-btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;padding:0 12px}
  main .list-search input,main .list-search select,main .list-search button,main .filterbar a.pill,main .filterbar button{min-height:44px}
  main .pf-wrap>input{min-height:48px} main .pf-wrap>.pf-eye{width:44px;height:44px;max-height:44px} /* 0.2.9 : œil du champ mot de passe (password-field) — cible tactile de 44 px au téléphone */
}
/* 0.2.6 — pastille de statut longue (« Coupé (urgence) — config/.env ») : passe à la ligne au lieu de déborder ; cartes de listes : aucun texte plus large que l'écran */
.status-chip{max-width:100%;white-space:normal;overflow-wrap:break-word}
@media (max-width:760px){main .m-cards td,main .m-cards td *{white-space:normal!important;overflow-wrap:break-word;max-width:100%}main .m-cards td{min-width:0}}
@media (max-width:760px){main .m-cards form.inline,main .m-cards .quota-override{display:flex;flex-wrap:wrap;gap:6px;align-items:center}main input,main select,main textarea{max-width:100%;min-width:0}main .m-cards input:not([type=checkbox]):not([type=radio]){flex:1 1 90px}main .bento-head{flex-wrap:wrap;gap:8px}}
/* 0.2.6 — règle « pas de lien texte souligné pour la navigation » : contrôle « retour » commun (chevron dessiné, libellé, sans soulignement,
   couleur du thème, survol et focus, 44 px au téléphone) ; liens de navigation jamais aux couleurs par défaut du navigateur */
a.back-link,a[data-back-link]{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:6px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel);color:var(--text);text-decoration:none;font-weight:600;font-size:14px;line-height:1.2}
a.back-link:hover,a[data-back-link]:hover{background:var(--panel2);color:var(--text);text-decoration:none}
a.back-link:focus-visible,a[data-back-link]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.back-chev{display:inline-block;width:8px;height:8px;border-left:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);margin-left:3px;flex:0 0 auto}
.back-btn.back-link{padding:6px 10px}
nav a,.toolbar a.btn,.public-admin-entry a{text-decoration:none}
.public-admin-entry a{color:var(--text);font-weight:600}
@media (max-width:760px){a.back-link,a[data-back-link]{min-height:44px}}
@media (max-width:760px){.notify-panel{position:fixed;left:8px;right:8px;top:60px;width:auto;max-width:none}.notify-panel .menu-head{flex-wrap:wrap;min-width:0}}

/* 0.2.6 — panneau des notifications fermé : aucune boîte (rien ne compte dans la largeur de la page) ; ouvert au téléphone : textes repliés dans le panneau */
.notify-menu:not([open]) .notify-panel{display:none}
@media (max-width:760px){.notify-panel{overflow-x:hidden}.notify-panel .menu-head>*,.notify-panel .notify-txt>*{min-width:0;white-space:normal;overflow-wrap:break-word}}
/* 0.2.6 (RULE_COUNT_LINKS) : filtre affiché en pastille (« Forfait : Pro (4) ✕ »), un clic le retire */
.filter-pills{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}.filter-pill{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:4px 12px;border:1px solid var(--line);border-radius:999px;background:var(--panel2);color:var(--text);font-size:13px;font-weight:600;text-decoration:none}.filter-pill:hover,.filter-pill:focus-visible{background:var(--panel);color:var(--text);text-decoration:none;outline:2px solid var(--accent);outline-offset:1px}

/* 0.2.6 : croix ✕ au lieu des boutons « Retour » (View::close) — carré à coins arrondis en haut à droite de l'en-tête, même destination */
.close-x{display:inline-flex;align-items:center;justify-content:center;flex:none;width:40px;height:40px;margin-left:auto;padding:0;border:1px solid var(--line);border-radius:10px;background:var(--panel);color:var(--text);text-decoration:none;cursor:pointer;transition:background .15s,border-color .15s}
.close-x:hover{background:var(--panel2);border-color:var(--muted);color:var(--text);text-decoration:none}
.close-x:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.close-x-ico{display:block}
.card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.card-head>h1,.card-head>h2{margin-top:0}
.toolbar>.close-x{align-self:flex-start}
@media (max-width:760px){.close-x{width:44px;height:44px}}
@media(max-width:700px){.toolbar:has(>.close-x){flex-direction:row;flex-wrap:nowrap;align-items:flex-start}.toolbar:has(>.close-x)>:not(.close-x){flex:1 1 auto;min-width:0}}

/* 0.2.6 : « ↩ Retour » vers la page précédente (View::navBackLink), sur la ligne des boutons de l'en-tête */
.back-nav{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel);color:var(--text);text-decoration:none;font-size:14px;font-weight:600;white-space:nowrap}
.back-nav:hover{background:var(--panel2);border-color:var(--muted);color:var(--text);text-decoration:none}
.back-nav:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.back-nav-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.toolbar>.back-nav.is-inline{margin-left:auto}
@media (max-width:760px){.back-nav{min-height:44px}}

/* 0.2.6 : choix sélectionné nettement marqué dans toute rangée de choix (coche ✓, gras, fond plein, aria-pressed / aria-current) */
.pill.active,.lang-switch a.active,.bx-chip.is-active,.bx-chip[aria-pressed="true"],.view-switch a.active,.terms-tabs a.active{font-weight:600;background:var(--accent2);border-color:var(--accent2);color:var(--panel);box-shadow:0 0 0 2px var(--panel),0 0 0 4px var(--accent2)}
.pill.active::before,.lang-switch a.active::before,.bx-chip.is-active::before,.view-switch a.active::before,.terms-tabs a.active::before{content:"✓";margin-right:5px;font-weight:600}
.pill:not(.active),.bx-chip:not(.is-active){font-weight:500}
.segmented label:has(input:checked),.segmented-v label:has(input:checked){font-weight:600;color:var(--text)}
/* 0.2.6 : règle de l'œil — valeur enregistrée montrée sous le champ (60 s), coupée si elle est longue */
.secret-kept{display:block;margin-top:4px}.secret-kept .secret-value{display:inline-block;max-width:100%;overflow-wrap:anywhere;word-break:break-all;font-size:12px;padding:2px 6px;border-radius:6px;background:var(--soft,rgba(127,127,127,.12));color:inherit;user-select:all}
/* 0.2.6 (passage navigateur) : téléphone — la croix ✕ reste en haut à droite et les boutons de l'en-tête passent dessous (plus de chevauchement) */
@media(max-width:700px){.toolbar:has(>.close-x){flex-wrap:wrap}.toolbar:has(>.close-x)>.close-x{order:1}.toolbar:has(>.close-x)>:first-child{order:0;flex:1 1 0}.toolbar:has(>.close-x)>:not(:first-child):not(.close-x){order:2;flex:1 1 100%}
  main .m-cards tr.m-head th .sort-h{white-space:nowrap;max-width:100%;min-width:0;text-align:left}main .m-cards tr.m-head th .sort-h__label{overflow-wrap:normal;white-space:nowrap}}
/* 0.2.6 : œil des mots de passe et liens discrets lisibles (contraste ≥ 4,5:1), jamais soulignés (navigation) */
.pf-eye{--pf-ink:var(--text)}
button.link-small{text-decoration:none;color:#1d4ed8}[data-theme="dark"] button.link-small{color:#9ec1ff}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) button.link-small{color:#9ec1ff}}
/* 0.2.7 — pastilles d'âge des tickets (« pourquoi des différences de couleurs ? ») : la couleur n'est jamais seule */
p.age-legend{display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap;margin:6px 0 10px;font-size:12px;color:var(--muted);line-height:1.35}
.age-legend .legend{gap:6px;padding:3px 9px;font-weight:600}.legend-swatch{display:inline-block;width:10px;height:10px;border-radius:3px;background:currentColor;opacity:.75}
.age-legend .legend-note{font-size:11.5px}.age-legend .btn.small{margin-left:auto}
.age-pill{display:inline-flex;align-items:center;margin-left:6px;padding:1px 7px;border-radius:999px;font-size:11.5px;font-weight:600;line-height:1.5;white-space:nowrap;border:1px solid;vertical-align:middle;cursor:help}
.age-pill-warning{background:#fff7d6;color:#7a4b00;border-color:#e9b949}.age-pill-critical{background:#fee2e2;color:#8f1717;border-color:#f19c9c}
[data-theme="dark"] .age-pill-warning{background:#4d3b12;color:#fde68a;border-color:#8a6d22}[data-theme="dark"] .age-pill-critical{background:#512121;color:#fecaca;border-color:#954040}
.pipe-top .age-pill{margin-left:auto}
/* 0.2.7 — fiche immeuble : « Tickets de cet immeuble » */
.building-tickets .bt-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.building-tickets .bt-head h2{margin:0}
.bt-counts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0}
.bt-count{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--panel2);color:var(--text);text-decoration:none;min-height:44px}
a.bt-count:hover,a.bt-count:focus-visible{border-color:var(--btn-border,#4a6fd6);outline:none}.bt-count strong{font-size:20px;line-height:1.1}.bt-count span{font-size:12.5px;color:var(--muted)}.bt-count.is-zero{opacity:.8}
.bt-todo{box-shadow:inset 3px 0 0 #2563eb}.bt-working{box-shadow:inset 3px 0 0 #d97706}.bt-closed{box-shadow:inset 3px 0 0 #059669}
a.count-link{font-weight:600;text-decoration:none;color:inherit;border-bottom:0}a.count-link:hover{text-decoration:none;opacity:.85}
@media (max-width:420px){.bt-counts{grid-template-columns:1fr}}
/* 0.2.7 — Super console › Forfaits : « Consommation des organisations » compacte, formulaire « Ajuster les limites » étiqueté */
.quota-table td{vertical-align:middle}.quota-table .quota-cell{min-width:92px}.quota-adj-note{display:block;margin-top:2px;font-size:11.5px}
.badge.quota-adjusted{background:#ede9fe;color:#4c1d95;border:1px solid #c4b5fd;margin-left:4px;white-space:nowrap}[data-theme="dark"] .badge.quota-adjusted{background:#2e2552;color:#ddd6fe;border-color:#5b4a9c}
.quota-level{font-size:12.5px;font-weight:600;white-space:nowrap}.quota-level-2{color:#991b1b}.quota-level-1{color:#7a4b00}.quota-level-0{color:var(--muted);font-weight:500}
[data-theme="dark"] .quota-level-2{color:#fca5a5}[data-theme="dark"] .quota-level-1{color:#fde68a}
.btn.pill-btn{border-radius:999px;white-space:nowrap}
.quota-adjust{border:1px solid var(--line);border-radius:14px;background:var(--panel2);padding:14px 16px;margin:12px 0 14px;max-width:760px}
.quota-adjust .qa-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.quota-adjust h3{margin:0 0 4px;font-size:16px}
.qa-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin:10px 0}
.qa-field>label{display:block;font-weight:600;margin-bottom:4px}.qa-inputs{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.qa-inputs input[type=number]{width:110px;max-width:100%}
.qa-inputs .checkline{margin:0;min-height:44px;display:inline-flex;align-items:center;gap:6px}.qa-field .field-help{display:block;margin-top:4px;font-size:12px;color:var(--muted)}
/* 0.2.7 (règle du 01.11.2026) : « Lire les conditions » en pastille, même forme que le bouton d'acceptation, jamais souligné */
.terms-pill,a.terms-pill,button.terms-pill{border-radius:999px;text-decoration:none;min-height:36px;display:inline-flex;align-items:center;justify-content:center;padding:6px 14px;line-height:1.2}
a.terms-pill:hover,a.terms-pill:focus-visible{text-decoration:none}.terms-read-row{margin:-2px 0 4px}
/* 0.2.8 (demande du 03.11.2026 : les filtres des tickets « prennent trop de place ») : une ligne compacte sur grand écran,
   filtres repliables sur mobile, petit bouton « Filtrer » (filtrage automatique avec app.js) */
.filter-bar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px 10px;margin:0 0 12px;padding:10px 12px;background:var(--panel);border:1px solid var(--line);border-radius:14px}
.filter-bar .fb-field{display:flex;flex-direction:column;gap:3px;margin:0;min-width:0;font-size:12px;overflow-wrap:normal}
.filter-bar .fb-label{font-weight:650;white-space:nowrap;text-align:left;align-self:flex-start}
.filter-bar input,.filter-bar select{min-height:36px;padding:6px 9px;width:100%}
.filter-bar .fb-search{flex:2 1 200px}
.filter-bar .fb-fold{flex:3 1 460px;min-width:0}
.filter-bar .fb-fold>summary{display:none}
.filter-bar .fb-fields{display:flex;gap:8px 10px;align-items:flex-end}
.filter-bar .fb-fields>.fb-field{flex:1 1 140px}
.filter-bar .fb-fields>.fb-building{flex:1.4 1 170px}
.filter-bar .fb-actions{display:flex;gap:6px;align-items:center;flex:0 0 auto}
.filter-bar .fb-actions .btn{width:auto;min-height:36px;padding:6px 12px;white-space:nowrap}
.filter-bar .fb-clear span{white-space:nowrap}
.filter-bar .fb-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--btn-bg,#111827);color:var(--btn-text,#fff);font-size:12px;font-weight:600}
@media (max-width:1100px){.filter-bar .fb-clear span{display:none}}
@media (max-width:760px){
  .filter-bar{gap:8px;padding:8px 10px}
  .filter-bar .fb-search{flex:1 1 140px;order:1}
  .filter-bar .fb-actions{order:2}
  .filter-bar .fb-fold{order:3;flex:1 1 100%}
  .filter-bar .fb-fold>summary{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border:1px solid var(--line);border-radius:999px;cursor:pointer;font-weight:650;font-size:14px;list-style:none;white-space:nowrap}
  .filter-bar .fb-fold>summary::-webkit-details-marker{display:none}
  .filter-bar .fb-fold>summary::after{content:"▾";font-size:12px}
  .filter-bar .fb-fold[open]>summary::after{content:"▴"}
  .filter-bar .fb-fields{flex-direction:column;align-items:stretch;margin-top:8px}
  .filter-bar .fb-fields>.fb-field{flex:none}
  .filter-bar input,.filter-bar select,.filter-bar .fb-actions .btn{min-height:44px}
  .filter-bar .fb-label{font-size:12px}
}

/* 0.2.8 (règle du 03.11.2026 : « aucun libellé coupé au milieu d'un mot ») : titres de colonnes, pastilles, boutons et libellés ne coupent
   qu'entre les mots ; seules les valeurs techniques (clés, traces, adresses très longues dans les cellules) peuvent encore être coupées. */
th,th .sort-h,th .sort-h__label,.btn,button,.pill,.badge,.status-chip,.tab-count,.notify-count,.fb-label,summary{overflow-wrap:normal;word-break:normal;hyphens:manual}
th .sort-h__label{white-space:nowrap}
@media(max-width:760px){main .m-cards tr.m-head.m-sortbar::before{content:attr(data-sort-by);display:flex;align-items:center;min-height:44px;margin-right:2px;font-size:13px;font-weight:650;white-space:nowrap}
main .m-cards tr.m-head th.m-nosort{display:none}}
@media(max-width:760px){main .m-cards tr.m-head.m-nosortbar{display:none}}
/* 0.2.8 (règle du 02.11.2026) : bas du menu de gauche — « 🔒 Connexion chiffrée », « 🇨🇭 Données hébergées en Suisse », puis « Fixly <version> » ;
   menu replié (≤ 1000 px) : pictogrammes seuls, info au survol ; téléphone (barre du bas) : dans le menu « Compte » */
.sidebar-version .secure-side{margin-left:0;justify-self:start}
.sidebar-version .secure-side .secure-txt{display:inline}
.sidebar-version .sv-ch .sv-txt{white-space:nowrap}
@media(max-width:1000px) and (min-width:701px){
  .sidebar-version{display:grid;justify-items:center;gap:8px;margin:0 4px;padding:10px 0 2px}
  .sidebar-version .secure-side .secure-txt,.sidebar-version .sv-ch .sv-txt,.sidebar-version .sv-line,.sidebar-version .sv-terms{display:none}
  .sidebar-version .secure-side{padding:4px}
  .sidebar-version .sv-flag{width:16px;height:16px}
}
@media(max-width:700px){.sidebar-version{display:none}}
/* 0.2.8 : aide « Posez votre question » (recherche dans la documentation, dans le navigateur) et page Documentation */
.help-ask{display:block;margin:10px 0 0}
.help-ask-label{display:grid;gap:4px;font-size:12px}
.help-ask-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.help-ask-row input{flex:1 1 140px;min-width:0;width:auto;min-height:36px;padding:6px 9px}
.help-ask-row .btn{width:auto;min-height:36px;white-space:nowrap}
.help-answers:empty{display:none}
.help-answers{margin-top:8px;display:grid;gap:6px}
.help-results{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.help-results li{padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}
.help-result-title{font-weight:650;text-decoration:none}
.help-result-text,.help-none,.help-results-title{margin:3px 0 0;font-size:13px;color:var(--text)}
.help-results-title{font-weight:650}
.help-doc{max-width:900px}
.help-doc .help-ask{max-width:640px;margin:8px 0 16px}
.help-toc ul{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:0 0 14px;padding:0}
.help-toc a{display:inline-flex;align-items:center;min-height:32px;padding:4px 12px;border:1px solid var(--line);border-radius:999px;text-decoration:none;font-size:13px;font-weight:600}
.help-sec{scroll-margin-top:80px}
.help-sec h2{margin:22px 0 8px}.help-sec h3{margin:16px 0 6px}
.help-sec p,.help-sec li{line-height:1.5}
.help-note{padding:8px 12px;border-left:4px solid var(--line);background:var(--panel2);border-radius:6px}
@media(max-width:760px){.help-ask-row input,.help-ask-row .btn,.help-toc a{min-height:44px}}
/* 0.2.8 : « Afficher le lien » — champ en lecture seule + Copier, montré une seule fois */
.link-reveal{display:grid;gap:6px;margin:0 0 14px;padding:12px 14px;border:1px solid var(--line);border-left:4px solid var(--btn-border,#4a6fd6);border-radius:12px;background:var(--panel)}
.link-reveal label{font-size:13px}
.lr-row{display:flex;gap:8px;align-items:center}.lr-row input{flex:1 1 auto;min-width:0;font-family:ui-monospace,Consolas,monospace;font-size:13px}
.lr-row .btn{width:auto;white-space:nowrap}.lr-note{margin:0;font-size:12px}
@media(max-width:760px){.lr-row{flex-wrap:wrap}.lr-row .btn{min-height:44px}}
/* 0.2.8 (règle du 30.10.2026) : cloche — pastilles « Nouvelles » / « Toutes » (choix marqué), picto poubelle sur chaque ligne */
.notify-filter{display:flex;gap:6px;padding:8px 14px 4px}
.notify-pill{width:auto;min-height:32px;padding:4px 12px;border-radius:999px;border:1px solid var(--line);background:var(--panel);color:var(--text);font-size:13px;font-weight:600;cursor:pointer}
.notify-pill[aria-pressed="true"]{background:var(--btn-bg,#111827);border-color:var(--btn-border,#111827);color:var(--btn-text,#fff)}
.notify-pill[aria-pressed="true"]::before{content:"✓ "}
.notify-row{display:flex;align-items:stretch;gap:2px}.notify-row>.notify-item{flex:1 1 auto;min-width:0}
.notify-trash{flex:0 0 auto;width:40px;min-height:40px;margin:4px 6px 4px 0;padding:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:10px;background:transparent;color:#111;cursor:pointer}
html[data-theme="dark"] .notify-trash{color:#f3f4f6}
@media (prefers-color-scheme:dark){html:not([data-theme="light"]) .notify-trash{color:#f3f4f6}}
.notify-trash:hover,.notify-trash:focus-visible{border-color:var(--line);background:var(--panel2)}
@media(max-width:760px){.notify-pill,.notify-trash{min-height:44px}.notify-trash{width:44px}}
.checkline>span{flex:1 1 auto;min-width:0} /* 0.2.8 : texte + liens d’une case à cocher = un seul bloc (CGA à 1280 px) */
.help-doc .card-head h1{font-size:clamp(20px,6.2vw,28px);min-width:0} /* 0.2.8 : titre d’un seul long mot (« Documentazione ») + croix ✕ dans 320 px, sans couper le mot */
/* 0.2.9 (RULE_SHOW_KEYS) : ligne d'une clé de la console (masquée, œil, Copier) et mot de passe de confirmation */
.secret-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:8px 0}.secret-line .secret-kept{display:inline-block;margin:0;min-width:0;max-width:100%}.secret-line code{overflow-wrap:anywhere;word-break:break-all}
.secret-actions{display:inline-flex;align-items:center;gap:6px}.secret-eye{position:static;transform:none;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:1px solid var(--line);border-radius:10px;background:transparent;color:var(--text);cursor:pointer}
.secret-eye svg{width:22px;height:22px;pointer-events:none}.secret-eye .pf-off,.secret-eye[aria-pressed="true"] .pf-on{display:none}.secret-eye[aria-pressed="true"] .pf-off{display:block}
.secret-reauth{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px}.secret-reauth input{flex:1 1 180px;min-width:0;max-width:280px}
.secret-legacy .muted{font-size:12px}
/* 0.2.9 : assistant d'aide (réponse : chemin, titre, extrait surligné, étapes, « Ouvrir l'écran », « Lire », autres réponses) */
.help-hit{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--panel);min-width:0}
.help-crumb{margin:0 0 2px;overflow-wrap:anywhere}.help-hit-title{margin:0 0 6px;font-size:15px}
.help-excerpt{margin:0 0 6px;line-height:1.5;overflow-wrap:anywhere}.help-excerpt mark{background:rgba(250,204,21,.35);color:inherit;border-radius:3px;padding:0 1px}
.help-steps{margin:4px 0 8px;padding-left:22px}.help-steps li{margin:2px 0}.help-acts{margin:6px 0 0}
.help-more{margin-top:4px}.help-more summary{cursor:pointer;font-size:13px}.help-none{margin:0}
/* 0.2.10 : « Renvoyer à l'artisan » (1 clic) à gauche de « Refaire ce bon », en tête de la fiche ; visible à 320 px sans défiler */
.vr-group{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px;max-width:100%}
.vr-group form.inline{display:inline-flex;margin:0}
[data-vendor-resend]{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
[data-vendor-resend] .ico-env{flex:none}
[data-vendor-resend][aria-busy="true"]{cursor:progress;opacity:.75}
.vr-off{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px;max-width:100%}
.vr-off [data-vendor-resend][disabled]{opacity:.55;cursor:not-allowed}
.vr-why{flex-basis:100%;max-width:34ch;line-height:1.3}
@media (max-width:560px){.vr-group{width:100%}.vr-why{max-width:none}}
/* 0.2.10 : « Fermer cette fenêtre » sur la page de l'artisan (en haut et après confirmation), 320 px */
.vendor-close{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px}
.vendor-close-top{justify-content:flex-end}
.vendor-close-btn{display:inline-flex;align-items:center;gap:6px;min-height:44px;font-weight:600}
.vendor-close-msg{margin:0;padding:8px 10px;border-radius:9px;background:var(--panel);border:1px solid var(--line);font-weight:600}
.vendor-done{display:flex;flex-direction:column;gap:8px;margin:0 0 14px;padding:12px;border:1px solid var(--line);border-radius:11px}
.vendor-done .vendor-close{margin:0}
@media (max-width:400px){.vendor-close-top{justify-content:stretch}.vendor-close-btn{width:100%;justify-content:center}}
/* 0.2.11 : « Vérifier avant d'envoyer » — PDF du bon préparé après l'ouverture de la fenêtre */
.mc-spin{display:inline-block;width:.9em;height:.9em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;vertical-align:-.1em;animation:mc-spin .8s linear infinite}@keyframes mc-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.mc-spin{animation-duration:2.4s}}.mc-dialog [data-mc-send][disabled]{opacity:.6;cursor:progress}
/* 0.2.11 (RULE_HELP_ASSISTANT) : questions suggérées de l'assistant d'aide — boutons secondaires lisibles en clair et en sombre */
.help-suggest{margin:8px 0 0}.help-suggest p{margin:0 0 6px}.help-sq-list{display:flex;flex-wrap:wrap;gap:6px}.help-ask button.chip{background:var(--panel2);color:var(--text);border:1px solid var(--line);border-radius:999px;padding:5px 11px;font:inherit;font-size:13px;line-height:1.3;cursor:pointer;text-align:left;max-width:100%;white-space:normal}.help-ask button.chip:hover{border-color:var(--accent,currentColor)}.help-ask button.chip:focus-visible{outline:3px solid var(--focus,#2563eb);outline-offset:2px}
/* 0.2.11 : « Enregistrer » toujours visible sur un formulaire long (barre collante en haut du formulaire, sous la barre du haut) */
.form-sticky-save{position:sticky;top:calc(var(--fx-sticky-top,0px) + 6px);z-index:6;grid-column:1/-1;display:flex;justify-content:flex-end;gap:8px;margin:0 0 10px;padding:6px 8px;background:color-mix(in srgb,var(--panel) 92%,transparent);border:1px solid var(--line);border-radius:12px;backdrop-filter:blur(6px)}.form-sticky-save[hidden]{display:none}@media print{.form-sticky-save{display:none}}
/* 0.2.13 : menu « ⋯ » local retiré — module apps-core row-menu (public/apps-core/row-menu.css), RULE_ROW_MENU */
/* 0.2.11 : tableau plus large que son cadre (au-dessus de 760 px ; la classe m-cards est posée à toute largeur, les cartes ne s'appliquent qu'au-dessous) → la colonne des actions reste collée au bord droit du cadre : jamais coupée */
@media (min-width:761px){main .table-wrap td:has(>.action-row),main .table-wrap td.cu-pw-cell{position:sticky;right:0;z-index:1;background:var(--panel);box-shadow:inset 1px 0 0 var(--line)}} /* au-dessous de 761 px : cartes (m-cards), rien à coller */
/* 0.2.12 — bug du 05.11.2026 (RULE_ACCOUNT_MENU) : « on ne voit pas l'option se déconnecter » au téléphone. Le panneau du menu Compte
   tient dans l'écran (100dvh moins la barre du haut, zone sûre de l'iPhone), défile à l'intérieur, et « Se déconnecter » reste collé à
   son bas (toujours visible sans défiler). Application : sous 700 px, panneau sous la barre du haut et au-dessus de la barre d'onglets
   du bas (barre du haut passée devant elle pendant que le menu est ouvert). app.css est chargé avant le module : sélecteurs plus précis. */
.am-panel>.am-form:last-child{position:sticky;bottom:0;z-index:1;background:var(--am-bg);box-shadow:0 -1px 0 var(--am-line);padding-bottom:env(safe-area-inset-bottom,0px)}
@media(max-width:700px){
.topbar:has(.am-panel:not([hidden])){z-index:30}
.topbar .am-menu .am-panel{position:fixed;top:70px;bottom:auto;left:12px;right:12px;width:auto;min-width:0;max-width:none;max-height:calc(100vh - 82px);max-height:calc(100dvh - 70px - max(12px,env(safe-area-inset-bottom,0px)));overflow-y:auto;-webkit-overflow-scrolling:touch}
}

/* 0.2.13 — demande du 06.11.2026 : « dans Fixly, les tickets prennent beaucoup de place en version mobile ». Au téléphone (≤ 640 px),
   liste des tickets = une carte compacte par ticket : titre sur 2 lignes au plus, une seule ligne d'informations (n°, immeuble, priorité en
   pastille, état), actions dans « ⋯ » (module row-menu) ; pas de libellé au-dessus de chaque valeur, pas de grande marge. Mesuré à 390 px
   (hauteur d'une carte, tickets visibles sans défiler) : voir les notes de version. Toute la carte ouvre le ticket (premier lien). */
@media (max-width:640px){
  main .toolbar.tk-head{flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
  main .toolbar.tk-head>h1{margin:0;min-width:0}
  main .toolbar.tk-head>.btn{width:auto;flex:none;min-height:44px;padding:0 16px}
  main .view-switch{margin:0 0 8px}
  main p.age-legend{margin:4px 0 8px;gap:4px 6px}main p.age-legend .legend-note{display:none}main p.age-legend .legend{padding:2px 8px;font-size:11.5px}
  main .table-wrap.tk-wrap tr.m-head.m-sortbar{margin-bottom:6px;gap:4px}
  main .table-wrap.tk-wrap tr.m-head th:nth-child(6){display:none}
  main .table-wrap.tk-wrap table.ticket-list tr:not(.m-head){display:grid;grid-template-columns:auto minmax(0,1fr) auto auto auto;grid-template-areas:"title title title title act" "num bld prio st act";column-gap:6px;row-gap:3px;align-items:center;margin:0 0 6px;padding:8px 6px 8px 12px;border-radius:12px}
  main .table-wrap.tk-wrap table.ticket-list td{padding:0;min-width:0;font-size:12.5px;line-height:1.35}
  main .table-wrap.tk-wrap table.ticket-list td::before{display:none!important;content:none!important}
  main .table-wrap.tk-wrap table.ticket-list td.tk-title{grid-area:title;font-size:15px;font-weight:600;line-height:1.3;display:-webkit-box!important;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;overflow-wrap:anywhere}
  main .table-wrap.tk-wrap table.ticket-list td.tk-num{grid-area:num;font-size:12.5px;font-weight:600;display:flex;align-items:center;gap:4px;white-space:nowrap!important}
  main .table-wrap.tk-wrap table.ticket-list td.tk-num a{display:inline-flex;align-items:flex-end;box-sizing:border-box;min-height:44px;padding-bottom:5px;margin:-22px 0 -5px;text-decoration:none} /* cible tactile de 44 px sans agrandir la carte ni déborder de la liste (surtout vers le haut, sur le titre) */
  main .table-wrap.tk-wrap table.ticket-list td.tk-num .age-pill{margin-left:0;padding:0 5px;font-size:11px}
  main .table-wrap.tk-wrap table.ticket-list td.tk-bld{grid-area:bld;color:var(--muted);white-space:nowrap!important;overflow:hidden;text-overflow:ellipsis}
  main .table-wrap.tk-wrap table.ticket-list td.tk-prio{grid-area:prio}
  main .table-wrap.tk-wrap table.ticket-list td.tk-st{grid-area:st}
  main .table-wrap.tk-wrap table.ticket-list td.tk-prio .tk-pill,main .table-wrap.tk-wrap table.ticket-list td.tk-st .tk-pill{white-space:nowrap!important;font-size:11.5px;padding:1px 7px;line-height:1.5}
  main .table-wrap.tk-wrap table.ticket-list td.tk-sent,main .table-wrap.tk-wrap table.ticket-list td:empty{display:none}
  main .table-wrap.tk-wrap table.ticket-list td.row-actions{grid-area:act;position:static;z-index:auto;box-shadow:none;background:transparent;align-self:center;justify-self:end;width:auto!important}
  main .table-wrap.tk-wrap table.ticket-list td.row-actions .action-row{flex-wrap:nowrap;gap:4px}
  main .table-wrap.tk-wrap table.ticket-list td[colspan]{grid-column:1/-1;font-size:14px}
}

/* 0.2.13 — liste des tickets au téléphone, suite : en-tête compact (recherche, « Filtres » et « Filtrer » sur une ligne ; légende des âges
   en version courte ; tri dans une liste « Trier par » d'une seule ligne au lieu de deux rangées de pastilles) ; carte d'un ticket en retard :
   bord gauche coloré (plus de fond coloré qui coupe la carte), n° jamais coupé. */
.lg-short{display:none}.tk-sort{display:none}
@media (max-width:640px){
  main p.age-legend .lg-long{display:none}main p.age-legend .lg-short{display:inline}
  main p.age-legend .btn.small{min-height:36px;padding:2px 10px}
  main .filter-bar{padding:8px;gap:6px;margin-bottom:8px}
  main .filter-bar .fb-search>.fb-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  main .filter-bar .fb-fold:not([open]){flex:0 0 auto;order:3}
  main .filter-bar .fb-search{flex:1 1 120px}
  main .table-wrap.tk-wrap tr.m-head{display:none!important}
  main .tk-sort{display:flex;align-items:center;gap:8px;margin:0 0 6px;font-size:13px;font-weight:650}
  main .tk-sort select{flex:1 1 auto;min-height:44px;width:auto;min-width:0}
  main .table-wrap.tk-wrap table.ticket-list td.tk-num,main .table-wrap.tk-wrap table.ticket-list td.tk-num *{white-space:nowrap!important;overflow-wrap:normal!important}
  main .table-wrap.tk-wrap table.ticket-list tr.age-warning td,main .table-wrap.tk-wrap table.ticket-list tr.age-critical td{background:transparent;box-shadow:none}
  main .table-wrap.tk-wrap table.ticket-list tr.age-warning{border-left:4px solid #f59e0b}
  main .table-wrap.tk-wrap table.ticket-list tr.age-critical{border-left:4px solid #dc2626}
  main .table-wrap.tk-wrap table.ticket-list td.tk-st .tk-pill{max-width:100%;overflow:hidden;text-overflow:ellipsis}
}

/* 0.2.13 : « ⋯ » des cartes du Pipeline = liste flottante (module row-menu), plus des boutons empilés dans la carte ; titre sur 2 lignes au plus */
.pipe-card .pipe-menu{margin-left:auto;flex:none}.pipe-card .pipe-menu[open]{flex-basis:auto}
.pipe-card .pipe-menu>summary.ac-row-menu-btn{min-width:32px;min-height:28px;padding:0 6px;font-size:15px;color:var(--muted);border-color:transparent}
.pipe-meta{display:flex;align-items:center;gap:6px;min-width:0}.pipe-meta>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pipe-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
@media (max-width:640px){.pipe-card .pipe-menu>summary.ac-row-menu-btn{min-width:44px;min-height:44px;margin:-12px -6px -12px 0}
  main .ticket-board .lane{padding:8px 8px 6px;min-height:0}main .ticket-board .lane-head{margin-bottom:6px}main .pipe-filter{gap:6px;margin-bottom:8px}}

/* 0.2.13 — fiche du ticket : en-tête (titre à gauche ; à droite actions secondaires, « ⋯ », ✕ en dernier) ; au téléphone en-tête compact
   (titre plus petit, sous-titre sur une ligne, pastilles priorité / état) et détails secondaires repliables (<details>, 44 px au toucher) */
.tk-head-text{min-width:0}.tk-head-pills{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.toolbar .head-actions,.card-head .head-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px;justify-content:flex-end}
.toolbar .head-actions>.close-x,.card-head .head-actions>.close-x{margin-left:0;order:99}
.toolbar>.close-x,.card-head>.close-x,.toolbar>.head-cancel,.card-head>.head-cancel{order:99;margin-left:auto}
.head-actions>.head-cancel{order:98}
.head-more{display:inline-block}
details.fx-fold>summary.fx-fold-sum{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:44px}
details.fx-fold>summary.fx-fold-sum::-webkit-details-marker{display:none}
details.fx-fold>summary.fx-fold-sum>*{margin:0}
details.fx-fold>summary.fx-fold-sum::after{content:"▾";font-size:13px;color:var(--muted);flex:none}
details.fx-fold[open]>summary.fx-fold-sum::after{content:"▴"}
details.fx-fold[open]>summary.fx-fold-sum{margin-bottom:8px}
@media (max-width:640px){
  main .toolbar.tk-detail-head{flex-direction:column;align-items:stretch;gap:8px;margin-bottom:10px}
  main .toolbar.tk-detail-head h1{font-size:19px;line-height:1.25;margin:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;overflow:hidden}
  main .toolbar.tk-detail-head .tk-head-sub{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
  main .toolbar.tk-detail-head .tk-head-pills{margin-top:4px;gap:4px}
  main .toolbar.tk-detail-head .tk-head-pills .tk-pill{font-size:12px}
  main .toolbar.tk-detail-head .head-actions{justify-content:flex-start;gap:6px}
  main .toolbar.tk-detail-head .head-actions>.close-x{position:absolute;top:0;right:0}
  main .toolbar.tk-detail-head{position:relative;padding-right:52px}
  main .toolbar.tk-detail-head>*,main .toolbar.tk-detail-head .tk-head-text>*{min-width:0;max-width:100%} /* ligne immeuble · objet · occupant (une ligne, …) : jamais plus large que l'écran */
  main .toolbar.tk-detail-head .vr-why{font-size:12px;line-height:1.3;flex-basis:100%;max-width:none}
  main details.fx-fold{padding-top:6px;padding-bottom:6px}
  main details.fx-fold:not([open]){padding-bottom:6px}
  main .pipeline-steps{margin-bottom:10px}
}
@media (max-width:640px){
  main .toolbar.tk-detail-head .vr-group,main .toolbar.tk-detail-head .vr-off{display:contents}
  main .toolbar.tk-detail-head .vr-why{order:60}
  main .toolbar.tk-detail-head .head-actions .btn.small,main .toolbar.tk-detail-head .head-actions button.small{min-height:40px}
}
/* 0.2.13 (RULE_ROW_MENU « jamais caché ») : la cellule collée (position sticky, z-index 1) forme un contexte d'empilement qui enfermait la
   liste flottante sous la barre d'onglets du bas et la barre du haut — cellule passée devant tant que son menu est ouvert ; cartes du
   téléphone : plus de cellule collée */
td:has(>details.ac-row-menu[open]),td:has(>.action-row>details.ac-row-menu[open]),td:has(details.ac-row-menu[open]){z-index:70!important}
@media (max-width:760px){main .m-cards td.row-actions,main .m-cards td.actions,main .m-cards td[data-row-actions]{position:static!important;z-index:auto;box-shadow:none}}
