    :root{color-scheme:dark;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#0e1117;color:#f6f7fb;--accent:#d6a95b;--accent-2:#5eb7a4;--panel:#171d26f2;--panel-2:#111722f5;--surface:#202837;--line:#ffffff18;--line-strong:#ffffff2e;--muted:#a6adba;--green:#68d391;--red:#f07878;--amber:#f6c86a;--ink:#f6f7fb;--ink-strong:#fff;--ink-2:#cfd8e4;--ink-accent:#f7ddb0;--ink-accent-2:#8ee5d5;--ink-green:#98e8c1;--ink-amber:#f6d587;--ink-red:#ffaaa7;--ink-blue:#8ab6ff;--ink-info:#9eeeff;--shadow:0 16px 42px #0007;--state-neutral:#8f9bb0;--state-ok:#68d391;--state-warn:#f6c86a;--state-bad:#f07878;--state:var(--state-neutral);--state-ink:var(--ink-2);--fs-micro:10px;--fs-small:11px;--fs-body:12px;--fs-strong:13px;--fs-title:15px;--fs-page:22px;--r-xs:6px;--r-sm:8px;--r-md:12px;--r-pill:999px;--gap-xs:6px;--gap-sm:9px;--gap-md:12px;--gap-lg:16px;--fill-1:#ffffff07;--fill-2:#ffffff0d;--fill-3:#ffffff14}
    *{box-sizing:border-box}html{min-height:100%;background:#0d1118;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;min-height:100vh;min-height:100dvh;background:radial-gradient(900px 520px at 18% 0,#303d55 0,#182232 44%,#0d1118 78%),linear-gradient(160deg,#111827 0%,#0d1118 58%,#101620 100%);background-attachment:fixed;background-size:cover;font-size:14px;line-height:1.45}h1,h2,h3,p{margin:0}h1{font-size:22px}h2{font-size:22px;margin-bottom:4px}h3{font-size:14px;color:#f7ddb0;margin:16px 0 8px}button,input,select,textarea{border:1px solid var(--line-strong);border-radius:8px;background:#101722;color:#fff;font:inherit;padding:10px 12px;outline:none}button{cursor:pointer;background:linear-gradient(180deg,#e3b869,#b98638);border-color:#efcc88;color:#1c1408;font-weight:800}button:hover{filter:brightness(1.08)}button:focus-visible,input:focus,select:focus,textarea:focus{border-color:#75d1c0;box-shadow:0 0 0 3px #5eb7a433}button.secondary{background:#222b3a;border-color:#ffffff24;color:#f7f9fc}button.danger{background:#7e3336;border-color:#e27b7d;color:#fff}button.small{padding:7px 10px;font-size:12px;width:auto}input,select,textarea{width:100%}input:not([type="checkbox"]),select{height:42px}textarea{min-height:88px;resize:vertical}label{display:block;color:#c4cad4;font-size:12px;font-weight:650;margin:10px 0 6px}
    /* Un titre que seul le lecteur d'écran entend : il donne son nom au panneau
       sans le répéter à l'œil, qui lit déjà l'état juste en dessous. */
    .visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;clip-path:inset(50%);overflow:hidden;white-space:nowrap}
    #login{display:grid;place-items:center;width:100%;min-height:100vh;min-height:100dvh;margin:0;padding:24px 16px}.login-shell{display:block;width:min(430px,100%)}.login-card{background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid #ffffff22;border-radius:12px;box-shadow:var(--shadow);padding:20px}.login-card h1{font-size:24px;line-height:1.12}.login-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:16px 0}.login-tabs button{background:#ffffff08;border-color:var(--line);color:#dbe3ee}.login-tabs button.active{background:#5eb7a41c;border-color:#5eb7a466;color:#fff}.login-pane{display:none}.login-pane.active{display:block}.login-note{padding:10px 11px;border:1px solid var(--line);border-radius:8px;background:#ffffff06;color:var(--muted);font-size:12px}.actions{display:flex;gap:10px;margin-top:14px}.actions>*{flex:1}.muted{color:var(--muted);font-size:12px}.message{min-height:19px;margin-top:9px;color:var(--ink-green);font-size:13px}.error{color:var(--ink-red)}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}
    #app[hidden],#login[hidden],[hidden]{display:none!important}#app{display:grid;grid-template-columns:248px 1fr;min-height:100vh;align-items:start}.sidebar{background:#0b1019f5;border-right:1px solid var(--line);padding:18px 12px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;overflow:hidden}.brand{flex:0 0 auto;padding:6px 10px 18px;border-bottom:1px solid var(--line);margin-bottom:14px}.brand h1{letter-spacing:.01em}.brand p{margin-top:4px}.nav{display:grid;gap:6px;align-content:start;grid-auto-rows:max-content;flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding-right:3px;scrollbar-width:thin;scrollbar-color:#5eb7a466 transparent}.nav::-webkit-scrollbar{width:8px}.nav::-webkit-scrollbar-thumb{background:#5eb7a466;border-radius:999px}.nav::-webkit-scrollbar-track{background:transparent}.nav-group{margin:0;border:0;background:transparent;border-radius:8px;overflow:visible}.nav-group summary{display:flex;align-items:center;justify-content:space-between;list-style:none;padding:9px 10px;color:var(--muted);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.08em}.nav-group summary::-webkit-details-marker{display:none}.nav-group summary:after{content:"";width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform .18s ease}.nav-group[open] summary:after{transform:rotate(225deg) translate(-2px,-2px)}.nav-group-items{display:grid;gap:6px}.nav button{display:flex;gap:10px;align-items:center;text-align:left;background:transparent;border:1px solid transparent;color:#dbe3ee;padding:10px}.nav button.active,.nav button:hover{background:#263241;border-color:#5eb7a455;color:#fff}.nav button.active .ico{background:#5eb7a422;color:#8ee5d5}.ico{display:grid;place-items:center;width:28px;height:28px;flex:0 0 28px;border-radius:8px;background:#ffffff10;color:#d9b66c;line-height:1}.ico svg{width:16px;height:16px;display:block;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}.content{min-width:0;padding:22px;max-width:1520px;width:100%;margin:0 auto;align-self:start}.view{display:none}.view.active{display:block}.page-head{margin-bottom:16px}.page-head p{max-width:720px}.panel{background:linear-gradient(180deg,var(--panel),var(--panel-2));border:1px solid var(--line);border-radius:8px;padding:16px;box-shadow:var(--shadow)}.dashboard-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px}.dashboard-panel h3{margin:0 0 10px;color:#fff}.metric-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 0;border-top:1px solid var(--line)}.metric-row:first-of-type{border-top:0}.metric-row span{color:var(--muted);font-size:12px}.metric-row b{font-size:22px}.dashboard-priority{display:grid;gap:10px}.priority-card{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:8px;background:#ffffff07}.priority-card.warn{border-color:#f6c86a66;background:#f6c86a12}.priority-card.bad{border-color:#f0787866;background:#f0787818}.priority-card-top{display:flex;gap:9px;align-items:center;justify-content:space-between}.priority-card p{color:var(--muted);font-size:12px}.dashboard-shortcuts{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.dashboard-shortcuts button{flex:1;min-width:120px}.split{display:grid;grid-template-columns:minmax(290px,370px) minmax(0,1fr);gap:14px}.profiles{display:grid;gap:8px;max-height:72vh;overflow:auto;margin-top:12px}.profile{background:#ffffff07;border:1px solid var(--line);border-radius:8px;padding:10px;cursor:pointer}.profile:hover,.profile.active{border-color:#5eb7a477;background:#5eb7a414}
    table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line);vertical-align:top}th{color:#f7ddb0;font-size:12px;font-weight:800}td{color:#eef2f8}.badge{display:inline-flex;align-items:center;gap:5px;border-radius:99px;padding:3px 8px;background:#ffffff12;color:#dfe7f2;font-size:11px;border:1px solid #ffffff10}.badge.ok{color:#98e8c1}.badge.warn{color:#f6d587}.badge.bad{color:#ffa2a2}
    details{margin-top:10px;border:1px solid var(--line);border-radius:8px;background:#ffffff05;overflow:hidden}summary{display:flex;align-items:center;gap:9px;cursor:pointer;padding:10px 12px;color:#f7ddb0;font-weight:800;font-size:14px}summary::-webkit-details-marker{display:none}summary::before{content:"";width:8px;height:8px;flex:0 0 8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);transition:transform .18s ease}details[open]>summary::before{transform:rotate(45deg) translateY(-2px)}.nav-group summary::before{display:none}.section-body{padding:0 12px 12px}.cosmetics{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;padding:10px}.cosmetic{display:flex;gap:9px;align-items:center;background:#ffffff07;padding:8px;border:1px solid #ffffff12;border-radius:8px;font-size:13px;margin:0;cursor:pointer}.cosmetic input{width:auto;accent-color:var(--accent-2)}.thumb{display:grid;place-items:center;width:38px;height:38px;flex:none;border-radius:8px;border:1px solid #ffffff38;background:#3f4757;color:#fff;font-size:18px;text-shadow:0 1px 4px #000b}.thumb svg{display:block;width:27px;height:27px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 1px 3px #0009)}.thumb svg .fill{fill:currentColor;stroke:none}.thumb svg .soft{opacity:.48}.toolbar{display:flex;gap:10px;align-items:end;flex-wrap:wrap}.toolbar>*{flex:1;min-width:150px}.toolbar button{flex:0 0 auto}.scroll{overflow:auto}.section-gap{margin-top:14px}.switch-line{position:relative;display:flex;align-items:center;justify-content:space-between;gap:14px;margin:12px 0;padding:12px;border:1px solid var(--line);border-radius:8px;background:#ffffff06;color:#eef2f8;font-size:13px;font-weight:760;cursor:pointer}.switch-line input{position:absolute;opacity:0;pointer-events:none}.switch-line .switch-text{display:grid;gap:2px}.switch-line .switch-sub{color:var(--muted);font-size:11px;font-weight:500}.switch-ui{width:46px;height:26px;flex:0 0 46px;border-radius:99px;background:#536070;position:relative;box-shadow:inset 0 0 0 1px #ffffff20}.switch-ui:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0006;transition:transform .16s ease}.switch-line input:checked+.switch-ui{background:#58b99f}.switch-line input:checked+.switch-ui:after{transform:translateX(20px)}.theme-panel{margin-top:auto;padding:12px 8px 0;border-top:1px solid var(--line)}.theme-toggle{position:relative;display:grid;gap:9px;color:var(--ink-2);font-size:12px;font-weight:800;cursor:pointer}.theme-toggle input{position:absolute;opacity:0;pointer-events:none}.theme-labels{display:flex;align-items:center;justify-content:space-between;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.theme-track{height:34px;border:1px solid var(--line-strong);border-radius:999px;background:#111827;box-shadow:inset 0 1px 4px #0008;position:relative;overflow:hidden;transition:background .28s ease,border-color .28s ease,box-shadow .28s ease}.theme-track:before{content:"Sombre";position:absolute;inset:3px auto 3px 3px;width:calc(50% - 3px);display:grid;place-items:center;border-radius:999px;background:linear-gradient(180deg,#2f3b4f,#1a2332);color:#f6f7fb;box-shadow:0 6px 14px #0006;transition:transform .28s cubic-bezier(.2,.8,.2,1),background .28s ease,color .28s ease}.theme-toggle input:checked+.theme-labels+.theme-track{background:#edf3fb;box-shadow:inset 0 1px 4px #9aa7b84a}.theme-toggle input:checked+.theme-labels+.theme-track:before{content:"Clair";transform:translateX(calc(100% + 1px))}.banner{margin:10px 0;padding:11px 12px;border:1px solid var(--line);border-radius:8px;background:#ffffff0b}.banner.bad{border-color:#f0787899;background:#6d2d333d}.banner.ok{border-color:#68d39177;background:#17382e9e}.row-actions{display:flex;gap:7px;flex-wrap:wrap}.room-players{display:grid;gap:8px;margin-top:11px}.mini-card{padding:10px;border:1px solid var(--line);border-radius:8px;background:#ffffff07}.copy-id{width:auto;background:#253243;border-color:#ffffff22;color:#dce7f5;font-size:11px;font-weight:750;padding:3px 8px}.copy-id:hover{border-color:#75d1c0;color:var(--ink-strong)}.copy-field{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;margin-top:7px;padding:7px 9px;background:#ffffff08;border-color:#ffffff16;color:#e8eef8;text-align:left;font-size:12px;font-weight:650}.copy-field:hover{filter:none;border-color:#75d1c0;background:#5eb7a419}.copy-field span{color:var(--muted);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.copy-field code{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#fff}.support-workspace{display:grid;grid-template-columns:minmax(300px,420px) minmax(0,1fr);gap:14px;align-items:start}.support-list{display:grid;gap:8px;max-height:calc(100vh - 190px);overflow:auto;padding-right:2px}.support-detail{min-height:360px}.support-empty{display:grid;place-items:center;min-height:280px;text-align:center;color:var(--muted)}.support-detail-head{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:13px;margin-bottom:13px}.support-detail-head h3{font-size:18px;margin:0;color:#fff}.support-thread{display:grid;gap:10px;margin:14px 0}.support-message{padding:11px 12px;border:1px solid var(--line);border-radius:8px;background:#ffffff08}.support-message.admin{border-color:#d6a95b55;background:#d6a95b12}.support-message.player{border-color:#5eb7a455;background:#5eb7a411}.support-message-head{display:flex;gap:8px;justify-content:space-between;align-items:center;margin-bottom:6px}.support-context{white-space:pre-wrap;max-height:180px;overflow:auto}.support-compose{display:grid;gap:9px;margin-top:12px}.store-category{margin-bottom:12px}.store-items{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;align-items:stretch}.store-tile{display:grid;grid-template-columns:56px minmax(0,1fr);gap:11px;align-items:center;text-align:left;width:100%;height:100%;min-height:84px;padding:11px;background:#ffffff08;border:1px solid #ffffff17;border-radius:8px;box-shadow:inset 0 1px 0 #ffffff10,0 8px 18px #00000024;color:var(--ink);font-weight:400;min-width:0;overflow:hidden;transition:border-color .16s ease,background .16s ease,box-shadow .16s ease,transform .16s ease}.store-tile:hover{border-color:#5eb7a477;background:#5eb7a414;box-shadow:inset 0 1px 0 #ffffff18,0 10px 22px #00000034;transform:translateY(-1px)}.store-tile .thumb{width:56px;height:56px;border-radius:8px;border-color:#ffffff35;box-shadow:inset 0 1px 0 #ffffff26,0 6px 14px #0005}.store-tile .thumb svg{width:36px;height:36px}.store-tile b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);line-height:1.25}.store-tile .muted{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.store-tile .store-meta{display:flex;gap:6px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin-top:7px}.store-price{color:#f6d587;font-size:12px;font-weight:800}.store-price.promo{color:#98e8c1}.store-old-price{color:var(--muted);font-size:11px;margin-left:5px}.featured-category{border-color:#d6a95b66;background:#1d2532f2}.featured-entry{cursor:grab;display:flex;min-width:0}.featured-entry .store-tile{width:100%;pointer-events:none}.featured-entry:active{cursor:grabbing}.featured-entry.dragging{opacity:.48}.featured-entry.drop-target .store-tile{border-color:#75d1c0;background:#5eb7a41d;box-shadow:inset 0 1px 0 #ffffff18,0 0 0 2px #75d1c033,0 10px 22px #00000034}.modal{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:16px;background:#000b}.modal-card{width:min(680px,100%);max-height:calc(100vh - 32px);overflow:auto;background:#171d26;border:1px solid #ffffff26;border-radius:8px;padding:16px;box-shadow:0 18px 48px #000a}.modal-head{display:flex;gap:11px;align-items:center;border-bottom:1px solid var(--line);padding-bottom:12px}.modal-head .thumb{width:54px;height:54px}.modal-head h2{font-size:18px}.modal-actions{display:flex;gap:9px;margin-top:14px}.modal-actions>*{flex:1}.toast{position:fixed;z-index:40;top:18px;right:18px;width:min(390px,calc(100vw - 36px));padding:13px 15px;border:1px solid #68d39188;border-radius:8px;background:#17382eee;box-shadow:0 14px 34px #0008;color:#eafff2;font-size:14px;font-weight:750;line-height:1.35;transition:opacity .18s ease,transform .18s ease}.toast.error{border-color:#f0787899;background:#4b1c1cee;color:#ffe9e7}.toast[hidden]{display:block!important;opacity:0;transform:translateY(-8px);pointer-events:none}
    .banner.warn{border-color:#f6c86a88;background:#513f1f66}html[data-theme="light"] .banner.ok{border-color:#85d4b1;background:#e7f8f1}html[data-theme="light"] .banner.warn{border-color:#e7c66b;background:#fff8e4}html[data-theme="light"] .banner.bad{border-color:#e99a9a;background:#fff0f0}
    .challenge-overview{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:12px}.challenge-overview-card{display:grid;grid-template-columns:42px minmax(0,1fr);gap:11px;align-items:center;min-height:78px;padding:12px;border:1px solid var(--line);border-radius:8px;background:#ffffff08}.challenge-overview-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:10px;background:#5eb7a421;color:#8ee5d5}.challenge-overview-icon svg{display:block;width:22px;height:22px;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}.challenge-overview-copy{min-width:0}.challenge-overview-label,.challenge-overview-hint{display:block;color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.challenge-overview-card b{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:18px}.challenge-overview-hint{margin-top:4px;text-transform:none;letter-spacing:0;font-weight:650}.challenge-periods{display:grid;gap:14px;margin-top:14px}.challenge-period-group{--period:#8ab4c8;border:1px solid color-mix(in srgb,var(--period) 38%,transparent);border-radius:10px;overflow:hidden;background:color-mix(in srgb,var(--period) 5%,transparent)}.challenge-period-group.period-daily{--period:#55cbb5}.challenge-period-group.period-weekly{--period:#efbd5c}.challenge-period-group.period-monthly{--period:#e27682}.challenge-period-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-bottom:1px solid color-mix(in srgb,var(--period) 28%,transparent);background:color-mix(in srgb,var(--period) 12%,transparent)}.challenge-period-title{display:flex;align-items:center;gap:10px;min-width:0}.challenge-period-icon{display:grid;place-items:center;width:36px;height:36px;flex:0 0 36px;border-radius:8px;background:var(--period);color:#10151d;font-size:17px;font-weight:950}.challenge-period-title h3{margin:0;color:#fff;font-size:15px}.challenge-period-title p{margin-top:2px}.challenge-period-stats{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.challenge-period-stats .badge{border-color:color-mix(in srgb,var(--period) 35%,transparent)}.challenge-editor{margin:0;border:1px solid var(--line);border-left:3px solid var(--period);border-radius:8px;background:#ffffff08;min-width:0}.challenge-editor>summary{display:grid;grid-template-columns:34px minmax(0,1fr) auto;gap:9px;align-items:center;padding:10px;color:inherit}.challenge-editor>summary::before{display:none}.challenge-editor[open]>summary{border-bottom:1px solid var(--line);background:#ffffff06}.challenge-card-copy{min-width:0}.challenge-card-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:13px}.challenge-card-copy span{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:10px}.challenge-card-meta{display:flex;gap:5px;align-items:center;justify-content:flex-end;flex-wrap:wrap}.challenge-card-meta .badge{white-space:nowrap}.challenge-card-meta .challenge-reward{color:var(--ink-amber)}.challenge-card-meta .challenge-off{color:#ffa2a2}.challenge-editor-body{padding:10px;min-width:0}.challenge-fields{display:grid;grid-template-columns:minmax(0,2fr) repeat(2,minmax(0,1fr));gap:9px;min-width:0}.challenge-fields label{margin:0;min-width:0}.challenge-fields input,.challenge-fields select,.challenge-fields textarea{min-width:0;max-width:100%}.challenge-fields .challenge-title-field{grid-column:span 2}.challenge-enabled{width:100%}
    html[data-theme="light"] .challenge-period-title h3,html[data-theme="light"] .challenge-card-copy b,html[data-theme="light"] .challenge-overview-card b{color:#172033}html[data-theme="light"] .challenge-editor,html[data-theme="light"] .challenge-overview-card{background:#fff}html[data-theme="light"] .challenge-overview-icon{background:#dff3f0;color:var(--ink-accent-2)}html[data-theme="light"] .challenge-period-group{background:color-mix(in srgb,var(--period) 4%,white)}
    @media(max-width:1320px){.challenge-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.challenge-fields .challenge-title-field{grid-column:1/-1}}@media(max-width:720px){.challenge-overview{grid-template-columns:minmax(0,1fr)}.challenge-period-head{align-items:flex-start;flex-direction:column}.challenge-period-stats{justify-content:flex-start}.challenge-editor>summary{grid-template-columns:32px minmax(0,1fr)}.challenge-card-meta{grid-column:1/-1;justify-content:flex-start;padding-left:41px}.challenge-fields{grid-template-columns:minmax(0,1fr)}.challenge-fields .challenge-title-field{grid-column:auto}}
    .challenge-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 0 0;padding:10px 11px;border:1px solid var(--line);border-radius:12px;background:#ffffff07}.challenge-toolbar-copy{min-width:0}.challenge-toolbar-copy b{display:block;color:#fff;font-size:13px}.challenge-toolbar-copy span{display:block;margin-top:2px;color:var(--muted);font-size:11px}.challenge-toolbar .inline-actions{flex:0 0 auto}.challenge-period-group{margin:0;border-width:1px;border-radius:14px;box-shadow:inset 0 1px 0 color-mix(in srgb,var(--period) 22%,transparent),0 10px 24px #0000001f}.challenge-period-group.period-daily{--period:#50d0b6}.challenge-period-group.period-weekly{--period:#f2be5b}.challenge-period-group.period-monthly{--period:#ef7f8a}.challenge-period-group>summary{list-style:none}.challenge-period-group>summary::before{display:none}.challenge-period-head{position:relative;cursor:pointer;color:inherit;transition:background .18s ease,border-color .18s ease}.challenge-period-head::after{content:"";width:9px;height:9px;flex:0 0 9px;margin-left:2px;border-right:2px solid color-mix(in srgb,var(--period) 88%,white);border-bottom:2px solid color-mix(in srgb,var(--period) 88%,white);transform:rotate(45deg);transition:transform .18s ease}.challenge-period-group[open]>.challenge-period-head::after{transform:rotate(225deg) translate(-2px,-2px)}.challenge-period-group:not([open])>.challenge-period-head{border-bottom-color:transparent}.challenge-period-icon{box-shadow:inset 0 1px 0 #ffffff8a,0 8px 18px color-mix(in srgb,var(--period) 22%,transparent)}.challenge-period-stats .badge{background:color-mix(in srgb,var(--period) 12%,transparent);color:#eef7f5}.challenge-period-off{color:#ffa2a2}.challenge-editor{position:relative;overflow:hidden;border-left-width:4px;background:linear-gradient(180deg,#ffffff0b,#ffffff06);box-shadow:inset 0 1px 0 #ffffff0f;transition:background .18s ease,border-color .18s ease,box-shadow .18s ease,opacity .18s ease,transform .18s ease}.challenge-editor:hover{transform:translateY(-1px);box-shadow:inset 0 1px 0 #ffffff18,0 9px 22px #00000030}.challenge-editor[open]{background:linear-gradient(180deg,color-mix(in srgb,var(--period) 14%,transparent),#ffffff07);border-color:color-mix(in srgb,var(--period) 45%,transparent);box-shadow:inset 0 1px 0 #ffffff18,0 14px 30px #00000036}.challenge-editor.is-inactive{border-left-color:#f07878;opacity:.7}.challenge-editor.is-inactive[open],.challenge-editor.is-inactive:hover{opacity:.92}.challenge-editor>summary{grid-template-columns:38px minmax(0,1fr) auto 24px;min-height:64px;gap:10px;padding:11px 12px}.challenge-card-copy b{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.22}.challenge-card-copy span{font-size:11px;white-space:normal}.challenge-card-meta .badge{background:#ffffff10}.challenge-card-chevron{position:relative;display:grid;place-items:center;width:24px;height:24px;border-radius:8px;background:#ffffff0b;color:var(--muted)}.challenge-card-chevron::before{content:"";width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translate(-1px,-1px);transition:transform .18s ease,color .18s ease}.challenge-editor[open]>summary .challenge-card-chevron::before{transform:rotate(225deg) translate(-1px,-1px);color:var(--period)}.challenge-editor-body{padding:12px;border-top:1px solid var(--line);background:#00000012}.challenge-fields{grid-template-columns:minmax(0,1.5fr) minmax(180px,.85fr) repeat(2,minmax(150px,1fr));gap:10px}.challenge-fields .challenge-title-field{grid-column:span 2}.challenge-switch{position:relative;display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:58px;margin:0;padding:10px 11px;border:1px solid var(--line);border-radius:12px;background:#ffffff07;cursor:pointer}.challenge-switch input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.challenge-switch-copy{display:grid;gap:2px;min-width:0}.challenge-switch-copy b{color:var(--ink-2);font-size:12px}.challenge-switch-copy span{color:var(--muted);font-size:10px}.challenge-switch-ui{position:relative;display:block;width:44px;height:26px;flex:0 0 44px;border-radius:99px;background:#596273;box-shadow:inset 0 0 0 1px #ffffff22;transition:background .16s ease,box-shadow .16s ease;pointer-events:none}.challenge-switch-ui::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 2px 7px #0007;transition:transform .16s ease}.challenge-switch input:checked+.challenge-switch-ui{background:var(--accent-2);box-shadow:inset 0 0 0 1px #ffffff30,0 0 0 3px #5eb7a420}.challenge-switch input:checked+.challenge-switch-ui::after{transform:translateX(18px)}.challenge-switch:focus-within{border-color:#75d1c0;box-shadow:0 0 0 3px #5eb7a433}@media(max-width:1320px){.challenge-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.challenge-fields .challenge-title-field{grid-column:1/-1}}@media(max-width:720px){.challenge-toolbar{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}.challenge-toolbar .inline-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}.challenge-toolbar .inline-actions button{width:100%}.challenge-period-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px}.challenge-period-title{grid-column:1/3}.challenge-period-stats{grid-column:1/4;justify-content:flex-start}.challenge-period-head::after{grid-column:3;grid-row:1;justify-self:end}.challenge-editor>summary{grid-template-columns:36px minmax(0,1fr) 24px;align-items:start}.challenge-card-meta{grid-column:2/4;justify-content:flex-start;padding-left:0}.challenge-card-chevron{grid-column:3;grid-row:1}.challenge-fields{grid-template-columns:minmax(0,1fr)}.challenge-fields .challenge-title-field{grid-column:auto}.challenge-editor-body{padding:10px}}@media(max-width:420px){.challenge-overview-card{grid-template-columns:38px minmax(0,1fr);min-height:70px;padding:10px}.challenge-overview-icon{width:38px;height:38px}.challenge-overview-card b{font-size:16px}.challenge-period-title h3{font-size:14px}.challenge-period-icon{width:34px;height:34px;flex-basis:34px}.challenge-card-meta .badge{font-size:9px;padding:3px 6px}.challenge-editor>summary{padding:10px}.challenge-switch{min-height:54px}}
    html[data-theme="light"] .challenge-toolbar,html[data-theme="light"] .challenge-editor{background:#fff}html[data-theme="light"] .challenge-toolbar-copy b{color:#172033}html[data-theme="light"] .challenge-period-stats .badge,html[data-theme="light"] .challenge-card-meta .badge{background:#f4f7fa;color:#334155}html[data-theme="light"] .challenge-editor[open]{background:color-mix(in srgb,var(--period) 8%,white)}html[data-theme="light"] .challenge-editor-body{background:#f8fafc}html[data-theme="light"] .challenge-switch{background:#f8fafc;border-color:#dbe3ec}html[data-theme="light"] .challenge-switch-copy b{color:#172033}html[data-theme="light"] .challenge-card-chevron{background:#edf3f8;color:#64748b}
    .panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:4px}.panel-head h3{color:#fff;font-size:15px}.panel-head p{margin-top:3px}.panel-head-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}#tutorial .panel+.panel{margin-top:14px}
    .home-layout-blocks{display:grid;gap:8px;margin-top:12px}.home-layout-block{display:flex;align-items:center;gap:12px;padding:11px 12px;border:1px solid var(--line);border-radius:8px;background:#ffffff08}.home-layout-block.off{opacity:.55}.home-layout-rank{flex:none;width:22px;color:var(--ink-accent);font-size:13px;font-weight:850;text-align:center;font-variant-numeric:tabular-nums}.home-layout-text{flex:1;min-width:0}.home-layout-text b{display:block;color:var(--ink);font-size:14px;line-height:1.2}.home-layout-text small{display:block;margin-top:3px;color:var(--muted);font-size:11.5px;font-weight:600;line-height:1.35}.home-layout-move{flex:none;display:flex;gap:6px}.home-layout-move button{width:32px;padding:0;line-height:30px}.home-layout-move button:disabled{opacity:.35;cursor:default}.home-layout-block .switch-line{margin:0;flex:none;border:0;padding:0;background:none}
    @media(max-width:850px){.home-layout-block{flex-wrap:wrap}.home-layout-text{flex-basis:100%;order:3}}
    .tutorial-overview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:12px}.tutorial-stat{min-width:0;padding:12px;border:1px solid var(--line);border-radius:8px;background:#ffffff08}.tutorial-stat>span{display:block;color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.tutorial-stat b{display:block;margin-top:3px;color:#fff;font-size:19px;line-height:1.1}.tutorial-stat small{display:block;margin-top:4px;color:var(--muted);font-size:11px;font-weight:650;line-height:1.3}
    .tutorial-chapters{display:grid;gap:14px;margin-top:14px}.tutorial-chapter{--tone:#8ab4c8;border:1px solid color-mix(in srgb,var(--tone) 38%,transparent);border-radius:10px;overflow:hidden;background:color-mix(in srgb,var(--tone) 5%,transparent)}.tutorial-chapter.tone-identity{--tone:#7fb2f0}.tutorial-chapter.tone-rules{--tone:#55cbb5}.tutorial-chapter.tone-modes{--tone:#efbd5c}.tutorial-chapter.tone-guidedGame{--tone:#e27682}.tutorial-chapter.tone-beyond{--tone:#b493e0}.tutorial-chapter-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-bottom:1px solid color-mix(in srgb,var(--tone) 28%,transparent);background:color-mix(in srgb,var(--tone) 12%,transparent)}.tutorial-chapter-title{display:flex;align-items:center;gap:10px;min-width:0}.tutorial-chapter-mark{display:grid;place-items:center;width:36px;height:36px;flex:0 0 36px;border-radius:8px;background:var(--tone);color:#10151d;font-size:16px;font-weight:950}.tutorial-chapter-title h3{color:#fff;font-size:15px}.tutorial-chapter-title p{margin-top:2px}.tutorial-chapter-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.tutorial-chapter-tools .badge{border-color:color-mix(in srgb,var(--tone) 35%,transparent)}.tutorial-chapter-empty{padding:12px 14px}
    .tutorial-steps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;padding:10px}.tutorial-step-card{display:grid;grid-template-columns:minmax(0,1fr) auto;min-width:0;border:1px solid var(--line);border-left:3px solid var(--tone);border-radius:8px;background:#ffffff08;overflow:hidden}.tutorial-step-card.is-off{border-left-color:#ffffff2e;opacity:.62}.tutorial-step-open{display:grid;grid-template-columns:38px minmax(0,1fr);gap:10px;align-items:center;width:100%;min-width:0;padding:10px;border:0;border-radius:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.tutorial-step-open:hover{background:#ffffff0d}.tutorial-step-open:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tutorial-step-mark{display:grid;place-items:center;width:38px;height:38px;border-radius:8px;background:color-mix(in srgb,var(--tone) 18%,transparent);color:var(--tone);font-size:12px;font-weight:950}.tutorial-step-copy{min-width:0}.tutorial-step-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:13px}.tutorial-step-lead{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:11px}.tutorial-step-tags{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}.tutorial-step-tags .badge{padding:2px 7px;font-size:10px}.tutorial-step-switch{display:grid;place-items:center;width:54px;flex:none;padding:0;border:0;border-left:1px solid var(--line);border-radius:0;background:#ffffff05;cursor:pointer}.tutorial-step-switch:hover{background:#ffffff14}.tutorial-step-switch:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tutorial-switch-ui{position:relative;display:block;width:34px;height:20px;border:1px solid var(--line-strong);border-radius:99px;background:#ffffff1f;transition:background .16s,border-color .16s}.tutorial-switch-ui::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#e7ecf5;transition:transform .16s}.tutorial-step-switch[aria-checked="true"] .tutorial-switch-ui{border-color:transparent;background:var(--accent-2)}.tutorial-step-switch[aria-checked="true"] .tutorial-switch-ui::after{transform:translateX(14px);background:#0d1118}
    #tutorialStepMark{background:#5eb7a421;color:#8ee5d5;font-size:15px;font-weight:950;text-shadow:none}.tutorial-field{margin-top:14px}.tutorial-field-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.tutorial-field-head label{margin:0}.tutorial-field-tools{display:flex;align-items:center;gap:9px}.tutorial-reset{padding:0;border:0;border-radius:0;background:none;color:var(--ink-accent);font:inherit;font-size:11px;font-weight:800;text-decoration:underline;cursor:pointer;min-height:0}.tutorial-reset:hover{color:var(--ink-amber)}.tutorial-reset[disabled]{color:var(--muted);text-decoration:none;cursor:default;opacity:.7}.tutorial-count{color:var(--muted);font-size:11px;font-weight:700;text-align:right;margin-top:5px}.tutorial-preview{margin-top:16px;padding:18px 16px;border:1px solid #ffffff1f;border-radius:10px;background:radial-gradient(120% 100% at 50% 0,#215044 0,#143229 58%,#0d201c 100%);text-align:center}.tutorial-preview-label{display:block;margin-bottom:11px;color:#ffffffbf;font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}.tutorial-preview b{display:block;color:#fff;font-size:19px;font-weight:900;line-height:1.2}.tutorial-preview p{margin-top:9px;color:#ffffffc4;font-size:13px;line-height:1.45}
    html[data-theme="light"] .panel-head h3,html[data-theme="light"] .tutorial-chapter-title h3,html[data-theme="light"] .tutorial-step-copy b,html[data-theme="light"] .tutorial-stat b{color:#172033}html[data-theme="light"] .tutorial-chapter{background:color-mix(in srgb,var(--tone) 4%,white)}html[data-theme="light"] .tutorial-step-card,html[data-theme="light"] .tutorial-stat{background:#fff}html[data-theme="light"] .tutorial-step-switch{background:#f2f6fa}html[data-theme="light"] .tutorial-switch-ui{background:#c9d3e0}html[data-theme="light"] #tutorialStepMark{background:#dff3f0;color:var(--ink-accent-2)}
    @media(max-width:1320px){.tutorial-overview{grid-template-columns:repeat(2,minmax(0,1fr))}.tutorial-steps{grid-template-columns:minmax(0,1fr)}}@media(max-width:720px){.tutorial-overview{grid-template-columns:minmax(0,1fr)}.tutorial-chapter-head{align-items:flex-start;flex-direction:column}.tutorial-chapter-tools{justify-content:flex-start}.tutorial-field-head{align-items:flex-start;flex-direction:column;gap:4px}}
    .bot-roster{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px;margin-top:12px}.bot-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;min-width:0;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:#ffffff08}.bot-card input{height:38px;margin:0}.bot-avatar-button{display:grid;place-items:center;width:46px;height:46px;flex:0 0 46px;padding:0;overflow:hidden;border-radius:50%;border-color:var(--line-strong);background:#ffffff10;font-size:23px;line-height:1;cursor:pointer}.bot-avatar-button:hover{border-color:var(--accent)}.bot-avatar-button svg{display:block;width:100%;height:100%}.bot-avatar-button.is-auto{border-style:dashed}.bot-remove{display:grid;place-items:center;width:32px;height:32px;flex:0 0 32px;padding:0;border-radius:8px;background:#ffffff0d;border-color:var(--line);color:var(--muted);font-size:15px;line-height:1;cursor:pointer}.bot-remove:hover{border-color:#f0787877;color:var(--ink-red);background:#f0787814}.bot-picker{display:grid;grid-template-columns:repeat(auto-fill,minmax(62px,1fr));gap:8px;margin-top:9px}.bot-picker button{display:grid;place-items:center;width:100%;aspect-ratio:1;padding:0;overflow:hidden;border-radius:10px;border-color:var(--line);background:#ffffff08;font-size:24px;line-height:1;cursor:pointer}.bot-picker button svg{display:block;width:100%;height:100%}.bot-picker button[aria-pressed="true"]{border-color:var(--accent-2);box-shadow:0 0 0 2px #5eb7a455}.bot-picker button:hover{border-color:var(--accent)}.bot-empty{padding:14px;border:1px dashed var(--line-strong);border-radius:10px;text-align:center}
    html[data-theme="light"] .bot-card,html[data-theme="light"] .bot-picker button{background:#fff;border-color:#dbe3ec}html[data-theme="light"] .bot-avatar-button{background:#eef3f8;border-color:#cbd5e1}html[data-theme="light"] .bot-remove{background:#f2f6fa;border-color:#dbe3ec;color:#5b6676}
    .nav{gap:3px;scrollbar-gutter:stable}.nav button{width:100%;height:50px;min-height:50px;min-width:0;overflow:hidden;flex:0 0 auto}.nav-label{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.15}.nav-group summary{height:28px;min-height:28px;padding:5px 10px;overflow:hidden}.nav-group summary:after{flex:0 0 7px}.nav-group-items{min-width:0;gap:4px;padding-top:2px}.nav-group{min-width:0}
    .status-row{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 26px}
    .status-chip{position:relative;display:inline-flex;align-items:center;gap:10px;padding:11px 17px;border-radius:999px;background:#1a2230;border:1px solid var(--line);color:#f6f7fb;font-weight:800;font-size:13.5px;line-height:1}
    .status-chip:hover{background:#222d3d;border-color:var(--line-strong)}
    .status-head{display:inline-flex;align-items:center;gap:9px;min-width:0}
    .status-dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--muted)}
    .status-chip.ok .status-dot{background:var(--green);box-shadow:0 0 0 3px #68d3912e}
    .status-chip.warn .status-dot{background:var(--amber);box-shadow:0 0 0 3px #f6c86a2e}
    .status-chip.bad .status-dot{background:var(--red);box-shadow:0 0 0 3px #f078782e}
    .status-chip.bad{border-color:#f0787859}
    .status-chip.warn{border-color:#f6c86a4d}
    .status-tip{position:absolute;top:calc(100% + 9px);left:50%;z-index:40;width:min(340px,calc(100vw - 24px));min-width:min(288px,calc(100vw - 24px));max-width:calc(100vw - 24px);display:grid;gap:7px;padding:13px 14px;border-radius:11px;background:#111722;border:1px solid var(--line-strong);box-shadow:var(--shadow);text-align:left;font-weight:600;opacity:0;visibility:hidden;transform:translate(calc(-50% + var(--tip-shift,0px)),-5px);transition:opacity .14s ease,transform .14s ease,visibility .14s}
    .status-chip:hover .status-tip,.status-chip:focus-visible .status-tip{opacity:1;visibility:visible;transform:translate(calc(-50% + var(--tip-shift,0px)),0)}
    .status-tip-title{font-size:13px;font-weight:850;color:#f7ddb0}
    .status-tip-line{display:flex;align-items:baseline;justify-content:space-between;gap:14px;font-size:12.5px;color:var(--muted);font-weight:650}
    .status-tip-line>span{min-width:0;overflow-wrap:anywhere}
    .status-tip-line b{min-width:0;color:var(--ink);font-weight:800;text-align:right;white-space:normal;overflow-wrap:anywhere;flex:0 1 auto}
    /* Valeur longue (message de maintenance…) : le libellé passe au-dessus au
       lieu d'être écrasé sur une lettre par ligne par la valeur. */
    .status-tip-line.block{display:grid;gap:2px}
    .status-tip-line.block b{text-align:left}
    .status-tip-line.bad b{color:var(--ink-red)}
    .status-tip-line.warn b{color:var(--ink-amber)}
    .status-tip-line.ok b{color:var(--ink-green)}
    .status-tip-hint{font-size:11.5px;color:var(--muted);font-weight:600;border-top:1px solid var(--line);padding-top:7px}.ops-card{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px;border:1px solid var(--line);border-radius:8px;background:#ffffff08;min-width:0}.ops-card strong{display:block;font-size:20px;line-height:1.05}.ops-card span{display:block;color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em}.ops-card.warn{border-color:#f6c86a66;background:#f6c86a12}.ops-card.bad{border-color:#f0787866;background:#f0787818}.ops-card.ok{border-color:#68d39177;background:#17382e80}.ops-card button{width:auto;flex:0 0 auto}.player-summary{display:grid;gap:10px;margin-bottom:12px}.quick-actions{display:flex;gap:8px;flex-wrap:wrap}.quick-actions button{width:auto}.danger-zone{border-color:#f0787855;background:#5b202438}.settings-state{display:inline-flex;align-items:center;gap:4px;flex:0 0 auto;width:auto;min-height:20px;padding:2px 7px;border:1px solid var(--line);border-radius:99px;background:#ffffff08;color:var(--muted);font-size:10px;font-weight:800;transition:color .16s ease,border-color .16s ease,background .16s ease}.settings-state svg{width:11px;height:11px;flex:0 0 11px;display:block;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;fill:none}.settings-state.dirty{color:#f6d587;border-color:#f6c86a66;background:#f6c86a14}.settings-state.saved{color:#98e8c1;border-color:#68d39155;background:#68d39112}details.block-dirty:not([open])>summary::after{content:"";width:8px;height:8px;flex:0 0 8px;margin-left:auto;border-radius:50%;background:#f6c86a;box-shadow:0 0 0 3px #f6c86a2e}html[data-theme="light"] details.block-dirty:not([open])>summary::after{background:#c9891e;box-shadow:0 0 0 3px #c9891e26}.block-save{align-items:center}.audit-row-action b{display:block}.audit-row-action .muted{margin-top:3px}.audit-target-cell{display:grid;gap:5px}.admin-pill{display:inline-flex;align-items:center;gap:6px;width:max-content;max-width:100%;border:1px solid var(--line);border-radius:99px;padding:4px 9px;background:#ffffff0c;color:var(--ink);font-size:12px;font-weight:800}.section-kicker{color:var(--muted);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.07em;margin:14px 0 7px}
    .settings-state{gap:7px;min-height:34px;padding:6px 11px;font-size:11px;letter-spacing:.01em;box-shadow:inset 0 1px 0 #ffffff0c}.settings-state svg{width:15px;height:15px;flex-basis:15px}.settings-state .state-light{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:#798291;box-shadow:0 0 0 3px #79829120}.settings-state.dirty .state-light{background:#f6c86a;box-shadow:0 0 0 3px #f6c86a25}.settings-state.saved{border-color:#68d39188;background:linear-gradient(180deg,#234c3d,#17382e);color:#c8ffe0;box-shadow:inset 0 1px 0 #ffffff18,0 5px 16px #123e2b3d;animation:savedBadgeIn .45s cubic-bezier(.2,.9,.25,1)}.settings-state.saved .state-light{background:#78e7aa;box-shadow:0 0 0 0 #68d39180;animation:savedLightPulse 1.7s ease-out 2}.toast{display:grid;grid-template-columns:38px minmax(0,1fr);align-items:center;gap:11px;min-height:62px;padding:11px 14px;border-radius:14px}.toast.success{border-color:#68d39188;background:#17382ef2;color:#eafff2}.toast.info{border-color:#6dc8dc88;background:#153847f2;color:#e9fbff}.toast.warning{border-color:#f6c86a99;background:#49391bf2;color:#fff4d0}.toast.error{border-color:#f0787899;background:#4b1c1cf2;color:#ffe9e7}.toast.toast-enter{animation:toastIn .38s cubic-bezier(.2,.85,.25,1)}.toast-icon{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;background:#ffffff12;border:1px solid #ffffff18}.toast-icon svg{width:21px;height:21px;display:block;fill:none;stroke:currentColor;stroke-width:2.3;stroke-linecap:round;stroke-linejoin:round}.toast.toast-enter .toast-icon{animation:toastIconIn .52s cubic-bezier(.2,.9,.25,1)}.toast-message{min-width:0;overflow-wrap:anywhere}.toast.success .toast-icon{color:var(--ink-green);background:#68d39118}.toast.info .toast-icon{color:var(--ink-info);background:#6dc8dc18}.toast.warning .toast-icon{color:var(--ink-amber);background:#f6c86a18}.toast.error .toast-icon{color:var(--ink-red);background:#f0787818}.toast.error.toast-enter .toast-icon{animation:toastErrorIcon .5s ease both}@keyframes savedBadgeIn{0%{opacity:.4;transform:scale(.92)}65%{transform:scale(1.04)}100%{opacity:1;transform:scale(1)}}@keyframes savedLightPulse{0%{box-shadow:0 0 0 0 #68d391a0}70%{box-shadow:0 0 0 8px #68d39100}100%{box-shadow:0 0 0 0 #68d39100}}@keyframes toastIn{0%{opacity:0;transform:translate3d(16px,-8px,0) scale(.97)}100%{opacity:1;transform:none}}@keyframes toastIconIn{0%{opacity:0;transform:rotate(-18deg) scale(.55)}70%{transform:rotate(4deg) scale(1.08)}100%{opacity:1;transform:none}}@keyframes toastErrorIcon{0%,100%{transform:translateX(0)}35%{transform:translateX(-3px)}65%{transform:translateX(3px)}}@media(prefers-reduced-motion:reduce){.settings-state.saved,.settings-state.saved .state-light,.toast.toast-enter,.toast.toast-enter .toast-icon{animation:none}}
    .profile-title,.profile-identity{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.profile-identity .copy-id{font-size:12px}
    .seg{display:inline-flex;gap:4px;width:auto;padding:4px;margin-top:2px;border:1px solid var(--line);border-radius:10px;background:#ffffff06}.seg-btn.active{color:#0c1016;background:#e3eaf3;border-color:#ffffff22}.seg-btn.cat-friend.active{background:#68d391;color:#08160f}.seg-btn.cat-test.active{background:#f6c86a;color:#241903}.cat-manage{flex:0 0 auto;width:auto;min-height:0;padding:5px 11px;font-size:11px;border-radius:99px}
    /* Module d'edition des groupes : liste a gauche, formulaire a droite. */
    .modal-card-wide{width:min(880px,100%)}
    .group-workspace{display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr);gap:14px;align-items:start;margin-top:14px}
    @media(max-width:900px){.group-workspace{grid-template-columns:minmax(0,1fr)}.group-list{max-height:210px}.group-editor-pane{min-height:0}.group-editor-pane .group-empty{min-height:120px}}
    .group-list{display:grid;gap:7px;max-height:min(46vh,380px);overflow:auto;padding-right:2px}
    .group-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:9px;align-items:center;width:100%;text-align:left;padding:9px 10px;background:#ffffff07;border:1px solid #ffffff18;border-radius:8px;color:var(--ink);font-weight:500}
    .group-row:hover,.group-row.active{border-color:var(--group-color,#75d1c0);background:color-mix(in srgb,var(--group-color,#75d1c0) 12%,transparent)}
    .group-row .group-dot{width:26px;height:26px;flex:0 0 26px;display:grid;place-items:center;border-radius:7px;background:color-mix(in srgb,var(--group-color,#8ee5d5) 20%,transparent);color:var(--group-color,var(--ink-accent-2))}
    .group-row .group-dot svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
    .group-row b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.25}
    .group-row .muted{display:block;font-size:11px}
    .group-row-tags{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}
    .group-editor-pane{padding:12px;border:1px solid var(--line);border-radius:8px;background:#ffffff05;min-height:260px}
    .group-editor-pane .group-empty{display:grid;place-items:center;min-height:236px;text-align:center;color:var(--muted)}
    .group-color-field{display:flex;gap:9px;align-items:center}
    .group-color-field input[type=color]{width:46px;height:38px;flex:0 0 46px;padding:2px;border-radius:8px;background:#ffffff0b;cursor:pointer}
    .group-icon-picker{display:flex;flex-wrap:wrap;gap:6px}
    .group-icon-choice{position:relative;display:grid;place-items:center;width:38px;height:38px;margin:0;border:1px solid var(--line);border-radius:8px;background:#ffffff07;color:var(--ink-2);cursor:pointer}
    .group-icon-choice input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
    .group-icon-choice svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
    .group-icon-choice:has(input:checked){border-color:var(--group-color,#75d1c0);background:color-mix(in srgb,var(--group-color,#75d1c0) 18%,transparent);color:var(--group-color,var(--ink-accent-2))}
    .group-key-line{display:flex;gap:6px;align-items:baseline;flex-wrap:wrap;margin-top:5px;color:var(--muted);font-size:11px;line-height:1.35}
    .group-key-line code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--ink-2)}.cat-filter{width:auto;min-height:0;background:#ffffff10;color:var(--ink-2);border:1px solid #ffffff14;font-size:11px;font-weight:800;padding:5px 11px;border-radius:99px;box-shadow:none}.cat-filter:hover{filter:none;border-color:#75d1c0;color:var(--ink-strong)}.cat-filter.active{background:#5eb7a424;border-color:#75d1c0;color:var(--ink-strong)}.cat-filter[style*="--group-color"].active{background:color-mix(in srgb,var(--group-color) 22%,transparent);border-color:var(--group-color);color:var(--ink-strong)}.cat-filter .cat-dot{width:8px;height:8px;border-radius:50%;background:var(--group-color,#8ea0b5);display:inline-block;margin-right:6px;vertical-align:middle}
    .cat-chip{display:inline-flex;align-items:center;gap:4px;border-radius:99px;padding:2px 9px;font-size:10px;font-weight:850;letter-spacing:.02em;border:1px solid}.cat-chip:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.cat-chip{color:var(--group-color,var(--ink-2));background:color-mix(in srgb,var(--group-color,#cfd8e4) 14%,transparent);border-color:color-mix(in srgb,var(--group-color,#cfd8e4) 50%,transparent)}
    /* ---- Page Bêta : entonnoir cliquable + liste de testeurs ---- */
    .beta-toprow{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}
    .beta-mail-state{display:flex;align-items:center;gap:9px;min-width:0}
    .beta-mail-state p{margin:0;font-size:12.5px}
    .beta-mail-dot{flex:0 0 8px;width:8px;height:8px;border-radius:50%;background:#f6c86a}
    .beta-mail-dot.on{background:#68d391}
    .beta-mail-dot.off{background:#ff8f8f}
    .beta-funnel{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-bottom:14px}
    .beta-step-card{display:flex;align-items:center;gap:10px;padding:11px 12px;border:1px solid var(--line);border-radius:9px;background:#ffffff08;color:var(--muted);text-align:left;cursor:pointer;min-width:0;width:auto;min-height:0;box-shadow:none;font-family:inherit}
    .beta-step-card:hover{filter:none;border-color:#75d1c080;background:#ffffff0e}
    .beta-step-card.active{border-color:#75d1c0;background:#5eb7a419;color:var(--text);box-shadow:inset 0 0 0 1px #75d1c033}
    .beta-step-icon{display:grid;place-items:center;width:30px;height:30px;flex:0 0 30px;border-radius:8px;background:#ffffff0d;color:var(--ink-accent-2)}
    .beta-step-icon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .beta-step-card[data-status="new"] .beta-step-icon{color:var(--ink-blue)}
    .beta-step-card[data-status="received"] .beta-step-icon{color:var(--ink-amber)}
    .beta-step-card[data-status="added"] .beta-step-icon{color:var(--ink-green)}
    .beta-step-card[data-status="declined"] .beta-step-icon{color:var(--ink-red)}
    .beta-step-text{display:grid;min-width:0}
    .beta-step-text strong{font-size:18px;line-height:1.05}
    .beta-step-text span{font-size:10.5px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .beta-list{display:grid;gap:8px}
    .beta-row{display:grid;grid-template-columns:38px minmax(0,1fr) auto;gap:12px;align-items:center;padding:11px 12px;border:1px solid var(--line);border-radius:9px;background:#ffffff06}
    .beta-row:hover{border-color:#ffffff26;background:#ffffff0b}
    .beta-avatar{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:#5eb7a41f;color:#8ee5d5;font-size:15px;font-weight:900;text-transform:uppercase}
    .beta-row[data-status="added"] .beta-avatar{background:#68d3911f;color:var(--ink-green)}
    .beta-row[data-status="declined"] .beta-avatar{background:#ff8f8f1a;color:#ffa2a2}
    .beta-main{min-width:0;display:grid;gap:4px}
    .beta-mail{display:flex;align-items:center;gap:7px;min-width:0;font-size:13.5px;font-weight:800;color:#eef2f8}
    .beta-mail>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .beta-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;color:var(--muted);font-size:11.5px}
    .beta-meta .copy-id{font-size:11px}
    .beta-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end}
    .beta-status-select{flex:0 0 auto;width:132px;min-width:0;min-height:34px;font-size:12px;padding:4px 8px}
    .beta-icon-btn{display:grid;place-items:center;width:34px;height:34px;min-height:0;padding:0;border-radius:8px;border:1px solid var(--line);background:#ffffff0b;color:var(--ink-2);cursor:pointer;box-shadow:none}
    .beta-icon-btn:hover{filter:none;border-color:#75d1c0;color:var(--ink-strong);background:#5eb7a41f}
    .beta-icon-btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .beta-icon-btn.on{border-color:#f6c86a;color:var(--ink-amber);background:#f6c86a1f}
    .beta-icon-btn.go:hover{border-color:#a68bff;background:#8b5cf61f}
    .beta-icon-btn:disabled{opacity:.32;cursor:default}
    .beta-icon-btn:disabled:hover{border-color:var(--line);background:#ffffff0b;color:var(--ink-2)}
    .beta-empty{padding:22px 12px;text-align:center;color:var(--muted);font-size:13px}
    @media(max-width:900px){.beta-funnel{grid-template-columns:repeat(2,minmax(0,1fr))}.beta-row{grid-template-columns:38px minmax(0,1fr)}.beta-actions{grid-column:1/-1;justify-content:flex-start}}.merge-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:12px}.merge-grid .mini-card{padding:13px}.admin-textarea-small{min-height:74px}.recovery-code{display:none;margin-top:12px;padding:13px;border:1px solid #f6c86a77;border-radius:8px;background:#f6c86a12}.recovery-code.active{display:block}.recovery-code strong{display:block;font-size:24px;letter-spacing:.08em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#fff;margin:4px 0}.admin-friend-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:4px 0 10px}.admin-friend-head h3{margin:0;color:#fff}.admin-friend-add{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;margin:10px 0 12px}.admin-friend-list{display:grid;gap:8px}.admin-friend-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:8px;background:#ffffff07}.admin-friend-main{min-width:0}.admin-friend-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.admin-friend-name{width:auto;max-width:100%;padding:0;border:0;background:transparent;color:#fff;font-weight:850;text-align:left}.admin-friend-name:hover{filter:none;color:var(--ink-accent-2)}.admin-friend-meta{display:flex;gap:7px;flex-wrap:wrap;margin-top:4px}.admin-friend-actions{display:flex;gap:7px;justify-content:flex-end;flex-wrap:wrap}.admin-friend-empty{padding:12px;border:1px dashed var(--line-strong);border-radius:8px;color:var(--muted);text-align:center}
    .profile-relations-panel{margin-top:14px;padding:12px;border:1px solid var(--line);border-radius:8px;background:#ffffff06}.profile-relations-head-copy{display:flex;align-items:center;gap:10px;min-width:0}.profile-relations-icon,.admin-friend-avatar{display:grid;place-items:center;width:38px;height:38px;flex:0 0 38px;border:1px solid #75d1c044;border-radius:8px;background:#5eb7a41a;color:var(--ink-accent-2)}.profile-relations-icon svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.profile-relations-stats{display:flex;gap:7px;flex-wrap:wrap;margin-top:5px}.profile-relations-add{padding:10px;border:1px solid var(--line);border-radius:8px;background:#10172280}.admin-friend-avatar{font-size:12px;font-weight:950;text-transform:uppercase;color:#101722;background:linear-gradient(135deg,#8ee5d5,#f0c16f);border-color:#ffffff35}.admin-friend-avatar svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.admin-friend-actions button{display:inline-grid;grid-auto-flow:column;align-items:center;justify-content:center;gap:6px}.admin-friend-actions svg,.admin-friend-add button svg,.admin-friend-head button svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.profile-relations-section-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:14px 0 8px;color:var(--ink-accent);font-size:13px;font-weight:850}.profile-relations-section-title .badge{flex:0 0 auto}
    @media(max-width:850px){.merge-grid{grid-template-columns:minmax(0,1fr)}.admin-friend-head,.admin-friend-row{display:grid;grid-template-columns:minmax(0,1fr)}.admin-friend-add{grid-template-columns:minmax(0,1fr)}.admin-friend-actions{justify-content:stretch}.admin-friend-actions button{width:100%}.profile-relations-head-copy{align-items:flex-start}.admin-friend-avatar{display:none}}
    .permission-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:8px}.account-row{cursor:pointer}.account-row:hover{background:#5eb7a414}.login-theme{margin-top:22px;padding-top:14px;border-top:1px solid var(--line)}.login-theme .theme-toggle{gap:10px}.login-card>.message{display:none}
    .brand-main{display:flex;align-items:center;justify-content:space-between;gap:10px}.brand-copy{min-width:0}.logout-button{display:grid;place-items:center;width:38px;height:38px;flex:0 0 38px;padding:0;border-radius:8px;background:#ffffff10;border-color:#ffffff24;color:#dbe3ee}.logout-button:hover{filter:none;border-color:#75d1c066;background:#5eb7a420;color:#fff}.logout-button svg{width:18px;height:18px;display:block;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}.mobile-logout{width:42px;height:42px;flex-basis:42px}.maintenance-banner{position:sticky;top:10px;z-index:12;display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 14px;padding:11px 12px;border:1px solid #ff9a9a99;border-radius:8px;background:#7e2028f2;box-shadow:0 12px 28px #0007;color:#fff}.maintenance-banner b{display:block}.maintenance-banner span{display:block;color:#ffe1e1;font-size:12px}.maintenance-banner button{flex:0 0 auto;background:#fff2;border-color:#fff5;color:#fff}.emoji-field{display:flex;align-items:stretch;gap:7px}.emoji-field button{display:grid;place-items:center;width:42px;flex:0 0 42px;padding:0;background:#ffffff10;border-color:var(--line-strong);color:#fff;font-size:18px}.emoji-field input{width:68px;min-width:68px;text-align:center;font-size:18px;padding-left:8px;padding-right:8px}.reward-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin-top:10px}.reward-box{display:grid;gap:7px;margin:0;padding:10px;border:1px solid var(--line);border-radius:8px;background:#ffffff07}.reward-box span{color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase}.reward-box input{height:38px;text-align:right}.settings-actions{margin-top:16px}.block-save{justify-content:flex-end}.block-save button{flex:0 0 auto}
    .economy-board{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,.85fr);gap:14px;margin-bottom:14px}.economy-grid{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:14px;margin-bottom:14px}.economy-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:14px}.economy-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.economy-panel-head h3{margin:0;color:#fff}.economy-panel-head p{margin-top:2px}.economy-hero{display:grid;gap:16px;overflow:hidden;position:relative}.economy-hero-top{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.economy-status{display:flex;gap:12px;align-items:center}.economy-status-icon{display:grid;place-items:center;width:46px;height:46px;flex:0 0 46px;border-radius:13px;border:1px solid #68d39155;background:#68d39116;color:var(--ink-green);font-size:22px}.economy-status-icon svg{display:block;width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.economy-status.warn .economy-status-icon{border-color:#f6c86a66;background:#f6c86a16;color:var(--ink-amber)}.economy-status.bad .economy-status-icon{border-color:#f0787866;background:#f0787818;color:var(--ink-red)}.economy-status-copy b{display:block;font-size:18px;color:#fff}.economy-status-copy span{display:block;color:var(--muted);font-size:12px}.economy-period{display:grid;justify-items:end;gap:3px;color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.05em}.economy-period strong{color:#fff;font-size:21px;line-height:1}.economy-gauge{display:grid;gap:8px}.economy-gauge-labels{display:flex;justify-content:space-between;gap:10px;color:var(--muted);font-size:11px;font-weight:800}.economy-gauge-track{position:relative;height:13px;border-radius:999px;background:linear-gradient(90deg,#f07878 0,#f6c86a 42%,#68d391 50%,#f6c86a 68%,#f07878 100%);box-shadow:inset 0 0 0 1px #ffffff2a}.economy-gauge-track:after{content:"";position:absolute;top:-5px;left:calc(var(--ratio-pos,50%) - 6px);width:12px;height:23px;border-radius:999px;background:#fff;box-shadow:0 6px 14px #0008}.economy-flow-panel{display:grid;gap:12px}.economy-flow-lanes{display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:stretch}.economy-flow-card{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:12px;background:#ffffff08}.economy-flow-card span{color:var(--muted);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.economy-flow-card b{font-size:24px;line-height:1.05}.economy-flow-card.source b{color:var(--ink-green)}.economy-flow-card.sink b{color:var(--ink-amber)}.economy-flow-bar{height:9px;border-radius:999px;background:#ffffff12;overflow:hidden}.economy-flow-bar i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#68d391,#8ee5d5)}.economy-flow-card.sink .economy-flow-bar i{background:linear-gradient(90deg,#f6c86a,#f07878)}.economy-flow-net{display:grid;place-items:center;min-width:96px;padding:12px;border:1px solid var(--line);border-radius:12px;background:#ffffff06;text-align:center}.economy-flow-net b{display:block;font-size:20px}.economy-flow-net span{display:block;color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase}.economy-kpi{position:relative}.economy-kpi span:first-child{display:flex;align-items:center;gap:6px}.metric-help{position:relative;display:inline-grid!important;place-items:center;width:17px;height:17px;border:1px solid var(--line-strong);border-radius:50%;background:#ffffff10;color:#dfe7f2;font-size:11px;font-weight:900;text-transform:none;letter-spacing:0;cursor:help}.metric-help:after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 9px);z-index:120;width:min(260px,70vw);padding:9px 10px;border:1px solid #d6a95b55;border-radius:9px;background:#111722f8;color:#f6f7fb;box-shadow:0 12px 30px #0009;font-size:12px;font-weight:600;line-height:1.35;text-transform:none;letter-spacing:0;opacity:0;pointer-events:none;transform:translate(-50%,6px);transition:opacity .14s ease,transform .14s ease}.metric-help:hover:after,.metric-help:focus:after{opacity:1;transform:translate(-50%,0)}.economy-bars{display:grid;gap:9px}.economy-bar-row{display:grid;grid-template-columns:minmax(120px,.8fr) minmax(0,1.2fr) auto;gap:10px;align-items:center;padding:9px 0;border-top:1px solid var(--line)}.economy-bar-row:first-child{border-top:0}.economy-bar-name{min-width:0}.economy-bar-name b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.economy-bar-name span{display:block;color:var(--muted);font-size:11px}.economy-bar-track{height:10px;border-radius:999px;background:#ffffff12;overflow:hidden}.economy-bar-track i{display:block;height:100%;border-radius:inherit;background:#68d391}.economy-bars.sinks .economy-bar-track i{background:#f6c86a}.economy-advice{display:grid;gap:10px;margin-top:10px;padding:13px;border:1px solid var(--line);border-radius:12px;background:#ffffff07}.economy-advice:first-child{margin-top:0}.economy-advice.warn{border-color:#f6c86a66;background:#f6c86a10}.economy-advice.bad{border-color:#f0787866;background:#f0787815}.economy-advice-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.economy-advice-head b{display:block;color:#fff}.economy-action{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:10px;background:#00000014}.economy-action-main{min-width:0}.economy-action-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}.economy-action button{width:auto}.economy-details{margin-top:0}.economy-focus-pulse{animation:economyFocus 1.15s ease 2;scroll-margin-top:90px}@keyframes economyFocus{0%{box-shadow:0 0 0 0 #75d1c080}70%{box-shadow:0 0 0 8px #75d1c000}100%{box-shadow:none}}html[data-theme="light"] .economy-flow-card,html[data-theme="light"] .economy-flow-net,html[data-theme="light"] .economy-action,html[data-theme="light"] .economy-advice{background:#fff;border-color:#dbe3ec}html[data-theme="light"] .metric-help{background:#eef3f8;color:#334155}html[data-theme="light"] .metric-help:after{background:#fff;color:#172033;box-shadow:0 12px 28px #3440562e}html[data-theme="light"] .economy-status-copy b,html[data-theme="light"] .economy-panel-head h3,html[data-theme="light"] .economy-advice-head b{color:#172033}@media(max-width:980px){.economy-board,.economy-grid,.economy-two{grid-template-columns:minmax(0,1fr)}.economy-flow-lanes{grid-template-columns:minmax(0,1fr)}.economy-flow-net{min-width:0}}@media(max-width:560px){.economy-hero-top,.economy-panel-head,.economy-advice-head,.economy-action{grid-template-columns:minmax(0,1fr);display:grid}.economy-period{justify-items:start}.economy-bar-row{grid-template-columns:minmax(0,1fr);gap:6px}.economy-action button{width:100%}}
    .sidebar-head-actions{display:flex;align-items:center;gap:6px}.compact-brand{display:none;object-fit:contain}.sidebar-collapse{display:grid;place-items:center;width:38px;height:38px;flex:0 0 38px;padding:0;border-radius:8px;background:#ffffff10;border-color:#ffffff24;color:#dbe3ee}.sidebar-collapse:hover{filter:none;border-color:#75d1c066;background:#5eb7a420;color:var(--ink-strong)}.sidebar-collapse svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:transform .2s ease}
    @media(min-width:851px){#app{transition:grid-template-columns .22s ease}#app.sidebar-compact{grid-template-columns:76px minmax(0,1fr)}#app.sidebar-compact .sidebar{padding-left:8px;padding-right:8px}#app.sidebar-compact .brand{padding:3px 0 10px;margin-bottom:8px}#app.sidebar-compact .brand-main{display:grid;justify-items:center;gap:8px}#app.sidebar-compact .brand-copy{display:none}#app.sidebar-compact .compact-brand{display:block;width:48px;height:48px;border-radius:11px;box-shadow:0 5px 14px #0008}#app.sidebar-compact .sidebar-head-actions{display:grid;gap:6px}#app.sidebar-compact .sidebar-collapse svg{transform:rotate(180deg)}#app.sidebar-compact .nav{justify-items:center;padding-right:0;gap:4px}#app.sidebar-compact .nav-group,#app.sidebar-compact .nav-group-items{width:100%}#app.sidebar-compact .nav-group summary{display:none}#app.sidebar-compact .nav-group-items{justify-items:center;gap:4px;padding-top:0}#app.sidebar-compact .nav-group{padding-top:6px;border-top:1px solid #ffffff0d}#app.sidebar-compact .nav-label,#app.sidebar-compact .quick-kbd{display:none}#app.sidebar-compact .theme-panel{display:none}}
    @media(max-width:850px){.sidebar-collapse,.compact-brand{display:none}}
    html,body,.sidebar,.panel,.modal-card,.nav button,.ico,input,select,textarea,button.secondary,details,.mini-card,.store-tile,.support-ticket,.support-message,.badge,.theme-track{transition:background .28s ease,color .28s ease,border-color .28s ease,box-shadow .28s ease}
    html[data-theme="light"]{color-scheme:light;background:#f4f7fb;color:#182232;--accent:#b98233;--accent-2:#237f72;--panel:#fffffffa;--panel-2:#f7fafcfa;--surface:#eef3f8;--line:#1f2a3d18;--line-strong:#1f2a3d30;--muted:#576273;--green:#16764f;--red:#c84646;--amber:#a66c16;--ink:#182232;--ink-strong:#0f1826;--ink-2:#445066;--ink-accent:#8a5d16;--ink-accent-2:#15645a;--ink-green:#136349;--ink-amber:#7a5210;--ink-red:#a02b2b;--ink-blue:#2b4f9c;--ink-info:#15596e;--shadow:0 14px 34px #3440561f;--state-neutral:#6a7484;--state-ok:#16764f;--state-warn:#a66c16;--state-bad:#c84646;--fill-1:#ffffff;--fill-2:#1f2a3d0a;--fill-3:#1f2a3d14}
    html[data-theme="light"] body{background:radial-gradient(900px 520px at 18% -180px,#d9e7f7 0,#eef4fb 45%,#f7fafc 78%),linear-gradient(160deg,#f7fafc 0%,#edf3f8 58%,#f9fbfd 100%);color:#182232}
    html[data-theme="light"] .sidebar{background:#ffffffee;border-right-color:#d8e0ea;box-shadow:6px 0 24px #3341550d}
    html[data-theme="light"] .sidebar-collapse,html[data-theme="light"] .logout-button{background:#eef3f8;border-color:#cbd5e1;color:#475569}
    html[data-theme="light"] .compact-brand{color:#8b5b1f}
    html[data-theme="light"] .brand h1,html[data-theme="light"] h2,html[data-theme="light"] .dashboard-panel h3,html[data-theme="light"] .support-detail-head h3{color:#172033}
    html[data-theme="light"] h3,html[data-theme="light"] th,html[data-theme="light"] summary{color:#8b5b1f}
    html[data-theme="light"] label{color:#475569}
    html[data-theme="light"] input,html[data-theme="light"] select,html[data-theme="light"] textarea{background:#fff;color:#182232;border-color:#cbd5e1}
    html[data-theme="light"] button.secondary{background:#eef3f8;border-color:#cbd5e1;color:#1f2937}
    html[data-theme="light"] .nav button{color:#415066}
    html[data-theme="light"] .nav button.active,html[data-theme="light"] .nav button:hover{background:#eaf4f2;border-color:#61b7a84f;color:#111827}
    html[data-theme="light"] .nav button.active .ico{background:#d9f0ed;color:var(--ink-accent-2)}
    html[data-theme="light"] .ico{background:#eef3f8;color:var(--ink-accent)}
    html[data-theme="light"] td{color:#263244}
    html[data-theme="light"] .badge{background:#f1f5f9;color:#334155;border-color:#dce5ee}
        html[data-theme="light"] .badge.ok{color:#137047}html[data-theme="light"] .badge.warn{color:#986315}html[data-theme="light"] .badge.bad{color:#ba3939}
    html[data-theme="light"] details,html[data-theme="light"] .mini-card,html[data-theme="light"] .profile,html[data-theme="light"] .priority-card,html[data-theme="light"] .store-tile,html[data-theme="light"] .support-ticket,html[data-theme="light"] .support-message{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .profile:hover,html[data-theme="light"] .profile.active,html[data-theme="light"] .support-ticket:hover,html[data-theme="light"] .support-ticket.active,html[data-theme="light"] .store-tile:hover{background:#ecf8f6;border-color:#5eb7a461}
    html[data-theme="light"] .switch-line{background:#f8fbfd;color:#1f2937}
    html[data-theme="light"] .switch-ui{background:#cbd5e1;box-shadow:inset 0 0 0 1px #94a3b84a}
    html[data-theme="light"] .theme-track:before{color:#1e293b;background:linear-gradient(180deg,#fff,#e5edf6);box-shadow:0 6px 16px #64748b3d}
    html[data-theme="light"] .copy-id{background:#eef3f8;border-color:#cbd5e1;color:#334155}
    html[data-theme="light"] .store-price{color:#8b5b1f}html[data-theme="light"] .store-price.promo{color:#16764f}
    html[data-theme="light"] .featured-category{background:#fff8eb;border-color:#d6a95b73}
    html[data-theme="light"] .modal{background:#0f172a73}html[data-theme="light"] .modal-card{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .toast.success{background:#e7f8f1;border-color:#85d4b1;color:#13543c}html[data-theme="light"] .toast.info{background:#eaf8fc;border-color:#8bcddd;color:#15536a}html[data-theme="light"] .toast.warning{background:#fff8e4;border-color:#e7c66b;color:#76520c}html[data-theme="light"] .toast.error{background:#fff0f0;border-color:#e99a9a;color:#8c2525}
    html[data-theme="light"] .login-card{border-color:#dbe3ec}
    html[data-theme="light"] .login-tabs button{background:#f1f5f9;border-color:#dbe3ec;color:#334155}
    html[data-theme="light"] .login-tabs button.active{background:#dff3f0;border-color:#5eb7a461;color:#12352f}
    html[data-theme="light"] .login-note{background:#f8fbfd;border-color:#dbe3ec}
    html[data-theme="light"] .logout-button{background:#eef3f8;border-color:#cbd5e1;color:#334155}html[data-theme="light"] .logout-button:hover{background:#dff3f0;border-color:#5eb7a461;color:#12352f}html[data-theme="light"] .mobile-settings{background:#ffffff12;border-color:#ffffff1f;color:#aeb7c5}html[data-theme="light"] .mobile-settings:hover{color:#fff}
    /* La barre du haut reste sombre dans les deux thèmes : son texte doit
       donc rester clair, sinon le titre devient illisible en thème clair. */
    html[data-theme="light"] .mobile-current b{color:#f7f9fc}html[data-theme="light"] .mobile-current span{color:#aeb7c5}html[data-theme="light"] .mobile-topbar .logout-button{background:#ffffff14;border-color:#ffffff26;color:#e7ecf5}html[data-theme="light"] .mobile-topbar .logout-button:hover{background:#ffffff22;color:#fff}html[data-theme="light"] .maintenance-banner{background:#c82632;color:#fff;border-color:#ef8f96}html[data-theme="light"] .maintenance-banner button{background:#ffffff1a;border-color:#fff6;color:#fff}html[data-theme="light"] .emoji-field button{background:#eef3f8;border-color:#cbd5e1;color:#1f2937}html[data-theme="light"] .reward-box{background:#fff;border-color:#dbe3ec}html[data-theme="light"] .ops-card,html[data-theme="light"] .admin-pill{background:#fff;border-color:#dbe3ec}html[data-theme="light"] .danger-zone{background:#fff4f4;border-color:#f0b0b0}html[data-theme="light"] .settings-state{background:#f1f5f9;border-color:#dce5ee}html[data-theme="light"] .settings-state.dirty{color:#946200;border-color:#d8a94e80;background:#f6c86a1f}html[data-theme="light"] .settings-state.saved{color:#1b7b54;border-color:#5cbd8f80;background:#68d3911f}
    .page-head-actions{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.page-head-actions>div{min-width:0}.page-head-actions button{flex:0 0 auto}.page-head-tools{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:0 0 auto}.page-head-tools .settings-state:empty{display:none}.page-head-tools button[aria-busy="true"]{opacity:.65;cursor:wait}.profile360-hero{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;margin-bottom:10px}.profile360-identity{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:8px;background:#ffffff08}.profile360-identity h3{margin:0;color:#fff;font-size:18px}.profile360-status{display:flex;gap:7px;flex-wrap:wrap}.profile360-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.profile360-metric{padding:10px;border:1px solid var(--line);border-radius:8px;background:#ffffff07;min-width:0}.profile360-metric span{display:block;color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.profile360-metric b{display:block;margin-top:3px;font-size:18px;line-height:1.1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile360-tabs,.section-tabs{display:flex;gap:6px;margin:10px 0;overflow:auto;scrollbar-width:thin}.profile360-tab,.section-tab{flex:0 0 auto;width:auto;padding:8px 11px;background:#ffffff08;border-color:var(--line);color:var(--ink-2);font-size:12px}.profile360-tab.active,.section-tab.active{background:#e3b869;border-color:#efcc88;color:#1c1408}.profile360-panel,.section-panel{display:none}.profile360-panel.active,.section-panel.active{display:block}.profile360-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px}.profile360-list{display:grid;gap:8px}.profile360-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:8px;background:#ffffff07}.profile360-row b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile360-row-actions{display:flex;gap:7px;justify-content:flex-end;flex-wrap:wrap}.profile360-row-actions button{width:auto}.profile360-empty{padding:12px;border:1px dashed var(--line-strong);border-radius:8px;color:var(--muted);text-align:center}.profile360-edit{border-color:#5eb7a43d;background:#5eb7a40b}.mobile-topbar,.mobile-nav-backdrop,.mobile-profile-back{display:none}
    #economyStatsScope{min-width:176px}.economy-period-note{display:flex;align-items:center;gap:7px;width:max-content;max-width:100%;margin:-2px 0 10px;padding:4px 9px;border:1px solid #68d39145;border-radius:999px;background:#68d3910d;color:var(--ink-2);font-size:10.5px;font-weight:750}.economy-period-note:before{content:"";width:6px;height:6px;flex:0 0 6px;border-radius:50%;background:var(--ink-green);box-shadow:0 0 0 3px #68d3911c}.economy-period-note.all{border-color:var(--line);background:#ffffff07}.economy-period-note.all:before{background:var(--muted);box-shadow:none}html[data-theme="light"] .economy-period-note{background:#edf9f4;border-color:#68b79366}html[data-theme="light"] .economy-period-note.all{background:#f4f7fa;border-color:#dbe3ec}
    @media(max-width:850px){html,body{max-width:100%;overflow-x:hidden}button,input,select,textarea{font-size:16px}body.mobile-menu-open{overflow:hidden}#app{display:block;min-height:100vh;overflow-x:hidden}.mobile-topbar{position:sticky;top:0;z-index:16;display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:8px;padding:10px 12px calc(10px + env(safe-area-inset-top,0px));background:#0b1019f2;border-bottom:1px solid var(--line);backdrop-filter:blur(14px);box-shadow:0 10px 24px #0005}.mobile-menu-button{position:relative;display:grid;place-items:center;width:42px;height:42px;padding:0;border-radius:8px;background:linear-gradient(180deg,#ffffff18,#ffffff08);border-color:#ffffff26;color:#f7f9fc;box-shadow:inset 0 1px 0 #ffffff1f,0 8px 20px #0005}.mobile-menu-button:hover{filter:none;border-color:#75d1c066}.mobile-menu-button span,.mobile-menu-button:before,.mobile-menu-button:after{content:"";position:absolute;left:11px;display:block;width:20px;height:2px;border-radius:99px;background:currentColor;box-shadow:0 1px 4px #0006;transition:transform .18s ease,opacity .16s ease,width .18s ease,top .18s ease}.mobile-menu-button:before{top:13px;width:15px}.mobile-menu-button span{top:20px}.mobile-menu-button:after{top:27px;width:12px}.mobile-menu-open .mobile-menu-button:before{top:20px;width:20px;transform:rotate(45deg)}.mobile-menu-open .mobile-menu-button span{opacity:0;transform:scaleX(.4)}.mobile-menu-open .mobile-menu-button:after{top:20px;width:20px;transform:rotate(-45deg)}.mobile-current{min-width:0;text-align:center}.mobile-current b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.mobile-current span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:9px}.mobile-topbar-actions{display:flex;align-items:center;gap:6px}.mobile-settings{background:#ffffff0a;border-color:#ffffff1a;color:#b9c3d2}.mobile-settings:hover{color:#fff}.mobile-settings[hidden]{display:none}.mobile-spacer{width:42px;height:42px}.mobile-nav-backdrop{position:fixed;inset:0;z-index:17;display:block;background:#0008;opacity:0;pointer-events:none;transition:opacity .18s ease}.sidebar{position:fixed;z-index:18;top:0;left:0;width:min(315px,86vw);height:100dvh;max-height:100dvh;padding:calc(16px + env(safe-area-inset-top,0px)) 12px calc(18px + env(safe-area-inset-bottom,0px));transform:translateX(-102%);transition:transform .22s ease;box-shadow:18px 0 44px #0009;overflow:auto}.mobile-menu-open .sidebar{transform:translateX(0)}.mobile-menu-open .mobile-nav-backdrop{opacity:1;pointer-events:auto}.brand{padding-bottom:12px;margin-bottom:10px}.brand h1{font-size:18px}.brand p{font-size:10px}.nav{gap:6px}.nav-group summary{padding:9px 10px;color:#aeb7c5;font-size:9px}.nav button{min-height:42px;font-size:12px;padding:8px 9px}.ico{width:26px;height:26px;flex-basis:26px}.ico svg{width:15px;height:15px}.theme-panel{margin-top:14px}.content{width:100%;min-width:0;padding:14px 12px calc(24px + env(safe-area-inset-bottom,0px));max-width:none;overflow-x:hidden}.view,.panel,details,.mini-card,.profile,.support-ticket,.store-tile{min-width:0;max-width:100%;overflow-wrap:anywhere}.page-head{margin-bottom:11px}.page-head h2{font-size:18px;line-height:1.15}.page-head p{margin-top:4px;font-size:10px}.panel{padding:12px;box-shadow:0 10px 24px #0004}.panel h2{font-size:18px}.panel h3{font-size:12px}label{font-size:11px}.muted{font-size:11px}.badge{font-size:10px;max-width:100%;white-space:normal}.status-row{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;margin-bottom:18px}.status-chip{border-radius:14px;align-items:flex-start;flex-direction:column;gap:8px;padding:12px 13px}.status-chip>.status-head{width:100%}.status-tip{position:static;z-index:auto;opacity:1;visibility:visible;transform:none;width:100%;min-width:0;max-width:none;padding:0;border:0;background:transparent;box-shadow:none;gap:5px}.status-chip:hover .status-tip,.status-chip:focus-visible .status-tip{transform:none}.status-tip-title{display:none}.split,.support-workspace{gap:12px}.toolbar{display:grid;grid-template-columns:minmax(0,1fr);align-items:stretch}.toolbar>*{min-width:0}.toolbar button{width:100%}.quick-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.quick-actions button{width:100%;font-size:12px;padding:8px 6px}.actions{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}.actions>*{width:100%;min-width:0}.grid,.grid.three{grid-template-columns:minmax(0,1fr);gap:8px}.scroll{margin:0;padding:0;overflow:visible}.scroll table{width:100%;min-width:0}.scroll thead{display:none}.scroll tbody,.scroll tr,.scroll td{display:block;width:100%}.scroll tr{padding:10px 0;border-top:1px solid var(--line)}.scroll tr:first-child{border-top:0}.scroll td{padding:4px 0;border-bottom:0;white-space:normal;overflow-wrap:anywhere}.scroll td:empty{display:none}.profiles{max-height:none}.support-detail{min-height:0}.support-empty{min-height:180px}.support-detail-head{display:grid;gap:10px}.support-message-head,.priority-card-top,.metric-row{min-width:0}.store-items{grid-template-columns:minmax(0,1fr)}.store-tile{grid-template-columns:48px minmax(0,1fr)}.store-tile b,.store-tile .muted{white-space:normal}.modal{padding:10px}.modal-card{width:100%;max-height:calc(100dvh - 20px);padding:12px}.modal-actions{display:grid}.toast{top:calc(10px + env(safe-area-inset-top,0px));right:10px;width:calc(100vw - 20px)}}@media(max-width:850px){.player-workspace{display:block}.mobile-profile-head{display:grid;gap:10px}.mobile-profile-back{display:inline-flex;justify-content:center;align-items:center;width:100%;min-height:40px;font-size:13px}.mobile-profile-open #playerSearchPanel,#players:not(.mobile-profile-open) #playerDetailPanel{display:none}.mobile-profile-open .page-head p{display:none}.mobile-profile-open .page-head{margin-bottom:8px}.mobile-profile-open .page-head h2{font-size:15px;color:var(--muted)}#profileEditor{display:grid;gap:8px}#profileEditor[hidden]{display:none!important}#profileEditor details{margin-top:6px}#profileEditor summary{font-size:13px;padding:9px 10px}#profileEditor .section-body{padding:0 10px 10px}.support-workspace{display:block}.support-list{max-height:none;padding-right:0}.support-detail{margin-top:12px}.support-message-head,.support-detail-head,.modal-head{align-items:flex-start}.support-context,pre.mini-card{max-width:100%;overflow:auto;white-space:pre-wrap}.store-category{margin-bottom:10px}.modal-head{display:grid;grid-template-columns:auto minmax(0,1fr)}.modal-head h2{font-size:16px;line-height:1.18}.modal-actions{gap:8px}.row-actions{display:grid;grid-template-columns:minmax(0,1fr);gap:7px}.row-actions button{width:100%}#accounts .split{display:block}#accounts .split>.panel+ .panel{margin-top:12px}.permission-grid{grid-template-columns:minmax(0,1fr)}}@media(max-width:420px){.content{padding-left:10px;padding-right:10px}.panel{padding:10px}.metric-row b{font-size:19px}.metric-row span{font-size:11px}.store-tile{grid-template-columns:44px minmax(0,1fr);min-height:72px}.store-tile .thumb{width:44px;height:44px}.permission-grid{grid-template-columns:1fr}.cosmetics{grid-template-columns:1fr;padding:8px}}
    @media(max-width:850px){.nav{gap:3px}.nav button{height:42px;min-height:42px}.nav-label{font-size:12px}.nav-group summary{height:28px;min-height:28px;padding:5px 10px}}.notification-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;align-items:end}.summary-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-bottom:12px}.summary-card{min-width:0;padding:11px;border:1px solid var(--line);border-radius:8px;background:#ffffff08;overflow:hidden}.summary-card.economy-kpi{position:relative;z-index:1;overflow:visible}.summary-card.economy-kpi:hover,.summary-card.economy-kpi:focus-within{z-index:95}.summary-card span{display:block;color:var(--muted);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.summary-card b{display:block;min-width:0;margin-top:3px;font-size:20px;line-height:1.18;overflow-wrap:anywhere;word-break:break-word}.inline-actions{display:flex;gap:7px;flex-wrap:wrap}.inline-actions button{width:auto}.preview-list{display:grid;gap:7px}.preview-list .mini-card{display:flex;justify-content:space-between;gap:10px;align-items:center}.device-list{display:grid;gap:8px;margin-top:10px}.device-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:8px;background:#ffffff07}.priority-urgent{color:var(--ink-red)}.priority-high{color:var(--ink-amber)}.sla-overdue{border-color:#f0787866;background:#f0787818}.dirty-bar{position:fixed;z-index:45;left:50%;bottom:calc(14px + env(safe-area-inset-bottom,0px));transform:translate(-50%,18px);display:flex;align-items:center;gap:12px;width:min(720px,calc(100vw - 28px));padding:10px 12px;border:1px solid #f6c86a88;border-radius:8px;background:#161d27f5;box-shadow:0 18px 44px #000b;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .16s ease}.dirty-bar.active{opacity:1;pointer-events:auto;transform:translate(-50%,0)}.dirty-bar b{display:block}.dirty-bar span{color:#cfd8e4;font-size:12px}.dirty-bar-actions{display:flex;gap:8px;margin-left:auto}.dirty-bar-actions button{width:auto}
    .notification-overview{display:grid;grid-template-columns:minmax(250px,1.35fr) repeat(3,minmax(130px,.65fr));gap:0;margin-bottom:14px;overflow:hidden;border:1px solid var(--line);border-radius:16px;background:#151d29;box-shadow:var(--shadow)}.notification-health-main{display:flex;align-items:center;gap:13px;min-width:0;padding:16px 18px;border-right:1px solid var(--line)}.notification-health-icon{display:grid;place-items:center;width:42px;height:42px;flex:0 0 42px;border-radius:50%;background:#5eb7a421;color:#8ee5d5}.notification-health-icon svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.notification-health-copy{min-width:0}.notification-health-copy b{display:block;color:var(--ink-strong);font-size:15px}.notification-health-copy span{display:block;margin-top:2px;color:var(--muted);font-size:11px}.notification-health-stat{display:flex;flex-direction:column;justify-content:center;min-width:0;padding:13px 16px;border-right:1px solid var(--line)}.notification-health-stat:last-child{border-right:0}.notification-health-stat span{color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}.notification-health-stat b{margin-top:3px;overflow:hidden;text-overflow:ellipsis;color:var(--ink-strong);font-size:16px;white-space:nowrap}.notification-tabs{display:flex;align-items:center;gap:4px;margin-bottom:0;padding:5px;border:1px solid var(--line);border-bottom:0;border-radius:14px 14px 0 0;background:#111722}.notification-tab{width:auto;min-height:36px;padding:7px 15px;border:0;border-radius:9px;background:transparent;color:var(--muted);box-shadow:none}.notification-tab:hover{filter:none;background:#ffffff0b;color:var(--ink)}.notification-tab.active{background:#263241;color:#fff;box-shadow:inset 0 1px 0 #ffffff14}.notification-workspace{border:1px solid var(--line);border-radius:0 0 16px 16px;background:linear-gradient(180deg,#171e29,#111722);box-shadow:var(--shadow)}.notification-pane{padding:18px}.notification-pane[hidden]{display:none!important}.notification-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:16px}.notification-section-head .section-kicker{display:block;margin:0 0 3px}.notification-section-head h3{margin:0;color:var(--ink-strong);font-size:19px}.notification-section-head p{max-width:720px;margin-top:4px}.notification-section-head>code{margin-top:7px;padding:5px 9px;border:1px solid var(--line);border-radius:99px;background:#ffffff08;color:var(--muted);font-size:10px}.notification-route-count{flex:0 0 auto;margin-top:5px;padding:5px 10px;border:1px solid #5eb7a455;border-radius:99px;background:#5eb7a414;color:#9be9d9;font-size:11px;font-weight:850}.push-route-list{display:grid;gap:8px}.push-route-item{margin:0;border-radius:12px;background:#151d28;box-shadow:none}.push-route-item>summary{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:11px;align-items:center;padding:13px 14px;color:inherit}.push-route-item>summary::before{display:none}.push-route-item>summary::after{content:"";width:8px;height:8px;margin-left:8px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);transition:transform .18s ease}.push-route-item[open]>summary::after{transform:rotate(225deg) translate(-2px,-2px)}.push-route-item[open]>summary{border-bottom:1px solid var(--line);background:#ffffff05}.push-route-state{width:10px;height:10px;flex:0 0 10px;border-radius:50%;background:#737d8c;box-shadow:0 0 0 4px #737d8c1f}.push-route-state.on{background:var(--green);box-shadow:0 0 0 4px #68d39120}.push-route-copy{display:block;min-width:0}.push-route-copy b{display:block;color:var(--ink-strong);font-size:13px}.push-route-copy span{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;color:var(--muted);font-size:10.5px;white-space:nowrap}.push-route-time{color:var(--ink-accent);font-size:12px;font-weight:850}.push-route-body{padding:14px}.push-route-meta{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px;padding:10px 12px;border-radius:9px;background:#0f151f;color:var(--muted);font-size:11px}.push-route-meta span{min-width:0;overflow-wrap:anywhere}.push-route-meta b{margin-right:5px;color:var(--ink-2)}.push-route-fields{display:grid;grid-template-columns:150px minmax(0,1fr);gap:10px;align-items:end}.push-route-message{grid-column:1/-1}.push-route-variables{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px;color:var(--muted);font-size:10px}.push-route-variable{width:auto;min-height:0;padding:3px 7px;border-color:#5eb7a43f;border-radius:99px;background:#5eb7a412;color:#9be9d9;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px}.push-route-variable:hover{filter:none;background:#5eb7a424}.notification-save{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}.notification-save button{width:auto;flex:0 0 auto}.notification-composer,.notification-diagnostic{max-width:920px}.notification-diagnostic .actions{max-width:520px}.daily-route{margin-top:8px;border-color:#d6a95b45}.daily-route>summary{grid-template-columns:auto minmax(0,1fr) auto auto}.daily-route .push-route-time{margin-left:8px}.notification-service-bad{color:var(--ink-red)!important}.notification-service-warn{color:var(--ink-amber)!important}
    /* Bannières in-app : une carte par famille de l'application, en colonnes.
       L'interrupteur coupe sur place, le nom ouvre l'éditeur — même geste que
       les pages du tutoriel. */
    .inapp-toolbar{display:flex;align-items:center;gap:9px;flex:0 0 auto;margin-top:5px}
    .inapp-toolbar .notification-route-count{margin-top:0}
    .inapp-toolbar button{width:auto;flex:0 0 auto}
    .inapp-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;align-items:start}
    .inapp-family{--tone:#8ab4c8;min-width:0;border:1px solid color-mix(in srgb,var(--tone) 38%,transparent);border-radius:10px;overflow:hidden;background:color-mix(in srgb,var(--tone) 5%,transparent)}
    .inapp-family-head{display:flex;align-items:center;gap:9px;padding:9px 11px;border-bottom:1px solid color-mix(in srgb,var(--tone) 26%,transparent);background:color-mix(in srgb,var(--tone) 12%,transparent)}
    .inapp-family-mark{display:grid;place-items:center;width:28px;height:28px;flex:0 0 28px;border-radius:8px;background:var(--tone);color:#10151d}
    .inapp-family-mark svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .inapp-family-copy{min-width:0;flex:1 1 auto}
    .inapp-family-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:13px}
    .inapp-family-copy span{display:block;margin-top:1px;color:var(--muted);font-size:10.5px;font-weight:750}
    .inapp-family-all{flex:0 0 auto;width:auto;min-height:0;padding:0;border:0;border-radius:0;background:none;box-shadow:none;color:var(--ink-accent);font:inherit;font-size:10.5px;font-weight:800;text-decoration:underline;cursor:pointer}
    .inapp-family-all:hover{filter:none;color:var(--ink-amber)}
    .inapp-rows{display:grid}
    .inapp-row{display:flex;align-items:center;gap:8px;min-width:0;padding-right:10px;border-top:1px solid color-mix(in srgb,var(--tone) 20%,transparent)}
    .inapp-row:first-child{border-top:0}
    .inapp-row.is-off{opacity:.58}
    .inapp-open{display:flex;align-items:center;gap:9px;flex:1 1 auto;min-width:0;padding:8px 2px 8px 10px;border:0;border-radius:0;background:none;box-shadow:none;color:inherit;font:inherit;font-weight:400;text-align:left;cursor:pointer}
    .inapp-open:hover{filter:none;background:#ffffff0d}
    .inapp-open:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
    .inapp-open b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:12.5px;font-weight:800}
    .inapp-icon{display:grid;place-items:center;width:28px;height:28px;flex:0 0 28px;border-radius:8px;background:color-mix(in srgb,var(--tone) 20%,transparent);color:var(--tone)}
    .inapp-icon svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .inapp-row.is-off .inapp-icon{background:#ffffff10;color:var(--muted)}
    .inapp-row .switch-line{flex:0 0 auto;margin:0;padding:0;border:0;background:none}
    .inapp-row .switch-ui{width:38px;height:21px;flex:0 0 38px}
    .inapp-row .switch-ui:after{top:3px;left:3px;width:15px;height:15px}
    .inapp-row .switch-line input:checked+.switch-ui:after{transform:translateX(17px)}
    /* Aperçu : la bannière telle que le jeu la dessine. Volontairement sombre
       dans les deux thèmes, comme l'aperçu du tutoriel. */
    #inAppRouteMark{border-color:color-mix(in srgb,var(--tone) 45%,transparent);background:color-mix(in srgb,var(--tone) 22%,transparent);color:var(--tone);text-shadow:none}
    .inapp-meta{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px;padding:10px 12px;border-radius:9px;background:#0f151f;color:var(--muted);font-size:11px}
    .inapp-meta>span{min-width:0;overflow-wrap:anywhere}
    .inapp-meta b{margin-right:5px;color:var(--ink-2)}
    .inapp-preview{margin-top:12px;padding:14px;border:1px solid #ffffff1f;border-radius:10px;background:radial-gradient(120% 100% at 50% 0,#215044 0,#143229 58%,#0d201c 100%)}
    .inapp-preview-label{display:block;margin-bottom:10px;color:#ffffffbf;font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .inapp-banners{display:grid;gap:9px}
    .inapp-banner{--style:#4dd0e1;display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border:1px solid #d6a95b94;border-radius:14px;background:linear-gradient(135deg,#26313ff7,#141a24f7);box-shadow:0 12px 24px #0000005c}
    .inapp-banner-icon{display:grid;place-items:center;width:36px;height:36px;flex:0 0 36px;border-radius:50%;background:color-mix(in srgb,var(--style) 20%,transparent);color:var(--style);font-size:19px;line-height:1}
    .inapp-banner-icon svg{display:block;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .inapp-banner-copy{min-width:0;flex:1 1 auto}
    .inapp-banner-copy b{display:block;color:#fffffff5;font-size:15px;font-weight:800;line-height:1.2}
    .inapp-banner-copy span{display:block;margin-top:3px;color:#ffffffe0;font-size:12.5px;font-weight:550;line-height:1.35}
    .inapp-banner-close{flex:0 0 auto;color:#ffffffb0;font-size:17px;line-height:1}
    .inapp-preview-hint{margin-top:9px;color:#ffffff9e;font-size:10.5px;font-weight:650;line-height:1.35}
    /* Chercher une bannière : les familles restent la vue par défaut{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
    .inapp-search{display:flex;align-items:center;gap:8px;flex:1 1 320px;min-width:0;padding:0 10px;border:1px solid var(--line);border-radius:10px;background:#ffffff08}
    .inapp-search:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px #d6a95b30}
    .inapp-search-icon{display:grid;place-items:center;width:15px;height:15px;flex:0 0 15px;color:var(--muted)}
    .inapp-search-icon svg{display:block;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .inapp-search input{min-width:0;flex:1 1 auto;height:34px;margin:0;padding:0;border:0;border-radius:0;background:none;box-shadow:none;font-size:12.5px}
    .inapp-search input:focus{border:0;box-shadow:none;outline:none}
    .inapp-search input::-webkit-search-cancel-button{display:none}
    .inapp-search-clear{width:auto;min-height:0;flex:0 0 auto;padding:0 4px;border:0;background:none;box-shadow:none;color:var(--muted);font-size:16px;line-height:1;cursor:pointer}
    .inapp-search-clear:hover{filter:none;color:var(--ink)}
    .inapp-filters{display:flex;align-items:center;gap:5px;flex:0 0 auto;flex-wrap:wrap}
    .inapp-lang-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 10px}
    .inapp-lang-note{color:var(--ink-3);font-size:11px;font-weight:600}
    .inapp-filter{width:auto;min-height:0;padding:5px 10px;border:1px solid var(--line);border-radius:99px;background:#ffffff08;color:var(--muted);box-shadow:none;font-size:10.5px;font-weight:800}
    .inapp-filter:hover{filter:none;border-color:var(--line-strong);color:var(--ink)}
    .inapp-filter.is-on{border-color:#d6a95b66;background:#d6a95b1c;color:var(--ink-accent)}
    .inapp-results{display:grid;gap:6px}
    .inapp-results-count{margin:0 0 2px;color:var(--muted);font-size:11px;font-weight:800}
    .inapp-results-empty{margin:0;padding:18px;border:1px dashed var(--line-strong);border-radius:10px;color:var(--muted);font-size:12px;text-align:center}
    .inapp-result{--tone:#8ab4c8;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:center;width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:#ffffff07;color:inherit;font:inherit;font-weight:400;text-align:left;cursor:pointer}
    .inapp-result:hover{filter:none;border-color:color-mix(in srgb,var(--tone) 55%,transparent);background:#ffffff0f}
    .inapp-result:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
    .inapp-result.is-off{opacity:.62}
    .inapp-result-mark{display:grid;place-items:center;width:32px;height:32px;flex:0 0 32px;border-radius:9px;background:color-mix(in srgb,var(--tone) 20%,transparent);color:var(--tone);font-size:17px;line-height:1}
    .inapp-result-mark svg{display:block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .inapp-result-copy{min-width:0}
    .inapp-result-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:12.5px}
    .inapp-result-line{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2);font-size:11.5px}
    .inapp-result-meta{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:10.5px;font-weight:750}
    .inapp-result-tags{display:flex;align-items:center;gap:5px;flex:0 0 auto}
    .inapp-result-tags .badge{padding:2px 7px;font-size:10px}
    /* Le module de logos : les dessins maison et les emoji, cherchables, avec
       « Auto » en tête pour rendre à l'application le choix qu'elle faisait. */
    .inapp-icon-choice{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:center;width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:#ffffff07;color:inherit;font:inherit;font-weight:400;text-align:left;cursor:pointer}
    .inapp-icon-choice:hover{filter:none;border-color:var(--line-strong);background:#ffffff0f}
    .inapp-icon-choice[aria-expanded="true"]{border-color:#d6a95b66;background:#d6a95b12}
    .inapp-icon-choice-mark{display:grid;place-items:center;width:36px;height:36px;flex:0 0 36px;border:1px solid var(--line);border-radius:50%;background:#ffffff0d;color:var(--ink-accent);font-size:19px;line-height:1}
    .inapp-icon-choice-mark svg{display:block;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .inapp-icon-choice-copy{min-width:0}
    .inapp-icon-choice-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:12.5px}
    .inapp-icon-choice-copy span{display:block;margin-top:2px;color:var(--muted);font-size:10.5px;font-weight:700}
    .inapp-icon-choice-action{flex:0 0 auto;color:var(--ink-accent);font-size:10.5px;font-weight:850;text-decoration:underline}
    .inapp-icon-picker{margin-top:8px;border:1px solid var(--line);border-radius:10px;background:#0f151f}
    .inapp-icon-tools{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:9px 10px;border-bottom:1px solid var(--line)}
    .inapp-search-small{flex:1 1 200px;background:#ffffff0a}
    .inapp-search-small input{height:30px;font-size:12px}
    .inapp-icon-scroll{max-height:236px;overflow-y:auto;padding:10px}
    .inapp-icon-group+.inapp-icon-group{margin-top:11px}
    .inapp-icon-group>span{display:block;margin-bottom:6px;color:var(--muted);font-size:9.5px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .inapp-icon-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(42px,1fr));gap:6px}
    .inapp-icon-option{display:grid;place-items:center;width:100%;min-height:0;aspect-ratio:1;padding:0;border:1px solid var(--line);border-radius:9px;background:#ffffff08;box-shadow:none;color:var(--ink-2);font-size:20px;line-height:1;cursor:pointer}
    .inapp-icon-option:hover{filter:none;border-color:var(--accent);color:var(--ink-strong)}
    .inapp-icon-option svg{display:block;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .inapp-icon-option.is-chosen{border-color:var(--accent-2);background:#5eb7a41f;color:#9be9d9;box-shadow:0 0 0 2px #5eb7a455}
    .inapp-icon-option.is-auto{border-style:dashed;aspect-ratio:auto;padding:9px 12px;font-size:11px;font-weight:850}
    .inapp-icon-auto{color:var(--muted);font-size:11px;font-weight:850;letter-spacing:.02em}
    .inapp-icon-option.is-chosen .inapp-icon-auto{color:#9be9d9}
    .inapp-icon-crosskind{width:auto;min-height:0;margin-top:10px;padding:6px 10px;border:1px dashed var(--line-strong);border-radius:99px;background:none;box-shadow:none;color:var(--ink-accent);font-size:10.5px;font-weight:800}
    .inapp-icon-crosskind:hover{filter:none;border-color:var(--accent);background:#d6a95b12}
    .inapp-icon-free{padding:10px;border-top:1px solid var(--line)}
    .inapp-icon-free label{margin:0 0 6px;color:var(--muted);font-size:10.5px;font-weight:750}
    .inapp-icon-free .emoji-field{display:flex;align-items:center;gap:7px}
    .inapp-icon-free input{width:120px;flex:0 0 120px;height:34px;margin:0;font-size:18px;text-align:center}
    .inapp-icon-free button{width:auto;flex:0 0 auto}
    .inapp-icon-free-hint{margin:6px 0 0;color:var(--ink-red);font-size:10.5px;font-weight:750}
    .inapp-icon-free-hint:empty{display:none}
    html[data-theme="light"] .inapp-search,html[data-theme="light"] .inapp-filter,html[data-theme="light"] .inapp-result,html[data-theme="light"] .inapp-icon-choice,html[data-theme="light"] .inapp-icon-option{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .inapp-icon-picker{background:#f5f8fb;border-color:#dbe3ec}
    html[data-theme="light"] .inapp-icon-choice-mark{background:#eef3f8;border-color:#cbd5e1}
    html[data-theme="light"] .inapp-icon-option.is-chosen{color:var(--ink-accent-2)}
    html[data-theme="light"] .inapp-icon-option.is-chosen .inapp-icon-auto{color:var(--ink-accent-2)}
    @media(max-width:850px){.inapp-search{flex:1 1 auto}.inapp-result{grid-template-columns:auto minmax(0,1fr)}.inapp-result-tags{grid-column:2;margin-top:2px}}
    /* Rendez-vous push : la semaine d'abord, pour voir d'un coup ce qui part
       quel jour, puis une carte par rendez-vous, ouverte au clic. */
    .week-strip{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;margin-bottom:12px;padding:10px;border:1px solid var(--line);border-radius:12px;background:#0f151f}
    .week-day{display:grid;align-content:start;gap:5px;min-width:0;min-height:82px;padding:7px 6px;border:1px solid transparent;border-radius:9px}
    .week-day.is-today{border-color:#d6a95b66;background:#d6a95b12}
    .week-day>b{display:block;color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.05em;text-align:center}
    .week-day.is-today>b{color:var(--ink-accent)}
    .week-chip{display:grid;grid-template-columns:auto minmax(0,1fr);gap:5px;align-items:center;width:100%;padding:4px 6px;border:1px solid var(--line);border-radius:7px;background:#ffffff0d;color:inherit;font:inherit;font-weight:400;text-align:left;cursor:pointer}
    .week-chip:hover{filter:none;border-color:var(--line-strong);background:#ffffff18}
    .week-chip:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
    .week-chip.is-off{opacity:.45}
    .week-chip i{width:5px;height:5px;border-radius:50%;background:var(--green);font-style:normal}
    .week-chip.is-off i{background:#737d8c}
    .week-chip b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:10.5px;font-weight:800;font-variant-numeric:tabular-nums}
    .week-chip span{grid-column:1/-1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:10px}
    .week-empty{color:var(--muted);font-size:10px;text-align:center;opacity:.7}
    .schedule-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
    .schedule-card{display:flex;align-items:center;gap:10px;min-width:0;padding-right:11px;border:1px solid var(--line);border-radius:10px;background:#ffffff07;overflow:hidden}
    .schedule-card.is-off{opacity:.62}
    .schedule-open{display:flex;align-items:center;gap:11px;flex:1 1 auto;min-width:0;padding:10px 2px 10px 11px;border:0;border-radius:0;background:none;box-shadow:none;color:inherit;font:inherit;font-weight:400;text-align:left;cursor:pointer}
    .schedule-open:hover{filter:none;background:#ffffff0d}
    .schedule-open:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
    .schedule-hour{display:grid;place-items:center;width:52px;height:44px;flex:0 0 52px;border:1px solid #d6a95b4d;border-radius:9px;background:#d6a95b14;color:var(--ink-accent);font-size:15px;font-weight:900;font-variant-numeric:tabular-nums}
    .schedule-card.is-off .schedule-hour{border-color:var(--line);background:#ffffff0a;color:var(--muted)}
    .schedule-copy{min-width:0}
    .schedule-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:13px}
    .schedule-copy span{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:10.5px}
    .schedule-copy .schedule-last{margin-top:4px;font-size:10px;font-weight:750}
    .schedule-card .switch-line{flex:0 0 auto;margin:0;padding:0;border:0;background:none}
    .schedule-card .switch-ui{width:38px;height:21px;flex:0 0 38px}
    .schedule-card .switch-ui:after{top:3px;left:3px;width:15px;height:15px}
    .schedule-card .switch-line input:checked+.switch-ui:after{transform:translateX(17px)}
    .schedule-empty{grid-column:1/-1;padding:16px;border:1px dashed var(--line-strong);border-radius:10px;color:var(--muted);font-size:12px;text-align:center}
    .day-picker{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
    .day-toggle{width:auto;min-height:0;padding:6px 11px;border:1px solid var(--line);border-radius:99px;background:#ffffff0a;color:var(--muted);font-size:11.5px;font-weight:800;box-shadow:none}
    .day-toggle:hover{filter:none;border-color:var(--line-strong);color:var(--ink)}
    .day-toggle[aria-pressed="true"]{border-color:#5eb7a466;background:#5eb7a41f;color:var(--ink-accent-2)}
    .schedule-modal-tools{display:flex;gap:9px;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
    .schedule-modal-tools button{width:auto}
    html[data-theme="light"] .week-strip{background:#f5f8fb;border-color:#dbe3ec}
    html[data-theme="light"] .week-chip,html[data-theme="light"] .schedule-card{background:#fff}
    html[data-theme="light"] .day-toggle{background:#f5f8fb}
    @media(max-width:1100px){.schedule-cards{grid-template-columns:minmax(0,1fr)}}
    @media(max-width:850px){.week-strip{grid-template-columns:repeat(4,minmax(0,1fr))}}
    @media(max-width:560px){.week-strip{grid-template-columns:repeat(2,minmax(0,1fr))}}
    .inapp-tag{flex:0 0 auto;min-width:20px;padding:1px 6px;border:1px solid var(--line);border-radius:99px;background:#ffffff0d;color:var(--muted);font-size:10px;font-weight:850;text-align:center;font-variant-numeric:tabular-nums}
    .inapp-tag.is-rewritten{border-color:#d6a95b66;background:#d6a95b1c;color:var(--ink-accent)}
    .inapp-text-count{border-color:#d6a95b55;background:#d6a95b14;color:var(--ink-accent)}
    .inapp-text-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-top:16px}
    .inapp-text-head h3{margin:0;color:var(--ink-strong);font-size:14px}
    .inapp-text-head span{font-size:11px;font-weight:750}
    .inapp-text-lead{margin-top:4px;font-size:11.5px;line-height:1.4}
    .inapp-text-list{display:grid;gap:6px;margin-top:10px}
    .inapp-text-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;align-items:center;width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:9px;background:#ffffff07;color:inherit;font:inherit;font-weight:400;text-align:left}
    .inapp-text-row:hover{filter:none;border-color:var(--line-strong);background:#ffffff0f}
    .inapp-text-row.is-off{opacity:.62}
    .inapp-text-open{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center;min-width:0;min-height:36px;padding:0;border:0;background:transparent;color:inherit;box-shadow:none;font:inherit;text-align:left}
    .inapp-text-open:hover{filter:none}.inapp-text-open:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
    .inapp-text-row-copy{min-width:0}
    .inapp-text-row-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:12.5px}
    .inapp-text-row-copy span{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:11px}
    .inapp-text-row .badge{flex:0 0 auto;padding:2px 7px;font-size:10px}
    .inapp-state-button{width:auto;min-width:96px;min-height:34px;padding:7px 11px;border-radius:99px;box-shadow:none;font-size:11px;font-weight:900;letter-spacing:.01em}
    .inapp-state-button.is-on{border-color:#58b99f88;background:#173e36;color:#aef2df}
    .inapp-state-button.is-on:hover{filter:none;background:#205145;border-color:#75d1c0}
    .inapp-state-button.is-off{border-color:#f0787866;background:#3b252a;color:#ffb7b7}
    .inapp-state-button.is-off:hover{filter:none;background:#4b2c32;border-color:#f07878}
    .inapp-text-state{flex:0 0 auto}
    .inapp-variables{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:11px;color:var(--muted);font-size:10px}
    .inapp-variable{width:auto;min-height:0;padding:3px 7px;border-color:#5eb7a43f;border-radius:99px;background:#5eb7a412;color:#9be9d9;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px}
    .inapp-variable:hover{filter:none;background:#5eb7a424}
    html[data-theme="light"] .inapp-text-row{background:#fff}
    html[data-theme="light"] .inapp-state-button.is-on{background:#daf3eb;border-color:#58b99f99;color:#17644f}
    html[data-theme="light"] .inapp-state-button.is-off{background:#fff0f0;border-color:#e99a9a;color:#a42f2f}
    html[data-theme="light"] .inapp-variable{color:var(--ink-accent-2)}
    html[data-theme="light"] .inapp-family{background:color-mix(in srgb,var(--tone) 4%,white)}
    html[data-theme="light"] .inapp-row{background:#fff}
    html[data-theme="light"] .inapp-meta{background:#eef3f8}
    html[data-theme="light"] .notification-route-count{border-color:#5eb7a466;background:#5eb7a418;color:var(--ink-accent-2)}
    @media(max-width:1320px){.inapp-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
    @media(max-width:850px){.inapp-grid{grid-template-columns:minmax(0,1fr)}.inapp-toolbar{justify-self:start;margin-top:0}.inapp-meta{grid-template-columns:minmax(0,1fr)}}
    @media(max-width:560px){.inapp-text-row{grid-template-columns:minmax(0,1fr) auto}.inapp-text-row>.badge{display:none}}
    @media(max-width:850px){.page-head-actions{display:grid;grid-template-columns:minmax(0,1fr)}.page-head-actions button{width:100%}.page-head-tools{display:grid;grid-template-columns:minmax(0,1fr);justify-items:stretch}.page-head-tools .settings-state{justify-self:start}.profile360-hero{grid-template-columns:minmax(0,1fr)}.profile360-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.profile360-tabs,.section-tabs{margin-left:-2px;margin-right:-2px;padding-bottom:3px}.profile360-tab,.section-tab{font-size:12px;padding:8px 10px}.profile360-row{grid-template-columns:minmax(0,1fr)}.profile360-row-actions{display:grid;grid-template-columns:minmax(0,1fr);justify-content:stretch}.profile360-row-actions button{width:100%}#profileGamesWindow{width:100%;min-width:0}.profile-access-action{flex:1 1 100%;margin-left:0;width:100%}.notification-grid,.summary-strip{grid-template-columns:minmax(0,1fr)}.inline-actions{display:grid;grid-template-columns:minmax(0,1fr)}.inline-actions button{width:100%}.device-row,.preview-list .mini-card{grid-template-columns:minmax(0,1fr)}.dirty-bar{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;width:calc(100vw - 20px);bottom:calc(8px + env(safe-area-inset-bottom,0px));padding:10px;border-radius:16px}.dirty-bar b{font-size:13px;line-height:1.15}.dirty-bar span{font-size:11px}.dirty-bar-actions{display:grid;grid-template-columns:auto auto;width:auto;margin-left:0}.dirty-bar-actions button{width:auto;min-width:92px;min-height:42px;padding:8px 10px}.dirty-active .content{padding-bottom:calc(108px + env(safe-area-inset-bottom,0px))}.metric-help{width:24px;height:24px;cursor:pointer}.metric-help:after{position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));width:auto;max-width:none;padding:11px 12px;border-radius:12px;transform:translateY(8px);box-shadow:0 14px 34px #000b}.metric-help:hover:after,.metric-help:focus:after{transform:translateY(0)}.profile-inline-field{min-height:76px;padding:12px 48px 12px 12px;touch-action:manipulation}.profile-inline-field.editing{padding:54px 12px 12px}.profile-edit-icon{top:10px;right:10px;width:32px;height:32px;border-radius:10px}.profile-edit-icon svg{width:15px;height:15px}.profile-inline-cancel{top:10px;right:10px;min-height:34px;padding:7px 10px;border:1px solid #75d1c055;border-radius:10px;background:#10252eee;color:#bff7ed;text-decoration:none}.profile-inline-cancel:hover{filter:none;text-decoration:none}.profile-inline-control input,.profile-inline-control select,.profile-inline-control textarea{min-height:46px}}@media(max-width:360px){.dirty-bar{grid-template-columns:minmax(0,1fr);gap:9px}.dirty-bar-actions{grid-template-columns:1fr 1fr;width:100%}.dirty-bar-actions button{width:100%;min-width:0}.dirty-active .content{padding-bottom:calc(150px + env(safe-area-inset-bottom,0px))}}
    @media(max-width:680px){.modal{place-items:end center;align-items:end}.modal-card{border-radius:8px 8px 0 0;padding-bottom:calc(12px + env(safe-area-inset-bottom,0px))}}
    .panel,details,.mini-card,.profile,.priority-card,.store-tile,.support-ticket,.support-message,.ops-card,.summary-card,.profile360-identity,.profile360-metric,.profile360-row,.reward-box,.device-row,.admin-friend-row,.switch-line,.banner,.login-card,.maintenance-banner,.dirty-bar,.recovery-code,.admin-friend-empty,.profile360-empty,.cosmetic,.login-note{border-radius:14px}
    .modal-card{border-radius:16px}
    .home-search{display:flex;align-items:center;gap:11px;width:min(560px,100%);margin:2px 0 16px;padding:13px 16px;background:#ffffff0a;border:1px solid var(--line-strong);color:var(--ink-2);font-weight:650;text-align:left;border-radius:14px;box-shadow:var(--shadow)}
    .home-search:hover{filter:none;border-color:#75d1c0;background:#5eb7a414;color:#fff}
    .home-search svg{width:18px;height:18px;flex:0 0 18px;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}
    .home-search-hint{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .quick-kbd{flex:0 0 auto;padding:3px 8px;border:1px solid var(--line-strong);border-radius:7px;background:#ffffff0d;color:var(--ink-2);font:inherit;font-size:11px;font-weight:800}
    .tool-copy{display:grid;gap:2px;min-width:0;max-width:100%;overflow:hidden}
    .tool-copy b{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff}
    .tool-copy .muted{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
    .quick-modal{place-items:start center;align-items:start;padding-top:min(14vh,120px)}
    .quick-card{width:min(560px,100%);padding:10px;border-radius:16px}
    .quick-input{display:flex;align-items:center;gap:10px;padding:6px 8px 12px;border-bottom:1px solid var(--line)}
    .quick-input svg{width:18px;height:18px;flex:0 0 18px;stroke:var(--muted);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}
    .quick-input input{border:0;background:transparent;height:auto;padding:6px 2px;font-size:16px}
    .quick-input input:focus{border:0;box-shadow:none}
    .quick-results{max-height:min(52vh,420px);overflow:auto;padding-top:8px;display:grid;gap:4px}
    .quick-section{margin:8px 6px 4px;color:var(--muted);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.07em}
    .quick-item{display:flex;gap:11px;align-items:center;text-align:left;width:100%;padding:9px 10px;background:transparent;border:1px solid transparent;color:inherit;font-weight:400;border-radius:10px}
    .quick-item:hover,.quick-item.focus{filter:none;background:#5eb7a414;border-color:#5eb7a455}
    .quick-item .ico{width:30px;height:30px;flex:0 0 30px}
    .quick-empty{padding:10px 6px 12px}
    .nav .quick-launch{display:flex;gap:10px;align-items:center;text-align:left;width:100%;height:44px;min-height:44px;margin-bottom:8px;padding:10px;background:#ffffff0a;border:1px solid var(--line-strong);color:var(--muted);font-weight:650;border-radius:10px;flex:0 0 auto}
    .nav .quick-launch:hover{filter:none;border-color:#75d1c0;color:#fff;background:#5eb7a414}
    .nav .quick-launch .ico{background:#ffffff10;color:var(--ink-accent-2)}
    .nav .quick-launch .quick-kbd{margin-left:auto}
    html[data-theme="light"] .home-search{background:#fff;border-color:#cbd5e1;color:#647083}
    html[data-theme="light"] .home-search:hover{background:#ecf8f6;border-color:#5eb7a461;color:#12352f}
    html[data-theme="light"] .tool-copy b{color:#172033}
    /* Les fiches d'état étaient en texte blanc sur fond blanc en thème clair. */
    html[data-theme="light"] .status-chip{background:#fff;border-color:#dbe3ec;color:#172033}
    html[data-theme="light"] .status-chip:hover{background:#f1f6fa;border-color:#c3d0de}
    html[data-theme="light"] .status-chip.bad{border-color:#c8464666}
    html[data-theme="light"] .status-chip.warn{border-color:#a66c1666}
    html[data-theme="light"] .status-tip{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .status-tip-title{color:#8a5c12}
    html[data-theme="light"] .status-tip-line:not(.ok):not(.warn):not(.bad) b{color:#172033}
    html[data-theme="light"] .quick-kbd{background:#f1f5f9;border-color:#dce5ee;color:#647083}
    html[data-theme="light"] .quick-item:hover,html[data-theme="light"] .quick-item.focus{background:#ecf8f6;border-color:#5eb7a461}
    html[data-theme="light"] .nav .quick-launch{background:#f1f5f9;border-color:#cbd5e1;color:#475569}
    html[data-theme="light"] .nav .quick-launch:hover{background:#dff3f0;border-color:#5eb7a461;color:#12352f}
    html[data-theme="light"] .notification-overview,html[data-theme="light"] .notification-tabs,html[data-theme="light"] .notification-workspace,html[data-theme="light"] .push-route-item{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .notification-health-main,html[data-theme="light"] .notification-health-stat,html[data-theme="light"] .notification-tabs{border-color:#dbe3ec}
    html[data-theme="light"] .notification-tab.active{background:#e8eef5;color:#172033}
    html[data-theme="light"] .notification-tab:hover{background:#f1f6fa;color:#172033}
    html[data-theme="light"] .push-route-item[open]>summary{background:#f5f8fb;border-color:#dbe3ec}
    html[data-theme="light"] .push-route-meta{background:#f1f5f9}
    html[data-theme="light"] .notification-section-head h3,html[data-theme="light"] .push-route-copy b,html[data-theme="light"] .notification-health-copy b,html[data-theme="light"] .notification-health-stat b{color:#172033}
    @media(max-width:850px){.notification-overview{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.notification-health-main{grid-column:1/-1;border-right:0;border-bottom:1px solid var(--line)}.notification-health-stat{padding:11px 13px}.notification-health-stat:nth-child(3){border-right:0}.notification-tabs{overflow-x:auto}.notification-tab{flex:1 0 auto;padding:7px 11px;font-size:12px}.notification-pane{padding:14px 12px}.notification-section-head{display:grid;gap:8px}.notification-section-head>code,.notification-route-count{justify-self:start;margin-top:0}.push-route-item>summary{grid-template-columns:auto minmax(0,1fr) auto auto;padding:12px}.push-route-time{display:none}.push-route-copy span{white-space:normal}.push-route-meta,.push-route-fields{grid-template-columns:minmax(0,1fr)}.push-route-message{grid-column:auto}.notification-save{display:grid}.notification-save button{width:100%}.daily-route>summary{grid-template-columns:auto minmax(0,1fr) auto}}
    @media(max-width:460px){.notification-overview{grid-template-columns:minmax(0,1fr)}.notification-health-stat{border-right:0;border-bottom:1px solid var(--line)}.notification-health-stat:last-child{border-bottom:0}.push-route-body{padding:11px}.notification-pane{padding:12px 10px}}
    @media(min-width:851px){
      #app.sidebar-compact .nav button,
      #app.sidebar-compact .nav .quick-launch{
        justify-content:center;
        width:46px;
        min-width:46px;
        max-width:46px;
        height:46px;
        min-height:46px;
        margin:0 auto;
        padding:0;
        border:1px solid transparent;
        border-radius:8px;
        background:transparent;
        color:#d9b66c;
        box-shadow:none;
      }
      #app.sidebar-compact .nav .quick-launch{margin-bottom:2px}
      #app.sidebar-compact .nav button .ico{
        width:36px;
        height:36px;
        flex:0 0 36px;
        border-radius:7px;
        background:transparent;
        color:inherit;
      }
      #app.sidebar-compact .nav button .ico svg{
        width:19px;
        height:19px;
        stroke-width:1.9;
        vector-effect:non-scaling-stroke;
      }
      #app.sidebar-compact .nav button:hover,
      #app.sidebar-compact .nav button.active{
        background:#263241;
        border-color:#5eb7a455;
        color:#8ee5d5;
      }
      #app.sidebar-compact .nav button:hover .ico,
      #app.sidebar-compact .nav button.active .ico{
        background:transparent;
        color:inherit;
      }
      html[data-theme="light"] #app.sidebar-compact .nav button,
      html[data-theme="light"] #app.sidebar-compact .nav .quick-launch{
        background:transparent;
        border-color:transparent;
        color:#9a6a24;
      }
      html[data-theme="light"] #app.sidebar-compact .nav button:hover,
      html[data-theme="light"] #app.sidebar-compact .nav button.active{
        background:#eaf4f2;
        border-color:#61b7a84f;
        color:#237f72;
      }
      html[data-theme="light"] #app.sidebar-compact .nav-group{border-top-color:#1f2a3d12}
    }
    .sidebar-tooltip{
      position:fixed;
      z-index:80;
      display:grid;
      gap:2px;
      min-width:118px;
      max-width:230px;
      padding:9px 11px;
      border:1px solid #d9b66c55;
      border-radius:8px;
      background:#161d27f5;
      color:#f7f9fc;
      box-shadow:0 12px 30px #0009,0 1px 0 #ffffff12 inset;
      pointer-events:none;
      opacity:0;
      transform:translate(-6px,-50%) scale(.98);
      transform-origin:left center;
      transition:opacity .14s ease,transform .14s ease;
      backdrop-filter:blur(12px);
    }
    .sidebar-tooltip:before{
      content:"";
      position:absolute;
      left:-5px;
      top:50%;
      width:9px;
      height:9px;
      border-left:1px solid #d9b66c55;
      border-bottom:1px solid #d9b66c55;
      background:#161d27f5;
      transform:translateY(-50%) rotate(45deg);
    }
    .sidebar-tooltip.visible{opacity:1;transform:translate(0,-50%) scale(1)}
    .sidebar-tooltip-label{font-size:12px;font-weight:850;line-height:1.2;letter-spacing:0}
    .sidebar-tooltip-group{color:#d9b66c;font-size:9px;font-weight:800;line-height:1.2;text-transform:uppercase;letter-spacing:.06em}
    html[data-theme="light"] .sidebar-tooltip{border-color:#b9823355;background:#fff;color:#172033;box-shadow:0 12px 28px #3440562e,0 1px 0 #fff inset}
    html[data-theme="light"] .sidebar-tooltip:before{border-color:#b9823355;background:#fff}
    html[data-theme="light"] .sidebar-tooltip-group{color:#8b5b1f}
    @media(max-width:850px){.sidebar-tooltip{display:none!important}}
    #playerDetailPanel{container-type:inline-size}
    .profile360-hero,.profile360-identity,.profile360-metrics,.profile360-status{min-width:0}
    .profile360-status .copy-id{max-width:100%;white-space:normal;overflow-wrap:anywhere}
    @media(min-width:851px) and (max-width:1050px){.player-workspace{grid-template-columns:minmax(0,1fr)}.player-workspace>.panel{min-width:0}.player-workspace .profiles{max-height:38vh}}
    .profile-inline-field{position:relative;min-width:0;min-height:88px;padding:13px 42px 13px 14px;border:1px solid var(--line);border-radius:8px;background:#ffffff08;cursor:pointer;transition:border-color .16s ease,background .16s ease,box-shadow .16s ease}
    .profile-inline-field:hover,.profile-inline-field:focus-visible{border-color:#75d1c080;background:#5eb7a40d;outline:0}
    .profile-inline-field.editing{padding:42px 14px 14px;border-color:#75d1c0;background:#5eb7a414;box-shadow:0 0 0 3px #5eb7a418}
    .profile-inline-label{display:block;margin-bottom:8px;color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.06em}
    .profile-inline-value{display:block;min-width:0;color:var(--text);font-size:16px;font-weight:850;line-height:1.3;overflow-wrap:anywhere}
    .profile-inline-meta{display:block;margin-top:5px;color:var(--muted);font-size:11px;font-weight:500}
    .profile-inline-control{display:none}
    .profile-inline-field.editing .profile-inline-value,.profile-inline-field.editing .profile-inline-meta,.profile-inline-field.editing .profile-edit-icon{display:none}
    .profile-inline-field.editing .profile-inline-control{display:block}
    .profile-inline-control input,.profile-inline-control select,.profile-inline-control textarea{width:100%;margin:0}
    .profile-inline-control textarea{min-height:96px;resize:vertical}
    .profile-edit-icon{position:absolute;top:11px;right:11px;display:grid;place-items:center;width:25px;height:25px;border:1px solid var(--line);border-radius:6px;background:#ffffff0a;color:var(--muted)}
    .profile-edit-icon svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .profile-inline-cancel{position:absolute;top:10px;right:12px;display:none;width:auto;padding:0;border:0;background:transparent;color:var(--ink-accent-2);font-size:11px;font-weight:850;line-height:1.2}
    .profile-inline-cancel:hover{filter:none;color:var(--ink-strong);text-decoration:underline}
    .profile-inline-cancel:focus-visible{border-color:transparent;box-shadow:0 0 0 3px #5eb7a433}
    .profile-inline-field.editing .profile-inline-cancel{display:inline-flex}
    .profile-inline-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
    .profile-inline-wide{grid-column:1/-1}
    .profile360-hero>.profile360-identity{padding:0;border:0;background:transparent}
    .profile-inline-hero{width:min(390px,100%);min-height:82px;background:#07101933}
    .profile-inline-hero .profile-inline-value{font-size:22px}
    .profile-inline-category{width:min(190px,100%);min-height:0}
    .profile-inline-category.editing{width:min(420px,100%)}
    .profile-inline-category .profile-inline-value{display:flex;align-items:center;gap:6px;font-size:14px}
    .profile-category-summary-icon{display:grid;place-items:center;width:18px;height:18px;flex:0 0 18px;border-radius:5px;background:#ffffff10;color:var(--group-color,var(--ink-accent-2))}
                .profile-category-summary-icon svg,.profile-category-choice-icon svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    /* Rangée compacte de puces : le bloc en grosses tuiles mangeait la moitie
       de l'entete du profil, surtout depuis l'ajout du groupe Beta. */
    .profile-category-options{display:flex;flex-wrap:wrap;gap:6px}
    .profile-category-choice{position:relative;display:inline-flex;align-items:center;gap:6px;min-width:0;margin:0;padding:5px 10px 5px 6px;border:1px solid var(--line);border-radius:99px;background:#ffffff08;color:var(--muted);font-size:11.5px;font-weight:850;line-height:1;white-space:nowrap;cursor:pointer}
    .profile-category-choice:hover{border-color:#75d1c080;background:#ffffff0e;color:var(--text)}
    .profile-category-choice input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
    .profile-category-choice-icon{display:grid;place-items:center;width:20px;height:20px;flex:0 0 20px;border-radius:6px;background:#ffffff0b;color:var(--group-color,var(--ink-accent-2))}
                .profile-category-choice:has(input:checked){border-color:var(--group-color,#75d1c0);background:color-mix(in srgb,var(--group-color,#75d1c0) 16%,transparent);color:var(--text);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--group-color,#75d1c0) 30%,transparent)}
    .profile-category-choice:focus-within{outline:2px solid #75d1c080;outline-offset:2px}
    .ban-presets{display:flex;flex-wrap:wrap;gap:7px;margin:8px 0 2px}
    .ban-presets button{flex:0 0 auto;width:auto}
    .ban-presets button.active{background:#e3b869;border-color:#efcc88;color:#1c1408}
    .ban-scope-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(238px,1fr));gap:9px;margin-top:10px}
    .ban-scope{display:flex;align-items:flex-start;gap:10px;margin:0;padding:11px;border:1px solid var(--line);border-radius:8px;background:#ffffff06;font-size:13px;cursor:pointer;transition:border-color .15s ease,background .15s ease}
    .ban-scope:hover{border-color:var(--line-strong)}
    .ban-scope input{width:auto;margin:2px 0 0;accent-color:#f07878;flex:0 0 auto}
    .ban-scope-copy{display:grid;gap:3px;min-width:0}
    .ban-scope-copy b{color:var(--ink);font-size:13px;line-height:1.2}
    .ban-scope-copy .muted{font-size:11px;line-height:1.3}
    .ban-scope.checked{border-color:#f0787866;background:#f078780f}
    .ban-scope.checked .ban-scope-copy b{color:var(--ink-red)}
    .ban-scope-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
    .profile-store-editor{margin-top:18px}
    .profile-store-editor>h3{margin-bottom:10px}
    .profile-cosmetic-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
    .profile-cosmetic-field{min-height:118px;overflow:hidden}
    .profile-cosmetic-field.editing{grid-column:1/-1}
    .profile-cosmetic-field.editing .profile-cosmetic-summary,.profile-cosmetic-field.editing .profile-cosmetic-preview{display:none}
    .profile-cosmetic-summary{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;margin-top:8px}
    .profile-cosmetic-count{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border:1px solid #68d39155;border-radius:999px;background:#68d39112;color:#aef1cc;font-size:11px;font-weight:850;white-space:nowrap}
    .profile-cosmetic-count:before{content:"";width:7px;height:7px;border-radius:50%;background:#68d391;box-shadow:0 0 0 3px #68d39120}
    .profile-cosmetic-progress{grid-column:1/-1;height:7px;border-radius:999px;background:#ffffff12;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff14}
    .profile-cosmetic-progress i{display:block;width:var(--unlock-progress,0%);height:100%;border-radius:inherit;background:linear-gradient(90deg,#68d391,#8ee5d5)}
    .profile-cosmetic-preview{display:flex;align-items:center;gap:5px;min-width:0;margin-top:9px}
    .profile-cosmetic-preview .thumb{width:26px;height:26px;border-radius:7px;font-size:12px}
    .profile-cosmetic-more{display:grid;place-items:center;width:26px;height:26px;border:1px solid var(--line);border-radius:7px;background:#ffffff0b;color:var(--muted);font-size:10px;font-weight:850}
    .profile-cosmetic-empty{color:var(--muted);font-size:11px;font-weight:650}
    .profile-cosmetic-control{max-height:min(460px,60vh);padding-right:4px;overflow:auto}
    .profile-cosmetic-control .cosmetics{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px;margin-top:2px;padding:2px 2px 4px}
    .profile-cosmetic-control .cosmetic{position:relative;display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:10px;align-items:center;min-height:64px;margin:0;padding:10px;border-color:#ffffff16;background:#0710192e;color:#dfe7f2;overflow:hidden;transition:border-color .16s ease,background .16s ease,transform .16s ease,box-shadow .16s ease}
    .profile-cosmetic-control .cosmetic:hover{border-color:#75d1c080;background:#5eb7a414;transform:translateY(-1px)}
    .profile-cosmetic-control .cosmetic:has(input:focus-visible){outline:2px solid #75d1c080;outline-offset:2px}
    .profile-cosmetic-control .cosmetic:has(input:checked){border-color:#68d39175;background:#68d39112;box-shadow:inset 0 0 0 1px #68d39124}
    .profile-cosmetic-control .cosmetic.mandatory{opacity:.9}
    .profile-cosmetic-control .cosmetic input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
    .profile-cosmetic-control .cosmetic .thumb{width:42px;height:42px;border-radius:10px;font-size:18px;box-shadow:inset 0 1px 0 #ffffff24,0 8px 16px #0005}
    .unlock-copy{min-width:0;display:grid;gap:3px}
    .unlock-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:13px;line-height:1.15}
    .unlock-copy span{color:var(--muted);font-size:11px;font-weight:750}
    .profile-cosmetic-control .cosmetic:has(input:checked) .unlock-copy span{color:#aef1cc}
    .unlock-toggle{position:relative;width:42px;height:24px;border-radius:999px;background:#536070;box-shadow:inset 0 0 0 1px #ffffff20;transition:background .16s ease}
    .unlock-toggle:after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 2px 6px #0007;transition:transform .16s ease}
    .profile-cosmetic-control .cosmetic:has(input:checked) .unlock-toggle{background:#58b99f}
    .profile-cosmetic-control .cosmetic:has(input:checked) .unlock-toggle:after{transform:translateX(18px)}
    .profile-cosmetic-control .cosmetic:has(input:disabled) .unlock-toggle{background:#8a7444}
    .profile-profile-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
    .profile-identity-resolver{display:flex;align-items:center;gap:8px;min-width:0;min-height:36px;margin-top:6px;padding:6px 8px;border:1px solid #68d39155;border-radius:8px;background:#68d3910d;color:var(--text)}
    .profile-identity-resolver[hidden]{display:none}
    .profile-identity-resolver.loading{border-color:var(--line);background:#ffffff06;color:var(--muted)}
    .profile-identity-resolver.bad{border-color:#f0787866;background:#f0787812;color:#ffa2a2}
    .profile-resolver-avatar{display:grid;place-items:center;width:26px;height:26px;flex:0 0 26px;border-radius:50%;background:#5eb7a426;color:var(--ink-accent-2);font-size:11px;font-weight:900}
    .profile-resolver-copy{min-width:0;display:grid;line-height:1.15}
    .profile-resolver-copy b,.profile-resolver-copy span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .profile-resolver-copy b{font-size:12px}.profile-resolver-copy span{margin-top:2px;color:var(--muted);font-size:10px}
    .profile-identity-resolver .cat-chip{margin-left:auto;flex:0 0 auto}
    .profile-resolver-state{width:7px;height:7px;flex:0 0 7px;border-radius:50%;background:#778392}
    .profile-resolver-state.online{background:#68d391;box-shadow:0 0 0 3px #68d3911f}
    .profile-resolver-state.banned{background:#f07878;box-shadow:0 0 0 3px #f078781f}

    /* ---- Page Cadeaux : destinataire, contenu, message ---- */
    .gift-board{display:grid;grid-template-columns:minmax(280px,.8fr) minmax(0,1.2fr);gap:14px;align-items:start}
    .gift-kinds{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
    .gift-kind{position:relative;display:grid;grid-template-columns:34px minmax(0,1fr);gap:9px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:10px;background:#ffffff07;cursor:pointer}
    .gift-kind input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer}
    .gift-kind-mark{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:#ffffff10;color:var(--ink-2)}
    .gift-kind-mark svg{display:block;width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
    .gift-kind-copy{min-width:0}
    .gift-kind-copy b{display:block;font-size:13px;line-height:1.2;overflow-wrap:anywhere}
    .gift-kind-copy span{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:10.5px}
    .gift-kind:hover{border-color:#75d1c066}
    .gift-kind:has(input:checked){border-color:#efcc88;background:#e3b8691f}
    .gift-kind:has(input:checked) .gift-kind-mark{background:#e3b86930;color:var(--ink-amber)}
    .gift-kind:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
    /* La quantité ne disparaît jamais : un champ qui s'efface d'un type à
       l'autre donne l'impression d'avoir perdu le réglage. Les raccourcis
       évitent de retaper les valeurs courantes, différentes par type — 100
       pièces est normal, 100 lancers de roue ne l'est pas. */
    .gift-quantity{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
    .gift-quantity input{width:132px;flex:0 0 auto}
    .gift-presets{display:flex;gap:6px;flex-wrap:wrap;min-width:0}
    .gift-preset{width:auto;padding:6px 11px;border-color:var(--line);background:#ffffff08;color:var(--ink-2);font-size:12px;font-weight:850}
    .gift-preset.active{background:#e3b869;border-color:#efcc88;color:#1c1408}
    .gift-quantity-hint{margin-top:7px;font-size:11px}
    .gift-quantity.locked input{opacity:.55}
    .gift-summary{display:flex;align-items:center;gap:9px;margin-top:14px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:#ffffff07;color:var(--ink);font-size:13px;font-weight:700}
    .gift-summary:empty{display:none}
    .gift-summary b{color:var(--ink-strong)}
    .gift-summary-mark{display:grid;place-items:center;width:26px;height:26px;flex:0 0 26px;border-radius:8px;background:#e3b86926;color:var(--ink-amber);font-size:14px;font-weight:900}
    html[data-theme="light"] .gift-kind,html[data-theme="light"] .gift-preset,html[data-theme="light"] .gift-summary{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .gift-kind:has(input:checked){background:#e3b8691f;border-color:#d8ae5e}
    html[data-theme="light"] .gift-preset.active{background:#e3b869;border-color:#d8ae5e;color:#1c1408}
    @media(max-width:980px){.gift-board{grid-template-columns:minmax(0,1fr)}.gift-kinds{grid-template-columns:minmax(0,1fr)}}

    /* ---- Liste des joueurs : identité à gauche, groupe et présence à droite ----
       La présence n'est volontairement PAS une pastille. Tant qu'elle en était
       une, un groupe vert (« Ami ») et le badge vert « En ligne » se lisaient
       comme la même chose. Elle a maintenant sa propre colonne, une LED qui
       bat, et un libellé en encre neutre : c'est la forme et le mouvement qui
       la distinguent, pas la couleur — les groupes étant libres de prendre
       n'importe quelle teinte. */
    /* Trois colonnes fixes : la présence tombe toujours au même endroit d'une
       ligne à l'autre, quelle que soit la largeur du groupe. Une colonne se
       lit comme un champ ; une suite de pastilles, non. */
    .profile-row{display:grid;grid-template-columns:minmax(0,1fr) auto 112px;gap:12px;align-items:center}
    .profile-main{min-width:0}
    .profile-main .muted{margin-top:3px;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .profile-group{justify-self:end}
    .presence{display:inline-flex;align-items:center;gap:8px}
    .profile-row .presence{padding-left:12px;border-left:1px solid var(--line-strong)}
    .presence-led{width:9px;height:9px;flex:0 0 9px;box-sizing:border-box;border:1.5px solid #7f8b9a;border-radius:50%}
    .presence-copy{display:grid;min-width:0;line-height:1.2}
    .presence-label{font-size:10px;font-weight:850;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-2);white-space:nowrap}
    .presence-sub{margin-top:2px;font-size:10px;font-weight:650;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .presence.online .presence-led{background:#35d07f;border-color:#35d07f;animation:presencePulse 2.2s ease-out infinite}
    .presence.online .presence-label{color:var(--ink-strong)}
    @keyframes presencePulse{0%{box-shadow:0 0 0 0 #35d07f66}70%{box-shadow:0 0 0 7px #35d07f00}100%{box-shadow:0 0 0 0 #35d07f00}}
    @media(prefers-reduced-motion:reduce){.presence.online .presence-led{animation:none;box-shadow:0 0 0 3px #35d07f33}}
    @media(max-width:850px){.profile-row{grid-template-columns:minmax(0,1fr) auto;gap:8px}.profile-row .presence{grid-column:1/-1;padding-left:0;border-left:0}}
    .profile-duplicate-list{display:grid;gap:8px}
    .profile-duplicate-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;padding:11px 12px;border:1px solid var(--line);border-radius:8px;background:#ffffff07}
    .profile-duplicate-row.high{border-color:#f6c86a66;background:#f6c86a0d}
    .profile-duplicate-main{min-width:0}
    .profile-duplicate-title{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
    .profile-duplicate-title b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .profile-duplicate-reasons{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}
    .profile-duplicate-actions{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}
    .profile-duplicate-actions button{width:auto}
    .duplicate-confidence{color:var(--ink-amber)}
    .duplicate-confidence.review{color:var(--ink-info)}
    html[data-theme="light"] .profile-duplicate-row{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .profile-duplicate-row.high{background:#fff9ec;border-color:#d9a74477}
    html[data-theme="light"] .profile-inline-field{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .profile-inline-field:hover,html[data-theme="light"] .profile-inline-field:focus-visible,html[data-theme="light"] .profile-inline-field.editing{background:#ecf8f6;border-color:#5eb7a4}
    html[data-theme="light"] .profile-edit-icon{background:#f1f5f9;border-color:#dbe3ec}
    html[data-theme="light"] .profile-relations-panel,html[data-theme="light"] .profile-relations-add,html[data-theme="light"] .admin-friend-row{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .admin-friend-name,html[data-theme="light"] .admin-friend-head h3{color:#172033}
    html[data-theme="light"] .profile-category-choice{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .profile-category-choice:has(input:checked){background:#dff3f0;border-color:#5eb7a4}
    html[data-theme="light"] .profile-cosmetic-count{background:#e8f8f1;border-color:#68b99566;color:#17664a}
    html[data-theme="light"] .profile-cosmetic-progress{background:#e7edf3;box-shadow:inset 0 0 0 1px #dbe3ec}
    html[data-theme="light"] .profile-cosmetic-control .cosmetic{background:#fff;border-color:#dbe3ec;color:#334155}
    html[data-theme="light"] .profile-cosmetic-control .cosmetic:hover{background:#ecf8f6;border-color:#5eb7a4}
    html[data-theme="light"] .profile-cosmetic-control .cosmetic:has(input:checked){background:#e8f8f1;border-color:#68b99580}
    html[data-theme="light"] .unlock-copy b{color:#172033}
    html[data-theme="light"] .profile-cosmetic-control .cosmetic:has(input:checked) .unlock-copy span{color:#1b7b54}
    html[data-theme="light"] .profile-identity-resolver{background:#effbf7;border-color:#68b99566}
    html[data-theme="light"] .profile-identity-resolver.loading{background:#f8fafc;border-color:#dbe3ec}
    html[data-theme="light"] .profile-identity-resolver.bad{background:#fff3f3;border-color:#e98a8a66;color:#b83d45}
    /* Textes réglés pour le thème sombre posés sur des fonds translucides
       (#ffffffXX) : en thème clair le fond redevient blanc et le texte
       disparaît. Correctifs de couleur uniquement, aucune incidence sur la
       mise en page ni sur le thème sombre. */
    html[data-theme="light"] .ban-scope-copy b,
    html[data-theme="light"] .beta-mail,
    html[data-theme="light"] .copy-field,
    html[data-theme="light"] .copy-field code,
    html[data-theme="light"] .economy-period strong,
    html[data-theme="light"] .profile360-identity h3,
    html[data-theme="light"] .recovery-code strong{color:#172033}
    html[data-theme="light"] .ban-scope.checked .ban-scope-copy b,
    html[data-theme="light"] .challenge-card-meta .challenge-off,
    html[data-theme="light"] .priority-urgent,
    html[data-theme="light"] .beta-row[data-status="declined"] .beta-avatar,
    html[data-theme="light"] .beta-step-card[data-status="declined"] .beta-step-icon{color:var(--ink-red)}
    html[data-theme="light"] .beta-icon-btn.on,
    html[data-theme="light"] .cat-chip.cat-test,
    html[data-theme="light"] .challenge-card-meta .challenge-reward,
    html[data-theme="light"] .duplicate-confidence,
    html[data-theme="light"] .priority-high,
    html[data-theme="light"] .profile-relations-section-title,
    html[data-theme="light"] .beta-step-card[data-status="received"] .beta-step-icon{color:var(--ink-amber)}
    html[data-theme="light"] .beta-avatar,
    html[data-theme="light"] .beta-step-icon,
    /* La couleur vient du groupe lui-meme (--group-color), en clair comme en
       sombre : plus de regle par groupe a maintenir ici. */
    html[data-theme="light"] .profile-category-summary-icon{color:color-mix(in srgb,var(--group-color,var(--ink-accent-2)) 42%,#0b1620)}html[data-theme="light"] .group-row .group-dot,html[data-theme="light"] .group-icon-choice:has(input:checked),html[data-theme="light"] .cat-chip,html[data-theme="light"] .profile-category-choice-icon{color:color-mix(in srgb,var(--group-color,var(--ink-accent-2)) 42%,#0b1620)}
    @container (max-width:760px){.profile360-hero{grid-template-columns:minmax(0,1fr)}.profile-inline-hero,.profile-inline-category{width:100%}}
    @container (max-width:520px){.profile360-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.profile-category-options{grid-template-columns:minmax(0,1fr)}.profile-category-choice{grid-template-columns:28px minmax(0,1fr);align-items:center;justify-items:start;text-align:left}}
    @media(max-width:850px){.home-search{width:100%;margin-bottom:12px;padding:11px 13px}.home-search .quick-kbd{display:none}.tool-copy .muted{display:none}.quick-modal{padding:10px;padding-top:max(8vh,46px);place-items:start center;align-items:start}.quick-card{max-height:calc(100dvh - 110px);border-radius:16px}.nav .quick-launch .quick-kbd{display:none}}
    /* Sous 360px, deux colonnes couperaient les titres au milieu d'un mot. */
    /* Sur écran tactile le :hover reste collé après un appui : la carte reste
       soulevée alors que le doigt est parti. On garde la couleur, pas le
       déplacement, et on met le retour visuel sur l'appui lui-même. */
    @media(hover:none){.store-tile:hover,.cosmetic:hover{transform:none}}
    @media(max-width:850px){.profile-inline-grid,.profile-cosmetic-grid{grid-template-columns:minmax(0,1fr)}.profile-inline-wide,.profile-cosmetic-field.editing{grid-column:auto}.profile-inline-hero,.profile-inline-category{width:100%}.profile360-status .profile-inline-field{flex:1 0 100%}.profile-profile-actions{display:grid;grid-template-columns:minmax(0,1fr)}.profile-duplicate-row{grid-template-columns:minmax(0,1fr)}.profile-duplicate-actions{display:grid;grid-template-columns:1fr 1fr;justify-content:stretch}.profile-duplicate-actions button{width:100%}}
    /* Barre de variables : posée au-dessus de la zone de texte, elle insère
       {pseudo} & compagnie là où le curseur se trouvait. Un groupe du catalogue
       n'occupe qu'un bouton — le détail vit dans le menu qui se déroule — donc
       la barre tient sur une ligne, qu'il y ait trois variables ou trente. */
    .var-bar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:2px 0 -2px;padding:6px 9px;border:1px solid var(--line);border-top-left-radius:8px;border-top-right-radius:8px;border-bottom:0;background:#ffffff07}
    .var-bar[hidden]{display:none}
    .var-bar+textarea,.var-bar+input{border-top-left-radius:0;border-top-right-radius:0}
    .var-bar-target{display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;color:var(--muted);font-size:10.5px;font-weight:850;letter-spacing:.03em;text-transform:uppercase}
    .var-bar-target b{color:var(--ink-accent);text-transform:none;letter-spacing:0;font-size:11.5px}
    .var-bar-menus{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0;padding-left:9px;border-left:1px solid var(--line-strong)}
    .var-menu-trigger{display:inline-flex;align-items:center;gap:7px;width:auto;min-height:0;padding:5px 10px;border:1px solid #ffffff14;border-radius:99px;background:#ffffff10;color:var(--ink-2);font-size:11.5px;font-weight:800;box-shadow:none;cursor:pointer}
    .var-menu-trigger::after{content:"";width:5px;height:5px;flex:0 0 5px;margin-top:-3px;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;transform:rotate(45deg);transition:transform .16s ease}
    .var-menu-trigger:hover{filter:none;border-color:#75d1c0;background:#5eb7a424;color:var(--ink-strong)}
    .var-menu-trigger[aria-expanded="true"]{border-color:#75d1c0;background:#5eb7a42e;color:var(--ink-strong)}
    .var-menu-trigger[aria-expanded="true"]::after{margin-top:2px;transform:rotate(225deg)}
    /* Le panneau flotte au-dessus du formulaire : fond opaque obligatoire,
       sinon la zone de texte et le bouton d'envoi se lisent au travers. */
    .var-menu{position:fixed;z-index:30;display:grid;gap:1px;width:max-content;min-width:246px;max-width:min(340px,calc(100vw - 24px));overflow:auto;overscroll-behavior:contain;padding:6px;border:1px solid var(--line-strong);border-radius:10px;background:var(--surface);box-shadow:var(--shadow)}
    .var-menu[hidden]{display:none}
    .var-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1px 10px;width:100%;min-height:0;padding:7px 9px;border:1px solid transparent;border-radius:7px;background:none;color:var(--ink);text-align:left;font-weight:400;box-shadow:none;cursor:pointer}
    .var-item:hover,.var-item:focus-visible{filter:none;outline:none;border-color:#5eb7a455;background:#5eb7a41c}
    .var-item b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-size:12.5px;font-weight:800}
    /* Jeton et valeur d'exemple partagent la colonne de droite : alignés sur
       le même bord, ils dessinent une ligne nette au lieu de flotter. */
    .var-item code{align-self:center;justify-self:end;text-align:right;color:var(--ink-accent-2);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:800;white-space:nowrap}
    .var-item span{min-width:0;color:var(--muted);font-size:11px;font-weight:600;line-height:1.35}
    .var-item em{align-self:start;justify-self:end;max-width:112px;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-accent);font-size:11px;font-style:normal;font-weight:800;line-height:1.35}
    .var-preview{display:grid;gap:5px;margin-top:8px;padding:9px 11px;border:1px solid var(--line);border-radius:8px;background:#ffffff06;font-size:12px;line-height:1.45}
    .var-preview[hidden]{display:none}
    .var-preview-line{display:grid;grid-template-columns:56px minmax(0,1fr);gap:9px;align-items:baseline;min-width:0}
    .var-preview-line>span{color:var(--muted);font-size:10px;font-weight:850;letter-spacing:.04em;text-transform:uppercase}
    .var-preview-line>b{min-width:0;color:var(--ink);font-weight:700;overflow-wrap:anywhere}
    /* Le texte est rendu tel qu'il est écrit : sauts de ligne et espaces gardés,
       sinon l'aperçu recolle en un bloc un message pensé en paragraphes. */
    .var-preview-line>b,.sample-rendered p,.preview-message{white-space:pre-wrap}
    .var-preview mark{padding:0 3px;border-radius:4px;background:#5eb7a42e;color:var(--ink-accent-2);font-weight:850}
    .var-preview-note{color:var(--muted);font-size:10px;font-weight:850;letter-spacing:.04em;text-transform:uppercase}
    .sample-rendered{margin-top:7px;padding:7px 9px;border-left:2px solid #5eb7a466;background:#ffffff08;border-radius:0 6px 6px 0}
    .sample-rendered b{display:block;font-size:12px;color:var(--ink-accent)}
    .sample-rendered p{margin:2px 0 0;font-size:11.5px;line-height:1.4;color:var(--ink-2)}
    html[data-theme="light"] .sample-rendered{background:#f4f7fa}
    .var-preview-warn{color:var(--ink-amber);font-size:11.5px;font-weight:800}
    .var-preview-warn code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
    html[data-theme="light"] .var-bar,html[data-theme="light"] .var-preview{background:#f4f7fa}
    html[data-theme="light"] .var-menu-trigger{background:#fff;color:#3d4757}
    html[data-theme="light"] .var-menu{background:#fff}
    html[data-theme="light"] .var-item:hover,html[data-theme="light"] .var-item:focus-visible{background:#dff0ec}
    html[data-theme="light"] .var-preview mark{background:#c9ece4;color:#14544a}
    @media(max-width:640px){.var-bar-target{flex:1 0 100%}.var-bar-menus{padding-left:0;border-left:0}}

    /* Statistiques : les décisions passent avant les détails. */
    .stats-priority-panel{margin-bottom:12px;padding:18px}.stats-priority-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.stats-priority-head h3{margin:2px 0 3px;color:var(--ink-strong);font-size:20px}.stats-eyebrow{display:block;color:var(--ink-amber);font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.12em}.stats-priority-count{display:inline-flex;align-items:center;justify-content:center;min-height:30px;padding:5px 10px;border:1px solid var(--line-strong);border-radius:999px;background:#ffffff0b;color:var(--ink-2);font-size:11px;font-weight:850;white-space:nowrap}.stats-priority-count.bad{border-color:#f0787866;background:#f0787818;color:var(--ink-red)}.stats-priority-count.warn{border-color:#f6c86a66;background:#f6c86a12;color:var(--ink-amber)}.stats-priority-count.ok{border-color:#68d39166;background:#68d39112;color:var(--ink-green)}.stats-priority-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.stats-priority-card{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto 1fr auto;gap:8px 11px;min-width:0;padding:13px;border:1px solid var(--line);border-radius:13px;background:#ffffff07;overflow:hidden}.stats-priority-card.bad{border-color:#f0787866;background:linear-gradient(145deg,#f078781a,#ffffff05)}.stats-priority-card.warn{border-color:#f6c86a66;background:linear-gradient(145deg,#f6c86a14,#ffffff05)}.stats-priority-card.ok{border-color:#68d39155;background:linear-gradient(145deg,#68d39110,#ffffff05)}.stats-priority-rank{display:grid;place-items:center;width:31px;height:31px;border-radius:9px;background:#ffffff10;color:var(--ink-2);font-size:11px;font-weight:950}.stats-priority-card.bad .stats-priority-rank{background:#f0787824;color:var(--ink-red)}.stats-priority-card.warn .stats-priority-rank{background:#f6c86a20;color:var(--ink-amber)}.stats-priority-copy{min-width:0}.stats-priority-title{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.stats-priority-title b{color:var(--ink-strong);font-size:13px;line-height:1.3}.stats-priority-copy p{margin-top:5px;color:var(--muted);font-size:11.5px;line-height:1.42}.stats-priority-action{grid-column:2;display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:3px}.stats-priority-action span{color:var(--ink-2);font-size:11px;font-weight:750}.stats-priority-action button{flex:0 0 auto}.stats-priority-empty{grid-column:1/-1;display:flex;align-items:center;gap:12px;padding:13px;border:1px solid #68d39155;border-radius:13px;background:#68d39110}.stats-priority-empty-icon{display:grid;place-items:center;width:36px;height:36px;flex:0 0 36px;border-radius:11px;background:#68d39122;color:var(--ink-green);font-size:18px;font-weight:950}.stats-priority-empty b{display:block;color:var(--ink-strong)}
    .stats-snapshot{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 14px}.stats-snapshot-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:start;min-width:0;padding:13px 14px;text-align:left;border:1px solid var(--line);border-radius:13px;background:linear-gradient(180deg,var(--panel),var(--panel-2));color:inherit;font-weight:400;box-shadow:var(--shadow)}.stats-snapshot-card:hover{filter:none;border-color:#5eb7a477;background:#5eb7a414}.stats-snapshot-card>span:first-child{display:block;color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.06em}.stats-snapshot-card b{display:block;margin-top:4px;color:var(--ink-strong);font-size:22px;line-height:1}.stats-snapshot-card small{display:block;grid-column:1/-1;color:var(--muted);font-size:11px}.stats-snapshot-signal{width:9px;height:9px;margin-top:3px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px #68d39120}.stats-snapshot-card.warn .stats-snapshot-signal{background:var(--amber);box-shadow:0 0 0 4px #f6c86a20}.stats-snapshot-card.bad .stats-snapshot-signal{background:var(--red);box-shadow:0 0 0 4px #f0787820}.stats-coverage{grid-column:1/-1;height:5px;border-radius:999px;background:#ffffff13;overflow:hidden}.stats-coverage i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#5eb7a4,#8ee5d5)}
    .stats-priority-copy p{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:3}.economy-status{display:grid;gap:7px;align-items:start}.economy-status .economy-status-badge{display:inline-flex;align-items:center;gap:7px;width:max-content;max-width:100%;padding:5px 9px;border:1px solid #68d39155;border-radius:999px;background:#68d39112;color:var(--ink-green);font-size:10px;font-weight:900;line-height:1.2;text-transform:uppercase;letter-spacing:.07em}.economy-status-badge i{display:block;width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:currentColor;box-shadow:0 0 0 4px #68d3911e}.economy-status.warn .economy-status-badge{border-color:#f6c86a66;background:#f6c86a12;color:var(--ink-amber)}.economy-status.bad .economy-status-badge{border-color:#f0787866;background:#f0787815;color:var(--ink-red)}.economy-status-copy b{display:block;font-size:20px}.economy-status-copy span{display:block;margin-top:2px;color:var(--muted);font-size:12px}
    .stats-priority-list{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
    html[data-theme="light"] .stats-priority-panel,html[data-theme="light"] .stats-snapshot-card,html[data-theme="light"] .stats-priority-card{background:#fff;border-color:#dbe3ec}html[data-theme="light"] .stats-priority-card.bad{background:#fff6f6;border-color:#df8d8d}html[data-theme="light"] .stats-priority-card.warn{background:#fff9ec;border-color:#dfbd6a}html[data-theme="light"] .stats-priority-card.ok{background:#f0faf6;border-color:#87cdb0}html[data-theme="light"] .stats-priority-head h3,html[data-theme="light"] .stats-priority-title b,html[data-theme="light"] .stats-priority-empty b,html[data-theme="light"] .stats-snapshot-card b,html[data-theme="light"] .economy-status-copy b{color:#172033}html[data-theme="light"] .stats-snapshot-card:hover{background:#ecf8f6;border-color:#5eb7a461}html[data-theme="light"] .stats-coverage{background:#dbe3ec}
    @media(max-width:1050px){.stats-priority-list{grid-template-columns:minmax(0,1fr)}.stats-snapshot{grid-template-columns:repeat(2,minmax(0,1fr))}}

    /* --- Le verdict : une phrase, ses causes, une jauge, quatre chiffres ----- */
    /* Rouge doit se voir de loin : la couleur d'état ne tient plus dans une
       pastille de dix pixels, elle prend le liseré, le fond et le titre. */
    .economy-verdict{position:relative;margin-bottom:14px;padding:20px;overflow:hidden}
    .economy-verdict:before{content:"";position:absolute;inset:0 0 auto;height:4px;background:var(--state-neutral)}
    .economy-verdict.state-ok:before{background:var(--green)}
    .economy-verdict.state-warn:before{background:var(--amber)}
    .economy-verdict.state-bad:before{background:var(--red)}
    .economy-verdict.state-warn{border-color:#f6c86a4d;background:linear-gradient(180deg,#f6c86a10,transparent 210px),linear-gradient(180deg,var(--panel),var(--panel-2))}
    .economy-verdict.state-bad{border-color:#f0787866;background:linear-gradient(180deg,#f0787816,transparent 210px),linear-gradient(180deg,var(--panel),var(--panel-2))}
    .economy-verdict .economy-status-copy b{font-size:26px;line-height:1.12}
    .economy-verdict.state-ok .economy-status-copy b{color:var(--ink-green)}
    .economy-verdict.state-warn .economy-status-copy b{color:var(--ink-amber)}
    .economy-verdict.state-bad .economy-status-copy b{color:var(--ink-red)}
    .economy-verdict .economy-status-copy span{font-size:var(--fs-strong)}
    .economy-verdict-findings{display:inline-flex;align-items:center;gap:7px;width:max-content;max-width:100%;margin-top:2px;padding:5px 10px;border:1px solid var(--line-strong);border-radius:var(--r-pill);background:var(--fill-2);color:var(--ink-2);font-size:var(--fs-small);font-weight:750;cursor:pointer}
    .economy-verdict-findings b{color:var(--ink-red);font-weight:900}
    .economy-verdict-findings:hover{border-color:var(--accent);background:var(--fill-3);color:var(--ink)}
    .economy-verdict-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
    .economy-verdict-period{display:grid;justify-items:end;gap:2px;text-align:right;flex:0 0 auto}
    .economy-verdict-period span{color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.06em}
    .economy-verdict-period strong{color:var(--ink-strong);font-size:20px;line-height:1}
    .economy-verdict-confidence{font-size:10.5px;font-weight:800}
    .economy-verdict-confidence.ok{color:var(--ink-green)}
    .economy-verdict-confidence.warn{color:var(--ink-amber)}
    .economy-verdict-confidence.bad{color:var(--ink-red)}
    .economy-verdict-gauge{margin:2px 0 14px;padding:11px 14px 4px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1)}
    .economy-verdict-gauge-title{display:block;color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.06em}
    .economy-bullet{display:block;width:100%;height:auto;margin:2px 0 0;overflow:visible}
    .economy-bullet-band{stroke:none;opacity:.26}
    .economy-bullet-band.ok{fill:var(--green)}
    .economy-bullet-band.warn{fill:var(--amber)}
    .economy-bullet-band.bad{fill:var(--red)}
    .economy-bullet-band-label{fill:var(--muted);font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:.06em}
    .economy-bullet-tick{fill:var(--muted);font-size:9.5px;font-weight:800}
    .economy-bullet-target{stroke:var(--accent);stroke-width:2.4;stroke-linecap:round}
    .economy-bullet-target-label{fill:var(--ink-accent);font-size:9px;font-weight:850;text-transform:uppercase;letter-spacing:.06em}
    /* L'index : un fanion posé sur la bande. Il donne une position, là où la
       barre pleine donnait un remplissage — et il laisse voir la couleur du
       seuil sous lui, ce que la barre noire recouvrait. */
    .economy-bullet-chip{fill:var(--state-neutral);stroke:none;filter:drop-shadow(0 3px 6px #00000030)}
    .economy-bullet-needle{fill:var(--state-neutral);stroke:none}
    .economy-bullet-stem{stroke:var(--state-neutral);stroke-width:1.4;opacity:.75}
    .economy-bullet-hair{stroke:#0e1117;stroke-width:2;opacity:.5}
    .economy-bullet-value{fill:#101722;font-size:11px;font-weight:900}
    .economy-bullet-pointer.ok .economy-bullet-chip,.economy-bullet-pointer.ok .economy-bullet-needle{fill:var(--green)}
    .economy-bullet-pointer.ok .economy-bullet-stem{stroke:var(--green)}
    .economy-bullet-pointer.warn .economy-bullet-chip,.economy-bullet-pointer.warn .economy-bullet-needle{fill:var(--amber)}
    .economy-bullet-pointer.warn .economy-bullet-stem{stroke:var(--amber)}
    .economy-bullet-pointer.bad .economy-bullet-chip,.economy-bullet-pointer.bad .economy-bullet-needle{fill:var(--red)}
    .economy-bullet-pointer.bad .economy-bullet-stem{stroke:var(--red)}
    /* Les causes, juste sous l'état : ce qui pèse le plus du côté qui l'emporte.
       Un verdict rouge sans ses causes envoie chercher ailleurs ce que la page
       sait déjà. */
    .economy-causes{margin:0 0 12px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1)}
    .economy-causes-title{display:block;margin-bottom:9px;color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.06em}
    .economy-causes-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}
    .economy-cause{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;width:100%;padding:10px 11px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--fill-2);color:var(--ink);font-weight:600;text-align:left}
    button.economy-cause{cursor:pointer}
    button.economy-cause:hover{border-color:var(--line-strong);background:var(--fill-3)}
    .economy-cause.inert{cursor:default}
    .economy-cause-copy{min-width:0}
    .economy-cause-copy b{display:block;color:var(--ink-strong);font-size:var(--fs-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .economy-cause-copy>span:last-child{display:block;margin-top:4px;color:var(--muted);font-size:var(--fs-small);font-weight:650}
    .economy-cause-share{display:block;height:5px;margin-top:7px;border-radius:999px;background:var(--fill-3);overflow:hidden}
    .economy-cause-share i{display:block;height:100%;border-radius:inherit;background:var(--green)}
    .economy-cause.unknown .economy-cause-share i{background:var(--state-neutral)}
    .economy-cause strong{color:var(--ink-strong);font-size:17px;white-space:nowrap}
    .economy-cause strong small{color:var(--muted);font-size:10px;font-weight:750}
    @media(max-width:900px){.economy-causes-list{grid-template-columns:minmax(0,1fr)}}
    .economy-verdict-figures{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;padding-top:13px;border-top:1px solid var(--line)}
    .economy-verdict-figure{min-width:0}
    .economy-verdict-figure>span{display:block;color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.06em}
    .economy-verdict-figure b{display:flex;align-items:baseline;gap:7px;margin-top:4px;color:var(--ink-strong);font-size:21px;line-height:1}
    .economy-verdict-figure small{display:block;margin-top:4px;color:var(--muted);font-size:11px}
    /* --- Le plan : cascade, puis un mouvement par réglage ------------------- */
    .economy-plan-panel{margin-bottom:12px}
    .economy-fall{margin:2px 0 14px;padding:12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1)}
    .economy-fall-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:4px}
    .economy-fall-head b{color:var(--ink-strong);font-size:12.5px}
    .economy-fall-head span{color:var(--muted);font-size:10.5px}
    .economy-fall svg{display:block;width:100%;height:auto}
    .economy-fall-col rect{transition:opacity .16s ease}
    .economy-fall-col.start rect{fill:var(--red);opacity:.62}
    .economy-fall-col.cut rect{fill:var(--accent-2);opacity:.8}
    .economy-fall-col.end rect{fill:var(--green);opacity:.72}
    .economy-fall-col:hover rect{opacity:1}
    .economy-fall-value{fill:var(--ink-2);font-size:10px;font-weight:850}
    .economy-fall-label{fill:var(--muted);font-size:9.5px}
    .economy-fall-zero{stroke:var(--line-strong);stroke-width:1}
    .economy-fall-link{stroke:var(--line-strong);stroke-width:1;stroke-dasharray:3 3}
    .economy-fall-verdict{display:block;margin-top:8px;font-size:11.5px;font-weight:750}
    .economy-fall-verdict.ok{color:var(--ink-green)}
    .economy-fall-verdict.warn{color:var(--ink-amber)}
    .economy-moves{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:10px}
    .economy-move{display:grid;gap:9px;align-content:start;padding:13px;border:1px solid var(--line);border-radius:13px;background:var(--fill-1)}
    .economy-move.edited{border-color:#f6c86a66;background:#f6c86a0e}
    .economy-move-head{display:flex;align-items:flex-start;gap:9px}
    .economy-move-rank{display:grid;place-items:center;width:29px;height:29px;flex:0 0 29px;border-radius:9px;background:var(--fill-3);color:var(--ink-2);font-size:11px;font-weight:950}
    .economy-move-title{min-width:0;flex:1 1 auto}
    .economy-move-title b{display:block;color:var(--ink-strong);font-size:13px;line-height:1.25}
    .economy-move-weight{display:block;margin-top:2px;color:var(--muted);font-size:10.5px}
    .economy-move-change{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:9px 10px;border-radius:var(--r-sm);background:var(--fill-2);font-size:12px}
    .economy-move-from{color:var(--muted);text-decoration:line-through;text-decoration-color:#ffffff30}
    .economy-move-arrow{color:var(--muted)}
    .economy-move-to{color:var(--ink-accent-2);font-size:13px;font-weight:900}
    .economy-move-dial{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px}
    .economy-dose{-webkit-appearance:none;appearance:none;width:100%;height:20px;padding:0;border:0;background:transparent;cursor:pointer}
    .economy-dose::-webkit-slider-runnable-track{height:6px;border-radius:999px;background:linear-gradient(90deg,var(--red),var(--amber) 55%,var(--green))}
    .economy-dose::-moz-range-track{height:6px;border-radius:999px;background:linear-gradient(90deg,var(--red),var(--amber) 55%,var(--green))}
    .economy-dose::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;margin-top:-5px;border-radius:50%;border:2px solid var(--ink-strong);background:var(--surface);box-shadow:0 2px 6px #0007}
    .economy-dose::-moz-range-thumb{width:16px;height:16px;border-radius:50%;border:2px solid var(--ink-strong);background:var(--surface);box-shadow:0 2px 6px #0007}
    .economy-dose:focus-visible{outline:2px solid var(--accent-2);outline-offset:3px;border-radius:999px}
    .economy-dose-read{text-align:right;white-space:nowrap}
    .economy-dose-read b{display:block;color:var(--ink-strong);font-size:16px;line-height:1}
    .economy-dose-read span{display:block;margin-top:3px;font-size:10.5px;font-weight:800}
    .economy-dose-read span.good{color:var(--ink-green)}
    .economy-dose-read span.bad{color:var(--ink-amber)}
    .economy-move-why{color:var(--muted);font-size:11.5px;line-height:1.42}
    .economy-move-why b{color:var(--ink-2)}
    .economy-move-others{margin:0;border-color:var(--line);background:var(--fill-2)}
    .economy-move-others>summary{padding:8px 10px;color:var(--ink-2);font-size:11px;font-weight:800}
    .economy-move-others ul{margin:0;padding:0 10px 10px 26px;color:var(--muted);font-size:11px}
    .economy-move-others li{margin-top:3px}
    .economy-move-others b{color:var(--ink-2)}
    .economy-move-open{justify-self:start}
    .economy-conflicts{margin-top:12px}
    .stats-priority-empty.warn{border-color:#f6c86a66;background:#f6c86a12}
    .stats-priority-empty.warn .stats-priority-empty-icon{background:#f6c86a24;color:var(--ink-amber)}
    /* --- Le bilan : deux masses posées sur la même échelle ------------------ */
    .economy-balance-panel{--flow-in-1:#6fdc9f;--flow-in-2:#59cf9b;--flow-in-3:#47c199;--flow-in-4:#3bb096;--flow-in-5:#359e91;--flow-in-6:#2f8a89;--flow-out-1:#f6c86a;--flow-out-2:#f2b463;--flow-out-3:#ee9f61;--flow-out-4:#ea8b62;--flow-out-5:#e57766;--flow-out-6:#de6a72;--flow-rest:#6d7789;--flow-unknown:#8b95a6}
    .economy-balance{display:grid;gap:11px}
    .economy-balance-row{display:grid;grid-template-columns:minmax(112px,164px) minmax(0,1fr);gap:14px;align-items:center}
    .economy-balance-side{min-width:0;text-align:right}
    .economy-balance-side>span{display:block;color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.06em}
    .economy-balance-side b{display:block;margin-top:2px;color:var(--ink-strong);font-size:22px;line-height:1.05}
    .economy-balance-row.in .economy-balance-side b{color:var(--ink-green)}
    .economy-balance-row.out .economy-balance-side b{color:var(--ink-amber)}
    .economy-balance-side b.bad{color:var(--ink-red)}
    .economy-balance-side b.good{color:var(--ink-green)}
    .economy-balance-side small{display:block;margin-top:2px;color:var(--muted);font-size:var(--fs-small)}
    .economy-balance-track{position:relative;height:30px;border-radius:var(--r-sm);background:var(--fill-1);box-shadow:inset 0 0 0 1px var(--line)}
    .economy-balance-fill{display:flex;height:100%;border-radius:var(--r-sm);overflow:hidden}
    .economy-balance-seg{display:block;height:100%;min-width:2px;transition:filter .14s ease}
    .economy-balance-seg:hover{filter:brightness(1.22)}
    .economy-balance-seg.in.t1,.economy-legend-dot.in.t1{background:var(--flow-in-1)}
    .economy-balance-seg.in.t2,.economy-legend-dot.in.t2{background:var(--flow-in-2)}
    .economy-balance-seg.in.t3,.economy-legend-dot.in.t3{background:var(--flow-in-3)}
    .economy-balance-seg.in.t4,.economy-legend-dot.in.t4{background:var(--flow-in-4)}
    .economy-balance-seg.in.t5,.economy-legend-dot.in.t5{background:var(--flow-in-5)}
    .economy-balance-seg.in.t6,.economy-legend-dot.in.t6{background:var(--flow-in-6)}
    .economy-balance-seg.out.t1,.economy-legend-dot.out.t1{background:var(--flow-out-1)}
    .economy-balance-seg.out.t2,.economy-legend-dot.out.t2{background:var(--flow-out-2)}
    .economy-balance-seg.out.t3,.economy-legend-dot.out.t3{background:var(--flow-out-3)}
    .economy-balance-seg.out.t4,.economy-legend-dot.out.t4{background:var(--flow-out-4)}
    .economy-balance-seg.out.t5,.economy-legend-dot.out.t5{background:var(--flow-out-5)}
    .economy-balance-seg.out.t6,.economy-legend-dot.out.t6{background:var(--flow-out-6)}
    .economy-balance-seg.rest,.economy-legend-dot.rest{background:var(--flow-rest)}
    /* Ce qu'on ne sait pas attribuer se dessine hachuré : plein, il passerait
       pour une origine connue de plus. */
    .economy-balance-seg.unknown,.economy-legend-dot.unknown{background:repeating-linear-gradient(135deg,var(--flow-unknown) 0 4px,transparent 4px 8px),var(--fill-3)}
    /* L'écart n'est pas une troisième masse : c'est ce qui manque à la barre
       courte pour rejoindre la longue, donc il se dessine dans son prolongement. */
    .economy-balance-row.delta .economy-balance-track{height:26px;background:none;box-shadow:none}
    .economy-balance-delta{position:absolute;top:0;bottom:0;border:1px dashed #f0787888;border-radius:var(--r-xs);background:repeating-linear-gradient(135deg,#f0787824 0 5px,transparent 5px 10px)}
    .economy-balance-delta.under{border-color:#68d39188;background:repeating-linear-gradient(135deg,#68d39124 0 5px,transparent 5px 10px)}
    .economy-balance-delta em{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--ink-red);font-size:var(--fs-micro);font-weight:850;font-style:normal;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
    .economy-balance-delta.under em{color:var(--ink-green)}
    .economy-balance-even{display:flex;align-items:center;height:100%;color:var(--muted);font-size:var(--fs-small)}
    .economy-balance-legends{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
    .economy-legend-title{margin:0 0 8px;color:var(--ink-2);font-size:var(--fs-micro);font-weight:900;text-transform:uppercase;letter-spacing:.07em}
    .economy-legend{display:grid;gap:3px}
    .economy-legend-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;width:100%;padding:7px 9px;border:1px solid transparent;border-radius:var(--r-sm);background:none;color:var(--ink);font-weight:600;text-align:left}
    button.economy-legend-row{cursor:pointer}
    button.economy-legend-row:hover{border-color:var(--line-strong);background:var(--fill-2)}
    .economy-legend-row.inert{cursor:default}
    .economy-legend-copy{min-width:0}
    .economy-legend-copy b{display:block;color:var(--ink-strong);font-size:var(--fs-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .economy-legend-copy span{display:block;color:var(--muted);font-size:var(--fs-small);font-weight:650}
    .economy-legend-row strong{color:var(--ink-2);font-size:15px;white-space:nowrap}
    .economy-legend-row strong small{color:var(--muted);font-size:10px;font-weight:750}
    .economy-legend-dot{display:block;width:11px;height:11px;flex:0 0 11px;border-radius:3px;background:var(--accent-2)}
    .economy-balance-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:13px;padding-top:11px;border-top:1px solid var(--line);color:var(--muted);font-size:10.5px;font-weight:700}
    .economy-balance-foot b{color:var(--ink-2)}
    /* Les onglets ne sont plus une rangée posée au milieu du rouleau : ils
       annoncent qu'on quitte la décision pour la vérification. */
    .stats-tabs-head{margin-top:26px;padding-top:16px;border-top:1px solid var(--line)}
    .stats-tabs-head p{margin-top:3px;font-size:var(--fs-body)}
    @media(max-width:900px){.economy-balance-legends{grid-template-columns:minmax(0,1fr)}.economy-balance-row{grid-template-columns:minmax(0,1fr);gap:6px}.economy-balance-side{text-align:left;display:flex;align-items:baseline;gap:8px}.economy-balance-side b{margin-top:0;font-size:18px}}
    html[data-theme="light"] .economy-verdict,html[data-theme="light"] .economy-move,html[data-theme="light"] .economy-fall{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .economy-verdict-period strong,html[data-theme="light"] .economy-verdict-figure b,html[data-theme="light"] .economy-move-title b,html[data-theme="light"] .economy-dose-read b,html[data-theme="light"] .economy-fall-head b{color:#172033}
    html[data-theme="light"] .economy-move-change,html[data-theme="light"] .economy-move-others{background:#eef3f8}
    html[data-theme="light"] .economy-move-from{text-decoration-color:#9aa7b8}
    html[data-theme="light"] .economy-move.edited{background:#fff9ec;border-color:#dfbd6a}
    html[data-theme="light"] .economy-bullet-band{opacity:.34}
    html[data-theme="light"] .economy-bullet-hair{stroke:#fff;opacity:.75}
    html[data-theme="light"] .economy-bullet-value{fill:#fff}
    html[data-theme="light"] .economy-verdict.state-ok{background:#f3fbf7;border-color:#a9dcc3}
    html[data-theme="light"] .economy-verdict.state-warn{background:#fff9ec;border-color:#dfbd6a}
    html[data-theme="light"] .economy-verdict.state-bad{background:#fff6f6;border-color:#df8d8d}
    html[data-theme="light"] .economy-causes,html[data-theme="light"] .economy-verdict-gauge,html[data-theme="light"] .economy-cause,html[data-theme="light"] .economy-daily-facts>div{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .economy-cause-copy b,html[data-theme="light"] .economy-cause strong,html[data-theme="light"] .economy-legend-copy b,html[data-theme="light"] .economy-daily-facts b{color:#172033}
    html[data-theme="light"] .economy-balance-track{background:#eef3f8;box-shadow:inset 0 0 0 1px #dbe3ec}
    html[data-theme="light"] .economy-net-line{stroke:#2b3446}
    html[data-theme="light"] .economy-balance-panel{--flow-in-1:#1f8a5f;--flow-in-2:#1c8064;--flow-in-3:#187569;--flow-in-4:#166a6d;--flow-in-5:#175f6c;--flow-in-6:#1a5468;--flow-out-1:#a97112;--flow-out-2:#a86418;--flow-out-3:#a5571d;--flow-out-4:#a24b23;--flow-out-5:#9e4029;--flow-out-6:#983731;--flow-rest:#5d6879;--flow-unknown:#7a8496}
    @media(max-width:1050px){.economy-verdict-figures{grid-template-columns:repeat(2,minmax(0,1fr))}}
    @media(max-width:560px){.economy-verdict{padding:14px}.economy-verdict-head{display:grid;gap:10px}.economy-verdict-period{justify-items:start;text-align:left}.economy-verdict-figures{grid-template-columns:minmax(0,1fr)}.economy-moves{grid-template-columns:minmax(0,1fr)}}
    @media(max-width:560px){.stats-priority-panel{padding:14px}.stats-priority-head{display:grid;gap:9px}.stats-priority-count{justify-self:start}.stats-priority-card{grid-template-columns:auto minmax(0,1fr)}.stats-priority-title{display:grid;justify-items:start}.stats-priority-title .badge{white-space:nowrap}.stats-priority-action{grid-column:1/-1}.stats-snapshot{grid-template-columns:minmax(0,1fr)}}

    /* Tendance posée sur la carte de résumé : la flèche dit le sens, la teinte
       dit si c'est un progrès — et c'est le moteur qui en décide, pas elle. */
    .stats-trend{justify-self:end;align-self:center;padding:2px 7px;border:1px solid var(--line-strong);border-radius:999px;background:var(--fill-2);color:var(--ink-2);font-size:10px;font-weight:850;white-space:nowrap}
    .stats-trend.good{border-color:#68d39166;background:#68d39114;color:var(--ink-green)}
    .stats-trend.bad{border-color:#f6c86a66;background:#f6c86a12;color:var(--ink-amber)}

    /* Fiabilité de la mesure. */
    .economy-quality{display:grid;gap:11px;align-content:start}
    .economy-quality-badge{display:inline-flex;align-items:center;gap:7px;padding:5px 9px;border:1px solid #68d39155;border-radius:999px;background:#68d39112;color:var(--ink-green);font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.07em}
    .economy-quality-badge i{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:currentColor;box-shadow:0 0 0 4px #68d3911e}
    .economy-quality-state.warn .economy-quality-badge{border-color:#f6c86a66;background:#f6c86a12;color:var(--ink-amber)}
    .economy-quality-state.bad .economy-quality-badge{border-color:#f0787866;background:#f0787815;color:var(--ink-red)}
    .economy-quality-figures{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
    .economy-quality-figures div{padding:9px 10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--fill-1)}
    .economy-quality-figures b{display:block;color:var(--ink-strong);font-size:17px;line-height:1.1}
    .economy-quality-figures span{display:block;margin-top:2px;color:var(--muted);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.04em}
    .economy-quality-limits{display:grid;gap:6px;margin:0;padding-left:16px;color:var(--muted);font-size:11.5px;line-height:1.4}

    /* Leviers : le raccourci porte enfin ce qu'il pèse. */
    .stats-levers-panel{margin-bottom:14px}
    .stats-lever-legend{display:flex;gap:6px;flex-wrap:wrap;flex:0 0 auto}
    .stats-levers{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:10px}
    .stats-lever{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:6px 10px;align-items:center;width:100%;padding:11px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1);color:inherit;text-align:left;font-weight:400;box-shadow:none;transition:border-color .16s ease,background .16s ease,transform .16s ease}
    .stats-lever:hover{filter:none;border-color:#5eb7a477;background:#5eb7a412;transform:translateY(-1px)}
    .stats-lever.inert{cursor:default}
    .stats-lever.inert:hover{border-color:var(--line);background:var(--fill-1);transform:none}
    .stats-lever-icon{display:grid;place-items:center;width:32px;height:32px;flex:0 0 32px;border-radius:9px;border:1px solid #68d39144;background:#68d3910f;color:var(--ink-green)}
    .stats-lever.sink .stats-lever-icon{border-color:#f6c86a4d;background:#f6c86a0f;color:var(--ink-amber)}
    .stats-lever-icon svg{display:block;width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
    .stats-lever-copy{min-width:0}
    .stats-lever-copy b{display:block;overflow:hidden;color:var(--ink-strong);font-size:12.5px;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}
    .stats-lever-setting{display:block;margin-top:2px;overflow:hidden;color:var(--muted);font-size:10.5px;text-overflow:ellipsis;white-space:nowrap}
    .stats-lever-figure{color:var(--ink-green);font-size:14px;font-weight:900;text-align:right;white-space:nowrap}
    .stats-lever.sink .stats-lever-figure{color:var(--ink-amber)}
    .stats-lever-figure small{display:block;color:var(--muted);font-size:10px;font-weight:700}
    /* Un tiret n'est pas un montant : il ne prend pas la couleur d'un montant. */
    .stats-lever.unmeasured .stats-lever-figure{color:var(--muted)}
    .stats-lever.unmeasured .stats-lever-icon{border-color:var(--line-strong);background:var(--fill-2);color:var(--muted)}
    .stats-lever-bar{grid-column:1/-1;height:4px;border-radius:999px;background:var(--fill-3);overflow:hidden}
    .stats-lever-bar i{display:block;height:100%;border-radius:inherit;background:var(--green)}
    .stats-lever.sink .stats-lever-bar i{background:var(--amber)}
    .stats-lever-foot{grid-column:1/-1;display:flex;align-items:center;gap:7px;color:var(--muted);font-size:10.5px}
    .stats-lever-foot>span:last-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .stats-lever-tag{flex:0 0 auto;padding:2px 7px;border:1px solid var(--line-strong);border-radius:999px;background:var(--fill-2);color:var(--ink-2);font-size:9.5px;font-weight:850;text-transform:uppercase;letter-spacing:.05em;cursor:help}
    .stats-lever-tag.measured{border-color:#68d39166;background:#68d39114;color:var(--ink-green)}
    .stats-lever-tag.declared{border-color:#8ab6ff55;background:#8ab6ff12;color:var(--ink-blue)}
    .stats-lever-tag.modelled{border-color:#f6c86a55;background:#f6c86a10;color:var(--ink-amber)}
    .stats-lever-tag.unmeasured{border-color:var(--line-strong);background:var(--fill-2);color:var(--muted)}

    /* Créées, détruites, net : la courbe et les décisions qui l'ont fait plier. */
    .economy-daily{display:grid;gap:12px}
    .economy-daily-facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}
    .economy-daily-facts>div{min-width:0;padding:9px 11px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1)}
    .economy-daily-facts span{display:block;color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .economy-daily-facts b{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-top:3px;min-width:0;color:var(--ink-strong);font-size:19px;line-height:1.05}
    .economy-daily-facts b.good{color:var(--ink-green)}
    .economy-daily-facts b.bad{color:var(--ink-amber)}
    .economy-daily-facts small{display:block;margin-top:3px;color:var(--muted);font-size:var(--fs-small)}
    .economy-day{stroke:none;opacity:.92}
    .economy-day.up{fill:var(--green)}
    .economy-day.down{fill:var(--amber)}
    /* Viser une colonne de deux pixels pour lire son infobulle ne marchait qu'à
       la souris et qu'avec de la patience : la cible fait toute la colonne. */
    .economy-day-hit{fill:transparent;stroke:none}
    .economy-day-hit:hover{fill:var(--fill-2)}
    .economy-day-axis{font-size:9.5px}
    .economy-net-line{fill:none;stroke:var(--ink-strong);stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round;opacity:.85}
    .economy-mean-line{fill:none;stroke:var(--accent);stroke-width:2;stroke-dasharray:5 4;stroke-linecap:round;opacity:.9}
    .economy-zero-line{stroke:var(--muted);stroke-width:.8;stroke-dasharray:none;opacity:.38}
    .economy-change-line{stroke:var(--accent);stroke-width:1;stroke-dasharray:2 4;stroke-linecap:round;opacity:.5}
    .economy-change-dot{fill:var(--accent);stroke:var(--panel);stroke-width:2;filter:drop-shadow(0 2px 4px #00000040)}
    .economy-change-rank{fill:#1c1408;font-size:9px;font-weight:900}
    .economy-chart-keys{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;color:var(--muted);font-size:10.5px;font-weight:750}
    .economy-chart-key{display:inline-flex;align-items:center;gap:6px}
    .economy-chart-key:before{content:"";width:10px;height:10px;border-radius:3px;background:var(--green)}
    .economy-chart-key.down:before{background:var(--amber)}
    .economy-chart-key.net:before{width:15px;height:2px;border-radius:2px;background:var(--ink-2)}
    .economy-chart-key.mean:before{width:15px;height:0;border-radius:0;border-top:2px dashed var(--accent);background:none}
    .economy-chart-key.mark:before{width:9px;height:9px;border-radius:50%;background:var(--accent)}
    .economy-change-legend{display:grid;gap:4px;margin:9px 0 0;padding-left:19px;color:var(--muted);font-size:11px;line-height:1.4}
    .economy-change-legend li::marker{color:var(--ink-accent);font-weight:900}
    .economy-change-legend span{color:var(--ink-2);font-weight:800}
    /* La journée en cours : la seule lecture courte de la page, et la seule
       qu'on rappelle en boucle. Les heures d'avant minuit sont estompées —
       sans quoi deux journées se lisent comme une seule pente. */
    .economy-today-panel{margin-bottom:14px}
    .economy-live-toggle{flex:0 0 auto;margin:0;padding:8px 12px}
    .economy-hour{stroke:none;opacity:.92}
    .economy-hour.up{fill:var(--green)}
    .economy-hour.down{fill:var(--amber)}
    .economy-hour.past{opacity:.34}
    .economy-midnight{stroke:var(--accent);stroke-width:1.4;stroke-dasharray:3 3;opacity:.7}
    .economy-midnight-label{fill:var(--ink-accent);font-size:9px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .economy-chart-key.past:before{background:var(--green);opacity:.34}
    .economy-live-foot{margin-top:10px;color:var(--muted);font-size:var(--fs-small)}
    .economy-live-foot b{color:var(--ink-2)}
    @media(max-width:900px){.economy-daily-facts{grid-template-columns:repeat(2,minmax(0,1fr))}}

    /* Échelle des soldes : barres linéaires, pour que l'écrasement se voie. */
    .economy-spread{padding:11px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1)}
    .economy-spread-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:9px}
    .economy-spread-head b{color:var(--ink-strong);font-size:12.5px}
    .economy-spread-head span{color:var(--muted);font-size:10.5px}
    .economy-spread-row{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:4px 9px;align-items:center;padding:4px 0}
    .economy-spread-row>span:first-child{color:var(--muted);font-size:10.5px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}
    .economy-spread-track{height:7px;border-radius:999px;background:var(--fill-3);overflow:hidden}
    .economy-spread-track i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#5eb7a4,#8ee5d5)}
    .economy-spread-row b{color:var(--ink-strong);font-size:12px;text-align:right;white-space:nowrap}
    .economy-spread-row small{grid-column:2/-1;color:var(--muted);font-size:10px}
    .economy-spread-row small:empty{display:none}

    /* Ce qui a été changé : sans ce fil, une courbe qui plie n'a pas d'auteur. */
    .economy-timeline{display:grid;gap:9px;margin:0;padding:0;list-style:none}
    .economy-timeline li{display:grid;grid-template-columns:minmax(120px,auto) minmax(0,1fr);gap:10px;padding:10px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1)}
    .economy-timeline-when b{display:block;color:var(--ink-strong);font-size:12px}
    .economy-timeline-when span{display:block;margin-top:2px;color:var(--muted);font-size:10.5px}
    .economy-timeline-changes{display:grid;gap:7px;min-width:0}
    .economy-timeline-change{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;align-items:center;padding:8px 9px;border:1px solid var(--line);border-left:2px solid var(--green);border-radius:var(--r-sm);background:#00000014}
    .economy-timeline-change.sink{border-left-color:var(--amber)}
    .economy-timeline-change b{color:var(--ink-strong);font-size:12px}
    .economy-timeline-change>span{grid-column:1;color:var(--muted);font-size:11px;overflow-wrap:anywhere}
    .economy-timeline-change>span b{color:var(--ink-2);font-size:11px}
    .economy-timeline-change button{grid-row:1/3;grid-column:2;width:auto;align-self:center}

    html[data-theme="light"] .economy-quality-figures div,html[data-theme="light"] .stats-lever,html[data-theme="light"] .economy-spread,html[data-theme="light"] .economy-timeline li{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .stats-lever:hover{background:#ecf8f6;border-color:#5eb7a461}
    html[data-theme="light"] .stats-lever.inert:hover{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .economy-timeline-change{background:#f4f7fb;border-color:#dbe3ec}
    html[data-theme="light"] .economy-quality-figures b,html[data-theme="light"] .stats-lever-copy b,html[data-theme="light"] .economy-spread-head b,html[data-theme="light"] .economy-spread-row b,html[data-theme="light"] .economy-timeline-when b,html[data-theme="light"] .economy-timeline-change b{color:#172033}
    html[data-theme="light"] .stats-lever-bar,html[data-theme="light"] .economy-spread-track{background:#dbe3ec}
    html[data-theme="light"] .stats-trend,html[data-theme="light"] .stats-lever-tag.unmeasured{background:#eef3f8;color:#4b5563}

    @media(max-width:980px){.economy-quality-figures{grid-template-columns:repeat(2,minmax(0,1fr))}}
    @media(max-width:560px){.stats-levers{grid-template-columns:minmax(0,1fr)}.economy-timeline li{grid-template-columns:minmax(0,1fr)}.economy-timeline-change{grid-template-columns:minmax(0,1fr)}.economy-timeline-change button{grid-row:auto;grid-column:1;width:100%;margin-top:4px}.economy-spread-row{grid-template-columns:46px minmax(0,1fr) auto}}

    /* Ligue : la saison se lit d'abord comme un tableau de bord. Les données
       techniques et les opérations rares restent accessibles, mais repliées. */
    .league-page-kicker,.league-section-kicker{display:block;margin-bottom:4px;color:var(--ink-accent-2);font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.12em}.league-hero{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:17px 16px;margin-bottom:14px;padding:20px;overflow:hidden;background:radial-gradient(560px 240px at 88% -15%,#d6a95b2a,transparent 68%),radial-gradient(500px 260px at 0 110%,#5eb7a41f,transparent 70%),linear-gradient(145deg,#1e2735,#111722)}.league-hero:after{content:"XIII";position:absolute;right:20px;top:-23px;color:#ffffff06;font-size:116px;font-weight:950;line-height:1;letter-spacing:-.08em;pointer-events:none}.league-hero-mark{position:relative;z-index:1;display:grid;place-items:center;width:58px;height:58px;border:1px solid #e5be7480;border-radius:18px;background:linear-gradient(145deg,#e7c47d30,#d6a95b12);color:#f3d696;box-shadow:inset 0 1px 0 #fff3,0 12px 28px #0005}.league-hero-mark svg{width:30px;height:30px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.league-hero-copy{position:relative;z-index:1;min-width:0}.league-live-badge{display:inline-flex;align-items:center;gap:7px;padding:4px 9px;border:1px solid #68d39155;border-radius:999px;background:#68d39112;color:var(--ink-green);font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.07em}.league-live-badge i{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 0 4px #68d3911d}.league-live-badge.paused{border-color:#f6c86a66;background:#f6c86a12;color:var(--ink-amber)}.league-live-badge.paused i{box-shadow:0 0 0 4px #f6c86a1d}.league-live-badge.offline{border-color:#f0787866;background:#f0787815;color:var(--ink-red)}.league-live-badge.offline i{box-shadow:0 0 0 4px #f078781d}.league-hero-copy h3{margin:7px 0 2px;color:var(--ink-strong);font-size:24px;line-height:1.1}.league-season-progress{position:relative;z-index:1;grid-column:1/-1}.league-progress-labels{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:end;margin-bottom:7px;color:var(--muted);font-size:10px;font-weight:750}.league-progress-labels b{color:var(--ink-2);font-size:11px;text-align:center}.league-progress-labels span:last-child{text-align:right}.league-progress-track{height:8px;border:1px solid #ffffff12;border-radius:999px;background:#070b1166;overflow:hidden}.league-progress-track i{display:block;width:0;height:100%;border-radius:inherit;background:linear-gradient(90deg,#5eb7a4,#8ee5d5 58%,#e4bd72);box-shadow:0 0 18px #5eb7a477;transition:width .4s ease}.league-kpis{position:relative;z-index:1;grid-column:1/-1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}.league-kpi{min-width:0;padding:11px 12px;border:1px solid var(--line);border-radius:13px;background:#070b113d}.league-kpi span{display:block;color:var(--muted);font-size:9px;font-weight:850;text-transform:uppercase;letter-spacing:.06em}.league-kpi b{display:block;margin:4px 0 2px;color:var(--ink-strong);font-size:22px;line-height:1}.league-kpi small{display:block;color:var(--muted);font-size:10px}.league-kpi.accent{border-color:#d6a95b3d;background:#d6a95b0c}.league-kpi.accent b{color:var(--ink-accent)}.league-status-details{position:relative;z-index:1;grid-column:1/-1;margin:0;background:#070b112e}.league-status-details summary{padding:9px 11px;color:var(--ink-2);font-size:12px}.league-status-details summary .badge{margin-left:auto}.league-detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.league-detail-item{padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:#ffffff05}.league-detail-item span{display:block;color:var(--muted);font-size:9px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}.league-detail-item b{display:block;margin-top:3px;color:var(--ink-strong);font-size:12px;overflow-wrap:anywhere}.league-history{display:flex;align-items:center;gap:0;margin-top:12px;padding-top:11px;border-top:1px solid var(--line);overflow:auto}.league-history-item{position:relative;display:grid;gap:2px;min-width:112px;padding-left:18px}.league-history-item:before{content:"";position:absolute;left:0;top:5px;width:9px;height:9px;border:2px solid #777f8e;border-radius:50%;background:#171d26}.league-history-item:not(:last-child):after{content:"";position:absolute;left:9px;right:-1px;top:10px;height:1px;background:var(--line-strong)}.league-history-item.active:before{border-color:#68d391;background:#68d391;box-shadow:0 0 0 4px #68d39120}.league-history-item b{font-size:11px}.league-history-item span{color:var(--muted);font-size:9px;text-transform:capitalize}
    .league-overview-grid{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(420px,.92fr);gap:14px;margin-bottom:14px;align-items:start}.league-overview-grid>.panel{margin:0}.league-divisions-panel .panel-head,.league-ranking-panel .panel-head,.league-settings-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:13px}.league-divisions-panel .panel-head h3,.league-ranking-panel .panel-head h3,.league-settings-head h3{margin:0 0 2px;color:var(--ink-strong);font-size:16px}.league-division-grid{display:grid;gap:8px}.league-division-card{--division:#a86f43;position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:center;min-width:0;padding:11px 12px;border:1px solid var(--line);border-radius:13px;background:linear-gradient(90deg,color-mix(in srgb,var(--division) 11%,transparent),#ffffff04);overflow:hidden}.league-division-card.division-2{--division:#aeb9c8}.league-division-card.division-3{--division:#e0b64f}.league-division-card.division-4{--division:#74b9d2}.league-division-card.division-5{--division:#9c86ef}.league-division-emblem{display:grid;place-items:center;width:39px;height:39px;border:1px solid color-mix(in srgb,var(--division) 65%,white);border-radius:12px;background:color-mix(in srgb,var(--division) 20%,transparent);color:color-mix(in srgb,var(--division) 80%,white);font-size:13px;font-weight:950;box-shadow:inset 0 1px 0 #ffffff26}.league-division-copy{min-width:0}.league-division-copy b{display:block;color:var(--ink-strong);font-size:13px}.league-division-copy span{display:block;margin-top:2px;color:var(--muted);font-size:10px}.league-division-score{text-align:right}.league-division-score b{display:block;color:var(--ink-strong);font-size:15px}.league-division-score span{display:block;color:var(--muted);font-size:9px;text-transform:uppercase}.league-division-meter{grid-column:2/-1;height:4px;border-radius:999px;background:#ffffff10;overflow:hidden}.league-division-meter i{display:block;height:100%;border-radius:inherit;background:var(--division)}.league-podium-mini{padding:4px 8px;border:1px solid #d6a95b40;border-radius:999px;background:#d6a95b12;color:var(--ink-accent);font-size:10px;font-weight:900}.league-ranking-scroll{max-height:410px;overflow:auto}.league-ranking th{position:sticky;top:0;z-index:2;background:#171d26}.league-ranking td{vertical-align:middle}.league-rank{display:grid;place-items:center;width:25px;height:25px;border-radius:8px;background:#ffffff0b;color:var(--muted);font-size:10px;font-weight:900}.league-rank.podium{border:1px solid #d6a95b55;background:#d6a95b16;color:var(--ink-accent)}.league-player-cell span{display:none}.league-player-link{width:auto;max-width:190px;padding:0;border:0;background:transparent;color:var(--ink-strong);font-weight:850;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.league-player-link:hover{filter:none;color:var(--ink-accent-2);text-decoration:underline}.league-player-link:focus-visible{border:0;box-shadow:0 0 0 3px #5eb7a433}.league-division-pill{--division:#a86f43;display:inline-flex;align-items:center;gap:6px;padding:3px 7px;border:1px solid color-mix(in srgb,var(--division) 48%,transparent);border-radius:999px;background:color-mix(in srgb,var(--division) 13%,transparent);font-size:10px;font-weight:800}.league-division-pill.division-2{--division:#aeb9c8}.league-division-pill.division-3{--division:#e0b64f}.league-division-pill.division-4{--division:#74b9d2}.league-division-pill.division-5{--division:#9c86ef}.league-division-pill:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--division)}.league-points-cell{color:var(--ink-accent);font-weight:900}
    .league-settings-panel{padding:18px}.league-settings-head{align-items:center}.league-settings-summary{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}.league-settings-summary span{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.04em}.league-summary-dot{width:7px;height:7px;border-radius:50%;background:#75d1c0}.league-summary-dot.score{background:#d6a95b}.league-summary-dot.shield{background:#74b9d2}.league-summary-dot.reward{background:#9c86ef}.league-setting-card{margin-top:8px;border-radius:13px;background:#ffffff04}.league-setting-card summary{gap:11px;padding:12px 13px;color:var(--ink-strong)}.league-setting-card summary:before{order:4;margin-left:3px}.league-setting-icon{display:grid;place-items:center;width:34px;height:34px;flex:0 0 34px;border:1px solid #75d1c044;border-radius:10px;background:#5eb7a417;color:var(--ink-accent-2)}.league-setting-icon svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.league-setting-card.score .league-setting-icon{border-color:#d6a95b55;background:#d6a95b15;color:var(--ink-accent)}.league-setting-card.shield .league-setting-icon{border-color:#74b9d255;background:#74b9d215;color:#9ee7ff}.league-setting-card.reward .league-setting-icon{border-color:#9c86ef55;background:#9c86ef15;color:#c5b7ff}.league-setting-card.danger-zone .league-setting-icon{border-color:#f0787855;background:#f0787815;color:var(--ink-red)}.league-setting-title{display:grid;gap:2px;min-width:0;margin-right:auto}.league-setting-title b{font-size:13px}.league-setting-title small{color:var(--muted);font-size:10px;font-weight:600}.league-setting-card>.section-body{padding:3px 14px 14px 59px}.league-setting-card[open]{border-color:#ffffff26;background:#ffffff065c}.league-master-switch{margin-top:4px}.league-field-heading{display:block;margin:15px 0 3px;color:var(--ink-strong);font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em}.league-field-heading:first-child{margin-top:2px}.league-reward-grid{margin-top:9px}.league-reward-grid .reward-box{position:relative;overflow:hidden}.league-reward-grid .reward-box:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#d6a95b66}.league-reward-grid.division-rewards .reward-box:before{background:#9c86ef88}.league-movement-fields{display:grid;grid-template-columns:1fr 1fr;gap:7px}.league-movement-fields label{position:relative;margin:0}.league-movement-fields label span{position:absolute;z-index:1;left:9px;top:50%;transform:translateY(-50%);color:var(--muted);font-size:9px;font-weight:850;text-transform:uppercase;pointer-events:none}.league-movement-fields input{padding-left:68px;text-align:right}.league-note{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:10px 11px;border:1px solid #5eb7a43b;border-radius:11px;background:#5eb7a40d}.league-note>span{display:grid;place-items:center;width:24px;height:24px;flex:0 0 24px;border-radius:8px;background:#5eb7a41f;color:var(--ink-accent-2);font-weight:900}.league-note b{display:block;color:var(--ink-strong);font-size:11px}.league-note p{margin-top:2px;color:var(--muted);font-size:10px}.league-note.shield{border-color:#74b9d23b;background:#74b9d20d}.league-operations{margin-top:14px!important}.league-operations>.section-body{padding-bottom:14px}
    html[data-theme="light"] .league-hero{background:radial-gradient(560px 240px at 88% -15%,#d6a95b24,transparent 68%),radial-gradient(500px 260px at 0 110%,#5eb7a419,transparent 70%),linear-gradient(145deg,#fff,#f3f7fa)}html[data-theme="light"] .league-hero:after{color:#17203306}html[data-theme="light"] .league-progress-track{background:#dbe3ec;border-color:#ccd6e1}html[data-theme="light"] .league-kpi,html[data-theme="light"] .league-status-details,html[data-theme="light"] .league-detail-item,html[data-theme="light"] .league-division-card,html[data-theme="light"] .league-setting-card{background:#fff;border-color:#dbe3ec}html[data-theme="light"] .league-kpi.accent{background:#fffaf0;border-color:#e0bf7f}html[data-theme="light"] .league-hero-copy h3,html[data-theme="light"] .league-kpi b,html[data-theme="light"] .league-detail-item b,html[data-theme="light"] .league-division-copy b,html[data-theme="light"] .league-division-score b,html[data-theme="light"] .league-player-cell b,html[data-theme="light"] .league-divisions-panel .panel-head h3,html[data-theme="light"] .league-ranking-panel .panel-head h3,html[data-theme="light"] .league-settings-head h3,html[data-theme="light"] .league-setting-card summary,html[data-theme="light"] .league-field-heading,html[data-theme="light"] .league-note b{color:#172033}html[data-theme="light"] .league-ranking th{background:#fff}html[data-theme="light"] .league-division-meter{background:#e4eaf0}html[data-theme="light"] .league-setting-card[open]{background:#f8fafc;border-color:#cbd5e1}html[data-theme="light"] .league-note{background:#ecf8f6;border-color:#87cdb0}html[data-theme="light"] .league-note.shield{background:#eff8fb;border-color:#9ac8d8}
    @media(max-width:1180px){.league-overview-grid{grid-template-columns:minmax(0,1fr)}.league-ranking-scroll{max-height:none}.league-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}
    @media(max-width:850px){.league-hero{grid-template-columns:auto minmax(0,1fr);padding:15px}.league-hero-mark{width:48px;height:48px;border-radius:15px}.league-hero-copy h3{font-size:19px}.league-hero:after{right:12px;font-size:82px}.league-overview-grid{gap:12px}.league-settings-panel{padding:12px}.league-settings-head{display:grid}.league-settings-summary{justify-content:flex-start}.league-setting-card>.section-body{padding:2px 10px 11px}.league-setting-card summary{display:grid;grid-template-columns:auto minmax(0,1fr) auto}.league-setting-card summary:before{grid-column:3;grid-row:1;margin-left:3px}.league-setting-card summary>.badge{grid-column:3;grid-row:1;margin-right:22px;align-self:center}.league-setting-title small{white-space:normal}.league-ranking-scroll{overflow:visible}.league-ranking tr{position:relative;padding:11px 0 11px 37px!important}.league-ranking td:before{content:attr(data-label);display:inline-block;min-width:66px;margin-right:6px;color:var(--muted);font-size:9px;font-weight:850;text-transform:uppercase}.league-ranking td:first-child{position:absolute;left:0;top:10px;width:28px;padding:0}.league-ranking td:first-child:before{display:none}.league-ranking .league-player-cell b{display:inline}.league-ranking .league-player-cell span{display:inline;color:var(--muted);font-size:10px}.league-ranking .league-player-cell span:before{content:" · "}.league-ranking td:nth-child(3){display:inline-block;width:auto;margin-right:5px}.league-ranking td:nth-child(3):before{display:none}.league-ranking td:nth-child(4){display:inline-block;width:auto}.league-ranking td:nth-child(4):before{min-width:0}.league-ranking .league-points-cell{font-size:14px}}
    @media(max-width:560px){.league-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.league-kpi{padding:9px}.league-kpi b{font-size:19px}.league-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.league-progress-labels{grid-template-columns:1fr 1fr}.league-progress-labels b{grid-column:1/-1;grid-row:1}.league-division-card{grid-template-columns:auto minmax(0,1fr)}.league-division-score{grid-column:2;text-align:left;display:flex;align-items:baseline;gap:5px}.league-division-meter{grid-column:1/-1}.league-settings-summary{display:none}.league-setting-card summary>.badge{display:none}.league-movement-fields{grid-template-columns:minmax(0,1fr)}.league-season-progress{margin-top:2px}}

    /* Niveaux — répartition par rang, table de la courbe, projection et
       classement. Trois listes de même grammaire : un repère à gauche, un
       intitulé au milieu, une valeur à droite. */
    .levels-ladder,.levels-leaders{display:grid;gap:8px}
    /* Répartition par rang : un histogramme, parce qu'on compare dix valeurs
       entre elles et non chacune à son maximum. */
    .pace-result{display:flex;justify-content:flex-end;margin:12px 0 10px}
    .levels-chart{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:6px;align-items:end;padding:6px 2px 0}
    .levels-bar{display:grid;grid-template-rows:auto 1fr auto auto;gap:5px;justify-items:center;min-width:0}
    .levels-bar-count{color:var(--ink-strong);font-size:13px;font-weight:900;line-height:1}
    .levels-bar-track{display:flex;align-items:flex-end;width:100%;max-width:46px;height:140px;border-radius:7px 7px 4px 4px;background:#ffffff09}
    .levels-bar-track i{display:block;width:100%;min-height:3px;border-radius:inherit;background:linear-gradient(180deg,#e8c98a,#a8823f);box-shadow:inset 0 1px 0 #ffffff2e}
    .levels-bar-rank{display:grid;place-items:center;width:22px;height:22px;border-radius:7px;background:#ffffff0d;color:var(--muted);font-size:10px;font-weight:900}
    .levels-bar-name{color:var(--muted);font-size:10px;font-weight:700;line-height:1.2;text-align:center;overflow-wrap:anywhere}
    html[data-theme="light"] .levels-bar-track{background:#e4eaf0}
    html[data-theme="light"] .levels-bar-rank{background:#eef2f7}
    @media(max-width:760px){.levels-chart{grid-template-columns:repeat(5,minmax(0,1fr));row-gap:14px}.levels-bar-track{height:104px}}
    .levels-ladder-row,.levels-leader-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:center;padding:9px 12px;border:1px solid var(--line);border-radius:11px;background:#ffffff05}
    .levels-leader-row{grid-template-columns:auto minmax(0,1fr) auto auto}
    .levels-ladder-rank,.levels-leader-place{display:grid;place-items:center;width:26px;height:26px;flex:none;border-radius:8px;background:#ffffff0b;color:var(--muted);font-size:11px;font-weight:900}
    .levels-ladder-name,.levels-leader-name{min-width:0}
    .levels-ladder-name b,.levels-leader-name b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:13px}
    .levels-ladder-name span,.levels-leader-name span{display:block;margin-top:2px;color:var(--muted);font-size:10px}
    .levels-ladder-value,.levels-leader-value{text-align:right}
    .levels-ladder-value b,.levels-leader-value b{display:block;color:var(--ink-accent);font-size:14px}
    .levels-ladder-value span,.levels-leader-value span{display:block;color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.04em}
    html[data-theme="light"] .levels-rank-row,html[data-theme="light"] .levels-ladder-row,html[data-theme="light"] .levels-leader-row{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .levels-rank-meter{background:#e4eaf0}
    @media(max-width:560px){.levels-rank-row{grid-template-columns:minmax(0,1fr) auto}.levels-rank-meter{grid-column:1/-1}.levels-leader-row{grid-template-columns:auto minmax(0,1fr) auto}.levels-leader-row .beta-icon-btn{grid-column:2/-1;justify-self:end}}
    .league-player-link{font-size:13px}.league-operations button:disabled{cursor:not-allowed;filter:grayscale(.4);opacity:.45}html[data-theme="light"] .league-player-link{color:#172033}@media(max-width:850px){.league-ranking .league-player-link{display:inline;max-width:100%;font-size:13px;vertical-align:baseline}}
    .server-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:9px;margin-bottom:13px}.server-metric{min-width:0;padding:11px;border:1px solid var(--line);border-radius:11px;background:#ffffff07}.server-metric span{display:block;color:var(--muted);font-size:9px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}.server-metric b{display:block;margin-top:3px;color:var(--ink-strong);font-size:17px;font-weight:900;overflow-wrap:anywhere}.server-metric small{display:block;margin-top:2px;color:var(--muted);font-size:10px}.server-metric.ok{border-color:#75d1c03d}.server-metric.warn{border-color:#f6c86a4d}.server-metric.bad{border-color:#f078784d}.server-metric.warn b{color:var(--ink-amber)}.server-metric.bad b{color:var(--ink-red)}
    .server-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:7px}.server-fact{display:flex;align-items:baseline;justify-content:space-between;gap:10px;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:#ffffff05;font-size:12px}.server-fact span{flex:0 0 auto;color:var(--muted);font-size:9px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.server-fact b{color:var(--ink-strong);font-weight:850;text-align:right;overflow-wrap:anywhere}.server-fact.warn b{color:var(--ink-amber)}.server-fact.bad b{color:var(--ink-red)}
    .server-advice{display:grid;gap:8px}.server-advice-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:11px;align-items:center;padding:10px 11px;border:1px solid var(--line);border-left:3px solid #74b9d2;border-radius:10px;background:#ffffff05}.server-advice-item.warn{border-left-color:var(--amber)}.server-advice-item b{display:block;color:var(--ink-strong);font-size:12px}.server-advice-item p{margin-top:2px;color:var(--muted);font-size:11px}.server-advice-item .server-sql-line{display:block;margin-top:5px;color:var(--ink-2);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow-wrap:anywhere}.server-advice-tag{flex:0 0 auto;padding:4px 8px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:9px;font-weight:850;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap}.server-advice-tag.auto{border-color:#75d1c044;color:var(--ink-accent-2)}
    .server-review-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:11px}.server-review-head .actions{margin:0}.server-verdict{display:flex;align-items:center;gap:9px;min-width:0;color:var(--ink-2);font-size:12px}.server-verdict i{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:#75d1c0}.server-verdict.warn i{background:var(--amber)}
    .server-env-group{margin-top:12px}.server-env-group h4{margin-bottom:6px;color:var(--ink-strong);font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.05em}.server-env-rows{display:grid;grid-template-columns:repeat(auto-fit,minmax(255px,1fr));gap:6px}.server-env-row{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0;padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:#ffffff04}.server-env-row code{min-width:0;color:var(--ink-2);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow-wrap:anywhere}.server-env-row .badge{flex:0 0 auto}
    .server-sql{min-height:104px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.5;white-space:pre;overflow-x:auto}.server-query-tools{display:flex;align-items:end;gap:9px;flex-wrap:wrap;margin-top:9px}.server-query-tools>label{margin:0;align-self:center}.server-query-tools select,.server-query-tools input{width:auto;min-width:120px}.server-result td,.server-result th{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;max-width:290px;overflow-wrap:anywhere}.server-result td.null{color:var(--muted);font-style:italic}
    #server button:disabled,#server input:disabled,#server textarea:disabled{opacity:.42;cursor:not-allowed;filter:grayscale(.35)}
    html[data-theme="light"] .server-metric,html[data-theme="light"] .server-fact,html[data-theme="light"] .server-advice-item,html[data-theme="light"] .server-env-row{background:#fff;border-color:#dbe3ec}html[data-theme="light"] .server-metric.warn{border-color:#e0bf7f}html[data-theme="light"] .server-metric.bad{border-color:#e99a9a}
    @media(max-width:850px){.server-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.server-advice-item{grid-template-columns:minmax(0,1fr)}.server-advice-tag{justify-self:start}.server-review-head{display:grid}.server-review-head .actions{display:grid;grid-template-columns:minmax(0,1fr)}}
    /* Onglets de détails : remplace les grands accordéons de réglages par une
       navigation compacte à icônes, sans déplacer les champs ni changer les
       routes de sauvegarde. Les accordéons de listes répétées restent inchangés. */
    .tab-icon,.detail-tab-icon{display:grid;place-items:center;width:24px;height:24px;flex:0 0 24px;border-radius:7px;background:#ffffff10;color:var(--ink-accent-2)}
    .tab-icon svg,.detail-tab-icon svg{width:14px;height:14px;display:block;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .profile360-tab,.section-tab,.notification-tab{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-width:max-content}
    .profile360-tab .tab-icon,.section-tab .tab-icon,.notification-tab .tab-icon{margin-left:-2px}
    .profile360-tab.active .tab-icon,.section-tab.active .tab-icon{background:#1c14081a;color:#1c1408}
    .notification-tab.active .tab-icon{background:#5eb7a424;color:#8ee5d5}
    .detail-tabset{display:grid;gap:12px}
    .detail-tabs{display:flex;gap:7px;margin:4px 0 0;padding:5px;border:1px solid var(--line);border-radius:13px;background:#0e151ff0;overflow:auto;scrollbar-width:thin}
    .detail-tab{position:relative;display:inline-flex;align-items:center;gap:8px;width:auto;min-width:154px;max-width:260px;min-height:48px;padding:8px 11px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--ink-2);box-shadow:none;text-align:left}
    .detail-tab:hover{filter:none;border-color:#75d1c055;background:#ffffff0b;color:var(--ink-strong)}
    .detail-tab.active{border-color:#75d1c088;background:#5eb7a424;color:var(--ink-strong);box-shadow:inset 0 1px 0 #ffffff14}
    .detail-tab.active .detail-tab-icon{background:#5eb7a432;color:#9be9d9}
    .detail-tab-copy{display:grid;gap:1px;min-width:0;line-height:1.18}
    .detail-tab-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:880}
    .detail-tab-desc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:10px;font-weight:650}
    .detail-tab.is-dirty::after{content:"";position:absolute;top:7px;right:8px;width:7px;height:7px;border-radius:50%;background:#f6c86a;box-shadow:0 0 0 3px #f6c86a2e}
    .detail-tab-panel{margin:0;border-radius:12px;background:#ffffff06}
    .detail-tabset>details.detail-tab-panel{margin-top:0}
    .detail-tabset>details.detail-tab-panel>summary{display:none}
    .detail-tab-panel[hidden]{display:none!important}
    .detail-tab-panel>.section-body{padding:14px}
    html[data-theme="light"] .detail-tabs{background:#eef3f8;border-color:#dbe3ec}
    html[data-theme="light"] .detail-tab{color:#46566b}
    html[data-theme="light"] .detail-tab:hover,html[data-theme="light"] .detail-tab.active{background:#dff3f0;border-color:#5eb7a4;color:#152033}
    html[data-theme="light"] .detail-tab-panel{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .tab-icon,html[data-theme="light"] .detail-tab-icon{background:#eaf2f5;color:#27766a}
    @media(max-width:850px){.detail-tabs{margin-left:-2px;margin-right:-2px}.detail-tab{min-width:142px;max-width:220px;min-height:46px;padding:8px 10px}.detail-tab-desc{display:none}.notification-tab .tab-icon,.section-tab .tab-icon{display:none}}
    /* Activité de l'accueil, revue de partie, envois programmés. */
    .activity-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:14px}
    .activity-card{display:grid;gap:4px;padding:12px;border:1px solid var(--line);border-radius:12px;background:#ffffff07}
    .activity-card span{color:var(--muted);font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}
    .activity-card b{font-size:23px;line-height:1.05;color:#fff}
    .activity-card .activity-delta{font-size:11px;font-weight:800;letter-spacing:0;text-transform:none}
    .activity-delta.up{color:var(--ink-green)}.activity-delta.down{color:var(--ink-amber)}.activity-delta.flat{color:var(--muted)}
    .activity-charts{display:grid;gap:14px}
    .activity-chart{padding:14px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(180deg,#ffffff08,#ffffff04);box-shadow:inset 0 1px 0 #ffffff08}
    .activity-chart-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px}
    .activity-chart-head b{color:#fff;font-size:13px}
    .activity-chart-head span{color:var(--muted);font-size:11px}
    .activity-chart svg{display:block;width:100%;height:auto;overflow:visible}
    .activity-axis{fill:var(--muted);font-size:9px;font-weight:700}
    .activity-grid-line{stroke:var(--muted);stroke-width:.7;stroke-dasharray:1 5;stroke-linecap:round;opacity:.24;vector-effect:non-scaling-stroke}
    .activity-area{fill:currentColor;stroke:none;opacity:.1}
    .activity-line{fill:none;stroke:currentColor;stroke-width:2.4;stroke-linejoin:round;stroke-linecap:round;filter:drop-shadow(0 3px 4px #00000026);vector-effect:non-scaling-stroke}
    .activity-bar{fill:currentColor;stroke:none;opacity:.9;filter:drop-shadow(0 2px 3px #00000020)}
    .activity-serie-active{color:var(--ink-accent-2)}
    .activity-serie-games{color:var(--ink-green)}
    .activity-serie-interrupted{color:var(--ink-amber)}
    .activity-serie-signups{color:var(--ink-info)}
    .activity-legend{display:flex;gap:12px;flex-wrap:wrap;margin-top:8px;color:var(--muted);font-size:11px;font-weight:700}
    .activity-legend i{display:inline-block;width:9px;height:9px;margin-right:5px;border-radius:3px;background:currentColor;vertical-align:baseline}
    .activity-empty{padding:16px;border:1px dashed var(--line-strong);border-radius:10px;color:var(--muted);text-align:center}
    .challenge-tier-list{display:grid;gap:18px}.challenge-tier{display:grid;gap:9px}.challenge-tier+.challenge-tier{padding-top:16px;border-top:1px solid var(--line)}.challenge-tier-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.challenge-tier-head>div{display:grid;gap:2px}.challenge-tier-head b{color:var(--ink-strong);font-size:13px}.challenge-tier-head span:not(.badge){color:var(--muted);font-size:10.5px;font-weight:700}.challenge-tier.tier-2 .challenge-tier-head b{color:var(--ink-accent)}
    .game-history-chart{display:flex;align-items:end;gap:5px;height:92px;margin:4px 0 14px;padding:10px 10px 19px;border:1px solid var(--line);border-radius:11px;background:#00000018}
    .game-history-day{position:relative;display:flex;align-items:end;flex:1;min-width:7px;height:100%}
    .game-history-bar{width:100%;min-height:3px;border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,var(--accent-2),#337f73);opacity:.9}
    .game-history-bar.interrupted{position:absolute;inset:auto 0 0;background:var(--ink-red);opacity:.9}
    .game-history-day-label{position:absolute;top:calc(100% + 4px);left:50%;transform:translateX(-50%);color:var(--muted);font-size:8px;font-weight:800;white-space:nowrap}
    .game-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:9px}
    .game-history-card{display:grid;gap:9px;width:100%;padding:11px;border:1px solid var(--line);border-radius:11px;background:#ffffff07;color:var(--ink);text-align:left;font-weight:500}
    .game-history-card:hover,.game-history-card.active{filter:none;border-color:#75d1c077;background:#5eb7a414;transform:translateY(-1px)}
    .game-history-card-head,.game-history-meta{display:flex;align-items:center;justify-content:space-between;gap:8px}
    .game-history-badges{display:flex;align-items:center;justify-content:flex-end;gap:5px;flex-wrap:wrap}
    .game-history-card code{color:var(--ink-strong);font-size:13px;font-weight:850}
    .game-history-meta{color:var(--muted);font-size:10.5px;font-weight:750}
    .game-player-dots{display:flex;gap:4px}
    .game-player-dot{width:17px;height:17px;border-radius:50%;border:1px solid #75d1c077;background:#5eb7a43d}
    .game-player-dot.bot{border-style:dashed;border-color:#ffffff3d;background:#ffffff10}
    .game-history-more{display:flex;justify-content:center;margin-top:11px}
    .profile-access{display:flex;flex-wrap:wrap;gap:12px;align-items:center;padding:12px 13px;border:1px solid var(--line);border-radius:14px;background:#ffffff07}
    .profile-access.ok{border-color:#68d39155;background:linear-gradient(145deg,#68d39114,#ffffff05)}
    .profile-access.bad{border-color:#f0787855;background:linear-gradient(145deg,#f0787814,#ffffff05)}
    .profile-access-mark{display:grid;place-items:center;width:38px;height:38px;flex:0 0 38px;border:1px solid var(--line-strong);border-radius:12px;background:#00000020;color:var(--muted)}
    .profile-access-mark svg{display:block;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
    .profile-access.ok .profile-access-mark{border-color:#68d39166;color:var(--ink-green)}
    .profile-access.bad .profile-access-mark{border-color:#f0787866;color:var(--ink-red)}
    .profile-access-copy{display:grid;gap:2px;flex:1 1 150px;min-width:0}
    .profile-access-label{color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .profile-access-copy b{font-size:16px;font-weight:900;line-height:1.15}
    .profile-access.ok .profile-access-copy b{color:var(--ink-green)}
    .profile-access.bad .profile-access-copy b{color:var(--ink-red)}
    .profile-access-action{flex:0 0 auto;width:auto;margin-left:auto;white-space:nowrap}
    .ban-toggle{margin:0 0 12px}
    .ban-toggle.banned{border-color:#f0787866;background:#f0787812}
    .ban-toggle.banned .switch-text{color:var(--ink-red)}
    .ban-toggle.banned input:checked+.switch-ui{background:#cf6d6c}
    .ban-toggle .switch-text{flex:1 1 auto;min-width:0}
    .ban-toggle-state{flex:0 0 auto;white-space:nowrap;font-weight:850}
    /* Un brouillon n'est pas un bannissement : tant que rien n'est appliqué,
       l'interrupteur allumé reste ambre plutôt que de virer au vert. */
    .ban-toggle.ban-pending{border-color:color-mix(in srgb,var(--state-warn) 48%,transparent);background:color-mix(in srgb,var(--state-warn) 10%,transparent)}
    .ban-toggle.ban-pending .switch-text{color:var(--ink-amber)}
    .ban-toggle.ban-pending input:checked+.switch-ui{background:var(--state-warn)}
    .ban-form>h3:first-child{margin-top:0}
    .profile-games-toolbar .switch-line{margin:0}
    #profileGamesWindow{width:auto;min-width:186px}
    #profileGamesWindow[hidden]{display:none}
    .profile-games-podium{display:grid;gap:7px;margin:0 0 12px}
    .profile-games-podium-bar{display:flex;gap:2px;height:8px;overflow:hidden;border-radius:99px;background:#00000026}
    .profile-games-podium-bar i{display:block;min-width:3px;border-radius:99px;background:var(--place-tone)}
    .profile-games-podium-legend{display:flex;gap:13px;flex-wrap:wrap;color:var(--muted);font-size:11px;font-weight:780}
    .profile-games-podium-legend span{display:inline-flex;align-items:center;gap:5px}
    .profile-games-podium-legend i{width:8px;height:8px;border-radius:3px;background:var(--place-tone)}
    .profile-games-podium-legend sup,.profile-game-place sup,.profile-game-seat sup{font-size:.62em}
    .profile-game-place.p1,.profile-games-podium-bar i.p1,.profile-games-podium-legend .p1,.profile-game-seat em.p1{--place-tone:#e2bb6d}
    .profile-game-place.p2,.profile-games-podium-bar i.p2,.profile-games-podium-legend .p2,.profile-game-seat em.p2{--place-tone:#c4cdda}
    .profile-game-place.p3,.profile-games-podium-bar i.p3,.profile-games-podium-legend .p3,.profile-game-seat em.p3{--place-tone:#cf9268}
    .profile-game-place.p4,.profile-games-podium-bar i.p4,.profile-games-podium-legend .p4,.profile-game-seat em.p4{--place-tone:#7f8b9c}
    .profile-games-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}
    .profile-game{display:grid;gap:10px;width:100%;padding:12px;border:1px solid var(--line);border-radius:14px;background:#ffffff07;color:var(--ink);text-align:left;font-weight:500;transition:border-color .16s ease,background .16s ease,transform .16s ease}
    .profile-game:hover{filter:none;border-color:#75d1c077;background:#5eb7a414;transform:translateY(-1px)}
    .profile-game.interrupted{border-style:dashed}
    .profile-game-top{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:center}
    .profile-game-place{display:grid;justify-items:center;align-content:center;width:46px;height:46px;border:1px solid color-mix(in srgb,var(--place-tone) 45%,transparent);border-radius:13px;background:color-mix(in srgb,var(--place-tone) 13%,#00000018);color:var(--place-tone);line-height:1}
    .profile-game-place b{font-size:15px;font-weight:950}
    .profile-game-place span{margin-top:4px;color:var(--muted);font-size:7.5px;font-weight:900;text-transform:uppercase;letter-spacing:.08em}
    .profile-game-id{display:grid;gap:3px;min-width:0}
    .profile-game-id b{overflow:hidden;color:var(--ink-strong);font-size:13.5px;font-weight:900;text-overflow:ellipsis;white-space:nowrap}
    .profile-game-id span{overflow:hidden;color:var(--muted);font-size:10.5px;font-weight:750;text-overflow:ellipsis;white-space:nowrap}
    .profile-game-net{display:grid;justify-items:end;color:var(--ink-2);font-size:15px;font-weight:900;line-height:1.1;white-space:nowrap}
    .profile-game-net span{margin-top:2px;color:var(--muted);font-size:8px;font-weight:900;text-transform:uppercase;letter-spacing:.07em}
    .profile-game-net.up{color:var(--ink-green)}
    .profile-game-net.down{color:var(--ink-red)}
    .profile-game-seats{display:grid;gap:5px;padding:8px 9px;border:1px solid var(--line);border-radius:11px;background:#00000016}
    .profile-game-seat{display:grid;grid-template-columns:21px minmax(0,1fr) auto;gap:8px;align-items:center;min-width:0;color:var(--ink-2);font-size:11.5px}
    .profile-game-seat b{overflow:hidden;font-weight:760;text-overflow:ellipsis;white-space:nowrap}
    .profile-game-seat.self b{color:var(--ink-strong);font-weight:900}
    .profile-game-seat em{color:var(--place-tone,var(--muted));font-size:11px;font-style:normal;font-weight:900}
    .profile-game-seat-face{display:grid;place-items:center;width:21px;height:21px;border:1px solid var(--line-strong);border-radius:7px;background:#ffffff0d;color:var(--ink-2);font-size:8.5px;font-style:normal;font-weight:900}
    .profile-game-seat.self .profile-game-seat-face{border-color:#75d1c077;background:#5eb7a42e;color:var(--ink-accent-2)}
    .profile-game-seat.bot .profile-game-seat-face{border-style:dashed;color:var(--muted)}
    .profile-game-seat-face svg{display:block;width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
    .profile-game-seat.empty{grid-template-columns:minmax(0,1fr);color:var(--muted)}
    .profile-game-foot{display:flex;gap:9px;flex-wrap:wrap;align-items:center;color:var(--muted);font-size:10.5px;font-weight:750}
    .review-seats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px}
    .review-seat{position:relative;display:grid;gap:14px;min-width:0;padding:14px;overflow:hidden;border:1px solid var(--line);border-radius:14px;background:linear-gradient(145deg,#ffffff0b,#ffffff05);box-shadow:inset 0 1px 0 #ffffff0d}
    .review-seat::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--player-accent,var(--accent-2));opacity:.72}
    .review-seat.winner{border-color:#68d39166;background:linear-gradient(145deg,#68d39116,#ffffff06);box-shadow:inset 0 1px 0 #ffffff14,0 10px 24px #163d2b22}
    .review-seat.winner::before{width:4px;background:#68d391;opacity:1}
    button.review-seat{width:100%;margin:0;font:inherit;color:inherit;text-align:left;appearance:none;cursor:pointer;transition:border-color .16s ease,transform .16s ease,box-shadow .16s ease}
    button.review-seat:hover{border-color:color-mix(in srgb,var(--player-accent,var(--accent-2)) 58%,transparent);transform:translateY(-1px);box-shadow:inset 0 1px 0 #ffffff14,0 8px 20px #0000002e}
    button.review-seat:focus-visible{outline:2px solid var(--accent-2);outline-offset:2px}
    .review-player-head{display:grid;grid-template-columns:46px minmax(0,1fr) auto;align-items:center;gap:10px;min-width:0}
    .review-player-avatar{display:grid;place-items:center;width:46px;height:46px;border:1px solid color-mix(in srgb,var(--player-accent,var(--accent-2)) 55%,transparent);border-radius:14px;background:color-mix(in srgb,var(--player-accent,var(--accent-2)) 18%,#ffffff08);color:color-mix(in srgb,var(--player-accent,var(--accent-2)) 78%,white);font-size:15px;font-weight:950;letter-spacing:.04em;box-shadow:inset 0 1px 0 #ffffff20}
    .review-player-avatar.bot{border-radius:15px;background:linear-gradient(145deg,#75d1c029,#75d1c00d);color:var(--ink-accent-2)}
    .review-player-avatar svg{display:block;width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
    .review-player-identity{display:grid;gap:4px;min-width:0}
    .review-player-name{overflow:hidden;color:#fff;font-size:14px;font-weight:900;text-overflow:ellipsis;white-space:nowrap}
    .review-player-meta{display:flex;align-items:center;gap:7px;min-width:0;color:var(--muted);font-size:10px;font-weight:750}
    .review-player-meta>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .review-player-status{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
    .review-player-status i{width:6px;height:6px;flex:0 0 6px;border-radius:50%;background:#7d8795;box-shadow:0 0 0 3px #7d879518}
    .review-player-status.online{color:var(--ink-green)}
    .review-player-status.online i{background:#68d391;box-shadow:0 0 0 3px #68d39120}
    .review-player-place{display:grid;justify-items:center;align-content:center;width:40px;height:40px;border:1px solid var(--line);border-radius:12px;background:#0000001c;color:var(--muted);line-height:1}
    .review-player-place span{font-size:8px;font-weight:900;text-transform:uppercase;letter-spacing:.08em}
    .review-player-place b{margin-top:3px;color:var(--ink-strong);font-size:14px}
    .review-player-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;border:1px solid var(--line);border-radius:11px;background:#00000016}
    .review-player-stat{display:grid;gap:4px;min-width:0;padding:9px 10px;border-left:1px solid var(--line)}
    .review-player-stat:first-child{border-left:0}
    .review-player-stat span{color:var(--muted);font-size:8px;font-weight:900;text-transform:uppercase;letter-spacing:.07em}
    .review-player-stat b{overflow:hidden;color:var(--ink-strong);font-size:14px;font-weight:900;text-overflow:ellipsis;white-space:nowrap}
    .review-player-stat.rank b{color:var(--ink-accent-2)}
    .review-seat.winner .review-player-stat.rank b,.review-seat.winner .review-player-name{color:#b8f4d2}
    .review-timeline{display:grid;gap:0;margin:0;padding:0;list-style:none}
    .review-step{display:grid;grid-template-columns:14px minmax(0,1fr);gap:10px;padding:0 0 12px;position:relative}
    .review-step:last-child{padding-bottom:0}
    .review-step::before{content:"";position:absolute;left:6px;top:14px;bottom:0;width:1px;background:var(--line)}
    .review-step:last-child::before{display:none}
    .review-dot{width:9px;height:9px;margin-top:5px;border-radius:50%;background:var(--ink-accent-2);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent-2) 18%,transparent)}
    .review-step.bad .review-dot{background:var(--ink-red);box-shadow:0 0 0 3px #f0787822}
    .review-step-copy b{display:block;color:#fff;font-size:13px}
    .review-step-copy span{display:block;color:var(--muted);font-size:11px}
    .review-gap{padding:11px;border:1px dashed var(--line-strong);border-radius:10px;color:var(--muted);font-size:12px}
    .game-review-tabs{display:flex;gap:6px;margin:12px 0;padding:5px;border:1px solid var(--line);border-radius:11px;background:#0000001f;overflow:auto}
    .game-review-tab{width:auto;min-width:120px;padding:8px 12px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--muted);box-shadow:none;font-size:11px;font-weight:850}
    .game-review-tab:hover{filter:none;border-color:var(--line-strong);color:var(--ink-strong)}
    .game-review-tab.active{border-color:#75d1c066;background:#5eb7a424;color:var(--ink-strong)}
    .game-review-panel[hidden]{display:none!important}
    .game-dispute-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px;padding:12px;border:1px solid var(--line);border-radius:11px;background:#ffffff07}
    .game-dispute-head h3{margin:0;color:var(--ink-strong);font-size:14px}.game-dispute-head p{margin:3px 0 0}
    .game-dispute-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:10px}
    .game-dispute-notes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:10px}
    .game-dispute-notes textarea{min-height:112px;resize:vertical}
    .game-dispute-notes .game-dispute-wide{grid-column:1/-1}
    .game-dispute-notes .game-dispute-wide textarea{min-height:70px}
    .game-dispute-actions{align-items:center;justify-content:flex-end}.game-dispute-actions .settings-state{margin-right:auto}
    .review-move-browser{display:grid;gap:9px;min-height:0}
    .review-browser-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
    .review-browser-head h3{margin:0}.review-browser-head .muted{margin:0}
    .review-round-tabs,.review-trick-tabs{display:flex;gap:6px;min-width:0;overflow:auto;padding:2px;scrollbar-width:thin}
    .review-round-tab,.review-trick-tab{width:auto;min-width:max-content;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:#ffffff07;color:var(--muted);box-shadow:none;font-size:10.5px;font-weight:850}
    .review-round-tab:hover,.review-trick-tab:hover{filter:none;border-color:#75d1c066;color:var(--ink-strong)}
    .review-round-tab.active{border-color:#75d1c077;background:#5eb7a424;color:var(--ink-strong)}
    .review-trick-tab{display:grid;grid-template-columns:auto auto;align-items:center;gap:5px;min-width:48px;padding:6px 8px}
    .review-trick-tab.active{border-color:#d6a95b88;background:#d6a95b20;color:#f7ddb0}
    .review-trick-count{display:grid;place-items:center;min-width:17px;height:17px;padding:0 4px;border-radius:99px;background:#ffffff0c;color:var(--muted);font-size:8.5px}
    .review-trick-stage{padding:10px;border:1px solid var(--line);border-radius:10px;background:#00000018}
    .review-trick-stage-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
    .review-trick-stage-head b{color:var(--ink-strong);font-size:12px}.review-trick-stage-head span{color:var(--muted);font-size:10px;font-weight:750}
    .review-trick-body{display:grid;gap:6px;max-height:360px;overflow:auto;padding-right:2px}
    .review-move{display:grid;grid-template-columns:32px minmax(95px,150px) minmax(0,1fr) auto;gap:8px;align-items:center;padding:7px 8px;border:1px solid var(--line);border-radius:8px;background:#ffffff06}
    .review-move-number{display:grid;place-items:center;width:27px;height:27px;border-radius:8px;background:#ffffff0b;color:var(--muted);font:800 10px ui-monospace,SFMono-Regular,Menlo,monospace}
    .review-move-player{min-width:0}.review-move-player b,.review-move-player span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.review-move-player b{color:var(--ink-strong);font-size:11.5px}.review-move-player span{color:var(--muted);font-size:9.5px}
    .review-cards{display:flex;gap:3px;align-items:center;min-width:0;overflow:auto;padding:1px 0}
    .review-card{display:grid;place-items:center;flex:0 0 30px;height:40px;border:1px solid #ffffff45;border-radius:5px;background:#f7f3e8;color:#172033;box-shadow:0 2px 5px #0005;font-size:11px;font-weight:900}
    .review-card.red{color:#c63d50}.review-pass{color:var(--muted);font-size:11px;font-style:italic}.review-finish{color:var(--ink-green);font-size:11px;font-weight:800}.review-interrupt{color:var(--ink-red);font-size:11px;font-weight:800}
    .review-move-time{color:var(--muted);font-size:9px;font-weight:750;white-space:nowrap}
    .schedule-block{display:grid;gap:10px;margin-top:12px;padding:12px;border:1px solid var(--line);border-radius:12px;background:#ffffff07}
    .schedule-fields{display:grid;grid-template-columns:minmax(0,220px) minmax(0,1fr);gap:10px;align-items:end}
    .schedule-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px 11px;border:1px solid var(--line);border-radius:11px;background:#ffffff07}
    .schedule-row+.schedule-row{margin-top:8px}
    .schedule-row-copy{min-width:0}
    .schedule-row-copy b{display:block;color:#fff;font-size:13px}
    .schedule-row-copy span{display:block;color:var(--muted);font-size:11px}
    .schedule-when{display:grid;justify-items:center;min-width:56px;padding:7px 9px;border:1px solid var(--line);border-radius:9px;background:#00000018}
    .schedule-when b{color:#fff;font-size:14px;line-height:1}
    .schedule-when span{color:var(--muted);font-size:10px;font-weight:800;text-transform:uppercase}
    html[data-theme="light"] .activity-card,html[data-theme="light"] .activity-chart,html[data-theme="light"] .review-seat,html[data-theme="light"] .schedule-block,html[data-theme="light"] .schedule-row,html[data-theme="light"] .game-history-card,html[data-theme="light"] .review-move,html[data-theme="light"] .review-trick-stage,html[data-theme="light"] .profile-game{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .profile-game-seats{background:#f2f5f9;border-color:#dbe3ec}
    html[data-theme="light"] .profile-game-id b{color:#172033}
    html[data-theme="light"] .profile-games-podium-bar{background:#dfe6ee}
    html[data-theme="light"] .profile-access{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .profile-access.ok{border-color:#68d39177;background:#f0fbf5}
    html[data-theme="light"] .profile-access.bad{border-color:#f0787877;background:#fdf2f2}
    html[data-theme="light"] .profile-game-place.p1,html[data-theme="light"] .profile-games-podium-bar i.p1,html[data-theme="light"] .profile-games-podium-legend .p1,html[data-theme="light"] .profile-game-seat em.p1{--place-tone:#a97a20}
    html[data-theme="light"] .profile-game-place.p2,html[data-theme="light"] .profile-games-podium-bar i.p2,html[data-theme="light"] .profile-games-podium-legend .p2,html[data-theme="light"] .profile-game-seat em.p2{--place-tone:#6c7a8d}
    html[data-theme="light"] .profile-game-place.p3,html[data-theme="light"] .profile-games-podium-bar i.p3,html[data-theme="light"] .profile-games-podium-legend .p3,html[data-theme="light"] .profile-game-seat em.p3{--place-tone:#a26236}
    html[data-theme="light"] .profile-game-place.p4,html[data-theme="light"] .profile-games-podium-bar i.p4,html[data-theme="light"] .profile-games-podium-legend .p4,html[data-theme="light"] .profile-game-seat em.p4{--place-tone:#7a8496}
    html[data-theme="light"] .game-review-tabs{background:#eef3f8;border-color:#dbe3ec}
    html[data-theme="light"] .game-review-tab.active,html[data-theme="light"] .review-round-tab.active{background:#dff3f0;color:#172033}
    html[data-theme="light"] .activity-card b,html[data-theme="light"] .activity-chart-head b,html[data-theme="light"] .review-player-name,html[data-theme="light"] .review-step-copy b,html[data-theme="light"] .schedule-row-copy b,html[data-theme="light"] .schedule-when b{color:#172033}
    /* Modèles de communication : une puce par modèle, applicable d'un clic. */
    .template-chips{display:flex;gap:8px;flex-wrap:wrap}
    .template-chip{display:inline-flex;align-items:stretch;border:1px solid var(--line);border-radius:11px;background:#ffffff07;overflow:hidden;max-width:100%}
    .template-chip:hover{border-color:var(--line-strong);background:#ffffff0f}
    .template-chip-apply{display:grid;gap:2px;width:auto;min-width:0;padding:8px 11px;background:transparent;border:0;border-radius:0;color:inherit;font-weight:400;text-align:left}
    .template-chip-apply b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff;font-size:12.5px;font-weight:800}
    .template-chip-apply span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:10.5px;font-weight:700}
    .template-chip-remove{width:auto;flex:0 0 auto;padding:0 10px;background:transparent;border:0;border-left:1px solid var(--line);border-radius:0;color:var(--muted);font-size:15px;line-height:1}
    .template-chip-remove:hover{background:#f0787820;color:var(--ink-red);filter:none}
    .template-empty{padding:11px;border:1px dashed var(--line-strong);border-radius:10px;color:var(--muted);font-size:12px}
    .template-save{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px;align-items:center;margin-top:11px;padding:11px;border:1px solid var(--line);border-radius:11px;background:#00000018}
    .template-save button{width:auto}
    .template-save .template-save-hint{grid-column:1/-1;margin:0;color:var(--muted);font-size:11px}
    html[data-theme="light"] .template-chip{background:#fff;border-color:#dbe3ec}
    html[data-theme="light"] .template-chip:hover{background:#f4f8fc}
    html[data-theme="light"] .template-chip-apply b{color:#172033}
    html[data-theme="light"] .template-chip-remove{border-left-color:#dbe3ec}
    html[data-theme="light"] .template-save{background:#f4f8fc;border-color:#dbe3ec}
    @media(max-width:560px){.template-save{grid-template-columns:minmax(0,1fr)}.template-save button{width:100%}}
    /* Liste volante de choix d'un profil. Elle vit à la racine du document et
       non près du champ : les panneaux ont des débordements masqués et des
       modales à leur propre contexte d'empilement, qui la rogneraient. */
    .profile-picker{position:fixed;z-index:260;display:none;max-height:min(320px,58vh);overflow-y:auto;padding:5px;border:1px solid var(--line-strong);border-radius:12px;background:#141a24;box-shadow:0 18px 42px #000000a6}
    .profile-picker.open{display:block}
    .profile-picker-item{display:grid;grid-template-columns:26px minmax(0,1fr) auto auto;align-items:center;gap:9px;width:100%;padding:8px 9px;background:transparent;border:1px solid transparent;border-radius:9px;color:inherit;font-weight:400;text-align:left}
    .profile-picker-item:hover,.profile-picker-item.focus{background:#ffffff12;border-color:var(--line);filter:none}
    .profile-picker-chip{display:inline-flex;align-items:center}
    .profile-picker-item .profile-resolver-copy b{font-size:13px;font-weight:800;color:#fff}
    .profile-picker-item .profile-resolver-copy span{font-size:11px;color:var(--muted)}
    .profile-picker-note{padding:9px 10px;color:var(--muted);font-size:12px}
    html[data-theme="light"] .profile-picker{background:#fff;border-color:#cfdae6;box-shadow:0 18px 42px #34405626}
    html[data-theme="light"] .profile-picker-item:hover,html[data-theme="light"] .profile-picker-item.focus{background:#eef4f9;border-color:#dbe3ec}
    html[data-theme="light"] .profile-picker-item .profile-resolver-copy b{color:#172033}
    html[data-theme="light"] .schedule-when{background:#eef3f8}
    html[data-theme="light"] .review-seat{background:linear-gradient(145deg,#fff,#f7f9fc);box-shadow:inset 0 1px 0 #fff,0 5px 14px #3440560b}
    html[data-theme="light"] .review-seat.winner{background:linear-gradient(145deg,#eefaf3,#fff);border-color:#8fd9ae}
    html[data-theme="light"] .review-seat.winner .review-player-name{color:#17633d}
    html[data-theme="light"] .review-player-avatar{background:color-mix(in srgb,var(--player-accent,var(--accent-2)) 13%,white)}
    html[data-theme="light"] .review-player-place,html[data-theme="light"] .review-player-stats{background:#f3f6fa;border-color:#dbe3ec}
    .admob-platform{display:flex;flex-direction:column;gap:11px;padding:13px;border-left-width:3px;border-left-style:solid;border-left-color:var(--line-strong)}
    .admob-platform.is-production{border-left-color:var(--green)}
    .admob-platform.is-test{border-left-color:var(--amber)}
    .admob-platform-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
    .admob-platform-name{display:flex;align-items:center;gap:8px;color:var(--ink);font-size:14px;font-weight:850}
    .admob-platform-name svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
    .admob-mode-field{display:flex;flex-direction:column;gap:6px}
    .admob-units{display:grid;gap:10px;margin-top:2px}
    .admob-unit-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:5px}
    .admob-unit-head label{margin:0}
    .admob-dot{flex:none;width:7px;height:7px;border-radius:99px;background:var(--amber);box-shadow:0 0 0 3px color-mix(in srgb,var(--amber) 20%,transparent)}
    .admob-dot.on{background:var(--green);box-shadow:0 0 0 3px color-mix(in srgb,var(--green) 20%,transparent)}
    .admob-live{padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:#ffffff07;color:var(--muted);font-size:12px;line-height:1.45}
    .admob-live b{color:var(--ink)}
    .admob-platform.is-production .admob-live.warn{border-color:#f6c86a88;background:#513f1f66;color:var(--ink-amber)}
    html[data-theme="light"] .admob-live{background:#f3f6fa}
    html[data-theme="light"] .admob-platform.is-production .admob-live.warn{background:#fff8e4;border-color:#e7c66b}
    @media(max-width:760px){.admob-platforms{grid-template-columns:minmax(0,1fr)}}
    /* Revenus : la période et les deux actions tiennent sur la ligne de titre,
       comme l'en-tête des statistiques. */
    .admob-revenue-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:13px}
    .admob-revenue-head h3{margin:0;color:var(--ink-strong)}
    .admob-revenue-head p{max-width:520px;margin-top:2px}
    .admob-revenue-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
    .admob-revenue-tools select{width:auto;min-width:186px}
    .admob-revenue-tools .inline-actions{margin:0}
    .admob-chart-hint{margin-top:7px;color:var(--muted);font-size:11px;font-weight:700}
    .summary-card .activity-delta{margin-top:2px;font-size:11.5px;font-weight:800;letter-spacing:0;text-transform:none}
    .admob-serie-earnings{color:var(--ink-accent)}
    /* Douze mois font trois cent soixante-cinq lignes : le journal se déroule
       dans sa propre fenêtre plutôt que de pousser le reste hors de l'écran. */
    .admob-daily{max-height:430px}
    .admob-daily table{margin:0}
    @media(max-width:760px){.admob-revenue-head{flex-direction:column}.admob-revenue-tools{width:100%}.admob-revenue-tools select{flex:1 1 auto;min-width:0}}
    @media(max-width:980px){.activity-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}
    @media(max-width:1100px){.review-seats{grid-template-columns:repeat(2,minmax(0,1fr))}.game-dispute-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
    @media(max-width:560px){.activity-summary{grid-template-columns:minmax(0,1fr)}.schedule-fields{grid-template-columns:minmax(0,1fr)}.schedule-row{grid-template-columns:minmax(0,1fr);justify-items:start}.game-history-grid,.review-seats,.profile-games-grid,.game-dispute-grid,.game-dispute-notes{grid-template-columns:minmax(0,1fr)}.game-review-tab{min-width:104px;padding:7px 9px}.review-browser-head{align-items:flex-start}.review-round-tabs{width:100%}.review-move{grid-template-columns:28px minmax(0,1fr) auto}.review-move-copy{grid-column:2/-1}.review-move-time{grid-column:3}.game-dispute-actions{display:grid;grid-template-columns:minmax(0,1fr)}.game-dispute-actions button{width:100%}}
    /* Boutique : catégories compactes qui s'ouvrent dans le flux de la page. */
    .store-category{margin-bottom:10px;padding:0;overflow:clip;border-radius:15px;background:linear-gradient(145deg,#ffffff0a,#ffffff05);box-shadow:inset 0 1px 0 #ffffff0d;transition:border-color .28s ease,background .28s ease,box-shadow .28s ease}
    .store-category.is-open{border-color:#75d1c055;background:linear-gradient(145deg,#5eb7a40e,#ffffff06);box-shadow:inset 0 1px 0 #ffffff13,0 12px 28px #00000025}
    .store-category-toggle{display:grid;grid-template-columns:44px minmax(0,1fr) auto auto;align-items:center;gap:11px;width:100%;min-height:72px;padding:11px 13px;border:0;border-radius:14px;background:transparent;color:var(--ink);box-shadow:none;text-align:left;font-weight:500;transition:background .2s ease,transform .16s ease}
    .store-category-toggle:hover{filter:none;background:#ffffff08}.store-category-toggle:active{transform:scale(.997);background:#ffffff0c}.store-category-toggle:focus-visible{border-color:transparent;box-shadow:inset 0 0 0 2px #75d1c0}
    .store-category-mark{display:grid;place-items:center;width:44px;height:44px;border:1px solid #75d1c04d;border-radius:13px;background:linear-gradient(145deg,#5eb7a429,#5eb7a40c);color:var(--ink-accent-2);box-shadow:inset 0 1px 0 #ffffff1c}
    .store-category-mark svg{display:block;width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
    .featured-category .store-category-mark{border-color:#d6a95b66;background:linear-gradient(145deg,#d6a95b2c,#d6a95b0c);color:var(--ink-accent)}
    .store-category-copy{display:grid;gap:3px;min-width:0}.store-category-copy b{overflow:hidden;color:var(--ink-strong);font-size:14px;font-weight:900;text-overflow:ellipsis;white-space:nowrap}.store-category-copy span{overflow:hidden;color:var(--muted);font-size:10.5px;font-weight:650;text-overflow:ellipsis;white-space:nowrap}
    .store-category-facts{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}.store-category-fact{padding:4px 7px;border:1px solid var(--line);border-radius:99px;background:#ffffff08;color:var(--muted);font-size:9px;font-weight:850;white-space:nowrap}.store-category-fact.promo{border-color:#68d3913d;background:#68d39111;color:var(--ink-green)}.store-category-fact.off{border-color:#f078783d;background:#f0787810;color:var(--ink-red)}
    .store-category-touch{display:grid;grid-template-columns:34px auto;align-items:center;gap:8px;min-width:132px;min-height:46px;padding:5px 10px 5px 6px;border:1px solid var(--line-strong);border-radius:14px;background:linear-gradient(180deg,#2a3444,#1b2330);box-shadow:inset 0 1px 0 #ffffff1b,0 5px 12px #00000032;transition:border-color .24s ease,background .24s ease,box-shadow .16s ease,transform .16s ease}
    .store-category-toggle:hover .store-category-touch{border-color:#75d1c066;box-shadow:inset 0 1px 0 #ffffff20,0 7px 16px #00000042;transform:translateY(-1px)}.store-category-toggle:active .store-category-touch{box-shadow:inset 0 2px 6px #00000045,0 1px 3px #00000028;transform:translateY(1px) scale(.985)}
    .store-category-touch-icon{display:grid;place-items:center;width:34px;height:34px;border-radius:10px;background:#ffffff0a;color:var(--ink-accent-2)}.store-category-touch-icon svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
    .store-category-touch-copy{display:grid;gap:2px;min-width:0}.store-category-touch-copy strong{color:var(--ink-strong);font-size:10.5px;line-height:1.05;white-space:nowrap}.store-category-touch-copy small{color:var(--muted);font-size:8px;font-weight:900;text-transform:uppercase;letter-spacing:.06em}.store-category-touch-copy .when-open{display:none}
    .store-category.is-open .store-category-touch{border-color:#75d1c06b;background:linear-gradient(180deg,#24453f,#18342f);box-shadow:inset 0 1px 0 #ffffff1c,0 6px 15px #0c2e2738}.store-category.is-open .store-category-touch-copy .when-closed{display:none}.store-category.is-open .store-category-touch-copy .when-open{display:inline}.store-category.is-open .store-category-touch-icon{background:#5eb7a426;color:#a5f1e3}
    .store-category-drawer{display:grid;grid-template-rows:0fr;opacity:.35;transition:grid-template-rows .38s cubic-bezier(.2,.8,.2,1),opacity .24s ease}.store-category.is-open .store-category-drawer{grid-template-rows:1fr;opacity:1}.store-category-drawer-inner{min-height:0;overflow:hidden}.store-category-body{padding:0 13px 13px}.store-category-body::before{content:"";display:block;height:1px;margin-bottom:12px;background:linear-gradient(90deg,transparent,var(--line-strong) 8%,var(--line-strong) 92%,transparent)}
    .store-category-tools{display:flex;justify-content:flex-end;gap:7px;flex-wrap:wrap;margin-bottom:10px}.store-category-tools button{width:auto}
    .featured-category.is-open{border-color:#d6a95b7a;background:linear-gradient(145deg,#d6a95b16,#ffffff06)}
    html[data-theme="light"] .store-category{background:linear-gradient(145deg,#fff,#f6f9fc);border-color:#dbe3ec;box-shadow:inset 0 1px 0 #fff,0 5px 16px #3440560c}
    html[data-theme="light"] .store-category.is-open{border-color:#72bcae70;background:linear-gradient(145deg,#eef9f7,#fff);box-shadow:0 12px 28px #34405616}
    html[data-theme="light"] .featured-category.is-open{border-color:#d6a95b7a;background:linear-gradient(145deg,#fff7e7,#fff)}
    html[data-theme="light"] .store-category-toggle:hover{background:#eef6f5}html[data-theme="light"] .store-category-touch{background:linear-gradient(180deg,#fff,#e9eff5);border-color:#cbd5e1;box-shadow:inset 0 1px 0 #fff,0 4px 10px #34405618}html[data-theme="light"] .store-category.is-open .store-category-touch{background:linear-gradient(180deg,#dff3f0,#cce9e4);border-color:#5eb7a477}html[data-theme="light"] .store-category-fact{background:#f1f5f9;border-color:#dbe3ec}
    @media(max-width:780px){.store-category-toggle{grid-template-columns:40px minmax(0,1fr) auto;padding:10px;gap:9px}.store-category-mark{grid-row:1/3;width:40px;height:40px}.store-category-copy{align-self:end}.store-category-facts{grid-column:2;justify-content:flex-start;align-self:start}.store-category-touch{grid-column:3;grid-row:1/3;min-width:104px;padding-right:8px}.store-category-body{padding:0 10px 10px}.store-category-tools{display:grid;grid-template-columns:minmax(0,1fr)}.store-category-tools button{width:100%}}
    @media(max-width:430px){.store-category-fact.off{display:none}.store-category-touch{grid-template-columns:32px auto;min-width:92px;padding-left:5px}.store-category-touch-icon{width:32px;height:32px}.store-category-copy b{font-size:13px}.store-category-copy span{font-size:9.5px}}

    /* Défis : une projection fidèle du parcours dans l'app. Une seule période
       est visible à la fois et ses deux rangs se lisent de gauche à droite. */
    .challenge-control-room{padding:18px;background:radial-gradient(680px 260px at 7% -8%,#5eb7a414,transparent 70%),linear-gradient(180deg,var(--panel),var(--panel-2))}
    .challenge-control-room .challenge-overview{grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:11px}
    .challenge-overview-card{border-radius:13px;background:linear-gradient(145deg,#ffffff0c,#ffffff05)}
    .challenge-overview-card.ok{border-color:#68d39155}.challenge-overview-card.warn{border-color:#f6c86a77;background:linear-gradient(145deg,#f6c86a14,#ffffff05)}.challenge-overview-card.locked .challenge-overview-icon{background:#d6a95b1b;color:var(--ink-accent)}
    .challenge-structure-notice{display:flex;align-items:center;gap:11px;margin:0 0 12px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#ffffff06}
    .challenge-structure-notice.ok{border-color:#68d3914d;background:#68d3910d}.challenge-structure-notice.warn{border-color:#f6c86a66;background:#f6c86a10}
    .challenge-notice-mark{display:grid;place-items:center;width:29px;height:29px;flex:0 0 29px;border-radius:9px;background:#68d3911e;color:var(--ink-green);font-size:14px;font-weight:950}.challenge-structure-notice.warn .challenge-notice-mark{background:#f6c86a20;color:var(--ink-amber)}
    .challenge-structure-notice div{display:grid;gap:2px;min-width:0}.challenge-structure-notice b{color:var(--ink-strong);font-size:12px}.challenge-structure-notice div span{color:var(--muted);font-size:10.5px;line-height:1.4}
    .challenge-control-room .challenge-toolbar{display:flex;align-items:stretch;margin:0 0 12px;padding:6px;border-radius:15px;background:#090e1666}
    .challenge-period-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;flex:1;min-width:0}
    .challenge-period-tab{--period:#8ab4c8;display:grid;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:9px;min-width:0;padding:7px 9px;border:1px solid transparent;border-radius:11px;background:transparent;color:var(--ink-2);box-shadow:none;text-align:left;font-weight:500}
    .challenge-period-tab.period-daily{--period:#50d0b6}.challenge-period-tab.period-weekly{--period:#f2be5b}.challenge-period-tab.period-monthly{--period:#ef7f8a}
    .challenge-period-tab:hover{filter:none;border-color:color-mix(in srgb,var(--period) 38%,transparent);background:color-mix(in srgb,var(--period) 8%,transparent)}.challenge-period-tab.active{border-color:color-mix(in srgb,var(--period) 58%,transparent);background:color-mix(in srgb,var(--period) 16%,transparent);box-shadow:inset 0 1px 0 #ffffff16}
    .challenge-period-tab .challenge-period-icon{width:36px;height:36px;flex-basis:36px}.challenge-period-tab-copy{display:grid;gap:2px;min-width:0}.challenge-period-tab-copy b{overflow:hidden;color:var(--ink-strong);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.challenge-period-tab-copy small{overflow:hidden;color:var(--muted);font-size:9.5px;text-overflow:ellipsis;white-space:nowrap}.challenge-period-tab-count{padding:4px 7px;border:1px solid color-mix(in srgb,var(--period) 32%,transparent);border-radius:99px;color:color-mix(in srgb,var(--period) 74%,white);font-size:9px;font-weight:900;white-space:nowrap}.challenge-period-tab.warn .challenge-period-tab-count{border-color:#f0787866;color:var(--ink-red)}
    .challenge-control-room .challenge-toolbar>.inline-actions{align-self:center;margin:0 3px 0 8px;padding-left:8px;border-left:1px solid var(--line)}
    .challenge-control-room .challenge-periods{margin:0}
    .challenge-period-board{--period:#8ab4c8;overflow:hidden;border:1px solid color-mix(in srgb,var(--period) 42%,transparent);border-radius:16px;background:color-mix(in srgb,var(--period) 4%,transparent);box-shadow:inset 0 1px 0 #ffffff0e,0 14px 32px #00000020}.challenge-period-board.period-daily{--period:#50d0b6}.challenge-period-board.period-weekly{--period:#f2be5b}.challenge-period-board.period-monthly{--period:#ef7f8a}
    .challenge-period-board-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 15px;border-bottom:1px solid color-mix(in srgb,var(--period) 30%,transparent);background:linear-gradient(90deg,color-mix(in srgb,var(--period) 15%,transparent),transparent)}
    .challenge-period-board-head .challenge-period-title h3{color:var(--ink-strong);font-size:16px}.challenge-period-board-head .challenge-period-title p{margin-top:2px;color:var(--muted);font-size:10.5px}.challenge-period-facts{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}.challenge-period-facts span{padding:5px 8px;border:1px solid color-mix(in srgb,var(--period) 27%,transparent);border-radius:99px;background:#ffffff08;color:var(--muted);font-size:9.5px;font-weight:750}.challenge-period-facts b{color:var(--ink-strong);font-size:10.5px}
    .challenge-journey{display:grid;grid-template-columns:minmax(0,1fr) 112px minmax(0,1fr);gap:12px;align-items:stretch;padding:14px}
    .challenge-stage{min-width:0;padding:12px;border:1px solid var(--line);border-radius:14px;background:#070b112f}.challenge-stage.tier-1{border-color:#68d39142;background:linear-gradient(145deg,#68d3910d,#070b112f)}.challenge-stage.tier-2{border-color:#d6a95b40;background:linear-gradient(145deg,#d6a95b0c,#070b112f)}
    .challenge-stage-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;min-height:62px;margin-bottom:10px}.challenge-stage-head>div{min-width:0}.challenge-stage-kicker{display:block;margin-bottom:2px;color:var(--ink-green);font-size:9px;font-weight:950;text-transform:uppercase;letter-spacing:.1em}.challenge-stage.tier-2 .challenge-stage-kicker{color:var(--ink-accent)}.challenge-stage-head h4{margin:0;color:var(--ink-strong);font-size:15px}.challenge-stage-head p{max-width:390px;margin-top:3px;color:var(--muted);font-size:10px;line-height:1.35}.challenge-stage-head>.badge{flex:0 0 auto}
    .challenge-stage-list{display:grid;gap:8px}.challenge-stage-empty{display:grid;place-items:center;min-height:84px;padding:12px;border:1px dashed var(--line-strong);border-radius:11px;color:var(--muted);font-size:11px;text-align:center}
    .challenge-unlock-gate{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-width:0;padding:12px 6px;color:var(--muted);text-align:center}.challenge-unlock-icon{display:grid;place-items:center;width:40px;height:40px;margin-bottom:4px;border:1px solid #d6a95b55;border-radius:13px;background:#d6a95b16;color:var(--ink-accent)}.challenge-unlock-icon svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.challenge-unlock-gate strong{color:var(--ink-strong);font-size:22px;line-height:1}.challenge-unlock-gate>span:not(.challenge-unlock-icon){font-size:9px;font-weight:800}.challenge-unlock-gate i{position:relative;width:54px;height:1px;margin:10px 0 5px;background:linear-gradient(90deg,#68d391,#d6a95b)}.challenge-unlock-gate i::after{content:"";position:absolute;right:-1px;top:-4px;width:7px;height:7px;border-top:2px solid #d6a95b;border-right:2px solid #d6a95b;transform:rotate(45deg)}.challenge-unlock-gate b{color:var(--ink-accent);font-size:9px;text-transform:uppercase;letter-spacing:.07em}
    .challenge-stage-card{--card-tone:#68d391;margin:0;border-left:0;border-radius:11px;background:linear-gradient(145deg,#ffffff0b,#ffffff05);box-shadow:none}.challenge-stage-card.tier-2{--card-tone:#d6a95b;border-color:#d6a95b33;background:linear-gradient(145deg,#d6a95b0b,#ffffff04)}.challenge-stage-card.is-inactive{--card-tone:#f07878;opacity:.58;filter:saturate(.55)}.challenge-stage-card.is-inactive:hover,.challenge-stage-card.is-inactive[open]{opacity:.9;filter:none}
    .challenge-stage-card>summary{grid-template-columns:42px minmax(0,1fr) auto 24px;grid-template-rows:auto auto;gap:7px 9px;min-height:72px;padding:9px 10px}.challenge-card-order{grid-column:1;grid-row:1/3;display:grid;place-items:center;align-content:center;width:42px;height:42px;border:1px solid color-mix(in srgb,var(--card-tone) 48%,transparent);border-radius:12px;background:color-mix(in srgb,var(--card-tone) 13%,transparent);color:color-mix(in srgb,var(--card-tone) 74%,white);font-size:16px;font-weight:950;line-height:1}.challenge-card-order small{display:block;margin-bottom:2px;font-size:7px;letter-spacing:.07em}.challenge-stage-card .challenge-card-copy{grid-column:2;grid-row:1}.challenge-stage-card .challenge-card-copy b{font-size:12.5px;-webkit-line-clamp:1}.challenge-stage-card .challenge-card-copy span{font-size:9.5px}.challenge-stage-card .challenge-card-meta{grid-column:3;grid-row:1;align-self:start}.challenge-stage-card .challenge-card-meta .badge{font-size:8.5px;padding:3px 6px}.challenge-card-access{grid-column:2/4;grid-row:2;display:flex;align-items:center;gap:5px;color:var(--ink-green);font-size:8.5px;font-weight:850;text-transform:uppercase;letter-spacing:.04em}.challenge-card-access.locked{color:var(--ink-accent)}.challenge-card-access svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.challenge-stage-card .challenge-card-chevron{grid-column:4;grid-row:1/3;align-self:center}
    .challenge-stage-card[open]{border-color:color-mix(in srgb,var(--card-tone) 48%,transparent);background:linear-gradient(145deg,color-mix(in srgb,var(--card-tone) 11%,transparent),#ffffff06)}.challenge-stage-card .challenge-editor-body{padding:10px}.challenge-editor-identity{display:flex;align-items:center;gap:7px;min-width:0;margin-bottom:9px;padding-bottom:8px;border-bottom:1px solid var(--line)}.challenge-editor-identity span{color:var(--muted);font-size:8.5px;font-weight:850;text-transform:uppercase;letter-spacing:.05em}.challenge-editor-identity code{min-width:0;overflow:hidden;color:var(--ink-2);font-size:9px;text-overflow:ellipsis;white-space:nowrap}.challenge-editor-identity b{margin-left:auto;color:var(--card-tone);font-size:8.5px;white-space:nowrap}.challenge-stage-card .challenge-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.challenge-stage-card .challenge-fields .challenge-title-field{grid-column:1/-1}.challenge-stage-card .challenge-switch{grid-column:1/-1;min-height:52px}
    html[data-theme="light"] .challenge-control-room{background:radial-gradient(680px 260px at 7% -8%,#5eb7a414,transparent 70%),linear-gradient(180deg,#fff,#f5f8fb)}html[data-theme="light"] .challenge-control-room .challenge-toolbar{background:#edf3f8}html[data-theme="light"] .challenge-overview-card,html[data-theme="light"] .challenge-stage,html[data-theme="light"] .challenge-stage-card{background:#fff}html[data-theme="light"] .challenge-stage.tier-1{background:#f4fbf8}html[data-theme="light"] .challenge-stage.tier-2{background:#fffaf0}html[data-theme="light"] .challenge-period-tab.active{background:color-mix(in srgb,var(--period) 18%,white)}html[data-theme="light"] .challenge-period-facts span{background:#fff}html[data-theme="light"] .challenge-stage-card.tier-2{background:#fffdf8}
    @media(max-width:1240px){.challenge-control-room .challenge-overview{grid-template-columns:repeat(2,minmax(0,1fr))}.challenge-journey{grid-template-columns:minmax(0,1fr)}.challenge-unlock-gate{display:grid;grid-template-columns:auto auto auto 54px auto;justify-content:center;gap:7px;padding:4px 10px}.challenge-unlock-icon{width:34px;height:34px;margin:0}.challenge-unlock-gate i{margin:0}.challenge-unlock-gate b{text-align:left}.challenge-stage-head{min-height:0}.challenge-stage-card .challenge-card-copy b{-webkit-line-clamp:2}}
    @media(max-width:820px){.challenge-control-room .challenge-toolbar{display:grid}.challenge-period-tabs{grid-template-columns:minmax(0,1fr)}.challenge-control-room .challenge-toolbar>.inline-actions{display:grid;grid-template-columns:1fr 1fr;margin:0;padding:6px 0 0;border-top:1px solid var(--line);border-left:0}.challenge-period-board-head{align-items:flex-start;flex-direction:column}.challenge-period-facts{justify-content:flex-start}.challenge-stage-card>summary{grid-template-columns:38px minmax(0,1fr) 24px}.challenge-card-order{width:38px;height:38px}.challenge-stage-card .challenge-card-meta{grid-column:2/4;grid-row:2;justify-content:flex-start}.challenge-card-access{grid-column:2/4;grid-row:3}.challenge-stage-card .challenge-card-chevron{grid-column:3;grid-row:1}.challenge-stage-card .challenge-fields{grid-template-columns:minmax(0,1fr)}.challenge-stage-card .challenge-fields .challenge-title-field,.challenge-stage-card .challenge-switch{grid-column:auto}}
    @media(max-width:520px){.challenge-control-room{padding:12px}.challenge-control-room .challenge-overview{grid-template-columns:minmax(0,1fr)}.challenge-journey{padding:9px}.challenge-stage{padding:9px}.challenge-unlock-gate{grid-template-columns:auto auto minmax(0,1fr)}.challenge-unlock-gate i,.challenge-unlock-gate b{display:none}.challenge-editor-identity{align-items:flex-start;flex-direction:column}.challenge-editor-identity b{margin-left:0}}

    /* ══════════════════════════════════════════════════════════════════
       LA BOÎTE À OUTILS — voir VERSION_MAIDO.md — section « Administration »
       Un outil, un travail. Ces pièces ne dépendent d'aucune page : elles
       remplacent, page après page, les variantes qui faisaient la même
       chose sous d'autres noms. Rien ici n'est propre à un écran ; si un
       écran a besoin d'autre chose, c'est un autre outil, et il a un nom.
       Le ton (--state) est porté par data-state et lu par TOUTES les pièces :
       le filet gauche, le badge, le point, la pastille, le bandeau.
       ══════════════════════════════════════════════════════════════════ */
    [data-state="ok"]{--state:var(--state-ok);--state-ink:var(--ink-green)}
    [data-state="warn"]{--state:var(--state-warn);--state-ink:var(--ink-amber)}
    [data-state="bad"]{--state:var(--state-bad);--state-ink:var(--ink-red)}

    /* — le badge, et le même sans son mot — */
    .tag{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border:1px solid color-mix(in srgb,var(--state) 42%,transparent);border-radius:var(--r-pill);background:color-mix(in srgb,var(--state) 13%,transparent);color:var(--state-ink);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap}
    .tag.plain{text-transform:none;letter-spacing:0;font-weight:750;font-size:var(--fs-small)}
    .dot{display:inline-block;width:9px;height:9px;flex:none;border-radius:50%;background:var(--state);box-shadow:0 0 0 3px color-mix(in srgb,var(--state) 22%,transparent)}

    /* — la pastille d'état : un point, un nom, une bulle, un clic qui mène au réglage — */
    .state-row{display:flex;flex-wrap:wrap;gap:var(--gap-sm);margin-bottom:var(--gap-md)}
    /* Tant que la page n'a pas chargé, la rangée ne réserve rien. */
    .state-row:empty{display:none}
    .state-chip{position:relative;display:inline-flex;align-items:center;gap:10px;width:auto;padding:10px 16px;border:1px solid color-mix(in srgb,var(--state) 38%,var(--line));border-radius:var(--r-pill);background:var(--fill-2);color:var(--ink);font-size:var(--fs-strong);font-weight:800;cursor:pointer;transition:border-color .16s ease,background .16s ease}
    .state-chip:hover{background:var(--fill-3);filter:none}
    .state-chip .state-name{white-space:nowrap}
    .state-tip{position:absolute;top:calc(100% + 8px);left:0;z-index:40;display:grid;gap:5px;width:min(320px,calc(100vw - 32px));padding:11px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--panel);box-shadow:var(--shadow);opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity .16s ease,transform .16s ease,visibility .16s;text-align:left;font-weight:650}
    .state-chip:hover .state-tip,.state-chip:focus-visible .state-tip{opacity:1;visibility:visible;transform:none}
    .state-tip-title{color:var(--state-ink);font-size:var(--fs-body);font-weight:850}
    .state-tip-line{display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:var(--fs-body)}
    .state-tip-line b{color:var(--ink-2)}

    /* — la carte-ligne : filet · pictogramme · titre · repères · ouverture — */
    .rows{display:grid;gap:var(--gap-xs)}
    .row{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:var(--gap-sm);padding:9px 11px;border:1px solid var(--line);border-left:3px solid var(--state);border-radius:var(--r-sm);background:var(--fill-1);transition:border-color .16s ease,background .16s ease}
    .row.is-clickable{cursor:pointer}
    .row.is-clickable:hover{border-color:color-mix(in srgb,var(--accent-2) 55%,var(--line));background:var(--fill-2)}
    .row.is-off{opacity:.66}
    .row.is-off:hover{opacity:1}
    /* Le filet dit l'état, le pictogramme dit la famille : --mark porte la
       couleur de famille quand il y en a une, et retombe sur l'état sinon. */
    .row-mark{display:grid;place-items:center;width:38px;height:38px;flex:none;border-radius:var(--r-sm);background:color-mix(in srgb,var(--mark,var(--state)) 18%,transparent);color:var(--mark,var(--state-ink));font-size:var(--fs-strong);font-weight:950}
    .row-mark svg{display:block;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .row-copy{min-width:0}
    .row-copy b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-strong);font-size:var(--fs-strong)}
    .row-copy span{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:var(--fs-small)}
    .row-tags{display:flex;align-items:center;gap:5px;flex-wrap:wrap;justify-content:flex-end}

    /* — les trois signes d'ouverture : ✎ sur place, ˅ ici même, › une fenêtre — */
    .sign{display:grid;place-items:center;width:26px;height:26px;flex:none;padding:0;border:0;border-radius:var(--r-xs);background:var(--fill-2);color:var(--muted);transition:color .16s ease,background .16s ease}
    .sign svg{display:block;width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .18s ease}
    .row:hover>.sign,.field:hover>.sign,summary:hover>.sign{color:var(--ink-strong);background:var(--fill-3)}
    details[open]>summary>.sign-fold svg{transform:rotate(180deg)}

    /* — le champ en place : une valeur, un clic, on corrige, ça se referme — */
    .fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--gap-sm)}
    .field{position:relative;display:grid;gap:2px;padding:9px 40px 9px 11px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--fill-1);cursor:pointer;transition:border-color .16s ease,background .16s ease}
    .field:hover{border-color:color-mix(in srgb,var(--accent-2) 55%,var(--line));background:var(--fill-2)}
    .field.is-changed{border-left:3px solid var(--state-warn);padding-left:9px}
    .field-label{color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .field-value{color:var(--ink-strong);font-size:var(--fs-strong);font-weight:780}
    .field>.sign{position:absolute;top:50%;right:9px;transform:translateY(-50%)}
    .field-control{display:none}
    .field-hint{color:var(--muted);font-size:var(--fs-small)}
    .field.editing{cursor:default;border-color:#75d1c0;background:color-mix(in srgb,var(--accent-2) 10%,transparent)}
    .field.editing .field-value{display:none}
    .field.editing .field-control{display:block}
    .field.editing .field-control input,.field.editing .field-control select{height:34px;padding:6px 9px;font-size:var(--fs-strong)}
    .field.editing .field-control textarea{min-height:66px;padding:6px 9px;font-size:var(--fs-strong)}

    /* — l'interrupteur d'une ligne de liste ; la ligne complète reste .switch-line — */
    .row-switch{position:relative;display:block;width:34px;height:20px;flex:none;padding:0;border:1px solid var(--line-strong);border-radius:var(--r-pill);background:var(--fill-3);cursor:pointer;transition:background .16s ease,border-color .16s ease}
    .row-switch::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#e7ecf5;box-shadow:0 1px 3px #0006;transition:transform .16s ease}
    .row-switch[aria-checked="true"]{border-color:transparent;background:var(--state-ok)}
    .row-switch[aria-checked="true"]::after{transform:translateX(14px);background:#0d1118}
    .row-switch:hover{filter:none}
    .row-switch:focus-visible{outline:2px solid var(--accent-2);outline-offset:2px}

    /* — les droits d'un compte : la carte-ligne du 3.3 portant l'interrupteur
         du 3.5. La case reste une vraie case, cachée sous le <label> : c'est
         elle que lit `adminPermissionState()`, et c'est son `change` natif qui
         ouvre le bandeau « modifications non enregistrées ». — */
    .permission-rows{display:grid;gap:var(--gap-xs)}
    .permission-row{position:relative;margin:0;cursor:pointer;font-weight:inherit}
    .permission-row>input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
    .permission-row:hover{border-color:color-mix(in srgb,var(--accent-2) 55%,var(--line));background:var(--fill-2)}
    .permission-row:has(input:checked){--state:var(--state-ok);--state-ink:var(--ink-green)}
    .permission-row>input:checked~.row-switch{border-color:transparent;background:var(--state-ok)}
    .permission-row>input:checked~.row-switch::after{transform:translateX(14px);background:#0d1118}
    .permission-row>input:focus-visible~.row-switch{outline:2px solid var(--accent-2);outline-offset:2px}
    .permission-row.is-locked{cursor:default;opacity:.62}
    .permission-row.is-locked .row-switch{opacity:.7}
    .permission-row.is-full{--mark:var(--accent);--state:var(--accent)}

    /* — l'appareil de confiance : même carte-ligne, l'appareil courant marqué
         par son badge plutôt que par une couleur qui dirait un état. — */
    .device-empty{padding:12px;border:1px dashed var(--line);border-radius:var(--r-sm);color:var(--muted);font-size:var(--fs-body);text-align:center}
    #login.resuming .login-card{opacity:0;pointer-events:none;transition:opacity .12s ease}
    .login-trust{display:flex;align-items:flex-start;gap:9px;margin-top:14px;padding:10px 11px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--fill-1);cursor:pointer;font-weight:inherit}
    .login-trust input{width:16px;height:16px;flex:none;margin-top:1px;accent-color:var(--accent-2)}
    .login-trust b{display:block;color:var(--ink-strong);font-size:var(--fs-body)}
    .login-trust small{display:block;margin-top:2px;color:var(--muted);font-size:var(--fs-micro);line-height:1.4}

    /* — les onglets : un seul composant, deux niveaux au maximum — */
    .tabs{display:flex;gap:3px;padding:3px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1);overflow:auto;scrollbar-width:none}
    .tabs::-webkit-scrollbar{display:none}
    .tab{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;padding:8px 13px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--muted);font-size:var(--fs-body);font-weight:800}
    .tab:hover{background:var(--fill-2);color:var(--ink-2);filter:none}
    .tab.active{background:var(--fill-3);color:var(--ink-strong);box-shadow:inset 0 0 0 1px var(--line-strong)}
    .tab svg{display:block;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .tab .tab-count{padding:1px 6px;border-radius:var(--r-pill);background:var(--fill-3);color:var(--muted);font-size:var(--fs-micro)}
    .tab.is-dirty::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--state-warn)}

    /* — la barre de liste : recherche, puces d'état, menus, et toujours le compte — */
    .listbar{display:flex;align-items:center;gap:var(--gap-sm);flex-wrap:wrap;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1)}
    .listbar-search{position:relative;flex:1 1 230px;min-width:180px;display:flex;align-items:center;margin:0}
    .listbar-search svg{position:absolute;left:10px;width:15px;height:15px;fill:none;stroke:var(--muted);stroke-width:2;stroke-linecap:round;pointer-events:none}
    .listbar-search input{height:36px;padding:6px 32px;border-radius:var(--r-sm);font-size:var(--fs-strong)}
    .listbar-clear{position:absolute;right:7px;width:22px;height:22px;padding:0;border:0;border-radius:var(--r-xs);background:var(--fill-3);color:var(--muted);font-size:14px;line-height:1}
    .listbar-clear:hover{filter:none;color:var(--ink-strong)}
    .chips{display:flex;gap:5px;flex-wrap:wrap}
    .chip{padding:6px 11px;width:auto;border:1px solid var(--line);border-radius:var(--r-pill);background:var(--fill-1);color:var(--muted);font-size:var(--fs-small);font-weight:800}
    .chip:hover{filter:none;background:var(--fill-2);color:var(--ink-2)}
    .chip.is-on{border-color:color-mix(in srgb,var(--accent-2) 60%,transparent);background:color-mix(in srgb,var(--accent-2) 16%,transparent);color:var(--ink-accent-2)}
    .chip b{margin-left:5px;opacity:.75;font-weight:850}
    .listbar select{height:36px;width:auto;min-width:130px;padding:6px 9px;border-radius:var(--r-sm);font-size:var(--fs-body)}
    .listbar-count{margin-left:auto;color:var(--muted);font-size:var(--fs-small);font-weight:800;white-space:nowrap}
    .listbar-count b{color:var(--ink-strong)}

    /* — l'en-tête : deux, pas onze — */
    .head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gap-md);flex-wrap:wrap;margin-bottom:var(--gap-sm)}
    .head-copy{min-width:0}
    .head-copy h2{margin:0;color:var(--ink-strong);font-size:var(--fs-page)}
    .head-copy h3{margin:0;color:var(--ink-strong);font-size:var(--fs-title)}
    .head-copy p{margin-top:3px;color:var(--muted);font-size:var(--fs-body)}
    .head-tools{display:flex;align-items:center;gap:var(--gap-xs);flex-wrap:wrap}

    /* — la tuile de chiffre : libellé, valeur, précision — */
    .tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:var(--gap-sm)}
    .tile{padding:11px 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--fill-1)}
    .tile.is-toned{border-left:3px solid var(--state)}
    .tile span{display:block;color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .tile b{display:block;margin-top:4px;color:var(--ink-strong);font-size:19px;line-height:1.1}
    .tile small{display:block;margin-top:3px;color:var(--muted);font-size:var(--fs-small)}

    /* — le bandeau : ce qui doit être lu avant d'agir, un par bloc — */
    .note{display:grid;gap:3px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--state) 40%,var(--line));border-left:3px solid var(--state);border-radius:var(--r-sm);background:color-mix(in srgb,var(--state) 9%,var(--fill-1))}
    .note b{color:var(--ink-strong);font-size:var(--fs-strong)}
    .note p{color:var(--muted);font-size:var(--fs-body)}

    /* — le dépliant : une section de réglages, jamais une ligne de liste — */
    details.fold{margin:0;border:1px solid var(--line);border-left:3px solid var(--state);border-radius:var(--r-sm);background:var(--fill-1);overflow:hidden}
    details.fold+details.fold{margin-top:var(--gap-xs)}
    details.fold>summary{list-style:none;display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:var(--gap-sm);padding:9px 11px;color:inherit;font-weight:inherit;font-size:inherit}
    details.fold>summary::before{display:none}
    details.fold>summary::-webkit-details-marker{display:none}
    details.fold[open]>summary{border-bottom:1px solid var(--line);background:var(--fill-2)}
    details.fold .fold-body{padding:11px}

    /* ── Vague 1 : les repères d'état lisent tous --state ───────────────
       .badge garde son nom (117 emplois, et les tests s'y appuient) mais
       prend le dessin de .tag : même filet, même fond, même encre. Les
       trois modificateurs ok/warn/bad ne font plus que poser le ton. */
    .badge{--state:var(--state-neutral);--state-ink:var(--ink-2);border-color:color-mix(in srgb,var(--state) 42%,transparent);background:color-mix(in srgb,var(--state) 13%,transparent);color:var(--state-ink)}
    .badge.ok{--state:var(--state-ok);--state-ink:var(--ink-green)}
    .badge.warn{--state:var(--state-warn);--state-ink:var(--ink-amber)}
    .badge.bad{--state:var(--state-bad);--state-ink:var(--ink-red)}
    html[data-theme="light"] .badge{border-color:color-mix(in srgb,var(--state) 38%,transparent);background:color-mix(in srgb,var(--state) 11%,white);color:var(--state-ink)}
    html[data-theme="light"] .badge.ok,html[data-theme="light"] .badge.warn,html[data-theme="light"] .badge.bad{color:var(--state-ink)}

    /* Les cinq points d'état avaient cinq dessins et cinq palettes : un
       seul dessin désormais, et la même lecture de la couleur. */
    .admob-dot,.beta-mail-dot,.status-dot,.push-route-state,.server-verdict i{width:9px;height:9px;flex:0 0 9px;border-radius:50%;background:var(--state);box-shadow:0 0 0 3px color-mix(in srgb,var(--state) 22%,transparent)}
    .admob-dot{--state:var(--state-warn)}
    .admob-dot.on{--state:var(--state-ok)}
    .beta-mail-dot{--state:var(--state-warn)}
    .beta-mail-dot.on{--state:var(--state-ok)}
    .beta-mail-dot.off{--state:var(--state-bad)}
    .status-chip .status-dot{--state:var(--state-neutral)}
    .status-chip.ok .status-dot{--state:var(--state-ok)}
    .status-chip.warn .status-dot{--state:var(--state-warn)}
    .status-chip.bad .status-dot{--state:var(--state-bad)}
    .push-route-state{--state:var(--state-neutral)}
    .push-route-state.on{--state:var(--state-ok)}
    .server-verdict i{--state:var(--state-ok)}
    .server-verdict.warn i{--state:var(--state-warn)}
    .server-verdict.bad i{--state:var(--state-bad)}

    /* Le conseil d'entretien : même filet que partout ailleurs. */
    .server-advice-item{border-left-color:var(--state);--state:var(--state-neutral)}
    .server-advice-item.warn{--state:var(--state-warn)}
    .server-advice-item.bad{--state:var(--state-bad)}

    /* ── Le filet ne dit plus que l'état ────────────────────────────────
       Défis et Tutoriel coloraient leur filet gauche par période et par
       chapitre : le même vert voulait dire « en production » sur la page
       Publicités et « quotidien » ici. La couleur de famille reste, mais
       sur le pictogramme — qui la portait déjà — et le filet redevient
       libre de dire ce qui compte : cette ligne est-elle coupée ? */
    .challenge-editor{border-left-color:var(--state);--state:var(--state-neutral)}
    .challenge-editor.is-inactive{--state:var(--state-bad);border-left-color:var(--state)}
    .tutorial-step-card{border-left-color:var(--state);--state:var(--state-neutral)}
    .tutorial-step-card.is-off{--state:var(--state-bad);border-left-color:var(--state);opacity:.62}

    /* ── Le filet d'état survit au thème clair ──────────────────────────
       Les exceptions du thème clair posent `border-color` — le raccourci,
       donc les quatre côtés — pour donner aux cartes leur cadre gris
       (`html[data-theme="light"] .mini-card{…border-color:#dbe3ec}`, et sa
       jumelle pour les cartes de la page Serveur). Avec `html` + l'attribut
       de thème + la classe, elles pèsent (0,2,1) et écrasent le filet
       coloré de `.admob-platform.is-test`, qui n'a que ses deux classes
       (0,2,0). Résultat : orange et vert existaient en sombre et
       disparaissaient en clair.

       On ne peut pas s'en sortir par la valeur — un `border-color` gagnant
       écrase `border-left-color` quelle que soit la façon de le calculer.
       Il faut donc reprendre la main avec le même poids. `var(--state)`
       suffit là où la carte pose déjà son état : la variante se retrouve
       toute seule. */
    html[data-theme="light"] .admob-platform.is-production{border-left-color:var(--green)}
    html[data-theme="light"] .admob-platform.is-test{border-left-color:var(--amber)}
    html[data-theme="light"] .server-advice-item{border-left-color:var(--state)}
    html[data-theme="light"] .challenge-editor{border-left-color:var(--state)}
    html[data-theme="light"] .economy-timeline-change{border-left-color:var(--green)}
    html[data-theme="light"] .economy-timeline-change.sink{border-left-color:var(--amber)}
    /* La carte de défi réellement affichée est la « stage card », qui avait
       supprimé son filet et fait porter l'état par --card-tone — la teinte
       du palier. Le palier redevient une famille, l'état reprend le filet. */
    .challenge-stage-card{border-left:3px solid var(--state);--state:var(--state-neutral)}
    .challenge-stage-card.is-inactive{--card-tone:#68d391;--state:var(--state-bad);opacity:.62;filter:none}
    .challenge-stage-card.tier-2.is-inactive{--card-tone:#d6a95b}
    .challenge-stage-card.is-inactive:hover,.challenge-stage-card.is-inactive[open]{opacity:.92;filter:none}

    /* ── Vague 2 : un seul interrupteur ─────────────────────────────────
       Trois dessins coexistaient pour le même geste, avec trois verts
       différents. Les balisages restent (ils sont structurellement
       identiques) ; le dessin, lui, devient unique — et le vert d'un
       interrupteur allumé est celui de l'état « actif », comme partout. */
    .switch-line input:checked+.switch-ui{background:var(--state-ok)}
    .challenge-switch-ui{width:46px;height:26px;flex:0 0 46px}
    .challenge-switch-ui::after{width:20px;height:20px}
    .challenge-switch input:checked+.challenge-switch-ui{background:var(--state-ok)}
    .challenge-switch input:checked+.challenge-switch-ui::after{transform:translateX(20px)}
    .tutorial-step-switch[aria-checked="true"] .tutorial-switch-ui{background:var(--state-ok)}
    /* L'interrupteur d'un envoi automatique vit maintenant dans le corps du
       dépliant, sur la ligne complète : il n'a plus à s'étaler en grille. */
    .push-route-body>.switch-line{margin:0 0 10px}
    /* L'envoi automatique est un dépliant de liste : c'est l'une des deux
       exceptions assumées (on modifie beaucoup de lignes d'affilée). Fermé,
       il prend donc l'anatomie de la carte-ligne — filet d'état à gauche,
       chevron à droite — pour se lire comme tout le reste. */
    .push-route-item{border-left:3px solid var(--state);--state:var(--state-neutral)}
    .push-route-item>summary{gap:var(--gap-sm);list-style:none}
    /* La carte dessinait son propre chevron en ::after ; c'est désormais le
       .sign partagé qui le porte, avec la même boîte que partout ailleurs. */
    .push-route-item>summary::after{display:none}
    .push-route-item>summary::before{display:none}
    .push-route-item>summary>.sign{margin-left:auto}

    /* ── Le champ modifié ───────────────────────────────────────────────
       Un champ nu ne dit pas qu'il a changé : c'est ce qui manquait le
       plus. Tant qu'une zone n'est pas enregistrée, ses champs touchés
       portent le filet ambre — la même écriture que .field.is-changed. */
    input.is-changed,select.is-changed,textarea.is-changed{border-left:3px solid var(--state-warn)}
    .switch-line.is-changed{border-left:3px solid var(--state-warn)}

    /* ── Deux outils qui manquaient à la boîte ──────────────────────────
       .icon-button : l'action discrète d'un bloc — elle vit dans le cadre
       qu'elle concerne, pas dans la barre d'outils de la page, et se dit
       par un pictogramme. Elle lit --state, donc une action dangereuse est
       rouge sans qu'on ait à l'écrire.
       .action-button : le bouton qui rend compte de ce qu'il fait — au
       repos, pendant, puis réussi. Sans ça, une action qui dure laisse
       croire qu'il ne s'est rien passé, et on reclique. */
    .icon-button{display:grid;place-items:center;width:32px;height:32px;flex:none;padding:0;border:1px solid color-mix(in srgb,var(--state) 38%,var(--line));border-radius:var(--r-sm);background:var(--fill-2);color:var(--state-ink);transition:background .16s ease,border-color .16s ease,color .16s ease}
    .icon-button svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
    .icon-button:hover{filter:none;background:color-mix(in srgb,var(--state) 16%,transparent);border-color:color-mix(in srgb,var(--state) 60%,transparent)}
    .icon-button:focus-visible{outline:2px solid var(--accent-2);outline-offset:2px}

    .action-button{display:inline-flex;align-items:center;gap:7px;width:auto;transition:background .2s ease,border-color .2s ease,color .2s ease}
    .action-button .action-icon{display:grid;place-items:center;width:16px;height:16px;flex:none}
    .action-button .action-icon svg{display:block;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
    .action-button[data-phase="busy"]{pointer-events:none;opacity:.85}
    .action-button[data-phase="busy"] .action-icon svg{animation:actionSpin .9s linear infinite;transform-origin:50% 50%}
    .action-button[data-phase="done"]{background:var(--state-ok);border-color:color-mix(in srgb,var(--state-ok) 65%,white);color:#0d1118;animation:actionDone .46s cubic-bezier(.2,.9,.2,1)}
    .action-button[data-phase="done"]:hover{filter:none}
    .action-button[data-phase="done"] .action-icon svg path{stroke-dasharray:24;stroke-dashoffset:24;animation:actionCheck .4s .05s ease-out forwards}
    .action-button[data-phase="failed"]{background:var(--state-bad);border-color:color-mix(in srgb,var(--state-bad) 65%,white);color:#fff}
    @keyframes actionSpin{to{transform:rotate(360deg)}}
    @keyframes actionDone{0%{transform:scale(.95)}55%{transform:scale(1.04)}100%{transform:scale(1)}}
    @keyframes actionCheck{to{stroke-dashoffset:0}}
    @media(prefers-reduced-motion:reduce){
      .action-button[data-phase="busy"] .action-icon svg,.action-button[data-phase="done"],.action-button[data-phase="done"] .action-icon svg path{animation:none}
      .action-button[data-phase="done"] .action-icon svg path{stroke-dashoffset:0}
    }

    /* Le cadre « Console reliée » porte lui-même son action : le bouton
       Déconnecter n'a plus à occuper la barre d'outils de la page, où il
       voisinait la période affichée sans rapport avec elle. */
    .admob-account{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gap-md)}
    .admob-account-copy{min-width:0}

    /* ── Vague 3 : une seule barre de liste ─────────────────────────────
       Huit pages listaient, huit barres différentes. Les puces de filtre
       étaient dessinées par quatre codes distincts — groupes de profils,
       entonnoir bêta, statuts d'assistance, familles de bannières : elles
       gardent leur nom, elles prennent le dessin de .chip. */
    .cat-filter,.beta-step-card,.inapp-filter{
      padding:6px 11px;width:auto;
      border:1px solid var(--line);border-radius:var(--r-pill);
      background:var(--fill-1);color:var(--muted);
      font-size:var(--fs-small);font-weight:800;
    }
    .cat-filter:hover,.beta-step-card:hover,.inapp-filter:hover{filter:none;background:var(--fill-2);color:var(--ink-2)}
    .cat-filter.active,.beta-step-card.active,.inapp-filter.is-on{
      border-color:color-mix(in srgb,var(--accent-2) 60%,transparent);
      background:color-mix(in srgb,var(--accent-2) 16%,transparent);
      color:var(--ink-accent-2);
    }
    /* L'entonnoir bêta était une grille de cartes : il redevient une puce,
       et son compte tient dans la puce plutôt que sur trois lignes. */
    .beta-funnel{display:flex;gap:5px;flex-wrap:wrap;margin:0}
    .beta-step-card{display:inline-flex;align-items:center;gap:6px;min-height:0;text-align:left}
    .beta-step-card .beta-step-icon{display:none}
    .beta-step-card .beta-step-text{display:inline-flex;align-items:baseline;gap:5px;flex-direction:row-reverse}
    .beta-step-card .beta-step-text strong{opacity:.75;font-size:var(--fs-small);font-weight:850}
    .beta-step-card .beta-step-text span{font-size:var(--fs-small);font-weight:800}
    /* Le point de couleur d'un groupe de profils reste : c'est une famille. */
    .cat-filter{display:inline-flex;align-items:center;gap:6px}
    .cat-filter .cat-dot{width:7px;height:7px;flex:none;border-radius:50%;background:var(--group-color,var(--muted))}
    .listbar .cat-manage{flex:0 0 auto}
    /* La barre respire au-dessus de la liste qu'elle filtre. */
    .listbar+*{margin-top:var(--gap-md)}
    .listbar .switch-line{flex:1 1 260px;margin:0;padding:7px 10px;min-width:0}
    .listbar .switch-line .switch-sub{font-size:var(--fs-micro)}

    /* ── Vague 3b : une anatomie pour toutes les lignes de liste ────────
       Quatorze pages dessinaient la même chose de quatorze façons. Les
       balisages restent — ils portent des identifiants, des gestionnaires
       et des chaînes que les tests épinglent — mais ils prennent tous le
       même cadre : filet d'état, pictogramme, titre, sous-titre gris,
       repères, ouverture. Ce qui change d'une liste à l'autre, c'est ce
       qu'on y met, plus la façon de le poser. */
    .profile,.support-ticket,.beta-row,.inapp-row,.schedule-card,
    .bot-card,.home-layout-block,.group-row,.admin-friend-row,.game-history-card{
      padding:9px 11px;
      border:1px solid var(--line);
      border-left:3px solid var(--state);
      border-radius:var(--r-sm);
      background:var(--fill-1);
      transition:border-color .16s ease,background .16s ease;
    }
    .support-ticket:hover,.beta-row:hover,.inapp-row:hover,.schedule-card:hover,
    .group-row:hover,.game-history-card:hover,.profile:hover{
      filter:none;
      border-color:color-mix(in srgb,var(--accent-2) 55%,var(--line));
      background:var(--fill-2);
    }
    .support-ticket.active,.group-row.active,.game-history-card.active,.profile.active{
      border-color:color-mix(in srgb,var(--accent-2) 70%,transparent);
      background:color-mix(in srgb,var(--accent-2) 12%,transparent);
    }
    .support-ticket:hover,.support-ticket.active,.profile:hover,.profile.active{border-left-color:var(--state)}
    /* Coupé, retiré, en retard : le filet le dit, comme partout ailleurs. */
    .inapp-row.is-off,.schedule-card.is-off,.home-layout-block.off{--state:var(--state-bad);opacity:.66}
    .inapp-row.is-off:hover,.schedule-card.is-off:hover,.home-layout-block.off:hover{opacity:1}
    /* Le filet d'un profil dit une seule chose : ce joueur est là, maintenant.
       Vert et respirant tant qu'il est connecté, gris dès qu'il ne l'est plus.

       La lueur est dans le filet, pas autour : `.profiles` défile en
       `overflow:auto`, et une ombre portée à gauche de la ligne s'y faisait
       rogner tout en réveillant une barre de défilement horizontale. C'est
       donc la couleur du filet qui monte et redescend — une peinture sur
       trois pixels, sans débord ni recalcul de mise en page.

       L'animation l'emporte aussi sur le `border-color` du survol et de la
       ligne ouverte : le filet reste vert là où le cadre vire au turquoise,
       sans qu'on ait à surenchérir en spécificité. */
    .profile.is-online{
      --state:var(--state-ok);
      animation:profile-online-pulse 1.3s ease-in-out infinite alternate;
    }
    @keyframes profile-online-pulse{
      from{border-left-color:color-mix(in srgb,var(--state-ok) 38%,var(--fill-1))}
      to{border-left-color:var(--state-ok)}
    }
    /* Sans mouvement, le filet garde la pleine lumière au lieu de clignoter. */
    @media(prefers-reduced-motion:reduce){
      .profile.is-online{animation-duration:1ms;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards}
    }

    /* Le pictogramme : une seule taille, une seule boîte. */
    .beta-row .beta-avatar,.group-row .group-dot,.admin-friend-row .admin-friend-avatar,
    .inapp-row .inapp-icon,.schedule-card .schedule-hour,.home-layout-block .home-layout-rank{
      display:grid;place-items:center;
      width:38px;height:38px;flex:none;
      border-radius:var(--r-sm);
      background:color-mix(in srgb,var(--mark,var(--state)) 18%,transparent);
      color:var(--mark,var(--state-ink));
      font-size:var(--fs-strong);font-weight:950;
    }
    /* La couleur d'un groupe de profils est une famille : elle va au pictogramme. */
    .group-row{--mark:var(--group-color)}
    .schedule-card .schedule-hour{font-size:var(--fs-body);letter-spacing:-.01em}

    /* Le titre et son sous-titre gris, à la même échelle sur les onze listes. */
    .profile-row .profile-title,.support-ticket b,.beta-row .beta-mail>span:first-child,
    .inapp-row .inapp-open b,.schedule-card .schedule-copy b,.group-row b,
    .admin-friend-row .admin-friend-name,.home-layout-block b{
      color:var(--ink-strong);font-size:var(--fs-strong);font-weight:800;
    }
    .profile-row .muted,.support-ticket .muted,.beta-row .beta-meta,
    .schedule-card .schedule-copy span,.group-row .muted,.home-layout-block .muted{
      color:var(--muted);font-size:var(--fs-small);
    }

    /* ── Vague 4 : le rangement ─────────────────────────────────────────
       Onze classes d'en-tête pour deux besoins, douze grilles de chiffres
       pour un seul. Les noms restent, le dessin devient unique. */

    /* L'en-tête de panneau : .economy-panel-head (26 emplois) et
       .panel-head (14) ne différaient que par 4 px de marge. */
    .economy-panel-head,.notification-section-head,.stats-priority-head,
    .server-review-head,.admob-revenue-head,.inapp-text-head{
      display:flex;align-items:flex-start;justify-content:space-between;
      gap:var(--gap-md);flex-wrap:wrap;margin-bottom:var(--gap-sm);
    }

    /* La tuile de chiffre : libellé en capitales, valeur, précision. Les
       douze grilles s'alignent sur un seul cadre et une seule échelle. */
    .summary-card,.league-kpi,.server-metric,.tutorial-stat,.stats-snapshot-card{
      min-width:0;padding:11px 12px;
      border:1px solid var(--line);border-radius:var(--r-sm);
      background:var(--fill-1);overflow:hidden;
    }
    .summary-card>span:first-child,.league-kpi>span:first-child,
    .server-metric>span:first-child,.tutorial-stat>span:first-child{
      display:block;color:var(--muted);
      font-size:var(--fs-micro);font-weight:850;
      text-transform:uppercase;letter-spacing:.05em;
    }
    .summary-card>b,.league-kpi>b,.server-metric>b,.tutorial-stat>b{
      display:block;margin-top:4px;color:var(--ink-strong);
      font-size:19px;line-height:1.1;
    }
    .summary-card>small,.league-kpi>small,.server-metric>small,.tutorial-stat>small{
      display:block;margin-top:3px;color:var(--muted);font-size:var(--fs-small);
    }
    .summary-strip,.stats-snapshot,.tutorial-overview,.league-kpis,.server-metrics{
      display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));
      gap:var(--gap-sm);margin-bottom:var(--gap-md);
    }

    /* Le bandeau : .league-note avait son cadre et sa teinte à elle. */
    .league-note{
      display:grid;gap:3px;margin-top:var(--gap-md);padding:10px 12px;
      border:1px solid color-mix(in srgb,var(--state) 40%,var(--line));
      border-left:3px solid var(--state);border-radius:var(--r-sm);
      background:color-mix(in srgb,var(--state) 9%,var(--fill-1));
      --state:var(--state-ok);
    }
    .league-note.shield{--state:var(--state-neutral)}
    .league-note>span[aria-hidden]{display:none}
    .league-note b{color:var(--ink-strong);font-size:var(--fs-strong)}
    .league-note p{color:var(--muted);font-size:var(--fs-body)}

    /* ── Les onglets de panneau ne tronquent plus ───────────────────────
       La bande forçait cinq onglets dans une seule ligne, entre 154 et
       260 px : le titre était coupé sur quatre d'entre eux, la description
       sur cinq — « Récompenses de fin … », « Opérations exce… ». Un onglet
       dont on ne lit pas le nom ne sert à rien. Ils prennent désormais la
       largeur de leur texte et la bande passe à la ligne : rien n'est
       coupé, rien n'est caché derrière un défilement qu'on ne voit pas. */
    .detail-tabs{flex-wrap:wrap}
    .detail-tab{flex:0 0 auto;max-width:none}
    /* Sous 850 px la description disparaît déjà : le titre seul tient. */

    /* Les exemples de requêtes SQL portent des phrases entières —
       « Pièces créées et détruites sur 7 jours » — dans un menu qui en
       montrait la moitié. Il prend sa ligne quand il en a besoin. */
    #serverQueryExample{min-width:min(520px,100%)}

    /* Le cadre d'une ligne de profil, c'est .profile ; .profile-row n'est que
       la mise en page à l'intérieur. Lui avoir donné un cadre à elle aussi
       dessinait un rectangle dans un rectangle, et mangeait la largeur utile.
       La ligne reprend donc l'arrondi et l'aération des dix autres listes. */
    .profile{border-radius:var(--r-sm)}
    .profile-row{padding:0;border:0;background:none}

    /* Le choix du type de cadeau coupait ses trois sous-titres dès que la
       colonne se resserrait — « Cosmétique ou obje… ». Ils passent à la ligne
       plutôt que de se faire tronquer. */
    .gift-kinds{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
    .gift-kind-copy span{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.25}

    /* ── Manches et plis : du texte, pas des boutons ────────────────────
       Une partie de treize manches faisait treize plaques « Manche 1 »…
       « Manche 13 », et autant pour les plis : le mot était répété à
       chaque fois, la bande débordait de la fenêtre par la droite, et le
       cadre de chaque plaque pesait plus que le chiffre qu'il portait.
       On lit maintenant « Manches 1 2 3 4 » — le mot une fois, les
       numéros cliquables, un séparateur discret entre eux. */
    .review-round-tabs,.review-trick-tabs{
      display:flex;align-items:baseline;gap:0;flex-wrap:wrap;
      overflow:visible;padding:0;margin-top:6px;
    }
    .review-pick-label{
      margin-right:8px;color:var(--muted);
      font-size:var(--fs-micro);font-weight:850;
      text-transform:uppercase;letter-spacing:.05em;
    }
    .review-round-tab,.review-trick-tab{
      position:relative;display:inline-flex;align-items:baseline;gap:3px;
      width:auto;min-width:0;padding:3px 7px;margin:0;
      border:0;border-radius:var(--r-xs);background:none;box-shadow:none;
      color:var(--ink-2);font-size:var(--fs-strong);font-weight:800;
      font-variant-numeric:tabular-nums;
      transition:color .14s ease,background .14s ease;
    }
    /* Le séparateur vit dans le style, pas dans le balisage : aucun
       caractère à sélectionner ni à lire pour un lecteur d'écran. */
    .review-round-tab+.review-round-tab::before,
    .review-trick-tab+.review-trick-tab::before{
      content:"·";position:absolute;left:-4px;
      color:var(--line-strong);font-weight:600;
    }
    .review-round-tab:hover,.review-trick-tab:hover{
      filter:none;background:var(--fill-2);color:var(--ink-strong);
    }
    .review-round-tab:focus-visible,.review-trick-tab:focus-visible{
      outline:2px solid var(--accent-2);outline-offset:1px;
    }
    .review-round-tab.active,.review-trick-tab.active{
      background:none;color:var(--ink-accent);
      text-decoration:underline;text-underline-offset:5px;
      text-decoration-thickness:2px;
    }
    /* Le nombre d'actions d'un pli reste lisible, mais cesse d'être une
       pastille : un exposant gris suffit à repérer les plis longs. */
    .review-trick-count{
      display:inline;min-width:0;height:auto;padding:0;border-radius:0;
      background:none;color:var(--muted);
      font-size:var(--fs-micro);font-weight:700;vertical-align:super;
    }
    .review-trick-tab.active .review-trick-count{color:var(--ink-accent)}

    /* Preuve des pubs récompensées : l'URL à recopier dans la console AdMob,
       puis la part vérifiée qui autorise à passer en « exigée ». */
    .verification-callback{
      display:grid;gap:5px;margin:10px 0;
    }
    .verification-callback span{
      color:var(--muted);font-size:var(--fs-micro);font-weight:850;
      text-transform:uppercase;letter-spacing:.04em;
    }
    .verification-callback code{
      overflow-wrap:anywhere;
      font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
      color:var(--ink-strong);
    }
    .verification-summary{margin-top:10px}
    .verification-summary table{margin-top:8px}

    /* ══════════════════════════════════════════════════════════════════
       L'ASSISTANCE — la file, le dock, et tout ce qui reste replié
       Deux outils neufs sortent d'ici parce qu'ils ne servent pas qu'à
       cette page : le **dock** (les dossiers ouverts pendant le travail)
       et la **liste volante** (un menu qui se découvre). `.var-menu` et
       `.profile-picker` font déjà ce second travail à leur façon ; ils
       viendront s'y ranger, pas dans cette vague.
       ══════════════════════════════════════════════════════════════════ */

    /* — Le dock : ce sur quoi on travaille, à portée de clic —
       Il ne navigue pas, il **porte l'état du travail** : un ticket dont la
       réponse est commencée garde son brouillon et le dit par un point ambre.
       C'est ce qui le distingue d'une rangée d'onglets. */
    .dock{display:flex;align-items:center;gap:var(--gap-xs);margin-bottom:var(--gap-md);padding:5px 6px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--fill-1);overflow-x:auto;scrollbar-width:none}
    .dock::-webkit-scrollbar{display:none}
    .dock[hidden]{display:none}
    .dock-item{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;max-width:240px;padding:0 4px 0 9px;border:1px solid transparent;border-radius:var(--r-sm);transition:background .16s ease,border-color .16s ease}
    .dock-item:hover{background:var(--fill-2)}
    .dock-item.is-active{border-color:color-mix(in srgb,var(--accent-2) 55%,transparent);background:color-mix(in srgb,var(--accent-2) 13%,transparent)}
    .dock-item .dot{width:7px;height:7px;box-shadow:none}
    .dock-open{display:inline-flex;align-items:center;gap:7px;width:auto;min-width:0;min-height:30px;padding:0;border:0;background:none;color:var(--muted);font-size:var(--fs-body);font-weight:800;box-shadow:none}
    .dock-open:hover{filter:none;color:var(--ink-strong)}
    .dock-item.is-active .dock-open{color:var(--ink-strong)}
    .dock-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .dock-draft{width:6px;height:6px;flex:none;border-radius:50%;background:var(--state-warn)}
    .dock-close{display:grid;place-items:center;width:20px;height:20px;flex:none;padding:0;border:0;border-radius:var(--r-xs);background:none;color:var(--muted);font-size:15px;line-height:1;box-shadow:none}
    .dock-close:hover{filter:none;background:var(--fill-3);color:var(--ink-strong)}
    .dock-clear{margin-left:auto;flex:0 0 auto;width:auto;min-height:26px;padding:3px 9px;border:0;background:none;color:var(--muted);font-size:var(--fs-small);font-weight:800;box-shadow:none}
    .dock-clear:hover{filter:none;color:var(--ink-strong)}

    /* — La liste volante : posée à la racine du document, donc jamais rognée
         par un `overflow`, refermée au clic dehors comme à Échap. — */
    .pop{position:absolute;z-index:60;min-width:196px;max-width:290px;padding:5px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--panel);box-shadow:var(--shadow)}
    .pop[hidden]{display:none}
    .pop-title{padding:6px 9px 4px;color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .pop-item{display:grid;gap:2px;width:100%;min-height:0;padding:7px 9px;border:0;border-radius:var(--r-xs);background:none;color:var(--ink-2);text-align:left;font-size:var(--fs-body);font-weight:780;box-shadow:none}
    .pop-item:hover,.pop-item.focus{filter:none;background:var(--fill-3);color:var(--ink-strong)}
    .pop-item span{overflow:hidden;color:var(--muted);font-size:var(--fs-small);font-weight:600;text-overflow:ellipsis;white-space:nowrap}
    .pop-item.is-danger{color:var(--ink-red)}
    .pop-item.is-danger:hover,.pop-item.is-danger.focus{background:color-mix(in srgb,var(--state-bad) 16%,transparent);color:var(--ink-red)}
    .pop-sep{height:1px;margin:4px 6px;background:var(--line)}
    .pop-empty{padding:9px;color:var(--muted);font-size:var(--fs-body);text-align:center}

    /* — La file : des groupes qui se replient, et une ligne qui tient en une
         bulle au plus. Le filet dit l'attente, le pictogramme dit la famille,
         l'aperçu dit ce que le joueur a écrit. Le reste — nombre de messages,
         dernier auteur, statut — se lit dans le groupe et dans l'aperçu. — */
    .support-list{display:grid;gap:0;max-height:calc(100vh - 214px);overflow:auto;padding-right:2px}
    .support-group{margin:0;border:0;border-radius:0;background:none;overflow:visible}
    .support-group+.support-group{margin-top:var(--gap-md)}
    /* Portée par `#supportRows` : la feuille du thème clair repeint `summary`
       en ambre avec `html[data-theme="light"] summary`, plus spécifique qu'une
       simple classe. L'en-tête de groupe est un intertitre, pas un dépliant de
       réglages : il reste gris dans les deux thèmes. */
    #supportRows .support-group>summary{list-style:none;display:flex;align-items:center;gap:7px;padding:2px 2px 7px;color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.07em}
    #supportRows .support-group>summary::-webkit-details-marker{display:none}
    #supportRows .support-group>summary::before{content:"";width:6px;height:6px;flex:none;margin:0;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);transition:transform .18s ease}
    #supportRows .support-group[open]>summary::before{transform:rotate(45deg) translateY(-2px)}
    .support-group-count{margin-left:auto;letter-spacing:0}
    .support-group-body{display:grid;gap:var(--gap-xs)}
    .support-row{position:relative}
    .support-ticket{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--gap-sm);width:100%;padding-right:34px;text-align:left;color:var(--ink);font-weight:500}
    /* Le pictogramme dit la famille, jamais l'état : il reste gris même quand
       le filet passe à l'ambre ou au rouge. Une seule chose porte la couleur. */
    .support-ticket .row-mark,.support-fold-summary~.row-mark,.fold>summary>.row-mark{--mark:var(--muted)}
    .support-ticket .row-mark{width:34px;height:34px}
    .support-ticket .row-mark svg{width:18px;height:18px}
    .support-wait{color:var(--muted);font-size:var(--fs-small);font-weight:800;white-space:nowrap}
    .support-ticket[data-state="bad"] .support-wait{color:var(--ink-red)}
    .support-who{display:grid;place-items:center;width:22px;height:22px;flex:none;border-radius:50%;background:var(--fill-3);color:var(--ink-2);font-size:var(--fs-micro);font-weight:900}
    /* Les actions d'une ligne ne s'affichent qu'au survol — et au focus, sinon
       elles n'existeraient pas au clavier. Sans souris, elles restent là. */
    .support-more{position:absolute;top:50%;right:7px;transform:translateY(-50%);opacity:0;transition:opacity .16s ease,color .16s ease,background .16s ease}
    .support-row:hover .support-more,.support-more:focus-visible,.support-more[aria-expanded="true"]{opacity:1}
    @media(hover:none){.support-more{opacity:1}}
    .support-list-empty{padding:22px 12px;color:var(--muted);font-size:var(--fs-body);text-align:center}
    .support-truncated{margin-top:var(--gap-sm);color:var(--muted);font-size:var(--fs-small);text-align:center}

    /* — Le détail : l'échange d'abord, le classement et le contexte repliés.
         Ce qu'on fait vingt fois par jour est sous les yeux ; ce qu'on fait
         une fois par ticket demande un clic. — */
    .support-detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--gap-md);flex-wrap:wrap;padding-bottom:var(--gap-sm);margin-bottom:0;border-bottom:1px solid var(--line)}
    .support-detail-head>div:first-child{flex:1 1 240px;min-width:0}
    .support-detail-head h3{margin:0;color:var(--ink-strong);font-size:var(--fs-page);line-height:1.2}
    .support-detail-who{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:5px;color:var(--muted);font-size:var(--fs-body)}
    .support-detail-tools{display:flex;align-items:center;gap:var(--gap-xs);flex:0 0 auto}
    .support-detail-tools select{width:auto;min-width:150px;height:34px;padding:6px 9px;font-size:var(--fs-body)}
    .support-folds{display:grid;gap:var(--gap-xs);margin:var(--gap-md) 0}
    .support-fold-summary{min-width:0;color:var(--muted);font-size:var(--fs-small);font-weight:750}
    .support-fold-summary b{display:block;color:var(--ink-strong);font-size:var(--fs-strong);font-weight:800}
    .support-tag-picker{display:flex;gap:5px;flex-wrap:wrap;margin-top:var(--gap-xs)}
    .support-assign{display:flex;gap:var(--gap-xs);align-items:center}
    .support-assign select{flex:1 1 auto;min-width:0}
    .support-assign button{flex:0 0 auto;width:auto}
    .support-context-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--gap-sm)}
    .support-context-grid>div{min-width:0}
    .support-context-grid span{display:block;color:var(--muted);font-size:var(--fs-micro);font-weight:850;text-transform:uppercase;letter-spacing:.05em}
    .support-context-grid b{display:block;margin-top:2px;overflow-wrap:anywhere;color:var(--ink-strong);font-size:var(--fs-body);font-weight:780}

    /* Deux voix, sans deux teintes : l'assistance porte le filet turquoise et
       un fond à peine plus clair, le joueur reste sur la carte nue. */
    .support-thread{display:grid;gap:var(--gap-sm);margin:var(--gap-md) 0}
    .support-message{padding:10px 12px;border:1px solid var(--line);border-left:3px solid var(--line-strong);border-radius:var(--r-sm);background:var(--fill-1)}
    .support-message.admin{border-left-color:color-mix(in srgb,var(--accent-2) 70%,transparent);background:var(--fill-2)}
    .support-message.player{border-left-color:var(--line-strong);background:var(--fill-1)}
    .support-message-head{display:flex;gap:8px;justify-content:space-between;align-items:center;margin-bottom:5px}
    .support-message-head b{color:var(--ink-strong);font-size:var(--fs-strong)}
    .support-message p{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink-2);font-size:var(--fs-strong);line-height:1.45}
    .support-compose{display:grid;gap:var(--gap-sm);margin-top:var(--gap-md);padding-top:var(--gap-md);border-top:1px solid var(--line)}
    .support-compose-head{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-sm);flex-wrap:wrap}
    .support-compose-head label{margin:0}
    .support-compose-actions{display:flex;align-items:center;gap:var(--gap-sm);flex-wrap:wrap}
    .support-compose-actions .muted{margin-right:auto;font-size:var(--fs-small)}
    .support-compose-actions button{width:auto}
    .support-send-hint{color:var(--muted);font-size:var(--fs-micro);font-weight:800}
    /* Le destinataire de la barre de variables est déjà nommé dans l'en-tête du
       ticket : son rappel automatique ferait doublon sous la zone de réponse. */
    .support-compose .profile-identity-resolver{display:none}

    /* La modale des modèles : chacun est un dépliant, son nom dans le sommaire. */
    #supportTemplatesModal .economy-panel-head>div{flex:1 1 240px;min-width:0}
    #supportTemplatesModal .economy-panel-head>.muted{flex:0 0 auto;font-size:var(--fs-small);font-weight:800}
    .support-template-row{display:grid;gap:var(--gap-xs)}
    .support-template-row input{height:34px}
    .support-tag-chip{display:inline-flex;align-items:center;gap:6px}
    .support-tag-chip .dock-close{width:16px;height:16px;font-size:13px}

    @media(max-width:850px){
      .support-list{max-height:none}
      .support-detail-head{display:grid}
      .support-detail-tools{display:grid;grid-template-columns:minmax(0,1fr) auto}
      .support-detail-tools select{width:100%;min-width:0}
      .support-ticket{padding-right:30px}
      .support-compose-actions{display:grid}
      .support-compose-actions button{width:100%}
      .support-compose-actions .muted{margin-right:0}
    }

    /* Une échelle lisible sur les écrans compacts, sans dilater la console. */
    :root{
      --fs-micro:11px;
      --fs-small:12px;
      --fs-body:13px;
      --fs-strong:14px;
    }
    .nav{
      scrollbar-gutter:stable;
      scrollbar-color:color-mix(in srgb,var(--accent-2) 55%,transparent) transparent;
    }
    .nav::-webkit-scrollbar{width:7px}
    .nav::-webkit-scrollbar-thumb{
      border-radius:999px;
      background:color-mix(in srgb,var(--accent-2) 55%,transparent);
    }
    .nav-group summary{font-size:11.5px}
    .nav button{font-size:var(--fs-body)}
    /* La barre collante est l'unique commande de sauvegarde des formulaires. */
    #app :is([data-save-settings],[data-save-admob],[data-save-server],#saveChallenges,#saveTutorial,#saveNotificationSettings,#savePushSchedules,#saveInAppNotifications,#saveAdminAccount){display:none!important}
    .settings-actions:has(>[data-save-settings]:only-child),.settings-actions:has(>[data-save-admob]:only-child){display:none}
    .home-layout-position{
      position:relative;
      display:grid;
      place-items:center;
      flex:0 0 52px;
      width:52px;
      height:36px;
      margin:0;
      border:1px solid var(--line-strong);
      border-radius:var(--r-sm);
      background:var(--fill-2);
      cursor:pointer;
    }
    .home-layout-position::after{
      content:"";
      position:absolute;
      right:9px;
      width:5px;
      height:5px;
      border-right:1.5px solid var(--muted);
      border-bottom:1.5px solid var(--muted);
      transform:rotate(45deg) translateY(-2px);
      pointer-events:none;
    }
    .home-layout-position:focus-within{border-color:var(--accent-2);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent-2) 22%,transparent)}
    .home-layout-position .home-layout-rank{width:auto;padding-right:11px;color:var(--ink-accent);font-size:var(--fs-strong)}
    .home-layout-position select{
      position:absolute;
      inset:0;
      width:100%;
      height:100%;
      padding:0;
      opacity:0;
      cursor:pointer;
    }

    @media(max-width:850px){
      .mobile-current span,.page-head p,.nav-group summary{font-size:11px}
      .badge{font-size:11px}
      .muted{font-size:var(--fs-small)}
    }
