/* Outil d'analyse et rapports : tout est sous .app (voir make_app_css.py) */
.app{--fond2:#141413;--bien:#9bc7a8;--moyen:#d9b877;--mal:#d98577;color:var(--marbre);font:400 16px/1.6 var(--sans)}
.app *{box-sizing:border-box}
.app h1,.app h2{font-family:var(--serif);font-weight:400;letter-spacing:-.01em;margin:0}
.app h3{font:600 16px/1.35 var(--sans);margin:0 0 6px}
.app p{margin:0}
.app a{color:inherit}
.app .btn{display:inline-block;font:500 15px var(--sans);text-decoration:none;color:var(--marbre);background:none;padding:11px 20px;border:1px solid var(--marbre);border-radius:2px;cursor:pointer}
.app .btn:hover{background:var(--marbre);color:var(--nuit)}
.app .btn-plein{background:var(--marbre);color:var(--nuit)}.app .btn-plein:hover{background:#fff}
.app .btn[disabled]{opacity:.4;cursor:not-allowed}
.app .petit{font:400 13px var(--mono);color:var(--pierre)}
.app .ana-mot{font:400 clamp(48px,9vw,110px)/.9 var(--serif);color:var(--marbre);margin:0 0 10px -.03em}
.app .ana-intro{color:var(--pierre);max-width:56ch;margin:10px 0 26px}
/* Formulaire */
.app .form{display:flex;gap:10px;flex-wrap:wrap;max-width:720px}
.app .form input{flex:1;min-width:240px;font:400 17px var(--mono);color:var(--marbre);background:var(--fond2);border:1px solid var(--trait);border-radius:2px;padding:13px 16px}
.app .form input::placeholder{color:var(--cendre)}
.app .form input:focus{outline:none;border-color:var(--pierre)}
.app .ana-note{margin-top:14px;max-width:62ch;color:var(--pierre);font-size:14px}
.app .alerte{margin-top:16px;padding:12px 16px;border:1px solid var(--trait);border-left:3px solid var(--mal);color:var(--marbre);font-size:15px;max-width:720px}
.app .alerte.info{border-left-color:var(--moyen)}
/* Historique */
.app .histo{margin-top:56px}
.app .histo-tete{display:flex;gap:14px;align-items:baseline;flex-wrap:wrap;margin-bottom:16px}
.app .histo-tete h2{font-size:42px;margin-right:auto}
.app .histo-tete input,.app .histo-tete select{font:400 14px var(--mono);color:var(--marbre);background:var(--fond2);border:1px solid var(--trait);border-radius:2px;padding:8px 10px}
.app .grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.app .carte{display:block;text-decoration:none;border:1px solid var(--trait);background:var(--fond2);transition:border-color .2s,transform .2s}
.app .carte:hover{border-color:var(--pierre);transform:translateY(-2px)}
.app .carte img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;object-position:top;filter:saturate(.85)}
.app .carte .corps{padding:12px 14px;display:grid;grid-template-columns:1fr auto;gap:2px 10px;align-items:baseline}
.app .carte .site{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.app .carte .date{grid-column:1;font:400 12px var(--mono);color:var(--pierre)}
.app .carte .sc{grid-row:1/3;grid-column:2;font:400 38px/1 var(--serif)}
.app .vide{color:var(--pierre);border:1px dashed var(--trait);padding:28px;text-align:center}
.app .outils{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
/* Analyse en cours */
.app .ana-scene{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(240px,1fr);gap:30px;margin-top:10px}
.app .film{position:relative;aspect-ratio:1440/900;background:var(--fond2);border:1px solid var(--trait);overflow:hidden}
.app .film img,.app .film canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.app .film canvas{opacity:0;transition:opacity .9s ease}
.app .film.chaud canvas{opacity:.55}
.app .film .balayage{position:absolute;left:0;right:0;height:22%;top:-25%;background:linear-gradient(transparent,rgba(236,234,228,.16) 70%,rgba(236,234,228,.5) 99%,transparent);opacity:0;pointer-events:none}
.app .film.scan .balayage{opacity:1;animation:balayer 1.1s cubic-bezier(.5,0,.5,1) infinite}
@keyframes balayer{from{top:-25%}to{top:105%}}
.app .film .attente{position:absolute;inset:0;display:grid;place-items:center;text-align:center;padding:20px}
.app .film .attente canvas{position:static;opacity:1;width:100%;height:auto;max-width:560px}
.app .etapes{list-style:none;margin:0;padding:0;display:grid;gap:2px;align-content:start}
.app .etapes li{display:grid;grid-template-columns:22px 1fr;gap:10px;align-items:baseline;padding:9px 0;border-top:1px solid var(--trait);color:var(--cendre);transition:color .3s}
.app .etapes li::before{content:"";width:8px;height:8px;border:1px solid var(--cendre);border-radius:50%;align-self:center;justify-self:center;transition:all .3s}
.app .etapes li.cours{color:var(--marbre)}
.app .etapes li.cours::before{border-color:var(--marbre);background:var(--marbre);animation:pouls 1s ease-in-out infinite}
.app .etapes li.fait{color:var(--pierre)}
.app .etapes li.fait::before{border-color:var(--bien);background:var(--bien)}
@keyframes pouls{50%{box-shadow:0 0 0 6px rgba(236,234,228,.12)}}
.app .etapes small{display:block;font:400 12px var(--mono);color:var(--cendre)}
.app .barre{height:2px;background:var(--trait);margin:16px 0 0;overflow:hidden}
.app .barre i{display:block;height:100%;width:0;background:var(--marbre);transition:width .5s ease}
.app .bande{display:flex;gap:8px;margin-top:14px;overflow-x:auto;padding-bottom:6px}
.app .bande figure{margin:0;flex:0 0 112px;position:relative;opacity:0;transform:translateY(8px);animation:entrer .5s ease forwards}
@keyframes entrer{to{opacity:1;transform:none}}
.app .bande img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;object-position:top;border:1px solid var(--trait)}
.app .bande b{position:absolute;right:5px;bottom:4px;font:400 17px/1 var(--serif);text-shadow:0 0 6px #000,0 0 3px #000}
/* Rapport */
.app .rapport-tete{display:grid;grid-template-columns:auto 1fr;gap:10px 40px;align-items:end;margin-top:6px}
.app .note-grande{font:400 clamp(110px,18vw,210px)/.8 var(--serif);letter-spacing:-.03em}
.app .note-grande small{font:400 22px var(--mono);color:var(--pierre);letter-spacing:0;margin-left:6px}
.app .rapport-tete h1{font-size:clamp(34px,5vw,54px);line-height:1.05;margin-bottom:8px;overflow-wrap:anywhere}
.app .verdict{font:400 22px/1.3 var(--serif);color:var(--marbre);margin-bottom:12px}
.app .bouts{display:flex;gap:10px;flex-wrap:wrap;margin:22px 0 0}
.app .bloc{margin-top:56px}
.app .bloc h2{font-size:clamp(34px,4.4vw,52px);margin-bottom:6px}
.app .liste-conseils{list-style:none;margin:16px 0 0;padding:0;max-width:820px}
.app .liste-conseils li{display:grid;grid-template-columns:90px 1fr;gap:12px;padding:15px 0;border-top:1px solid var(--trait)}
.app .liste-conseils li:last-child{border-bottom:1px solid var(--trait)}
.app .liste-conseils .ou{font:400 13px var(--mono);color:var(--pierre)}
.app .liste-conseils .quoi{font-weight:500}
.app .moyennes{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:18px 36px;margin-top:18px;max-width:900px}
.app .critere .nom{display:flex;justify-content:space-between;font-size:14px;margin-bottom:5px}
.app .critere .nom span{font-family:var(--mono);color:var(--pierre)}
.app .piste{height:5px;background:var(--trait);border-radius:3px;overflow:hidden}
.app .piste i{display:block;height:100%;border-radius:3px;transition:width .8s cubic-bezier(.2,.8,.2,1)}
.app .regard{display:flex;gap:14px;align-items:center;margin:14px 0 6px;font:400 13px var(--mono);color:var(--pierre)}
.app .regard input{width:200px;accent-color:#ECEAE4}
.app .ecran{margin-top:34px;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(250px,1fr);gap:28px;align-items:start}
.app .ecran .titre{grid-column:1/-1;display:flex;gap:16px;align-items:baseline}
.app .ecran .titre h3{font:400 30px var(--serif);margin:0}
.app .ecran .titre .sc{font:400 34px var(--serif);margin-left:auto}
.app .vue{position:relative;aspect-ratio:1440/900;border:1px solid var(--trait);background:var(--fond2)}
.app .vue img,.app .vue canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.app .vue canvas{opacity:var(--chaleur,.55)}
.app .cerveau{margin-top:16px}
.app .cerveau h3{font:400 13px var(--mono);color:var(--pierre);letter-spacing:.04em;text-transform:uppercase;margin-bottom:8px}
.app .cerveau .critere{margin-bottom:7px}
.app .cerveau .nom{font-size:13px;margin-bottom:3px}
.app .cerveau ul{margin:8px 0 0;padding-left:18px;color:var(--pierre);font-size:13px}
.app .methode{max-width:780px;color:var(--pierre)}
.app .methode p{margin-top:10px}
.app .methode b{color:var(--marbre);font-weight:500}
.app table.poids{border-collapse:collapse;margin-top:14px;font-size:14px;width:100%;max-width:780px}
.app table.poids td,.app table.poids th{text-align:left;padding:8px 10px;border-top:1px solid var(--trait);vertical-align:top}
.app table.poids th{font:400 12px var(--mono);color:var(--pierre)}
.app .cache{display:none!important}
@media (max-width:860px){
  .app .ana-scene,.app .ecran{grid-template-columns:1fr}.app .rapport-tete{grid-template-columns:1fr}.app .histo-tete h2{font-size:34px}
}
@media (prefers-reduced-motion:reduce){.app *{animation:none!important;transition:none!important}}
@media print{
  .app{--nuit:#fff;--marbre:#111;--pierre:#555;--cendre:#888;--trait:#ccc;--fond2:#f4f4f2}
  .app .bouts,.app .regard,.app .noprint{display:none!important}.app .ecran{break-inside:avoid}.app .bloc{margin-top:30px}
}

/* Analyse : onglets, depot d'image, animation ASCII */
.app .onglets-outil{display:flex;gap:6px;margin:0 0 18px;flex-wrap:wrap}
.app .onglets-outil button{font:500 14px var(--sans);color:var(--pierre);background:none;border:1px solid var(--trait);padding:9px 16px;border-radius:2px;cursor:pointer}
.app .onglets-outil button[aria-selected=true]{color:var(--nuit);background:var(--marbre);border-color:var(--marbre)}
.app .depot{display:grid;gap:10px;justify-items:start;padding:34px 28px;border:1px dashed #4a4a46;background:var(--fond2);max-width:760px;cursor:pointer;transition:border-color .2s,background .2s}
.app .depot.survol,.app .depot:hover{border-color:var(--marbre);background:#1a1a18}
.app .depot b{font:400 clamp(26px,3vw,36px)/1.1 var(--serif)}.app .depot span{color:var(--pierre);max-width:56ch}
.app .film .ascii-film{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity .4s;pointer-events:none}
.app .film.scan .ascii-film{opacity:1}.app .film.scan img{filter:brightness(.28) saturate(.5)}
.app .film img{transition:filter .5s}
