@import url('https://fonts.googleapis.com/css2?family=Anonymous+Pro:wght@400;700&family=League+Spartan:wght@400;500;600&family=Noto+Sans+Georgian:wght@400;500;600&display=swap');

main.route-render-pending{pointer-events:none;position:relative}
main.route-render-pending::before{background:color-mix(in srgb,var(--paper,#f8f6f4) 92%,transparent);content:'';inset:0;min-height:100vh;position:absolute;z-index:9997}
main.route-render-pending::after{background:var(--paper,#f8f6f4);border:1px solid var(--line,#d8d2cd);content:attr(data-render-label);font-size:12px;left:50%;letter-spacing:.08em;padding:14px 18px;position:fixed;text-transform:uppercase;top:50%;transform:translate(-25%,-50%);z-index:9998}
@media(max-width:850px){main.route-render-pending::after{transform:translate(-50%,-50%)}}

.soul-source-search-summary{display:grid;gap:5px;border-left:3px solid var(--red);background:#fff;padding:14px 16px;margin:0 0 18px}.soul-source-search-summary span,.soul-source-search-summary small{color:var(--muted);font:11px/1.45 'Anonymous Pro',monospace}.soul-source-proposal,.soul-source-missing{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:7px;color:#6f6868;font:10px/1.35 'Anonymous Pro',monospace}.soul-source-proposal a{color:var(--ink);text-decoration:underline}.soul-source-proposal.is-conflict{color:#9d3536}.soul-field-select{margin:0;min-height:38px;padding:8px 32px 8px 10px;font-weight:600;border-color:#bcb4b2;background-color:#fff}.soul-compact-field:has(.soul-source-proposal){background:#fffdf7}.soul-media-thumbs:empty{display:none}
.soul-boolean-toggle{display:flex;align-items:center;gap:9px;margin:0;min-height:38px;color:var(--ink);font-weight:600}.soul-boolean-toggle input{width:18px;height:18px;margin:0;accent-color:var(--red)}.soul-boolean-toggle span{font:600 13px 'League Spartan',sans-serif;letter-spacing:0;text-transform:none;color:var(--ink)}

:root{--ink:#151313;--red:#E94B4C;--paper:#fffdfc;--pearl:#f7f4f3;--line:#ddd7d5;--soft:#eee9e7;--muted:#756e6e;--stone:#6d6868;--rail-bg:#151313;--rail-fg:#fffdfc}
*{box-sizing:border-box}body{margin:0;background:var(--pearl);color:var(--ink);font-family:'League Spartan',sans-serif;transition:background-color .15s ease,color .15s ease}
:lang(ka){font-family:'Noto Sans Georgian','League Spartan',sans-serif}.shell{min-height:100vh;display:grid;grid-template-columns:252px minmax(0,1fr)}.rail{background:var(--rail-bg);color:var(--rail-fg);min-height:100vh;display:flex;flex-direction:column}.brand{border:0;background:transparent;color:inherit;padding:30px 24px 24px;text-align:left;cursor:pointer}.brand img{width:150px;display:block}.brand span,.side-kicker,.identity small,.eyebrow,.mono{font:11px/1.5 'Anonymous Pro',monospace;letter-spacing:.15em}.brand span{display:block;margin-top:14px;color:#bdb5b5}.side-kicker{margin:0;padding:13px 24px;border-top:1px solid #3b3535;border-bottom:1px solid #3b3535;color:#bcb4b4}#side-nav{padding:9px 0;overflow:auto}#side-nav button{display:block;width:100%;border:0;background:none;color:#e9e3e3;text-align:left;padding:13px 24px;cursor:pointer;font:500 14px 'League Spartan',sans-serif}#side-nav button small{display:block;color:#a49b9b;margin-top:5px;font:10px 'Anonymous Pro',monospace;line-height:1.3}#side-nav button.active{background:#302c2c;border-left:2px solid var(--red);color:#fff}.identity{margin-top:auto;border-top:1px solid #3b3535;padding:20px 24px;display:flex;gap:10px;align-items:center}.identity>span{border:1px solid #918989;border-radius:50%;width:30px;height:30px;display:grid;place-items:center;font:10px 'Anonymous Pro',monospace}.identity p{margin:0;font-size:12px}.identity small{display:block;color:#aaa1a1;margin-top:4px;letter-spacing:.06em}.work{min-width:0}header{min-height:76px;display:flex;align-items:stretch;border-bottom:1px solid var(--line);background:var(--paper)}#header-nav{display:flex;align-items:stretch;overflow:auto}#header-nav button{white-space:nowrap;border:0;border-bottom:3px solid transparent;background:transparent;padding:0 17px;color:#716b6b;cursor:pointer;font:500 13px 'League Spartan',sans-serif}#header-nav button.active{color:var(--ink);border-bottom-color:var(--red)}.workspace{margin-left:auto;padding:28px 25px;border-left:1px solid var(--line);color:#827a7a;font:11px 'Anonymous Pro',monospace;letter-spacing:.15em}main{max-width:1380px;margin:0 auto;padding:42px 48px 70px}.home{min-height:calc(100vh - 76px);display:grid;place-items:center}.home-inner{width:min(840px,100%);text-align:center;margin-top:-55px}h1{font-size:clamp(34px,4vw,62px);line-height:1.02;font-weight:500;letter-spacing:-.055em;margin:9px 0 18px}h2{font-size:24px;line-height:1.12;font-weight:500;margin:0}h3{margin:0;font-size:16px;font-weight:500}.eyebrow{margin:0;color:#8b8282}.lede{max-width:650px;margin:0 auto 30px;color:#696363;line-height:1.65;font-size:16px}.button{border:1px solid var(--ink);padding:11px 14px;background:transparent;cursor:pointer;font:10px 'Anonymous Pro',monospace;letter-spacing:.1em;text-transform:uppercase}.button.primary{background:var(--ink);color:#fff}.button.ghost{background:#fff;border-color:var(--line);color:var(--ink)}.button:disabled{opacity:.5;cursor:wait}.quick{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin:22px 0}.quick button,.text-button{border:0;background:none;color:#716969;cursor:pointer;font:11px 'Anonymous Pro',monospace}.quick button:hover,.text-button:hover{color:var(--red)}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:28px;border-bottom:1px solid var(--ink);padding-bottom:23px;margin-bottom:28px}.page-head p{max-width:720px;color:#6c6666;line-height:1.6;margin:10px 0 0}.workspace-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:14px;margin-bottom:20px}.workspace-card{background:#fff;border:1px solid var(--line);padding:25px;min-height:205px}.workspace-card h2{margin:9px 0 13px}.workspace-card p:not(.eyebrow){color:var(--muted);line-height:1.55}.card-rule{width:48px;border-top:2px solid var(--red);margin:25px 0 13px}.mono{color:#8d8585}.empty,.selector-empty{border:1px dashed #c8c0c0;padding:28px;color:#6c6666;line-height:1.6;background:rgba(255,255,255,.42)}.empty strong,.selector-empty strong{color:var(--ink)}.source-list{display:grid;gap:10px;max-width:1000px}.source{background:#fff;border:1px solid var(--line);padding:16px;display:flex;justify-content:space-between;gap:16px;align-items:center}.source h3,.source p{margin:0}.source p{font:11px/1.5 'Anonymous Pro',monospace;color:#837b7b;margin-top:7px}.tag,.state{display:inline-block;border:1px solid var(--line);color:#716a6a;padding:5px 8px;font:10px 'Anonymous Pro',monospace}.state{margin-bottom:5px;border-color:#d5cccc}.filter-bar,.toolbar{display:flex;align-items:center;gap:10px;margin:-8px 0 22px;flex-wrap:wrap}.filter-bar input,.toolbar input{margin:0;min-width:300px;flex:1}.toolbar select{width:auto;margin:0}.view-switch{display:flex;border:1px solid var(--line)}.view-switch button{border:0;border-right:1px solid var(--line);background:#fff;padding:11px;cursor:pointer;font:10px 'Anonymous Pro',monospace}.view-switch button:last-child{border-right:0}.view-switch button.active{background:var(--ink);color:#fff}.stat-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);margin:-5px 0 20px}.stat-strip>div{background:#fff;padding:17px}.stat-strip strong{display:block;font-size:26px;font-weight:500}.stat-strip span{display:block;margin-top:5px;color:#827a7a;font:10px 'Anonymous Pro',monospace}.data-table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);animation:nlo-view-fade .18s ease}.inventory-cards,.media-library-grid,.selector-grid,.agenda-board,.kanban{animation:nlo-view-fade .18s ease}@keyframes nlo-view-fade{from{opacity:.4}to{opacity:1}}.data-table{width:100%;border-collapse:collapse;min-width:830px}.data-table th{text-align:left;padding:12px 14px;color:#827a7a;font:10px 'Anonymous Pro',monospace;letter-spacing:.1em;border-bottom:1px solid var(--line)}.data-table td{padding:14px;border-bottom:1px solid var(--soft);vertical-align:top;font-size:13px}.data-table tr:last-child td{border-bottom:0}.data-table strong,.data-table small{display:block}.data-table small{margin-top:5px;color:#867e7e;font:10px 'Anonymous Pro',monospace}.missing-media{color:#9b9191;font:10px 'Anonymous Pro',monospace;display:block;margin-bottom:8px}.inventory-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px}.inventory-card{border:1px solid var(--line);background:#fff;padding:12px;display:flex;flex-direction:column;gap:13px}.asset-placeholder{background:linear-gradient(135deg,#e9e4e1,#f7f5f3);border:1px dashed #c7bdbc;min-height:115px;display:grid;place-items:center;color:#7c7373;font:10px 'Anonymous Pro',monospace;letter-spacing:.12em}.inventory-card h3{margin:6px 0}.inventory-card p{font:10px 'Anonymous Pro',monospace;color:#867d7d}.pill-row{display:flex;gap:5px;flex-wrap:wrap}.pill-row span{font:9px 'Anonymous Pro',monospace;border:1px solid var(--line);padding:4px;color:#756d6d}.inventory-card .text-button{margin-right:auto}.ai-panel{margin-top:28px;background:var(--ink);color:var(--paper);padding:22px;display:grid;grid-template-columns:.8fr 1.2fr;gap:18px;border-left:3px solid var(--red)}.ai-panel .eyebrow{color:#bdb4b4}.ai-panel h3{margin:8px 0}.ai-panel p{color:#d3cbcb;line-height:1.5;font-size:13px}.ai-panel textarea{height:94px;margin:0;background:#282424;color:#fff;border-color:#4a4242;resize:vertical}.ai-panel-footer{grid-column:2;display:flex;justify-content:space-between;align-items:center;gap:12px}.ai-panel-footer small{color:#bdb4b4;font:10px 'Anonymous Pro',monospace}.ai-panel .button.primary{background:var(--red);border-color:var(--red)}.selector-toolbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:-8px 0 22px;flex-wrap:wrap}.selector-tabs{display:flex;gap:5px;flex-wrap:wrap}.selector-tabs button{border:1px solid var(--line);background:#fff;padding:9px 11px;cursor:pointer;font:10px 'Anonymous Pro',monospace}.selector-tabs button.active{background:var(--ink);color:#fff;border-color:var(--ink)}.thumb-control{display:flex;align-items:center;gap:9px;margin:0;font:10px 'Anonymous Pro',monospace;white-space:nowrap}.thumb-control input{width:110px;margin:0;padding:0;border:0}.thumb-control span{min-width:65px;color:var(--muted)}.selector-grid{display:grid;gap:13px}.selector-grid.size-0{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}.selector-grid.size-1{grid-template-columns:repeat(auto-fill,minmax(175px,1fr))}.selector-grid.size-2{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}.selector-grid.size-3{grid-template-columns:repeat(auto-fill,minmax(380px,1fr))}.media-tile{background:#fff;border:1px solid var(--line)}.media-tile .asset-placeholder{min-height:200px;border:0;border-bottom:1px solid var(--line)}.size-0 .media-tile .asset-placeholder{min-height:110px}.size-1 .media-tile .asset-placeholder{min-height:155px}.size-3 .media-tile .asset-placeholder{min-height:330px}.media-tile-info{padding:12px}.media-tile-info strong,.media-tile-info small{display:block}.media-tile-info small{font:10px 'Anonymous Pro',monospace;color:#837b7b;margin-top:5px}.media-tile-info div{display:flex;gap:10px;margin-top:12px}.rating{border:0;background:transparent;padding:0;color:#746d6d;cursor:pointer;font:10px 'Anonymous Pro',monospace}.agenda-filters{display:flex;gap:7px;flex-wrap:wrap;margin:-4px 0 20px}.agenda-filters button{border:1px solid var(--line);background:#fff;padding:8px 10px;cursor:pointer;font:10px 'Anonymous Pro',monospace}.agenda-filters button.active{background:var(--ink);color:#fff}.agenda-board{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.agenda-board article,.kanban-col{background:#fff;border:1px solid var(--line);padding:15px;min-height:135px}.agenda-board article h3{margin:8px 0}.agenda-board article p:not(.eyebrow){font:11px 'Anonymous Pro',monospace;color:#817878}.kanban{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.kanban-col{background:#f4efed;min-height:245px}.kanban-col article{background:#fff;border:1px solid var(--line);padding:12px;margin-top:10px}.kanban-col small{display:block;color:#817878;font:10px 'Anonymous Pro',monospace;margin-top:4px}.kanban-empty{color:#948b8b;font:10px 'Anonymous Pro',monospace;margin-top:16px}dialog{max-width:610px;width:calc(100% - 30px);border:0;padding:0;box-shadow:0 25px 100px rgba(0,0,0,.25)}dialog::backdrop{background:rgba(20,18,18,.45)}dialog form{padding:26px}.dialog-head{display:flex;justify-content:space-between;align-items:flex-start}.dialog-head button{border:0;background:none;font-size:26px;cursor:pointer}.helper{color:#6d6666;line-height:1.55}.dialog-head+.helper{margin:20px 0}label{display:block;margin:14px 0;font:11px 'Anonymous Pro',monospace;letter-spacing:.08em;color:#6d6666}input,textarea,select{display:block;width:100%;margin-top:7px;border:1px solid var(--line);padding:11px;font:14px 'League Spartan',sans-serif;color:var(--ink);background:#fff}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}@media(max-width:1050px){.workspace-grid,.agenda-board,.kanban{grid-template-columns:repeat(2,1fr)}.ai-panel{grid-template-columns:1fr}.ai-panel-footer{grid-column:1}}@media(max-width:850px){.shell{grid-template-columns:1fr}.rail{min-height:auto}.brand{padding:18px}.brand span,.side-kicker,.identity,#side-nav{display:none}header{min-height:58px}#header-nav button{padding:0 12px;font-size:12px}.workspace{display:none}main{padding:28px 18px}.home-inner{margin-top:0}.page-head{display:block}.page-head .button{margin-top:18px}.workspace-grid,.agenda-board,.kanban,.stat-strip{grid-template-columns:1fr}.toolbar input{min-width:100%}.selector-toolbar{align-items:flex-start}.ai-panel-footer{align-items:flex-start;flex-direction:column}.selector-grid.size-3{grid-template-columns:1fr}.data-table-wrap{margin-right:-18px}.source{align-items:flex-start;flex-direction:column}}

.stock-register-actions{display:flex;flex-direction:column;align-items:flex-end;gap:9px}.stock-register-actions p{margin:0;max-width:560px;text-align:right}.stock-product-table-wrap{max-height:68vh}.stock-product-table{min-width:3150px}.stock-product-table thead th{position:sticky;top:0;z-index:3;background:#f1eeee;white-space:nowrap}.stock-product-table tbody tr:hover td{background:#fffaf8}.stock-product-table td{min-width:90px;max-width:240px}.stock-product-table td:first-child{min-width:176px}.stock-product-table td:nth-child(2){min-width:260px}.stock-product-table td:nth-child(21){min-width:165px}.stock-visual--gallery{min-width:160px}.stock-visual--gallery>div{display:grid;grid-template-columns:repeat(3,48px);gap:4px;margin-bottom:7px}.stock-visual--gallery img{display:block;width:48px;height:48px;object-fit:contain;border:1px solid var(--line);background:#fff}.stock-visual--gallery small,.stock-visual--gallery em{display:block;font:10px/1.35 'Anonymous Pro',monospace;color:#7e7676}.stock-quantity-check+.stock-quantity-check,.stock-allocation-link+.stock-allocation-link{border-top:1px solid var(--soft);margin-top:7px;padding-top:7px}.stock-soul-link{display:block;padding:2px 0;color:var(--ink);text-decoration:underline}.stock-decision-actions{min-width:130px}.stock-decision-actions small{max-width:130px}@media(max-width:850px){.stock-register-actions{align-items:flex-start}.stock-register-actions p{text-align:left}.stock-product-table-wrap{max-height:none}}

.stock-reality-selector{border:1px solid var(--line);background:#fff;padding:18px 20px;margin-bottom:18px}.stock-reality-selector__head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.stock-reality-selector__head p:not(.eyebrow){margin:7px 0 0;max-width:720px;color:var(--muted);font-size:12px;line-height:1.45}.stock-reality-tabs,.stock-reality-selected-row,.stock-reality-field>div{display:flex;gap:7px;flex-wrap:wrap}.stock-reality-tabs{margin:16px 0 12px}.stock-reality-tabs button,.stock-reality-option,.stock-reality-selected{border:1px solid var(--line);background:#fff;color:var(--ink);padding:7px 9px;cursor:pointer;font:10px 'Anonymous Pro',monospace}.stock-reality-tabs button.active,.stock-reality-option.active{background:var(--ink);border-color:var(--ink);color:#fff}.stock-reality-selected{background:#f3efed}.stock-reality-selected-row{align-items:center;margin:0 0 13px}.stock-reality-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;border-top:1px solid var(--soft);padding-top:13px}.stock-reality-field{border:1px solid var(--soft);padding:10px;min-height:70px}.stock-reality-field>strong{display:block;margin-bottom:8px;font:10px 'Anonymous Pro',monospace;letter-spacing:.08em}.stock-reality-field small{color:var(--muted);font:10px 'Anonymous Pro',monospace}@media(max-width:850px){.stock-reality-selector__head{display:block}.stock-reality-selector__head .view-switch{margin-top:14px;width:max-content}.stock-reality-fields{grid-template-columns:1fr}}

/* Accueil : une priorité, un échange courant, puis un historique volontaire. */
.home-chat{width:min(860px,100%);margin:0 auto}.home-chat-thread{display:grid;gap:18px}.home-decision-date{margin:0 0 18px;color:var(--muted);font:12px 'Anonymous Pro',monospace;letter-spacing:.03em}.home-priority{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;border:0;border-radius:4px;background:var(--red);color:var(--paper);padding:15px 17px;text-align:left;cursor:pointer}.home-priority strong{font:500 25px/1 'League Spartan',sans-serif}.home-priority span{font:12px 'Anonymous Pro',monospace}.home-priority b{font:18px 'League Spartan',sans-serif}.home-secondary-summary{list-style:none;margin:10px 0 0;padding:0;border-top:1px solid var(--line)}.home-secondary-summary li{border-bottom:1px solid var(--line)}.home-secondary-summary button{display:grid;grid-template-columns:minmax(120px,.42fr) 1fr auto;align-items:center;gap:12px;width:100%;padding:10px 0;border:0;background:transparent;color:var(--ink);text-align:left;cursor:pointer}.home-secondary-summary strong{font-size:13px;font-weight:500}.home-secondary-summary span{color:var(--muted);font:11px 'Anonymous Pro',monospace}.home-secondary-summary b{font-size:13px;color:var(--muted)}.home-conversation-current{border-top:1px solid var(--ink);padding-top:17px}.home-conversation-label{margin:0 0 12px;color:var(--muted);font:10px 'Anonymous Pro',monospace;letter-spacing:.13em;text-transform:uppercase}.home-conversation-history{margin-top:12px;border:1px dashed var(--line);background:rgba(255,255,255,.38)}.home-conversation-history summary{display:flex;justify-content:space-between;gap:14px;padding:11px 13px;color:var(--muted);cursor:pointer;font:11px 'Anonymous Pro',monospace}.home-conversation-history>div{display:grid;gap:12px;padding:0 13px 13px;border-top:1px solid var(--soft)}.home-conversation-history .home-noema-message{opacity:.72}.home-conversation-history[open] .home-noema-message{opacity:1}@media(max-width:850px){.home-secondary-summary button{grid-template-columns:1fr auto}.home-secondary-summary span{grid-column:1}.home-priority{padding:14px}.home-conversation-history summary{line-height:1.5}}
/* Document Master review: preserve authored paragraphs without exposing raw data structures. */
.nlo-document-content{white-space:pre-wrap;overflow-wrap:anywhere;margin:14px 0 0;padding:14px;background:#f7f4f2;border:1px solid var(--line);font:12px/1.55 'Anonymous Pro',monospace;color:var(--ink)}

/* Analyse indisponible : l'action affiche ses données mais ne peut pas les
   analyser (sources indiscernables de ses voisines). Le message prend la place
   du bouton — il ne s'ajoute pas à côté. */
.action-blocked{border-left:3px solid var(--nl-grey-mid,#cdbfae);padding-left:12px;color:var(--nl-grey-dark,#6b6560);}
/* Lectures muettes — une lecture qui a echoue ne doit pas ressembler a un zero. */
.lecture-indisponible{font-style:italic;color:#8a6d3b;border-bottom:1px dotted #8a6d3b;cursor:help}
.lectures-indisponibles-bandeau{margin:0 0 14px;padding:9px 12px;border-left:3px solid #8a6d3b;background:#fdf8ef;color:#6b5426;font-size:.92em}
.lecture-indisponible-bloc{border-left:3px solid #8a6d3b;background:#fdf8ef;color:#6b5426;padding:10px 12px;margin:0 0 12px;font-size:.94em}

.validation-fragment{white-space:pre-wrap;word-break:break-word;max-height:240px;overflow:auto;background:#f6f5f3;border:1px solid #e2ded8;padding:10px 12px;font-size:.86em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#4a453d}

/* Positions de relecture. Le desaccord est un ETAT, pas une alerte : pas de
   rouge, pas de pictogramme d'avertissement, pas de bouton pour le faire
   disparaitre. Une simple mise en avant, qui reste tant que le fait reste. */
.media-positions{margin:10px 0 0;padding:10px 12px;border-left:2px solid #d8d3ca;background:#faf9f7}
.media-positions strong{display:block;font-size:.92em;color:#3a352d}
.media-positions small{display:block;margin-top:3px;color:#6f685d;font-size:.84em}
.media-positions ul{list-style:none;margin:8px 0 0;padding:0}
.media-positions li{padding:3px 0;font-size:.9em;color:#4a453d}
.media-positions li strong{display:inline;font-weight:600}
.media-positions--divergentes{border-left-color:#8a6d3b;background:#fdfbf6}

/* Titres et listes du texte de conversation. Discrets : ce sont des reperes de
   lecture dans une reponse, pas une hierarchie de page. */
.conversation-titre{font-size:.95em;font-weight:600;color:#3a352d;margin:12px 0 4px;letter-spacing:.01em}
.home-noema-message-body ul{margin:4px 0 8px;padding-left:18px}
.home-noema-message-body li{margin:2px 0}
.home-noema-message-body p{margin:4px 0}
.home-noema-message-body code{background:#f2f0ec;padding:1px 4px;border-radius:2px;font-size:.92em}

/* Ce qui naît quand on a tranché. « Rien n'a été écrit » n'est pas une alerte :
   c'est un état, et une pièce nommée qui manque. Pas de rouge. */
.validation-promotion{margin:8px 0;padding:8px 10px;border-left:2px solid #d8d3ca;background:#faf9f7;font-size:.9em;color:#4a453d}
.validation-promotion strong{display:block;color:#3a352d;margin-bottom:2px}
.validation-promotion.promotion-faite{border-left-color:#5a7d5a;background:#f7faf7}
.validation-promotion.promotion-impossible{border-left-color:#8a6d3b;background:#fdfbf6}

/* PASSES DE RAPPROCHEMENT.
   Seize routes de mutation partageaient la meme absence d'ecran et la meme
   forme : aucun corps a saisir, un rapport a lire. Un composant les porte.
   Meme palette sourde que la promotion : une passe ecrit, elle n'alarme pas.
   Ce qu'une passe NE fait pas se lit en meme temps que ce qu'elle fait —
   sinon « reconstruire la memoire du stock » deviendrait une promesse fausse. */
.passes-maintenance{margin:18px 0;padding:12px 14px;border:1px solid #e6e2da;background:#fbfaf8}
.passes-maintenance>.eyebrow{margin:0 0 2px}
.passes-maintenance>.helper{margin:0 0 10px}
.passe-maintenance{display:grid;grid-template-columns:1fr auto;gap:10px 14px;align-items:start;
  padding:10px 0;border-top:1px solid #eeebe5}
.passe-maintenance:first-of-type{border-top:0}
.passe-maintenance strong{color:#3a352d}
.passe-maintenance .helper{margin:2px 0 0}
.passe-limite{color:#6b655c}
/* Un refus se lit avant le clic, jamais apres. */
.passe-refusee{opacity:.62}
.passe-motif{color:#8a6d3b}
.passe-compte-rendu{grid-column:1/-1;margin:6px 0 0;padding:6px 8px;border-left:2px solid #d8d3ca;
  background:#f7f6f3;font-size:.88em;color:#4a453d;white-space:pre-wrap}
@media (max-width:640px){.passe-maintenance{grid-template-columns:1fr}}

/* VERDICT SUR UN ARTEFACT REUTILISABLE.
   L'ecran listait deja `state` et `intended_use` sans pouvoir les changer.
   Les quatre etats sont contraints par le modele : on les montre tous, l'etat
   courant en jeton plutot qu'en bouton — proposer de passer a l'etat ou l'on
   est deja serait un geste sans effet. */
.artefact-verdicts{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 4px}
.artefact-etat-courant{background:#eeebe5;color:#3a352d}
.artefact-usage{display:block;margin:4px 0 0;font-size:.85em;color:#6b655c}
.artefact-usage input{display:block;width:100%;margin-top:3px;padding:5px 7px;
  border:1px solid #e6e2da;background:#fff;font:inherit;color:#3a352d}
.artefact-retour{margin:6px 0 0;padding:6px 8px;border-left:2px solid #8a6d3b;
  background:#fdfbf6;font-size:.88em;color:#4a453d}

/* LA CHARTE, LUE PLUTOT QUE REPETEE.
   Ces jetons portent les valeurs declarees dans action_registry.py
   (BRAND_COLORS). L'ecran de charte les utilise : il ne reecrit pas les
   valeurs, il les affiche depuis la route et se peint avec les jetons.
   Aucune couleur existante de NLO n'est modifiee — declarer n'est pas
   appliquer. */
:root{
  --nl-white-pearl:#F9F7F7;
  --nl-charcoal:#141212;
  --nl-vermilion:#E94B4C;   /* filets seulement, jamais un aplat */
  --nl-gris-moyen:#767676;
  --nl-gris-clair:#BBB9B9;
  --nl-gris-tres-clair:#ECECEC;
}
.brand-charter{max-width:960px}
.charte-section{font-size:1.05em;margin:22px 0 10px;color:var(--nl-charcoal)}
.charte-couleurs{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.charte-couleur{display:flex;gap:10px;padding:10px;border:1px solid var(--nl-gris-clair);background:var(--nl-white-pearl)}
.charte-pastille{flex:0 0 34px;height:34px;border:1px solid var(--nl-gris-clair)}
.charte-couleur strong{display:block;color:var(--nl-charcoal)}
.charte-couleur code{font-size:.88em;color:var(--nl-gris-moyen)}
.charte-couleur small{display:block;margin-top:3px;color:var(--nl-gris-moyen)}
.charte-typos{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
.charte-typo{padding:10px;border:1px solid var(--nl-gris-clair);background:var(--nl-white-pearl)}
.charte-typo strong{display:block;color:var(--nl-charcoal)}
/* Le desaccord porte un FILET vermillon, jamais un aplat : la regle
   « vermilion_filets_seulement » s'applique a son propre affichage. */
.charte-regle{margin:6px 0 0;padding-left:8px;border-left:2px solid var(--nl-vermilion);font-size:.86em;color:var(--nl-gris-moyen)}
.charte-divergence{margin:6px 0 0;padding-left:8px;border-left:2px solid var(--nl-vermilion);font-size:.86em;color:var(--nl-gris-moyen)}
.charte-divergence--tete{margin:14px 0;padding:10px 12px;border-left-width:3px;background:var(--nl-gris-tres-clair);font-size:.92em}

/* Un element compte mais pas encore ouvrable. Nomme, pas suggere. */
.proposition-sans-ecran{display:block;margin-top:4px;color:#8a6d3b;font-size:.82em;line-height:1.35}

/* LE DOUTE, A COTE DE LA REPONSE. Un filet, pas un aplat, pas de rouge :
   le doute est un ETAT de la reponse, pas une alerte a resoudre. */
.noema-doubts{margin:10px 0 0;padding:8px 0 8px 10px;border-left:2px solid var(--nl-gris-clair)}
.noema-doubts strong{display:block;font-size:.82em;letter-spacing:.04em;text-transform:uppercase;color:var(--nl-gris-moyen)}
.noema-doubts ul{margin:4px 0 0;padding-left:18px}
.noema-doubts li,.noema-doubts p{margin:2px 0;font-size:.9em;color:var(--nl-charcoal)}
.noema-doubts--none p{color:var(--nl-gris-moyen)}

/* L'ETAGERE DES DOCUMENTS. Une partie vide reste a l'ecran et dit qu'elle
   est vide : la faire disparaitre serait la cacher. */
.etagere{max-width:1080px}
.etagere-partie{margin:0 0 22px;border:1px solid var(--nl-gris-clair);background:var(--nl-white-pearl)}
.etagere-partie--vide{background:transparent}
.etagere-tete{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:baseline;padding:10px 12px;border-bottom:1px solid var(--nl-gris-tres-clair)}
.etagere-tete h3{margin:0;font-size:1.02em;color:var(--nl-charcoal)}
.etagere-tete .etagere-compte{font-size:.86em;color:var(--nl-gris-moyen)}
.etagere-tete p{flex:1 1 100%;margin:0;font-size:.86em;color:var(--nl-gris-moyen)}
.etagere-vide{margin:0;padding:12px;font-size:.9em;color:var(--nl-gris-moyen)}
.etagere-doc{padding:10px 12px;border-top:1px solid var(--nl-gris-tres-clair)}
.etagere-doc:first-of-type{border-top:0}
/* LE NOM D'ORIGINE EN PREMIER, le nom d'export en petit dessous. */
.etagere-doc strong{display:block;color:var(--nl-charcoal);word-break:break-word}
.etagere-export{display:block;margin-top:2px;font-size:.82em;color:var(--nl-gris-moyen)}
.etagere-meta{display:block;margin-top:3px;font-size:.82em;color:var(--nl-gris-moyen)}
/* L'etat d'autorite se lit SUR la piece. */
.etagere-autorite{display:inline-block;margin-top:5px;padding:1px 7px;border:1px solid var(--nl-gris-clair);font-size:.78em;color:var(--nl-gris-moyen)}
.etagere-autorite--sans-conclusion{border-color:var(--nl-vermilion);color:var(--nl-charcoal)}
.etagere-probleme{display:block;margin-top:4px;padding-left:8px;border-left:2px solid var(--nl-vermilion);font-size:.84em;color:var(--nl-gris-moyen)}

/* LES DECISIONS QUI ATTENDENT, SUR L'ACCUEIL.
   Un delai est un FAIT, pas une pression : ni rouge, ni compte a rebours, ni
   pastille d'urgence. Un filet gris, comme le desaccord et comme le doute. */
.home-decisions{margin:14px 0;padding:10px 0 10px 12px;border-left:2px solid var(--nl-gris-clair)}
.home-decisions h2{margin:0;font-size:.82em;letter-spacing:.04em;text-transform:uppercase;color:var(--nl-gris-moyen)}
.home-decisions-compte{margin:4px 0 6px;font-size:.94em;color:var(--nl-charcoal)}
.home-decisions ul{margin:0;padding-left:18px}
.home-decisions li{margin:0 0 8px}
.home-decisions li strong{display:block;font-weight:600;color:var(--nl-charcoal)}
.home-decision-meta{display:block;margin-top:2px;font-size:.86em;color:var(--nl-gris-moyen)}
.home-decision-priorite{display:block;margin-top:1px;font-size:.8em;color:var(--nl-gris-clair)}
.home-decisions .helper{margin:6px 0 0;font-size:.82em}
.home-decisions--vide p{margin:4px 0 0;font-size:.88em;color:var(--nl-gris-moyen)}

/* « Nature a declarer » est un ETAT, pas une alerte. Constate a l'ecran le
   5 septembre : le filet vermillon s'affichait sur les 54 documents a la fois,
   ce qui transformait un etat normal en cri. Gris. Le vermillon reste pour ce
   qui manque REELLEMENT alors qu'on l'attendait. */
.etagere-autorite--a-declarer{border-color:var(--nl-gris-clair);color:var(--nl-gris-moyen)}
/* Ce qu'un document a produit, DANS la page. Pas une pop-up : une pop-up
   interrompt, et elle ne se relit pas. */
.etagere-faits{margin:6px 0 0;padding:8px 0 4px 10px;border-left:2px solid var(--nl-gris-clair);font-size:.88em}
.etagere-faits p{margin:0 0 4px;color:var(--nl-charcoal)}
.etagere-faits ul{margin:0;padding-left:16px}
.etagere-faits em{font-style:normal;color:var(--nl-gris-moyen);font-size:.9em}
.etagere-faits code{font-size:.9em;color:var(--nl-gris-moyen)}

/* LE SAVOIR DE SERVICE. Trois registres SEPARES : chacun son bloc, son autorite
   ecrite en tete, et son filet. Les mélanger serait le defaut meme. */
.savoir{max-width:1000px}
.savoir-services{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 14px}
.savoir-services button{padding:4px 12px;border:1px solid var(--nl-gris-clair);background:transparent;color:var(--nl-gris-moyen);cursor:pointer;font:inherit;font-size:.86em}
.savoir-services button.active{border-color:var(--nl-charcoal);color:var(--nl-charcoal)}
.savoir-registre{margin:0 0 18px;padding:10px 0 8px 12px;border-left:2px solid var(--nl-gris-clair)}
/* Seul le registre qui FAIT FOI porte le filet vermillon : c'est le seul dont
   le contenu s'applique. Un filet, jamais un aplat. */
.savoir-registre--professeur{border-left-color:var(--nl-vermilion)}
.savoir-registre header h3{margin:0;display:inline-block;font-size:1em;color:var(--nl-charcoal)}
.savoir-registre header span{margin-left:8px;font-size:.84em;color:var(--nl-gris-moyen)}
.savoir-registre header p{margin:2px 0 8px;font-size:.82em;color:var(--nl-gris-moyen)}
.savoir-registre header em{font-style:normal;color:var(--nl-charcoal)}
.savoir-registre ul{margin:0;padding-left:18px}
.savoir-registre li{margin:0 0 8px}
.savoir-registre li strong{display:block;font-weight:600;color:var(--nl-charcoal)}
.savoir-origine{display:block;margin-top:2px;font-size:.82em;color:var(--nl-gris-moyen)}
.savoir-age{display:block;font-size:.8em;color:var(--nl-gris-clair)}
/* VIDE et INDISPONIBLE ne se lisent pas pareil. */
.savoir-vide{margin:0;font-size:.88em;color:var(--nl-gris-moyen)}
.savoir-indisponible{margin:0;padding-left:8px;border-left:2px solid var(--nl-vermilion);font-size:.88em;color:var(--nl-charcoal)}

/* Les propositions lues dans un document : visibles, jamais comptees. */
.home-decisions-propositions{margin:8px 0 0}
.home-decisions-propositions summary{font-size:.86em;color:var(--nl-gris-moyen);cursor:pointer}
.home-decisions-propositions ul{margin:6px 0 0;padding-left:18px}
.home-decisions-propositions li{margin:0 0 7px}

/* LE CONTROLE DE CHARTE. Trois etats, trois lectures differentes.
   « absent » ne se lit pas comme « conforme » : c'est tout le point. */
.charte-controle{max-width:1180px}
.charte-etat{display:inline-block;padding:1px 8px;border:1px solid var(--nl-gris-clair);font-size:.78em;white-space:nowrap;color:var(--nl-gris-moyen)}
.charte-etat--conforme{border-color:var(--nl-gris-clair);color:var(--nl-charcoal)}
.charte-etat--en_ecart{border-color:var(--nl-vermilion);color:var(--nl-charcoal)}
.charte-etat--absent{border-style:dashed;border-color:var(--nl-vermilion);color:var(--nl-gris-moyen)}
.charte-controle td small{display:block;margin-top:2px;color:var(--nl-gris-moyen);font-size:.84em}
.charte-controle td code{font-size:.82em;color:var(--nl-gris-moyen);word-break:break-all}

/* L'INTEGRATION D'UN LOT. Un dossier = un bloc, avec ce qu'il ordonne et ce
   qu'il interdit. Un dossier sans autorite declaree porte un filet pointille :
   « non declare » n'est pas « autorise ». */
.lot{max-width:1180px}
.lot-dossiers{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:12px;margin:12px 0 20px}
.lot-dossier{padding:10px 12px;border:1px solid var(--nl-gris-clair);background:var(--nl-white-pearl)}
.lot-dossier--sans-autorite{border-style:dashed;border-color:var(--nl-vermilion);background:transparent}
.lot-dossier header{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:baseline}
.lot-dossier h3{margin:0;font-size:.98em;color:var(--nl-charcoal);word-break:break-word}
.lot-autorite{font-size:.8em;letter-spacing:.04em;text-transform:uppercase;color:var(--nl-gris-moyen)}
.lot-ordonne,.lot-interdit{margin:5px 0 0;font-size:.83em;color:var(--nl-gris-moyen)}
.lot-ordonne strong,.lot-interdit strong{display:block;color:var(--nl-charcoal);font-size:.92em}
.lot-compte{width:100%;margin:8px 0 0;font-size:.86em}
.lot-compte td{padding:1px 0;color:var(--nl-gris-moyen)}
.lot-compte td:last-child{text-align:right;color:var(--nl-charcoal)}
.lot-motifs{margin:6px 0 0;padding-left:8px;border-left:2px solid var(--nl-gris-clair);font-size:.82em}
.lot-motifs strong{display:block;color:var(--nl-gris-moyen)}
.lot-motifs ul{margin:2px 0 0;padding-left:16px}
.lot-familles{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:10px}
.lot-famille{padding:9px 11px;border:1px solid var(--nl-gris-clair)}
.lot-famille code{margin-left:8px;font-size:.8em;color:var(--nl-gris-moyen)}
.lot-famille ul{margin:5px 0;padding-left:16px;font-size:.86em}
.lot-famille li small{display:block;color:var(--nl-gris-clair);font-size:.86em;word-break:break-all}
.lot-admis{display:inline-block;min-width:58px;font-size:.78em;color:var(--nl-gris-moyen)}
.lot-famille>small{color:var(--nl-gris-moyen);font-size:.82em}

/* LE BOARD D'ANALYSE. Une partie vide se voit ; une partie qui n'a pas tourne
   se voit AUTREMENT — ce sont deux ecrans differents. */
.board{max-width:1120px}
.board-comptes{display:flex;flex-wrap:wrap;gap:6px 20px;margin:10px 0 6px;font-size:.86em;color:var(--nl-gris-moyen)}
.board-comptes b{color:var(--nl-charcoal);font-size:1.15em;margin-right:4px}
.board-partie{margin:16px 0;padding:10px 0 8px 12px;border-left:2px solid var(--nl-gris-clair)}
.board-partie--vide{border-left-style:dotted}
.board-partie--pas-tourne{border-left-color:var(--nl-vermilion);border-left-style:dashed}
.board-partie header{display:flex;gap:10px;align-items:baseline}
.board-partie h3{margin:0;font-size:.98em;color:var(--nl-charcoal)}
.board-partie header span{font-size:.86em;color:var(--nl-gris-moyen)}
.board-mention{margin:4px 0 0;font-size:.86em;color:var(--nl-gris-moyen)}
.board-partie ul{margin:6px 0 0;padding-left:18px}
.board-partie li{margin:0 0 8px}
.board-partie li strong{display:block;color:var(--nl-charcoal);font-weight:600}
.board-source{display:block;margin-top:2px;font-size:.82em;color:var(--nl-gris-moyen)}
.board-extrait{display:block;margin-top:2px;font-size:.84em;color:var(--nl-gris-moyen);font-style:normal}

/* LA LISTE DES ERREURS DE NLO. Trouvee par une machine, par un humain, ou
   declaree par son auteur : trois origines, trois lectures differentes. */
.erreurs{max-width:960px}
.erreurs-origines{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0}
.erreurs-origine{flex:1 1 240px;padding:8px 10px;border-left:2px solid var(--nl-gris-clair)}
.erreurs-origine--humain{border-left-color:var(--nl-vermilion)}
.erreurs-origine b{font-size:1.4em;color:var(--nl-charcoal);margin-right:5px}
.erreurs-origine small{display:block;margin-top:3px;font-size:.82em;color:var(--nl-gris-moyen)}
.erreur{margin:14px 0;padding:10px 12px;border:1px solid var(--nl-gris-clair);background:var(--nl-white-pearl)}
.erreur header{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:baseline}
.erreur h3{margin:0;font-size:1em;color:var(--nl-charcoal)}
.erreur code,.erreur header span{font-size:.8em;color:var(--nl-gris-moyen)}
.erreur dl{margin:8px 0 0}
.erreur dt{font-size:.78em;letter-spacing:.03em;text-transform:uppercase;color:var(--nl-gris-moyen);margin-top:7px}
.erreur dd{margin:2px 0 0;font-size:.9em;color:var(--nl-charcoal)}

/* LOT 6 — SIX ROUTES QUALIFIEES « PASSE ».
   Deux sont des passes globales et reutilisent .passes-maintenance. Les quatre
   autres portent un parametre : elles vivent sur l'element, pas dans un
   registre. Ce qui les distingue visuellement n'est pas leur domaine mais leur
   COUT : un appel sortant facture ne doit pas ressembler a un rapprochement
   local. D'ou .analyse-externe. */
.analyse-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0 0}
.analyse-externe{border-color:#c9a227;color:#7a6317}
.analyse-limite{margin:6px 0 0;color:#6b655c}
.analyse-retour{margin:6px 0 0;padding:6px 8px;border-left:2px solid #d8d3ca;
  background:#f7f6f3;font-size:.88em;color:#4a453d;white-space:pre-wrap}

/* La revue technique est une LECTURE. Rien n'est execute, rien n'est deploye :
   la limite est ecrite dans la carte, pas seulement dans la confirmation. */
.revue-technique{margin:10px 0 0;padding:8px 10px;border-left:2px solid #d8d3ca;background:#f7f6f3}
.revue-technique .eyebrow{margin:0 0 4px}
.revue-technique .helper{margin:2px 0 0}
.revue-technique-limite{color:#6b655c}
.revue-technique button{margin-top:8px}
.revue-technique-retour{margin:6px 0 0;font-size:.88em;color:#4a453d;white-space:pre-wrap}

/* Un role qui ne peut pas agir lit pourquoi, avant le clic. */
.sc-action-refusee{color:#8a6d3b}
.sc-relier-retour{margin:6px 0 0;padding:6px 8px;border-left:2px solid #d8d3ca;
  background:#f7f6f3;font-size:.88em;color:#4a453d;white-space:pre-wrap}

/* LOT 7 — VERDICT SUR LE PILOTE LABYRINTHE.
   La carte annonçait « la génération complète reste verrouillée jusqu'à son
   approbation » sans qu'aucun écran ne puisse approuver. Le verdict se lit donc
   dans la même carte que le verrou qu'il ouvre. */
.pilote-verdict{margin:10px 0 0;padding:8px 10px;border-left:2px solid #d8d3ca;background:#f7f6f3}
.pilote-verdict .eyebrow{margin:0 0 4px}
.pilote-verdict .helper{margin:2px 0 0}
.pilote-verdict-note{display:block;margin:8px 0 0;font-size:.85em;color:#6b655c}
.pilote-verdict-note textarea{display:block;width:100%;margin-top:3px;padding:5px 7px;
  border:1px solid #d8d3ca;background:#fff;font:inherit;color:#3a352d}
.pilote-verdict-actions{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 0}
.pilote-verdict-retour{margin:6px 0 0;font-size:.88em;color:#4a453d;white-space:pre-wrap}
.pilote-verdict-refuse{color:#8a6d3b}

/* LOT 7 — TRANCHER UNE FICHE CONTACT, AVEC SA PREUVE.
   Le backend servait déjà GET .../decision — « la fiche ET sa preuve, en UN
   appel » — sans qu'aucun écran ne l'appelle. La décision se prend donc dans la
   ligne, pas sur une page où la preuve resterait derrière. */
.fiche-decision{margin:10px 0 0;padding:8px 10px;border-left:2px solid #d8d3ca;background:#f7f6f3}
.fiche-decision .eyebrow{margin:0 0 6px}
.fiche-preuve{margin:0 0 8px;font-size:.9em;color:#4a453d}
.fiche-preuve p{margin:2px 0 0}
.fiche-preuve--absente{color:#8a6d3b}
.fiche-motif{display:block;margin:8px 0 0;font-size:.85em;color:#6b655c}
.fiche-motif textarea{display:block;width:100%;margin-top:3px;padding:5px 7px;
  border:1px solid #d8d3ca;background:#fff;font:inherit;color:#3a352d}
.fiche-correction{margin:8px 0 0;padding:6px 8px;border:1px solid #d8d3ca;background:#fff}
.fiche-correction legend{padding:0 4px;font-size:.8em;color:#6b655c}
.fiche-correction label{display:block;margin:4px 0 0;font-size:.85em;color:#6b655c}
.fiche-correction input{display:block;width:100%;margin-top:2px;padding:4px 6px;
  border:1px solid #d8d3ca;font:inherit;color:#3a352d}
.fiche-doublon{display:block;margin:8px 0 0;font-size:.85em;color:#6b655c}
.fiche-doublon select{display:block;width:100%;margin-top:3px;padding:5px 7px;
  border:1px solid #d8d3ca;background:#fff;font:inherit;color:#3a352d}
.fiche-verdicts{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 0}
.fiche-retour{margin:6px 0 0;font-size:.88em;color:#4a453d;white-space:pre-wrap}

/* LOT 7B — COMPTAGE PHYSIQUE D'UN LOT.
   La spécification existait avant l'écran, en expectedFailure, et exigeait deux
   colonnes SÉPARÉES : « Acheté documenté » et « Compté physiquement ». Le style
   ne les rapproche pas : une facture et une observation ne se ressemblent pas. */
.stock-doctrine-comptage{margin:6px 0 0;color:#6b655c}
.compte-rappel{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline;
  margin:8px 0 0;padding:6px 8px;border-left:2px solid #d8d3ca;background:#f7f6f3}
.compte-rappel span{font-size:.8em;text-transform:uppercase;letter-spacing:.04em;color:#6b655c}
.compte-rappel strong{color:#3a352d}
.compte-rappel small{color:#6b655c}
.compte-retour{margin:8px 0 0;padding:6px 8px;border-left:2px solid #d8d3ca;
  background:#f7f6f3;font-size:.88em;color:#4a453d;white-space:pre-wrap}

/* LOT 7C — RAPPROCHEMENT DES VISUELS LABYRINTHE EXISTANTS.
   Quatre groupes, une seule liste d'originaux servis. Le filtre ne masque
   jamais une option déjà choisie : on perdrait la trace de la sélection. */
.rapprochement-filtre{margin:8px 0 0}
.rapprochement-filtre input{display:block;width:100%;margin-top:3px;padding:5px 7px;
  border:1px solid #d8d3ca;background:#fff;font:inherit;color:#3a352d}
.rapprochement-groupes{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
  gap:10px;margin:10px 0 0}
.rapprochement-groupe{display:block;font-size:.85em;color:#6b655c}
.rapprochement-groupe select{display:block;width:100%;margin-top:3px;padding:4px;
  border:1px solid #d8d3ca;background:#fff;font:inherit;color:#3a352d}
.rapprochement-confirmation{display:flex;gap:8px;align-items:flex-start;margin:10px 0 0;
  font-size:.85em;color:#4a453d}
.rapprochement-confirmation input{margin-top:3px}
.rapprochement-retour{margin:8px 0 0;padding:6px 8px;border-left:2px solid #d8d3ca;
  background:#f7f6f3;font-size:.88em;color:#4a453d;white-space:pre-wrap}
.rapprochement-vide,.rapprochement-refuse{color:#8a6d3b}

/* LOT 7C — case à cocher dans le patron partagé, et refus lisible. */
.quick-create-checkbox{display:flex;gap:8px;align-items:flex-start;font-size:.9em;color:#4a453d}
.quick-create-checkbox input{margin-top:3px}
.materialisation-refusee{color:#8a6d3b}

/* LOT 7D — ÉDITION DE FICHE SOUL CORE.
   Le PATCH remplace la fiche en entier : le payload est reconduit sans être
   touché, et l'écran le dit au lieu de l'offrir dans un éditeur JSON. */
.soul-edition-payload{margin:10px 0 0;padding:6px 8px;border-left:2px solid #d8d3ca;
  background:#f7f6f3;color:#6b655c}
.soul-edition-retour{margin:8px 0 0;padding:6px 8px;border-left:2px solid #d8d3ca;
  background:#f7f6f3;font-size:.88em;color:#4a453d;white-space:pre-wrap}

/* LES QUESTIONS DE LA MAISON — 21 sièges, 98 questions, trois états.
   Le vermillon est réservé aux filets, jamais à un aplat (charte). Il marque
   ici les deux seules choses qui doivent arrêter l'oeil : la LIMITE
   D'AUTORITÉ d'un siège, et une source INCONNU. Les trois états se
   distinguent par le style du filet, pas par une couleur d'alerte : « vide »
   et « sans moyen de répondre » ne sont pas des pannes, ce sont des
   réponses. */
.questions-maison{max-width:1120px}
.questions-comptes{display:flex;flex-wrap:wrap;gap:6px 20px;margin:10px 0 6px;
  font-size:.86em;color:var(--nl-gris-moyen)}
.questions-comptes b{color:var(--nl-charcoal);font-size:1.15em;margin-right:4px}
.questions-legende{display:flex;flex-wrap:wrap;gap:10px;margin:10px 0 14px}
.question-legende{flex:1 1 260px;padding:6px 10px;font-size:.84em;
  color:var(--nl-gris-moyen);border-left:2px solid var(--nl-gris-clair)}
.question-legende b{display:block;font-size:.9em;letter-spacing:.04em;
  color:var(--nl-charcoal)}

.sieges{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:12px}
.siege{padding:11px 13px;border:1px solid var(--nl-gris-clair);
  background:var(--nl-white-pearl)}
.siege header{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline}
.siege h3{margin:0;font-size:1em;color:var(--nl-charcoal)}
.siege header span{font-size:.8em;color:var(--nl-gris-moyen)}
.siege-vide{border:1px solid var(--nl-gris-clair);padding:1px 6px;font-size:.76em}

/* LA LIMITE SE LIT AVANT LES CHIFFRES. Un siège qui répond sans dire ce qu'il
   n'a pas le droit de faire se lit comme un siège qui décide. */
.siege-limite{margin:8px 0 0;padding:6px 10px;border-left:2px solid var(--nl-vermilion);
  font-size:.9em;color:var(--nl-charcoal)}
.siege-limite .eyebrow{display:block;margin:0 0 2px}

.siege-liens{display:flex;flex-wrap:wrap;gap:8px;margin:9px 0 0}
.siege-lien{flex:1 1 190px;padding:5px 8px;border-left:2px solid var(--nl-gris-clair)}
.siege-lien b{display:block;font-size:.92em;color:var(--nl-charcoal)}
.siege-lien small{display:block;margin-top:2px;font-size:.8em;color:var(--nl-gris-moyen)}
.siege-lien--occupe{border-left-style:solid}
.siege-lien--assiste{border-left-style:dotted}
/* INCONNU n'est pas une erreur d'affichage : c'est une réponse, et elle doit
   se voir aussi nettement qu'un chiffre. */
.siege-lien--inconnu{border-left-style:dashed;border-left-color:var(--nl-vermilion)}
.siege-compte{margin:8px 0 0;font-size:.84em;color:var(--nl-gris-moyen)}
.siege-poser{margin:8px 0 0}
.siege-questions:empty{display:none}
.siege-besoins{margin:10px 0 0;padding:6px 10px;border-left:2px solid var(--nl-gris-clair)}
.siege-besoins ul{margin:3px 0 0;padding-left:16px;font-size:.86em;
  color:var(--nl-charcoal)}

.questions{margin:8px 0 0;padding:0;list-style:none}
.question{margin:0 0 10px;padding:7px 0 7px 11px;
  border-left:2px solid var(--nl-gris-clair)}
.question--vide{border-left-style:dotted}
.question--sans_moyen_de_repondre{border-left-style:dashed}
.question-texte{margin:0;font-size:.92em;font-weight:600;color:var(--nl-charcoal)}
.question-etat{display:inline-block;margin:3px 0 0;font-size:.74em;
  letter-spacing:.05em;color:var(--nl-gris-moyen)}
.question-valeur{margin:4px 0 0;font-size:.9em;color:var(--nl-charcoal)}
.question-valeur b{font-size:1.15em}
/* Une valeur non rendue ne prend jamais l'apparence d'un zéro. */
.question-valeur--absente{color:var(--nl-gris-moyen);font-style:normal}
.question-chiffres{display:flex;flex-wrap:wrap;gap:3px 16px;margin:4px 0 0;
  padding:0;list-style:none;font-size:.86em}
.question-chiffres li{display:flex;gap:5px;align-items:baseline}
.question-chiffres span{color:var(--nl-gris-moyen)}
.question-chiffres b{color:var(--nl-charcoal)}
.question-lignes{margin:4px 0 0;padding-left:16px;font-size:.84em;
  color:var(--nl-gris-moyen)}
.question-pourquoi{margin:4px 0 0;font-size:.86em;color:var(--nl-gris-moyen)}
.question-pourquoi span{display:block;font-size:.86em;letter-spacing:.04em;
  text-transform:uppercase}
.question-manque{margin:5px 0 0;padding-left:9px;
  border-left:2px solid var(--nl-gris-clair)}
.question-manque .eyebrow{margin:0}
.question-manque ul{margin:2px 0 0;padding-left:16px;font-size:.85em;
  color:var(--nl-charcoal)}
.question-confiance,.question-source{margin:4px 0 0;font-size:.8em;
  color:var(--nl-gris-moyen);word-break:break-word}
.question-source code{font-size:.95em}
/* Une source INCONNU se voit : un chiffre sans preuve se relit comme un
   chiffre vérifié. */
.question-source--inconnue{color:var(--nl-charcoal)}
.question-source--inconnue b{letter-spacing:.05em}

/* LE GRAPHE ORGANISATIONNEL — cinq modèles, douze relations, 435 liens.

   TROIS STATUTS, TROIS TRAITEMENTS QUI NE SE CONFONDENT PAS. La couleur ne
   porte JAMAIS seule la distinction : chaque lien écrit son statut en toutes
   lettres, et le filet change de style — plein pour PROVEN, pointillé pour
   PARTIAL, tireté et vermillon pour UNMAPPED. Un daltonien, une impression
   en noir et blanc, un écran mal calibré : dans les trois cas la différence
   reste lisible. Un PARTIAL qui se lirait comme un PROVEN transformerait une
   correspondance partielle en fait établi.

   UNMAPPED PORTE LE VERMILLON, EN FILET, JAMAIS EN APLAT (charte 2026). Ce
   n'est pas une alerte d'erreur : c'est la seule chose de cet écran qui doit
   arrêter l'oeil, parce que c'est la carte de ce qui reste à raccorder.

   LES CINQ MODÈLES SONT UNE GRILLE, PAS UN ARBRE. Aucune indentation, aucun
   connecteur, aucune imbrication : cinq cartes de même rang, côte à côte.
   Une mise en page arborescente affirmerait une hiérarchie que le serveur
   mesure justement comme ABSENTE. */
.graphe{max-width:1120px}
.graphe-titre{margin:26px 0 8px;font-size:1.05em;color:var(--nl-charcoal)}
.graphe-comptes{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}
.graphe-comptes--total{margin:12px 0 14px}
.graphe-compte-cellule{padding:5px 10px;font-size:.8em;letter-spacing:.05em;
  color:var(--nl-gris-moyen);border-left:2px solid var(--nl-gris-clair)}
.graphe-compte-cellule b{display:block;font-size:1.6em;letter-spacing:0;
  color:var(--nl-charcoal)}
.graphe-comptes--total .graphe-compte-cellule b{font-size:2.1em}

/* Les trois statuts. Le style du filet suffit à les séparer sans couleur. */
.statut--PROVEN{border-left-style:solid}
.statut--PARTIAL{border-left-style:dotted}
.statut--UNMAPPED{border-left-style:dashed;border-left-color:var(--nl-vermilion)}
/* Un PARTIAL ne prend jamais l'aplomb d'un PROVEN : son compte reste en gris
   moyen là où celui d'un PROVEN passe en charbon. */
.statut--PARTIAL>b{color:var(--nl-gris-moyen)}

.graphe-legende{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0 10px}
.graphe-legende-statut{flex:1 1 280px;padding:6px 10px;font-size:.84em;
  color:var(--nl-gris-moyen);border-left:2px solid var(--nl-gris-clair)}
.graphe-legende-statut b{display:block;font-size:.9em;letter-spacing:.05em;
  color:var(--nl-charcoal)}

.graphe-modeles{display:grid;
  grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.graphe-modele{padding:11px 13px;border:1px solid var(--nl-gris-clair);
  background:var(--nl-white-pearl)}
.graphe-modele h3{margin:0;font-size:.95em;color:var(--nl-charcoal)}
.graphe-modele-compte{margin:6px 0 0}
.graphe-modele-compte b{font-size:1.9em;color:var(--nl-charcoal)}
.graphe-modele-compte small{display:block;font-size:.78em;
  color:var(--nl-gris-moyen)}
/* Un compte qui diverge de son attendu ne se range pas avec les autres. */
.graphe-ecart{color:var(--nl-vermilion);letter-spacing:.05em}
.graphe-modele-question{margin:7px 0 0;font-size:.86em;color:var(--nl-charcoal)}
.graphe-modele-question .eyebrow{display:block;margin:0 0 2px}
.graphe-modele-source{margin:6px 0 0;font-size:.76em;
  color:var(--nl-gris-moyen);word-break:break-word}

.graphe-sources{margin:6px 0 0;padding-left:16px;font-size:.86em;
  color:var(--nl-gris-moyen)}
.graphe-sources b{color:var(--nl-charcoal)}

.graphe-relations{display:grid;
  grid-template-columns:repeat(auto-fill,minmax(430px,1fr));gap:12px}
.graphe-relation{padding:11px 13px;border:1px solid var(--nl-gris-clair);
  background:var(--nl-white-pearl)}
.graphe-relation header{display:flex;flex-wrap:wrap;gap:4px 10px;
  align-items:baseline}
.graphe-relation h3{margin:0;font-size:1em;color:var(--nl-charcoal)}
.graphe-relation header code{font-size:.78em;color:var(--nl-gris-moyen)}
/* Une relation dont AUCUN lien n'est raccordé se signale avant d'être ouverte :
   l'ouvrir pour découvrir 21 UNMAPPED est une perte de temps évitable. */
.graphe-relation-vide{border:1px solid var(--nl-vermilion);padding:1px 6px;
  font-size:.74em;letter-spacing:.04em;color:var(--nl-charcoal)}
.graphe-relation-sens{margin:7px 0 0;font-size:.88em;color:var(--nl-charcoal)}
.graphe-relation-raccordement,.graphe-relation-regle{margin:6px 0 0;
  font-size:.84em;color:var(--nl-gris-moyen)}
.graphe-relation-raccordement .eyebrow,.graphe-relation-regle .eyebrow{
  display:block;margin:0 0 2px}
.graphe-fleche{margin:0 7px;color:var(--nl-gris-moyen)}
.graphe-ouvrir{margin:8px 0 0}
.graphe-liens:empty{display:none}
.graphe-liens-liste{margin:8px 0 0;padding:0;list-style:none}

/* UN LIEN : SON STATUT, PUIS CE QUI LE TIENT. Le statut est écrit, pas
   seulement coloré, et la preuve vient juste dessous — jamais ailleurs. */
.graphe-lien{margin:0 0 10px;padding:7px 0 7px 11px;
  border-left:2px solid var(--nl-gris-clair)}
.graphe-lien-tete{margin:0;font-size:.9em;color:var(--nl-charcoal)}
.graphe-lien-tete b{font-weight:600}
.graphe-lien-tete code{font-size:.85em;color:var(--nl-gris-moyen)}
.graphe-statut{display:inline-block;margin-right:9px;padding:1px 6px;
  border:1px solid var(--nl-gris-clair);font-size:.72em;letter-spacing:.06em;
  color:var(--nl-charcoal)}
.graphe-lien.statut--UNMAPPED .graphe-statut{border-color:var(--nl-vermilion)}
.graphe-lien.statut--PARTIAL .graphe-statut{border-style:dotted}
/* Une cible absente ne prend jamais l'apparence d'un rattachement. */
.graphe-sans-cible{font-size:.86em;color:var(--nl-gris-moyen)}
.graphe-preuve{margin:5px 0 0;padding-left:9px;
  border-left:2px solid var(--nl-gris-clair)}
.graphe-preuve p{margin:2px 0 0;font-size:.8em;color:var(--nl-charcoal);
  word-break:break-word}
.graphe-preuve .eyebrow{margin:0;letter-spacing:.06em}
.graphe-preuve span{color:var(--nl-gris-moyen)}
.graphe-preuve code{font-size:.95em}
.graphe-manque{margin:5px 0 0;padding-left:9px;font-size:.84em;
  color:var(--nl-charcoal);border-left:2px solid var(--nl-vermilion)}
.graphe-manque .eyebrow{display:block;margin:0 0 2px}
/* Un statut sans preuve ni manque n'existe pas dans le contrat du serveur.
   S'il apparaissait, le silence le ferait passer pour vérifié. */
.graphe-sans-justification{margin:5px 0 0;padding:5px 9px;font-size:.84em;
  color:var(--nl-charcoal);border-left:2px solid var(--nl-vermilion);
  border-top:1px solid var(--nl-vermilion)}
.graphe-objets{margin:7px 0 0;font-size:.84em;color:var(--nl-gris-moyen);
  word-break:break-word}
.graphe-objets .eyebrow{display:block;margin:0 0 2px}
.graphe-objets code{margin-right:5px;font-size:.95em}

.graphe-absents{display:grid;
  grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:10px}
.graphe-absent{padding:11px 13px;margin:0 0 10px;
  border:1px solid var(--nl-gris-clair);background:var(--nl-white-pearl)}
.graphe-absent h3{margin:0;font-size:.95em;color:var(--nl-charcoal)}
@media(max-width:850px){
  .graphe-relations,.graphe-absents,.graphe-modeles{grid-template-columns:1fr}
}

/* ═══ L'INVENTAIRE DES MANQUES ═══════════════════════════════════════════
   « Un fait vrai réparti sur 424 lignes n'est pas un fait connu. »

   L'écran CONSTATE, il ne juge pas : aucun compte n'est peint en alerte, et
   aucun n'est peint en « réglé ». Les nombres restent des nombres.

   Les variables utilisées ici sont celles que `design-refinement.css`
   remappe pour le thème sombre (--ink, --muted, --line, --soft, --red) :
   l'écran suit le thème au lieu de figer ses gris. */
.inventaire-manques{max-width:1120px}
.inventaire-titre{margin:0 0 14px;color:var(--muted);font-size:1em;line-height:1.5}

/* LE DÉNOMINATEUR D'ABORD. Sans lui, aucun compte de cet écran ne se lit. */
.inventaire-total{margin:0 0 18px;padding-bottom:14px;border-bottom:1px solid var(--line);
  font-size:1.05em;line-height:1.5;color:var(--ink)}
.inventaire-total b{font-size:1.9em;font-weight:500;margin-right:8px}

/* L'ANGLE MORT SE LIT AVANT LES CHIFFRES, comme la limite d'un siège.
   Un inventaire des manques qui met ses propres angles morts en petit se
   contredit : ce bloc ne descend donc JAMAIS sous la taille du corps de
   texte, et n'utilise pas la classe .helper. */
.inventaire-angle-mort{margin:0 0 22px;padding:16px 18px;background:var(--paper);
  border:1px solid var(--line);border-left:3px solid var(--red)}
.inventaire-angle-mort .eyebrow{margin:0 0 6px}
.inventaire-angle-mort .eyebrow+p{margin:0 0 16px}
.inventaire-angle-mort p:last-child{margin-bottom:0}
.inventaire-angle-mort p:not(.eyebrow){font-size:1em;line-height:1.65;color:var(--ink)}

/* Sur quoi l'écran trie, et ce qu'il ne calcule pas : dit, pas supposé. */
.inventaire-ordre{margin:0 0 8px;color:var(--muted);font-size:.92em;line-height:1.55}

.inventaire-nombre{white-space:nowrap;font-variant-numeric:tabular-nums}
.manque-famille{color:var(--muted);font:10px 'Anonymous Pro',monospace;letter-spacing:.06em}
.manque-quoi{color:var(--ink)}

/* LA CONSÉQUENCE EST LA PARTIE UTILE. Elle n'est ni tronquée, ni repliée,
   ni réduite à une infobulle : « Aucun caractère de ces documents n'est
   connu » dit ce que l'absence coûte. */
.manque-consequence{display:block;font-size:1em;line-height:1.5;color:var(--ink)}
/* Une conséquence non déclarée n'est pas une conséquence nulle : l'écran le
   dit plutôt que de laisser une case vide se lire comme « sans effet ». */
.manque-consequence--non-declaree{color:var(--muted);font-style:italic}

.inventaire-identites{margin:0 0 8px;padding:14px 16px;background:var(--paper);
  border:1px solid var(--line)}
.inventaire-identites p{margin:0 0 8px;font-size:1em;line-height:1.5;color:var(--ink)}
.inventaire-identites b{font-size:1.6em;font-weight:500;margin-right:8px}
.inventaire-pourquoi{margin:0!important;padding-top:10px;border-top:1px solid var(--soft);
  color:var(--muted);line-height:1.6}

.inventaire-registres{margin:0;padding:0;list-style:none;display:grid;
  grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:8px}
.inventaire-registres li{padding:9px 11px;border:1px solid var(--line);background:var(--paper);
  font-size:.95em;color:var(--ink)}
.inventaire-registres b{font-size:1.25em;font-weight:500}
.inventaire-registres span{color:var(--muted);font:10px 'Anonymous Pro',monospace;
  letter-spacing:.06em;margin-right:6px}
@media(max-width:850px){.inventaire-registres{grid-template-columns:1fr}}

/* ═══════════════════════════════════════════════════════════════════════════
   REGISTRE SOUL CORE — CHANTIER W2

   L'écran s'ouvrait sur trois grands nombres, dix lignes de doctrine et
   quatre compteurs à zéro ; la liste arrivait après. Ces règles tiennent
   l'ordre inverse : une tête d'écran, trois faits courts, les filtres, la
   liste. Le raisonnement se déplie, il ne s'impose pas.

   LES TROIS FAITS SE LISENT À LA MÊME TAILLE. « 0 identité canonique » ne
   doit pas paraître plus petit que « 162 lignes lues » : un fait gênant
   rétréci est un fait maquillé. Une seule règle porte leur taille, pour
   qu'aucune ne puisse en rapetisser un.

   La double classe `.product-truth.product-truth--compact` n'est pas un
   caprice : `media-library-selection.css` est chargé APRÈS style.css et pose
   `.product-truth{margin:0 0 1rem}`. À spécificité égale, le dernier gagne.
   ═══════════════════════════════════════════════════════════════════════ */
.product-truth.product-truth--compact{margin:0 0 16px;padding:0;border:0;background:none}
.sc-faits{display:flex;flex-wrap:wrap;gap:0;border:1px solid var(--line);background:#fff}
.sc-fait{display:flex;align-items:baseline;gap:8px;flex:1 1 220px;padding:13px 16px;
  border-right:1px solid var(--soft);color:var(--muted);
  font:11px/1.4 'Anonymous Pro',monospace;letter-spacing:.03em}
.sc-fait:last-child{border-right:0}
.sc-fait b{color:var(--ink);font:500 22px/1 'League Spartan',sans-serif;
  font-variant-numeric:tabular-nums}

.sc-pourquoi{margin:8px 0 12px;border:1px dashed var(--line);background:rgba(255,255,255,.38)}
.sc-pourquoi>summary{padding:9px 13px;color:var(--muted);cursor:pointer;
  font:11px 'Anonymous Pro',monospace;letter-spacing:.06em}
.sc-pourquoi__corps{padding:0 13px 12px;border-top:1px solid var(--soft)}
.sc-pourquoi__corps p{margin:11px 0 0;color:#6c6666;line-height:1.6;font-size:13px}
.sc-pourquoi__limite{border-top:1px solid var(--soft);padding-top:10px;color:var(--muted)}

/* Un contrôle qui disparaît sans raison déroute autant qu'un contrôle vide. */
.sc-note-preselection{margin:0 0 12px;padding:8px 12px;border-left:3px solid var(--line);
  color:var(--muted);font:11px/1.5 'Anonymous Pro',monospace}

/* Un vide muet se relit comme une mesure : celui-ci dit sa cause. */
.sc-liste-vide{border:1px dashed #c8c0c0;padding:24px;margin:0;color:#6c6666;
  line-height:1.6;background:rgba(255,255,255,.42)}

@media(max-width:850px){.sc-faits{display:block}
  .sc-fait{border-right:0;border-bottom:1px solid var(--soft)}
  .sc-fait:last-child{border-bottom:0}}

/* ═══════════════════════════════════════════════════════════════════════════
   UX STOCK — NETTOYAGE DE CONTENU
   DÉBUT DU BLOC UX STOCK

   L'UTILISATEUR VOIT LE MÉTIER.  NOEMA VOIT LA COMPLEXITÉ.

   POURQUOI CE BLOC EST DANS style.css ET PAS AILLEURS. Tout le CSS des deux
   écrans Stock vit dans `media-library-selection.css`, qui ne m'appartient
   pas. `style.css` est chargé AVANT lui : à spécificité égale, l'autre
   feuille gagne. Chaque règle ci-dessous qui doit primer porte donc une
   spécificité STRICTEMENT supérieure — `.stock-page .pilote` (0,2,0) contre
   `.pilote` (0,1,0) — et cette supériorité ne dépend pas de l'ordre de
   chargement. Un test le vérifie.

   LE MODE SOMBRE MODIFIE LA PALETTE, JAMAIS LA HIÉRARCHIE. Les valeurs
   claires ci-dessous REPRODUISENT À L'IDENTIQUE les littéraux déjà présents
   dans `media-library-selection.css`. En thème clair, ce bloc ne change donc
   rien du tout ; il ne fait qu'ouvrir une porte que le thème sombre emprunte.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Deux variables étaient UTILISÉES sans être DÉFINIES nulle part :
     .ctl    { background: var(--nlo-fond, rgba(250,250,250,.97)) }
     .pilote { border: 1px solid var(--trait, #d8d2c6) }
   Le repli s'appliquait donc toujours — un aplat quasi blanc, collant, sur
   toute la largeur. C'est le « grand bloc blanc dans un écran sombre ».
   Les définir sur des jetons qui ONT une variante sombre suffit à le régler,
   partout à la fois, sans toucher la feuille qui les consomme. */
:root{
  --nlo-fond:var(--nl-pearl);
  --trait:var(--nl-grey-light);
  /* Palette des blocs de preuve et de diagnostic — valeurs claires
     identiques aux littéraux existants. */
  --stk-carte:#ffffff;
  --stk-carte-douce:#fdfcfa;
  --stk-entete:#f7f4ee;
  --stk-trait:#e3ddd1;
  --stk-trait-doux:#f0ece4;
  --stk-texte:#3a3227;
  --stk-texte-moyen:#5a5449;
  --stk-texte-doux:#8a8172;
  --stk-texte-tenu:#a49b8c;
  --stk-code:#f0ece3;
  --stk-inverse-fond:#2f2a22;
  --stk-inverse-texte:#f6f2ea;
  --stk-accent:#7a6a52;
  --stk-opacite-onglet:.55;
  --stk-trait-ui:rgba(128,128,128,.3);
}
:root[data-theme="dark"]{
  --stk-carte:#211d1b;
  --stk-carte-douce:#262120;
  --stk-entete:#2b2522;
  --stk-trait:#514943;
  --stk-trait-doux:#3a332f;
  --stk-texte:#fffaf7;
  --stk-texte-moyen:#ddd3cc;
  --stk-texte-doux:#c0b6b0;
  --stk-texte-tenu:#a79d96;
  --stk-code:#332c29;
  --stk-inverse-fond:#f3ede8;
  --stk-inverse-texte:#211d1b;
  --stk-accent:#c3ab84;
  --stk-opacite-onglet:.74;
  --stk-trait-ui:rgba(200,190,182,.42);
}
@media (prefers-color-scheme: dark){
  :root[data-theme="system"]{
    --stk-carte:#211d1b;
    --stk-carte-douce:#262120;
    --stk-entete:#2b2522;
    --stk-trait:#514943;
    --stk-trait-doux:#3a332f;
    --stk-texte:#fffaf7;
    --stk-texte-moyen:#ddd3cc;
    --stk-texte-doux:#c0b6b0;
    --stk-texte-tenu:#a79d96;
    --stk-code:#332c29;
    --stk-inverse-fond:#f3ede8;
    --stk-inverse-texte:#211d1b;
    --stk-accent:#c3ab84;
    --stk-opacite-onglet:.74;
    --stk-trait-ui:rgba(200,190,182,.42);
  }
}

/* ── LA TÊTE D'ÉCRAN — LA COLLISION MESURÉE ───────────────────────────────
   `h1{font-size:clamp(34px,4vw,62px);line-height:1.02;letter-spacing:-.055em}`
   est global. `media-library-selection.css` ramène la TAILLE à 1.4rem mais
   laisse l'interlignage à 1.02 et le crénage à -.055em : à 22 px, la boîte de
   ligne fait 22,8 px, l'eyebrow a `margin:0` et le titre `margin:.1rem 0 .2rem`.
   Trois lignes se touchent. On rend l'air, on ne touche pas la hiérarchie. */
.stock-page .stock-head{margin:0 0 1.15rem}
.stock-page .stock-head .eyebrow{margin:0 0 .5rem;line-height:1.5}
.stock-page .stock-head h1{
  margin:0 0 .45rem;font-size:1.55rem;line-height:1.25;letter-spacing:-.01em;
}
.stock-page .stock-head .stock-sous{line-height:1.55;max-width:62ch}

/* ── NIVEAU 1 · LE RÉSUMÉ MÉTIER ──────────────────────────────────────────
   Deux faits, pas cinq. Une seule règle porte leur taille : aucun des deux
   ne peut être rendu plus gros que l'autre par une règle qui le viserait
   seul, et un test l'interdit. */
.stock-resume{display:flex;flex-wrap:wrap;gap:2.4rem;margin:0 0 1.1rem}
.stock-resume__fait{display:flex;flex-direction:column;gap:.15rem}
.stock-resume__fait strong{
  font-size:2rem;line-height:1.1;font-weight:500;font-variant-numeric:tabular-nums;
  color:var(--nl-charcoal,#141212);
}
.stock-resume__fait span{font-size:.78rem;line-height:1.4;max-width:16rem;color:var(--muted,#767676)}

/* ── NIVEAU 1 · LE VIDE QUI SE COMPREND ───────────────────────────────────
   Il nomme ce qu'on n'a pas, pourquoi, et le geste possible. Aucune table,
   aucun code, aucune page de livre. */
.stock-vide-metier{
  padding:1.35rem 1.5rem;margin:0 0 1.2rem;border-radius:.4rem;
  border:1px dashed var(--stk-trait);background:transparent;
}
.stock-vide-metier__titre{
  margin:0 0 .5rem;font-size:1.02rem;font-weight:500;line-height:1.4;color:var(--stk-texte);
}
.stock-vide-metier__cause{
  margin:0;font-size:.86rem;line-height:1.6;max-width:64ch;color:var(--stk-texte-doux);
}
.stock-vide-metier__geste{margin:.95rem 0 0}

/* ── NIVEAUX 2 ET 3 · LES REPLIS ──────────────────────────────────────────
   Un `<details>` dont le résumé serait masqué ne serait pas un repli mais
   une suppression. Le résumé reste visible, cliquable, et annonce ce qu'il
   contient. Aucune règle ici ne pose `open`. */
.stock-pli{
  margin:.7rem 0 0;border-top:1px solid var(--stk-trait-doux);
}
.stock-pli>summary{
  display:flex;flex-wrap:wrap;align-items:baseline;gap:.6rem;
  padding:.8rem .1rem;cursor:pointer;list-style:none;
}
.stock-pli>summary::-webkit-details-marker{display:none}
.stock-pli>summary::before{
  content:"›";display:inline-block;font-size:1.05rem;line-height:1;
  color:var(--stk-texte-doux);transition:transform .15s ease;
}
.stock-pli[open]>summary::before{transform:rotate(90deg)}
.stock-pli__titre{font-size:.92rem;font-weight:500;color:var(--stk-texte)}
.stock-pli__geste{font-size:.76rem;color:var(--stk-texte-doux)}
.stock-pli>summary:hover .stock-pli__titre{color:var(--stk-accent)}
.stock-pli__corps{padding:.2rem 0 1.1rem}
/* PILOT_001 n'est plus une annonce : c'est une proposition à examiner. */
.stock-pli--pilote>summary .stock-pli__geste{
  border:1px solid var(--stk-trait);border-radius:.24rem;padding:.22rem .6rem;
  color:var(--stk-texte);
}

/* ── LA BARRE DE CONTRÔLE — UNE LIGNE COMPACTE ────────────────────────────
   Le fond opaque quasi blanc venait de `--nlo-fond` non défini ; il est
   défini plus haut. Restent la hauteur et le poids du bouton de sélection,
   qui n'a plus à être le geste principal d'un écran de consultation. */
.stock-page .ctl{
  margin:.2rem 0 1rem;padding:.35rem 0 .4rem;
  border-bottom:1px solid var(--stk-trait-doux);
}
.stock-page .ctl-cats{margin-bottom:.3rem}
.stock-page .ctl-cat{opacity:var(--stk-opacite-onglet)}
.stock-page .ctl-cat.is-active{opacity:1}
.stock-page .ctl-recherche,
.stock-page .ctl-bouton{border-color:var(--stk-trait-ui)}
.stock-page .ctl-vue.is-active{border-color:var(--stk-trait-ui)}
/* « Sélectionner » n'est plus `--primaire` : il n'est rendu QUE s'il y a
   quelque chose à sélectionner, et il reste un geste secondaire. */
.ctl-bouton--selection{margin-left:auto}

/* ── MODE SOMBRE · LES APLATS BLANCS DES BLOCS DE PREUVE ──────────────────
   `media-library-selection.css` pose `#fff`, `#fdfcfa`, `#3a3227`… en dur.
   Ces règles-ci reprennent EXACTEMENT les mêmes propriétés via des jetons.
   En clair, les jetons valent les littéraux : rien ne bouge. En sombre, la
   palette suit — et la hiérarchie, elle, ne bouge pas non plus. */
.stock-page .pilote{background:var(--stk-carte-douce);border-color:var(--stk-trait);border-left-color:var(--stk-accent)}
.stock-page .pilote-reco{color:var(--stk-texte)}
.stock-page .pilote h4{color:var(--stk-texte-doux)}
.stock-page .pilote-champ{border-bottom-color:var(--stk-trait-doux)}
.stock-page .pilote-champ dt{color:var(--stk-texte-doux)}
.stock-page .pilote-champ dd code{background:var(--stk-inverse-fond);color:var(--stk-inverse-texte)}
.stock-page .pilote-champ dd em{color:var(--stk-texte-tenu)}
.stock-page .pilote-emp code{background:var(--stk-code)}
.stock-page .pilote-emp em{color:var(--stk-texte-tenu)}
.stock-page .pilote-fournisseur{background:var(--stk-code);color:var(--stk-texte-doux)}
.stock-page .pilote-ecart{color:var(--stk-texte-moyen)}
.stock-page .pilote-arret{background:var(--stk-code);border-left-color:var(--stk-accent);color:var(--stk-texte)}
.stock-page .pilote-classement summary{color:var(--stk-accent)}
.stock-page .pilote-classement em{color:var(--stk-texte-tenu)}
.stock-page .pilote-apres{color:var(--stk-texte-doux)}

.stock-page .unk{background:var(--stk-carte);border-color:var(--stk-trait)}
.stock-page .unk-intro{color:var(--stk-texte-moyen)}
.stock-page .unk-tag{color:var(--stk-texte-doux)}
.stock-page .unk header code{color:var(--stk-texte-moyen)}
.stock-page .unk-extrait{color:var(--stk-texte)}
.stock-page .unk-just{color:var(--stk-texte-doux)}
.stock-page .unk-res em{color:var(--stk-texte-doux)}
.stock-page .unk-doc{color:var(--stk-texte-tenu)}
.stock-page .unk-regle{color:var(--stk-texte-doux)}

.stock-page .mlmo-intro{color:var(--stk-texte-moyen)}
.stock-page .mlmo-intro code{background:var(--stk-code)}
.stock-page .mlmo-tab{background:var(--stk-carte);border-color:var(--stk-trait)}
.stock-page .mlmo-tab strong{color:var(--stk-texte)}
.stock-page .mlmo-tab span{color:var(--stk-texte-doux)}
.stock-page .mlmo-tab.is-active{background:var(--stk-inverse-fond);border-color:var(--stk-inverse-fond)}
.stock-page .mlmo-tab.is-active strong,
.stock-page .mlmo-tab.is-active span{color:var(--stk-inverse-texte)}
.stock-page .mlmo-wrap{background:var(--stk-carte);border-color:var(--stk-trait)}
.stock-page .mlmo-table th{background:var(--stk-entete);color:var(--stk-texte-doux);border-bottom-color:var(--stk-trait)}
.stock-page .mlmo-table td{border-bottom-color:var(--stk-trait-doux)}
.stock-page .mlmo-table td.num{color:var(--stk-texte-moyen)}
.stock-page .mlmo-ref code{color:var(--stk-texte)}
.stock-page .mlmo-ref em{color:var(--stk-texte-tenu)}
.stock-page .mlmo-badge{background:var(--stk-code);color:var(--stk-texte-moyen)}
.stock-page .mlmo-legende dt{color:var(--stk-texte)}
.stock-page .mlmo-legende dd{color:var(--stk-texte-doux)}
.stock-page .mlmo-legende code{background:var(--stk-code)}
.stock-page .mlmo-manque{color:var(--stk-texte-doux)}
.stock-page .mlmo-table .is-absent{color:var(--stk-texte-tenu)}
.stock-page .mlmo-methode{color:var(--stk-texte-doux)}

/* Les compteurs détaillés du niveau 2 : lisibles, jamais grands. */
.stock-chiffres-detail{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));
  gap:.3rem 1.6rem;margin:0 0 1.1rem}
.stock-chiffres-detail>div{display:flex;justify-content:space-between;gap:1rem;
  padding:.4rem 0;border-bottom:1px solid var(--stk-trait-doux)}
.stock-chiffres-detail dt{font-size:.79rem;color:var(--stk-texte-doux)}
.stock-chiffres-detail dd{margin:0;font-size:.85rem;font-variant-numeric:tabular-nums;color:var(--stk-texte)}

/* ── MODE SOMBRE · LES SURFACES BLANCHES GÉNÉRIQUES DES DEUX ÉCRANS ───────
   `style.css` lui-même pose `background:#fff` sur `.stat-strip>div`,
   `.data-table-wrap` et `.inventory-card`. Sur les écrans Stock, ces aplats
   sont les « cartes blanches extrêmement agressives ». Même méthode. */
.stock-page .stat-strip>div,
.stock-page .data-table-wrap,
.stock-page .inventory-card{background:var(--stk-carte)}
.stock-page .stat-strip,
.stock-page .stat-strip>div,
.stock-page .data-table-wrap,
.stock-page .inventory-card{border-color:var(--stk-trait)}
.stock-page .empty{background:transparent;border-color:var(--stk-trait);color:var(--stk-texte-doux)}
.stock-page .empty strong{color:var(--stk-texte)}

/*   FIN DU BLOC UX STOCK
   ═══════════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   DÉBUT DU BLOC UX SOUL CORE — FICHE

   L'UTILISATEUR VOIT LE MÉTIER.  NOEMA VOIT LA COMPLEXITÉ.

   La fiche RÉUTILISE les classes de repli du chantier Stock (`.stock-pli`,
   `.stock-resume`, `.stock-vide-metier`), déjà définies plus haut. Ce bloc
   n'ajoute QUE le strict nécessaire propre à la fiche : la liste « ce qui
   manque » et l'aération du résumé métier. Aucune règle ici n'ouvre un repli.
   ═══════════════════════════════════════════════════════════════════════════ */
.soul-compact-dossier .stock-resume{margin:1.1rem 0 .3rem}
.soul-compact-dossier .stock-resume__fait strong{font-size:1.5rem}
.soul-compact-dossier .stock-vide-metier{margin:0 0 1.4rem}
/* « Ce qui manque » : une liste métier, lisible, jamais un tableau technique. */
.soul-manques{margin:.6rem 0 .3rem;padding:0;list-style:none;
  display:flex;flex-wrap:wrap;gap:.4rem .5rem}
.soul-manques li{padding:.22rem .6rem;border:1px solid var(--stk-trait);
  border-radius:.24rem;font-size:.82rem;line-height:1.35;color:var(--stk-texte)}
.soul-compact-dossier .stock-vide-metier .soul-compact-actions{margin:.9rem 0 0}
/* Le repli de détail s'insère dans la colonne des blocs sans la déformer. */
.soul-compact-blocks>.stock-pli{margin-top:0;border-top:0}
.soul-compact-blocks>.stock-pli>summary{padding-top:0}
.soul-compact-blocks>.stock-pli .stock-pli__corps{display:grid;gap:14px;padding-bottom:0}
/*   FIN DU BLOC UX SOUL CORE — FICHE
   ═══════════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════
   DÉBUT DU BLOC UX MÉDIATHÈQUE — BARRE DE SÉLECTION COLLANTE
   La barre d'actions du mode sélection (.media-bulk-bar) doit rester visible
   pendant le défilement de la longue liste d'images. Le conteneur qui défile
   est `main>section` (.media-library), à qui design-refinement.css pose
   overflow-y:auto ; l'en-tête NLO vit HORS de ce conteneur, donc top:0 colle la
   barre au sommet de la zone défilante SANS jamais recouvrir l'en-tête. Le
   compteur « N objets sélectionnés » fait partie de la barre : il reste donc
   lui aussi visible, et la sélection (état, hors DOM) survit au défilement.
   ═══════════════════════════════════════ */
.media-bulk-bar--sticky{ position:sticky; top:0; z-index:30; }
/*   FIN DU BLOC UX MÉDIATHÈQUE — BARRE DE SÉLECTION COLLANTE
   ═══════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   DÉBUT DU BLOC UX MÉTIER — LIVRAISON ux-metier
   « L'UTILISATEUR VOIT LE MÉTIER. NOEMA VOIT LA COMPLEXITÉ. »
   Présentation seulement : rien de ce qui existe n'est supprimé.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ITEM 1 — le pli « Preuves / Pourquoi ? » réutilise .stock-pli ; on l'aère juste
   à l'intérieur du bloc de connaissance, sans redéfinir le patron. */
.workspace-knowledge-preuves{ margin-top:14px; }
.workspace-knowledge-preuves .product-source-list{ margin:0; }

/* ITEM 2 — fichier sensible dé-emphasé en Bibliothèque : marqueur explicite,
   jamais un item métier cliquable. */
.tag--sensible{ background:rgba(233,75,76,.12); color:var(--nl-vermilion,#E94B4C);
  border:1px solid rgba(233,75,76,.4); border-radius:4px; padding:2px 6px; font-size:.72rem; }
tr.original-sensible{ opacity:.72; }

/* ITEM 3 — sélecteurs métier (puces) qui remplacent la recherche libre. */
.domain-selecteurs{ display:flex; flex-direction:column; gap:8px; margin:12px 0 16px; }
.domain-facet{ display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; }
.domain-facet__label{ font-size:.74rem; letter-spacing:.04em; text-transform:uppercase;
  color:var(--muted,#756e6e); min-width:96px; }
.domain-facet__chips{ display:flex; gap:6px; flex-wrap:wrap; }
.domain-chip{ border:1px solid var(--line,#ddd7d5); background:var(--paper,#fffdfc);
  color:var(--ink,#151313); border-radius:999px; padding:4px 12px; font-size:.8rem; cursor:pointer; }
.domain-chip:hover{ border-color:var(--stone,#6d6868); }
.domain-chip.is-active{ background:var(--ink,#151313); color:var(--paper,#fffdfc); border-color:var(--ink,#151313); }
:root[data-theme="dark"] .domain-chip{ background:var(--stk-carte,#211d1b); color:var(--stk-texte,#f6f2ea);
  border-color:var(--stk-trait,#3a332f); }
:root[data-theme="dark"] .domain-chip.is-active{ background:var(--stk-texte,#f6f2ea); color:var(--stk-inverse-fond,#2f2a22); }

/* ITEM 4 — badge d'état métier du média (sans jargon), squelette d'aperçu stable. */
.media-etat-badge{ display:inline-block; font-size:.68rem; letter-spacing:.03em; text-transform:uppercase;
  border-radius:4px; padding:2px 7px; margin-bottom:5px; border:1px solid transparent; }
.media-etat-badge--enregistre,
.media-etat-badge--conserve{ background:rgba(60,140,90,.12); color:#2f7d4f; border-color:rgba(60,140,90,.35); }
.media-etat-badge--original,
.media-etat-badge--a-classer{ background:rgba(120,110,80,.14); color:#7a6a52; border-color:rgba(120,110,80,.35); }
.media-etat-badge--a-relier{ background:rgba(70,110,150,.12); color:#3f6a99; border-color:rgba(70,110,150,.35); }
.media-etat-badge--apercu-indisponible{ background:var(--soft,#eee9e7); color:var(--muted,#756e6e); border-color:var(--line,#ddd7d5); }
.media-library-image--reserve{ position:relative; aspect-ratio:1/1; min-height:120px;
  display:flex; align-items:center; justify-content:center; overflow:hidden; background:var(--pearl,#f7f4f3); }
.media-library-image--reserve img{ width:100%; height:100%; object-fit:cover; }
/* HOTFIX aperçu vidéo — la vignette de la grille reçoit un lecteur natif
   (métadonnées seulement, pas d'autoplay). L'inspecteur laisse la vidéo entière. */
.media-library-image--reserve video.media-library-video{ width:100%; height:100%; object-fit:cover; background:#000; }
.media-inspector-visual video.media-inspector-video{ width:100%; height:auto; max-height:min(70vh,760px); background:#000; }
.media-inspector-visual img[src*="/view"]{ width:100%; height:auto; object-fit:contain; }
.media-library-image__skel{ position:absolute; inset:0;
  background:linear-gradient(100deg,var(--pearl,#f7f4f3) 30%,var(--soft,#eee9e7) 50%,var(--pearl,#f7f4f3) 70%);
  background-size:200% 100%; animation:media-skel 1.4s ease-in-out infinite; }
.media-library-image__vide{ position:relative; z-index:1; font-size:.72rem; color:var(--muted,#756e6e); }
@keyframes media-skel{ 0%{background-position:180% 0} 100%{background-position:-80% 0} }
@media (prefers-reduced-motion: reduce){ .media-library-image__skel{ animation:none; } }
.media-bulk-bar__resume{ font-size:.76rem; color:var(--muted,#756e6e); }
:root[data-theme="dark"] .media-library-image--reserve{ background:var(--stk-carte-douce,#262120); }

/* A1 / A11 — « Preuves / Pourquoi ? » : des compteurs métier, pas des fichiers. */
.workspace-knowledge-preuves__resume{ font-size:.82rem; color:var(--muted,#756e6e); margin:0 0 .5rem; }
.workspace-knowledge-preuves__provenance{ list-style:none; margin:0 0 .6rem; padding:0;
  display:flex; flex-wrap:wrap; gap:.4rem .6rem; }
.workspace-knowledge-preuves__provenance li{ display:inline-flex; align-items:baseline; gap:.3rem;
  border:1px solid var(--line,#ddd7d5); border-radius:999px; padding:.15rem .6rem; background:var(--paper,#fffdfc); }
.workspace-knowledge-preuves__provenance li strong{ font-size:.85rem; }
.workspace-knowledge-preuves__provenance li span{ font-size:.74rem; color:var(--muted,#756e6e); }
.workspace-knowledge-preuves__lien{ font-size:.8rem; }
:root[data-theme="dark"] .workspace-knowledge-preuves__provenance li{ background:var(--stk-carte,#211d1b); border-color:var(--stk-ligne,#3a332f); }

/* A3 — états de contact à poids visuel distinct : une hypothèse n'est pas une fiche. */
.contact-etat-badge{ display:inline-block; font-size:.64rem; letter-spacing:.04em; text-transform:uppercase;
  font-weight:600; padding:.12rem .5rem; border-radius:999px; border:1px solid var(--line,#ddd7d5);
  margin-bottom:.35rem; }
.contact-etat-badge--confirme{ background:rgba(60,140,90,.12); color:#2f7d4f; border-color:rgba(60,140,90,.35); }
.contact-etat-badge--propose{ background:rgba(120,110,80,.14); color:#7a6a52; border-color:rgba(120,110,80,.35); }
.contact-etat-badge--mention{ background:rgba(190,120,40,.10); color:#a76a1e; border-color:rgba(190,120,40,.40); }
.contact-etat-badge--inconnu{ background:var(--soft,#eee9e7); color:var(--muted,#756e6e); border-color:var(--line,#ddd7d5); }
/* La mention documentaire (hypothèse écrite par Noema, non validée) reste en retrait :
   fond hachuré léger, bord pointillé — elle ne peut pas se lire comme un client réel. */
.source.contact-etat--mention{ border-style:dashed; opacity:.92;
  background:repeating-linear-gradient(135deg,transparent 0 10px,rgba(190,120,40,.045) 10px 20px); }
.source.contact-etat--inconnu{ opacity:.85; }
.source.contact-etat--confirme{ border-left:3px solid rgba(60,140,90,.55); }

/* A10 — squelette d'écran : la navigation s'applique tout de suite. */
.ecran-squelette{ padding:1.2rem 0; }
.ecran-squelette>*{ border-radius:10px;
  background:linear-gradient(100deg,var(--pearl,#f7f4f3) 30%,var(--soft,#eee9e7) 50%,var(--pearl,#f7f4f3) 70%);
  background-size:200% 100%; animation:media-skel 1.4s ease-in-out infinite; }
.ecran-squelette__tete{ height:52px; width:min(420px,60%); margin-bottom:1rem; }
.ecran-squelette__lignes span{ display:block; height:14px; margin:.5rem 0; }
.ecran-squelette__lignes span:nth-child(1){ width:82%; }
.ecran-squelette__lignes span:nth-child(2){ width:68%; }
.ecran-squelette__lignes span:nth-child(3){ width:74%; }
.ecran-squelette__lignes{ background:none!important; animation:none!important; }
.ecran-squelette__grille{ display:grid; grid-template-columns:repeat(3,1fr); gap:1rem; margin-top:1.4rem;
  background:none!important; animation:none!important; }
.ecran-squelette__grille div{ height:120px; border-radius:10px;
  background:linear-gradient(100deg,var(--pearl,#f7f4f3) 30%,var(--soft,#eee9e7) 50%,var(--pearl,#f7f4f3) 70%);
  background-size:200% 100%; animation:media-skel 1.4s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce){ .ecran-squelette>*,.ecran-squelette__grille div{ animation:none; } }
:root[data-theme="dark"] .ecran-squelette>*,
:root[data-theme="dark"] .ecran-squelette__grille div{
  background:linear-gradient(100deg,var(--stk-carte,#211d1b) 30%,var(--stk-carte-douce,#262120) 50%,var(--stk-carte,#211d1b) 70%);
  background-size:200% 100%; }

/* A4 — l'identité technique d'un tableau d'action descend sous un pli. */
.action-details-noema{ margin-top:.8rem; }

/*   FIN DU BLOC UX MÉTIER — LIVRAISON ux-metier
   ═══════════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   DÉBUT DU BLOC FRONT-USER-OPERABILITY — SB-01 · FIN · UX-01 · CONN-01
   Styles additifs pour les composants Base de l'âme, Finance vérité et
   Connecteurs. Aucun style existant n'est modifié. Palette réutilisée.
   ═══════════════════════════════════════════════════════════════════════════ */

/* Pipeline d'ordre imposé (Base de l'âme) */
.sb-pipeline{ display:flex; flex-wrap:wrap; align-items:center; gap:.4rem; list-style:none; padding:0; margin:0 0 1.2rem; }
.sb-pipeline li{ display:flex; align-items:center; gap:.35rem; font-size:.82rem; color:var(--muted); }
.sb-pipeline li.sb-pipeline__actif{ color:var(--ink); font-weight:600; }
.sb-pipeline__n{ display:inline-flex; align-items:center; justify-content:center; width:1.3rem; height:1.3rem; border-radius:50%; background:var(--soft); font-size:.72rem; }
.sb-pipeline__fleche{ color:var(--muted); }
.sb-step{ display:flex; align-items:center; justify-content:space-between; gap:1rem; margin:1.4rem 0 .6rem; border-top:1px solid var(--line); padding-top:1rem; }
.sb-boundary{ background:var(--soft); border-radius:.6rem; padding:.8rem 1rem; margin:.6rem 0; }
.sb-boundary p{ margin:.3rem 0 0; }
.sb-source-grid,.sb-valid-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(340px,1fr)); gap:1rem; }
.sb-source,.sb-valid-source{ border:1px solid var(--line); border-radius:.7rem; padding:1rem; background:var(--paper); }
.sb-source__head{ display:flex; justify-content:space-between; align-items:flex-start; gap:.6rem; }
.sb-source__head h3{ margin:.2rem 0; }
.sb-facts{ margin:.6rem 0; display:grid; gap:.5rem; }
.sb-facts div{ display:grid; gap:.1rem; }
.sb-facts dt{ font-size:.72rem; text-transform:uppercase; letter-spacing:.04em; color:var(--muted); }
.sb-facts dd{ margin:0; font-size:.9rem; }
.sb-badge{ font-size:.72rem; padding:.15rem .5rem; border-radius:1rem; white-space:nowrap; }
.sb-badge--admise{ background:#e7f3ea; color:#1d6b39; }
.sb-badge--revue{ background:#fdf3e0; color:#8a5b12; }
.sb-badge--attente{ background:var(--soft); color:var(--muted); }
.sb-badge--conflit{ background:#fbe6e6; color:#a02020; }
.sb-invariant{ font-size:.82rem; border-radius:.4rem; padding:.5rem .7rem; margin:.5rem 0; }
.sb-invariant--ok{ background:#e7f3ea; color:#1d6b39; }
.sb-invariant--bloque{ background:#fbe6e6; color:#a02020; border:1px dashed #d88; }
.sb-actions{ display:flex; flex-wrap:wrap; gap:.4rem; margin-top:.6rem; }
.sb-actions .sb-refuse{ color:#a02020; }
.sb-drill,.fin-drill,.conn-drill{ margin:.5rem 0; font-size:.82rem; }
.sb-drill__brut,.fin-brut{ color:var(--muted); }
.sb-safe{ margin:.4rem 0; }
.sb-review__row{ display:flex; align-items:center; gap:.5rem; padding:.25rem 0; border-top:1px dotted var(--line); }
.sb-review__row code{ font-size:.72rem; color:var(--muted); flex:1; overflow:hidden; text-overflow:ellipsis; }
.sb-conflicts{ margin-top:.6rem; border-top:1px solid var(--line); padding-top:.5rem; }

/* Finance vérité */
.fin-banner{ border-left:4px solid var(--red,#c0392b); background:var(--soft); padding:.9rem 1.1rem; border-radius:.5rem; margin:1rem 0; }
.fin-banner h2{ margin:.2rem 0; }
.fin-legend ul{ list-style:none; display:flex; flex-wrap:wrap; gap:.5rem; padding:0; margin:.4rem 0; }
.fin-truth{ font-size:.74rem; padding:.15rem .5rem; border-radius:1rem; white-space:nowrap; background:var(--soft); }
.fin-truth--declared{ background:#eef1f6; color:#33415a; }
.fin-truth--invoice_only{ background:#eaf1fb; color:#1f5aa8; }
.fin-truth--payment_only{ background:#f0ecf9; color:#5b3ea0; }
.fin-truth--match_candidate{ background:#fdf3e0; color:#8a5b12; }
.fin-truth--conflict{ background:#fbe6e6; color:#a02020; }
.fin-truth--validated{ background:#e7f3ea; color:#1d6b39; }
.fin-truth--unknown{ background:var(--soft); color:var(--muted); }
.fin-disagreement{ border:1px dashed #c99; border-radius:.6rem; padding:.9rem 1.1rem; margin:1rem 0; background:#fff9f4; }
.fin-disagreement h3{ margin:.2rem 0; }
.fin-currentness ul{ list-style:none; padding:0; display:grid; gap:.4rem; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); }
.fin-currentness li{ display:flex; justify-content:space-between; gap:.6rem; background:var(--soft); border-radius:.4rem; padding:.5rem .7rem; }
.fin-finding{ border:1px solid var(--line); border-radius:.6rem; padding:.8rem 1rem; margin:.6rem 0; }
.fin-finding h4{ margin:.2rem 0; display:flex; gap:.5rem; align-items:center; }
.fin-boundary{ background:var(--soft); border-radius:.5rem; padding:.8rem 1rem; margin:1rem 0; }
.fin-rec,.fin-versions,.fin-sample,.fin-currentness,.fin-legend{ margin:1.2rem 0; }

/* Connecteurs — quatre axes */
.conn-legend ul{ list-style:none; padding:0; display:grid; gap:.35rem; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); margin:.6rem 0 1rem; }
.conn-legend li{ background:var(--soft); border-radius:.4rem; padding:.5rem .7rem; font-size:.85rem; }
.conn-axis{ font-size:.78rem; padding:.15rem .55rem; border-radius:1rem; white-space:nowrap; }
.conn-axis--ok{ background:#e7f3ea; color:#1d6b39; }
.conn-axis--no{ background:#fbe6e6; color:#a02020; }
.conn-axis--unknown{ background:var(--soft); color:var(--muted); }
.conn-axis--pending{ background:#fdf3e0; color:#8a5b12; }
.conn-stale{ margin-top:.4rem; font-size:.78rem; background:#fff4e5; border:1px solid #e6c079; border-radius:.4rem; padding:.4rem .6rem; }
.conn-evidence td{ padding-top:0; }
.conn-boundary{ background:var(--soft); border-radius:.5rem; padding:.8rem 1rem; margin:1rem 0; }

/* ═══════════════════════════════════════════════════════════════════════════
   FIN DU BLOC FRONT-USER-OPERABILITY
   ═══════════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   DÉBUT DU BLOC VAL-01 — BOÎTE DE VALIDATION EN PAQUETS MÉTIER
   ═══════════════════════════════════════════════════════════════════════════ */
.val-summary{ display:flex; flex-wrap:wrap; gap:1rem; margin:1rem 0 .6rem; }
.val-summary > div{ display:flex; flex-direction:column; padding:.6rem .9rem; border:1px solid var(--line); border-radius:.6rem; min-width:8rem; }
.val-summary strong{ font-size:1.4rem; line-height:1.1; }
.val-summary span{ font-size:.78rem; color:var(--muted); }
.val-packet-list{ display:flex; flex-direction:column; gap:1rem; margin:.8rem 0; }
.val-packet{ border:1px solid var(--line); border-radius:.7rem; padding:1rem 1.1rem; background:var(--surface, #fff); }
.val-packet--decision{ border-left:3px solid var(--accent, #b4801f); }
.val-packet__head{ display:flex; justify-content:space-between; align-items:flex-start; gap:1rem; }
.val-packet__head h3{ margin:.15rem 0; font-size:1.05rem; }
.val-packet__badges{ display:flex; flex-direction:column; align-items:flex-end; gap:.35rem; white-space:nowrap; }
.val-count{ font-size:1.5rem; font-weight:700; }
.val-flag{ font-size:.72rem; padding:.15rem .5rem; border-radius:1rem; }
.val-flag--on{ background:rgba(180,128,31,.14); color:var(--accent, #8a5f13); }
.val-flag--off{ background:rgba(120,120,120,.12); color:var(--muted); }
.val-consequence{ font-size:.9rem; margin:.5rem 0; }
.val-packet__grid{ display:grid; grid-template-columns:1fr 1fr; gap:1rem; margin:.5rem 0 .8rem; }
@media (max-width:640px){ .val-packet__grid{ grid-template-columns:1fr; } }
.val-evidence{ margin:.3rem 0; padding-left:1.1rem; font-size:.82rem; color:var(--muted); }
.val-conflict{ font-size:.82rem; padding:.4rem .6rem; border-radius:.5rem; background:rgba(190,60,60,.1); color:#8a2b2b; margin-bottom:.4rem; }
.val-unknown{ font-size:.82rem; padding:.4rem .6rem; border-radius:.5rem; background:rgba(120,120,120,.1); color:var(--muted); }
.val-drill{ margin-top:.7rem; border-top:1px solid var(--line); padding-top:.6rem; display:flex; flex-direction:column; gap:.4rem; }
.val-drill-row{ display:flex; justify-content:space-between; align-items:center; gap:.8rem; padding:.4rem .5rem; border:1px solid var(--line); border-radius:.5rem; }
.val-drill-row code{ font-size:.78rem; }
.val-drill-row small{ display:block; color:var(--muted); font-size:.72rem; }
.val-drill-actions{ display:flex; align-items:center; gap:.5rem; }
.val-drill-pager, .val-pager{ display:flex; align-items:center; gap:.8rem; justify-content:center; margin:.6rem 0; font-size:.82rem; color:var(--muted); }
.val-detail{ margin-top:1.4rem; border:1px solid var(--line); border-radius:.6rem; padding:.4rem .8rem; }
.val-detail > summary{ cursor:pointer; font-weight:600; padding:.4rem 0; }
/* ═══════════════════════════════════════════════════════════════════════════
   FIN DU BLOC VAL-01
   ═══════════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   MÉDIATHÈQUE — POSTE DE TRAVAIL VISUEL (Phase 1A)
   Le visuel est toujours premier. La barre du haut reste visible au défilement ;
   la taille de vignette EST le mode visuel ; le tableau n'est qu'un utilitaire.
   ═══════════════════════════════════════════════════════════════════════════ */
.media-library-sticky{position:sticky;top:0;z-index:40;background:var(--paper,#fff);padding-bottom:10px;border-bottom:1px solid var(--line,#e3ddd1)}
.media-library-sticky .media-bulk-bar--sticky{position:static}
.media-library-grid.media-library-grid--compact{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.media-library-grid.media-library-grid--standard{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px}
.media-library-grid.media-library-grid--large{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:18px}
.media-library-grid--compact .media-library-card strong{font-size:11px}
.media-library-grid--compact .media-library-card p,.media-library-grid--compact .media-library-card__explanation{display:none}
.media-size-switch{display:inline-flex;gap:4px}
.media-size-switch button{border:1px solid var(--line,#d7ceca);background:transparent;color:var(--ink,#141212);padding:6px 10px;font:10px 'Anonymous Pro',monospace}
.media-size-switch button.active{border-color:var(--ink,#141212);background:var(--pearl,#fbf9f7)}
.media-sort{display:inline-flex;align-items:center;gap:6px;margin-left:10px;font:10px 'Anonymous Pro',monospace;color:#716b69}
.media-sort select{font:11px 'Anonymous Pro',monospace;padding:5px 6px;border:1px solid var(--line,#d7ceca);background:var(--paper,#fff);color:var(--ink,#141212)}
.media-sort__dir{border:1px solid var(--line,#d7ceca);background:transparent;color:var(--ink,#141212);width:28px;height:28px;font-size:13px}
.media-vue-secondaire{margin-left:10px;border:1px solid var(--line,#d7ceca);background:transparent;color:#716b69;padding:6px 10px;font:10px 'Anonymous Pro',monospace}
.media-vue-secondaire.active{border-color:var(--ink,#141212);color:var(--ink,#141212)}
.media-inspector-visual{position:relative}
.media-inspector-nav{position:absolute;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:10px;gap:8px;z-index:2}
.media-inspector-nav button{border:1px solid rgba(255,255,255,.4);background:rgba(21,19,19,.5);color:#fff;min-width:34px;height:34px;font-size:16px;line-height:1;cursor:pointer}
.media-inspector-zoom{font-size:11px !important;padding:0 10px;letter-spacing:.04em}
.media-inspector-visual.is-zoom{overflow:auto;place-items:start}
.media-inspector-visual.is-zoom img{max-width:none;max-height:none;width:auto;height:auto;transform:scale(1.6);transform-origin:top left}
.media-tech-details{margin-top:16px;border-top:1px solid var(--line,#e3ddd1);padding-top:8px}
.media-tech-details>summary{cursor:pointer;font:10px 'Anonymous Pro',monospace;letter-spacing:.06em;text-transform:uppercase;color:#756d6c}
.media-tech{display:grid;gap:2px;margin-top:10px}
.media-tech dt{font:9px 'Anonymous Pro',monospace;text-transform:uppercase;letter-spacing:.06em;color:#948c8b;margin-top:8px}
.media-tech dd{margin:0;font:11px 'Anonymous Pro',monospace;overflow-wrap:anywhere;color:var(--ink,#141212)}
.media-inspector-usage{margin-top:16px;display:grid;gap:6px}
.media-inspector-usage strong{font:600 13px 'League Spartan',sans-serif}
.media-usage-list{margin:0;padding-left:16px;display:grid;gap:3px;font:11px/1.4 'Anonymous Pro',monospace;color:#4a4544}
.media-picker-dialog{border:0;padding:0;background:var(--paper,#fff);width:min(560px,calc(100vw - 40px));max-height:min(80vh,720px);box-shadow:0 26px 70px rgba(21,19,19,.34)}
.media-picker-dialog::backdrop{background:rgba(21,19,19,.5)}
.media-picker{display:grid;gap:12px;padding:20px}
.media-picker header{display:flex;justify-content:space-between;align-items:center}
.media-picker h3{margin:0;font:600 16px 'League Spartan',sans-serif}
.media-picker-search{display:grid;gap:5px;font:10px 'Anonymous Pro',monospace;color:#716b69}
.media-picker-search input{padding:8px;border:1px solid var(--line,#d7ceca);font:13px inherit}
.media-picker-list{display:grid;gap:6px;max-height:50vh;overflow:auto}
.media-picker-option{display:grid;gap:2px;text-align:left;border:1px solid var(--line,#d7ceca);background:var(--paper,#fff);padding:9px 11px;color:var(--ink,#141212)}
.media-picker-option:hover{border-color:var(--ink,#141212);background:var(--pearl,#fbf9f7)}
.media-picker-option strong{font-size:13px}
.media-picker-option small{font:9px 'Anonymous Pro',monospace;color:#756d6c}
.media-picker footer{display:flex;gap:10px;align-items:center}
.media-compare-dialog{border:0;padding:0;background:var(--paper,#fff);width:min(1200px,calc(100vw - 40px));max-height:calc(100vh - 40px);box-shadow:0 26px 70px rgba(21,19,19,.34)}
.media-compare-dialog::backdrop{background:rgba(21,19,19,.6)}
.media-compare{display:grid;gap:12px;padding:18px}
.media-compare header{display:flex;justify-content:space-between;align-items:center}
.media-compare-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.media-compare-figure{margin:0;display:grid;gap:6px}
.media-compare-figure img,.media-compare-figure video{width:100%;height:260px;object-fit:contain;background:#201d1d}
.media-compare-figure figcaption strong{display:block;font-size:12px}
.media-compare-figure figcaption small{font:9px 'Anonymous Pro',monospace;color:#756d6c}
.media-dup-items--compare{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}
.media-dup-figure{margin:0;display:grid;gap:6px;border:1px solid var(--line,#e3ddd1);padding:8px}
.media-dup-figure.is-aside{opacity:.5}
.media-dup-figure .media-dup-item{border:0;background:transparent;padding:0;cursor:pointer;width:100%}
.media-dup-figure img{width:100%;height:160px;object-fit:cover;background:var(--pearl,#f4f1ef)}
.media-dup-figure figcaption strong{display:block;font-size:12px;overflow-wrap:anywhere}
.media-dup-figure figcaption small{font:9px 'Anonymous Pro',monospace;color:#756d6c}
.media-dup-item-actions{display:flex;gap:10px}
.media-dup-keepboth{font:9px 'Anonymous Pro',monospace;color:#948c8b;margin-left:10px}
/* Collection — vue visuelle (Blocker 1). Réutilise la grille de cartes. */
.media-collection-dialog{border:0;padding:0;background:var(--paper,#fff);width:min(1200px,calc(100vw - 40px));max-height:calc(100vh - 40px);box-shadow:0 26px 70px rgba(21,19,19,.34)}
.media-collection-dialog::backdrop{background:rgba(21,19,19,.55)}
.media-collection{display:grid;gap:14px;padding:18px}
.media-collection header{display:flex;align-items:center;gap:12px;justify-content:space-between}
.media-collection header h3{margin:0;font:600 16px 'League Spartan',sans-serif;flex:1}
.media-collection-folders{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}
.media-collection-folder{display:grid;gap:6px;text-align:left;border:1px solid var(--line,#d7ceca);background:var(--pearl,#fbf9f7);padding:16px;color:var(--ink,#141212);min-height:84px;align-content:center}
.media-collection-folder:hover{border-color:var(--ink,#141212);background:#fff}
.media-collection-folder__name{font:600 14px 'League Spartan',sans-serif}
.media-collection-folder__count{font:9px 'Anonymous Pro',monospace;color:#756d6c}
.media-collection-grid{max-height:70vh;overflow:auto}
.media-collection-item{margin:0;position:relative;display:grid}
.media-collection-remove{margin-top:6px;border:1px solid var(--line,#d7ceca);background:transparent;color:#8a3b38;padding:6px 8px;font:9px 'Anonymous Pro',monospace;cursor:pointer}
.media-collection-remove:hover{border-color:#8a3b38;background:#fff6f4}
/* Champs d'avis (Blocker 3) : risque / recadrage / scores. */
.media-review-extra{display:grid;gap:6px;margin-top:6px}
.media-review-field{display:grid;gap:2px}
.media-review-field small{font:9px 'Anonymous Pro',monospace;text-transform:uppercase;letter-spacing:.06em;color:#948c8b}
.media-review-field p{margin:0;font-size:12px;line-height:1.35}
.media-review-scores{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.media-score{display:grid;border:1px solid var(--line,#e3ddd1);padding:4px 8px}
.media-score small{font:8px 'Anonymous Pro',monospace;text-transform:uppercase;color:#948c8b}
.media-score b{font-size:13px}
/* ═══════════════════════════════════════════════════════════════════════════
   FIN MÉDIATHÈQUE PHASE 1A
   ═══════════════════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   MÉDIATHÈQUE — RÉPARATION UX FONDATEUR 1
   ═══════════════════════════════════════════════════════════════════════════ */
/* Finding 4 — affiche vidéo légère dans la grille (aucun /view diffusé). */
.media-video-poster{width:100%;height:100%;display:grid;place-items:center;gap:6px;background:#201d1d;color:#f2efee}
.media-video-poster__play{font-size:26px;line-height:1}
.media-video-poster__label{font:9px 'Anonymous Pro',monospace;letter-spacing:.1em;text-transform:uppercase;opacity:.85}
/* Finding 1 — un groupe de doublons = un bloc PLEINE LARGEUR. */
.media-resultats--doublons{display:block!important}
.media-resultats--doublons .media-dup-group{border:1px solid var(--line,#e3ddd1);padding:16px;margin:0 0 18px}
.media-resultats--doublons .media-dup-group header{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;margin-bottom:14px}
.media-resultats--doublons .media-dup-signal{font:9px 'Anonymous Pro',monospace;letter-spacing:.08em;border:1px solid var(--line,#d7ceca);padding:3px 7px;color:#756d6c}
.media-dup-items.media-dup-items--compare{display:flex;flex-wrap:wrap;gap:16px}
.media-resultats--doublons .media-dup-figure{margin:0;width:230px;display:grid;gap:6px;border:1px solid var(--line,#e3ddd1);padding:10px;position:relative}
.media-resultats--doublons .media-dup-figure.is-aside{opacity:.45}
.media-resultats--doublons .media-dup-figure .media-dup-item{border:0;background:transparent;padding:0;cursor:pointer;width:100%}
.media-resultats--doublons .media-dup-figure img{width:100%;height:210px;object-fit:cover;background:var(--pearl,#f4f1ef)}
.media-dup-pick{position:absolute;top:14px;left:14px;display:inline-flex;align-items:center;gap:4px;background:rgba(255,255,255,.9);border:1px solid var(--line,#d7ceca);padding:2px 6px;font:9px 'Anonymous Pro',monospace}
.media-dup-figure figcaption strong{display:block;font-size:12px;overflow-wrap:anywhere;line-height:1.3}
.media-dup-figure figcaption small{display:block;font:9px 'Anonymous Pro',monospace;color:#756d6c}
.media-resultats--doublons .media-dup-group footer{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:14px}
.media-dup-item-actions{display:flex;gap:12px;flex-wrap:wrap}
/* Finding 2 — inspecteur : split viewport, visuel toujours visible. */
.media-inspector{height:min(920px,calc(100vh - 32px))!important;max-height:calc(100vh - 32px)!important;width:min(1340px,calc(100vw - 32px))!important;overflow:hidden!important}
.media-inspector-layout{height:100%!important;min-height:0!important;grid-template-columns:68% 32%!important;overflow:hidden!important}
.media-inspector-visual{height:100%!important;min-height:0!important;overflow:hidden;position:relative;display:grid;place-items:center;background:#201d1d}
.media-inspector-visual img,.media-inspector-visual video{max-width:100%;max-height:100%;object-fit:contain}
.media-inspector aside{height:100%!important;max-height:none!important;overflow-y:auto!important}
@media(max-width:820px){
  .media-inspector-layout{grid-template-columns:1fr!important;grid-template-rows:54% 46%!important}
  .media-inspector-visual{height:100%!important}
  .media-inspector aside{height:100%!important}
}
/* Finding 5 / Blocker 2 — le composeur Noema ne couvre plus la grille. Le vrai
   composeur est déplacé en enfant de <main> par bindContextPanels ; on le masque
   par une classe posée directement sur l'élément (déterministe). */
.noema-panel--bottom.noema-panel--masque{display:none!important}
#media-noema-toggle[aria-expanded="true"]{border-color:var(--ink,#141212);background:var(--pearl,#fbf9f7)}
/* Finding 3 (Option A) — Retenir / Retenir pour la sélection finale (état réel). */
.media-selection-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:20px 0 8px}
.media-selection-actions .media-selection-loading{grid-column:1/-1;font:10px 'Anonymous Pro',monospace;color:#948c8b}
.media-select-btn{border:1px solid var(--line,#d7ceca);background:var(--paper,#fff);color:var(--ink,#141212);min-height:38px;padding:8px;font:600 11px 'League Spartan',sans-serif;cursor:pointer}
.media-select-btn:hover{border-color:var(--ink,#141212);background:var(--pearl,#fbf9f7)}
.media-select-btn.is-active{border-color:var(--nl-charcoal,#141212);background:var(--nl-charcoal,#141212);color:#fff}
.media-select-btn--final.is-active{background:var(--nl-vermilion,#E94B4C);border-color:var(--nl-vermilion,#E94B4C);color:#fff}
.media-inspector-actions--compare{grid-template-columns:1fr}
/* ═══════════════════════════════════════════════════════════════════════════
   FIN RÉPARATION UX FONDATEUR 1
   ═══════════════════════════════════════════════════════════════════════════ */
