/* Module « Photovoltaïque » (préfixe pv-). Site en Bootstrap 3 : em/px uniquement, jamais rem. */
.pv-shell{--p:#1d4ed8;--p2:#f59e0b;--ink:#17213a;--muted:#5d6b85;--line:#dfe3f0;--soft:#f5f8ff;--ok:#178a57;--bad:#c2412f;--warn:#d98a00;max-width:1240px;margin:0 auto;padding:18px;color:var(--ink);font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;font-size:16px;line-height:1.55}
.pv-shell *{box-sizing:border-box}
.pv-shell h1,.pv-shell h2,.pv-shell h3,.pv-shell h4{font-family:inherit;color:inherit;line-height:1.2}
.pv-shell h2{font-size:1.55em;font-weight:800;margin:0 0 8px}
.pv-shell h3{font-size:1.15em;font-weight:800;margin:18px 0 8px}
.pv-shell p{margin:0 0 10px}
.pv-loading{padding:60px;text-align:center;color:var(--muted);font-weight:700}
.pv-alert{background:#fff0ee;color:#8a2a1c;border-radius:12px;padding:14px 16px}
.pv-muted{color:var(--muted)}
.pv-small{font-size:.88em}
.pv-good{color:var(--ok)}
.pv-bad{color:var(--bad)}

/* Hero */
.pv-hero{position:relative;overflow:hidden;display:grid;grid-template-columns:1fr auto;gap:28px;align-items:center;padding:32px 38px;border-radius:26px;color:#fff;background:linear-gradient(125deg,#0b1f4d 0%,#1d4ed8 55%,#f59e0b 100%);box-shadow:0 18px 50px #1d4ed830}
.pv-hero:after{content:"";position:absolute;right:-60px;top:-60px;width:260px;height:260px;border-radius:50%;background:radial-gradient(circle,#ffffff22 0 2px,transparent 3px) 0 0/18px 18px;opacity:.7;pointer-events:none}
.pv-hero h1{font-size:2.5em;margin:6px 0 10px;font-weight:850;color:#fff}
.pv-hero p{font-size:1.06em;max-width:760px;opacity:.95;margin:0}
.pv-kicker{font-weight:800;text-transform:uppercase;letter-spacing:.08em;font-size:.8em;opacity:.95}
.pv-pills{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}
.pv-pills span{padding:6px 12px;border:1px solid #ffffff55;border-radius:999px;background:#ffffff1c;font-size:.9em;font-weight:700}
.pv-ring{position:relative;width:116px;height:116px;text-align:center;z-index:1}
.pv-ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.pv-ring circle{fill:none;stroke-width:10}
.pv-ring .bg{stroke:#ffffff30}
.pv-ring .fg{stroke:#fff;stroke-linecap:round;stroke-dasharray:327;transition:stroke-dashoffset .6s ease}
.pv-ring b{position:absolute;left:0;right:0;top:40px;font-size:1.5em}
.pv-ring small{display:block;font-weight:700;opacity:.9;margin-top:4px}

/* Onglets */
.pv-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:20px 0 16px;position:sticky;top:0;z-index:5;background:#ffffffee;padding:8px 0;backdrop-filter:blur(4px)}
.pv-tab{display:flex;align-items:center;gap:8px;border:1px solid var(--line);background:#fff;border-radius:14px;padding:10px 14px;font-weight:750;font-size:.95em;color:var(--ink);cursor:pointer;transition:all .15s}
.pv-tab:hover{border-color:var(--p2)}
.pv-tab.on{background:var(--p);border-color:var(--p);color:#fff;box-shadow:0 8px 20px #1d4ed833}
.pv-tab .n{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:#e6eeff;color:var(--p);font-size:.85em}
.pv-tab.on .n{background:#ffffff30;color:#fff}
.pv-tab.done .n{background:var(--ok);color:#fff}

/* Panneaux / cartes */
.pv-panel{background:#fff;border:1px solid var(--line);border-radius:20px;padding:22px 24px;margin-bottom:16px;box-shadow:0 6px 22px #17213a0a}
.pv-grid{display:grid;gap:14px}
.pv-g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.pv-g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.pv-g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.pv-g5{grid-template-columns:repeat(5,minmax(0,1fr))}
.pv-card{border:1px solid var(--line);border-radius:16px;padding:14px 16px;background:var(--soft)}
.pv-card h4{margin:0 0 6px;font-size:1.05em;font-weight:800}
.pv-card p{margin:0 0 4px;font-size:.94em}
.pv-card.warn{background:#fff8ec;border-color:#f3dcae}
.pv-card.rule{background:#f2fbf7;border-color:#c5e8d6}
.pv-card.ingr{border-top:5px solid var(--p)}
.pv-card.ingr.contexte{border-top-color:#2bb3c9}
.pv-card.ingr.tache{border-top-color:#e2683c}
.pv-card.ingr.format{border-top-color:#2f9e5b}
.pv-card.ingr.contraintes{border-top-color:#d9a400}
.pv-list{margin:0 0 6px;padding-left:22px}
.pv-list li{margin-bottom:4px}
.pv-info{margin-top:14px;border-radius:14px;padding:12px 16px;background:#e6eeff;border:1px solid #c7d7fe}
.pv-info.ok{background:#e9f7ef;border-color:#b9e2c9}
.pv-info.warn{background:#fff4e0;border-color:#f3d79c}
.pv-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px}
.pv-next{justify-content:flex-end;margin:0 0 20px}
.pv-done-badge{display:inline-flex;align-items:center;gap:6px;background:#e5f6ec;color:#0f5c3a;border-radius:999px;padding:5px 14px;font-weight:800;font-size:.9em;margin-top:10px}
.pv-todo{display:inline-block;background:#eef3ff;color:#1e3a8a;border-radius:12px;padding:6px 12px;font-weight:700;font-size:.9em;margin-top:10px}

/* Frise */
.pv-flow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;counter-reset:f}
.pv-flow div{position:relative;border-radius:16px;padding:14px 16px;background:linear-gradient(135deg,#f5f8ff,#eefbfd);border:1px solid var(--line)}
.pv-flow div:not(:last-child):after{content:"➜";position:absolute;right:-14px;top:50%;transform:translateY(-50%);color:var(--p);font-weight:900;z-index:1}
.pv-flow b{display:block;color:var(--p);margin-bottom:4px}
.pv-flow span{font-size:.93em}

/* Boutons */
.pv-btn{display:inline-flex;align-items:center;gap:6px;border:0;border-radius:12px;padding:9px 16px;font-weight:800;font-size:.95em;cursor:pointer;background:var(--p);color:#fff;transition:filter .15s}
.pv-btn:hover{filter:brightness(1.08)}
.pv-btn.alt{background:#e6eeff;color:var(--p)}
.pv-btn[disabled]{opacity:.45;cursor:not-allowed}

/* Jeu du mot suivant */
.pv-game{border:1px solid var(--line);border-radius:18px;padding:16px;background:#fbfbff}
.pv-sentence{font-size:1.25em;font-weight:700;background:#17213a;color:#e9ecff;border-radius:14px;padding:16px 18px;font-family:"Cascadia Code",Consolas,monospace;line-height:1.5}
.pv-caret{color:#f59e0b;animation:pv-blink 1s steps(1) infinite}
@keyframes pv-blink{50%{opacity:0}}
.pv-temp{font-weight:700;display:flex;align-items:center;gap:10px;margin:0}
.pv-temp input{width:200px}
.pv-bars{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.pv-bar{display:grid;grid-template-columns:minmax(120px,240px) 1fr 54px;gap:12px;align-items:center;border:1px solid var(--line);background:#fff;border-radius:12px;padding:8px 12px;cursor:pointer;text-align:left;color:var(--ink);font-size:.98em}
.pv-bar:hover{border-color:var(--p2);background:#f5f8ff}
.pv-bar .w{font-weight:800}
.pv-bar .track{height:14px;border-radius:7px;background:#ecebf5;overflow:hidden}
.pv-bar .track span{display:block;height:100%;border-radius:7px;background:linear-gradient(90deg,#f59e0b,#2bb3c9);transition:width .3s}
.pv-bar .p{font-weight:800;text-align:right;color:var(--muted)}

/* Exercices */
.pv-ex{border:1px solid var(--line);border-radius:16px;padding:14px 16px}
.pv-ex.ok{border-color:#9fd8b8;background:#f4fbf7}
.pv-ex.ko{border-color:#f0b4a8;background:#fff8f6}
.pv-ex p{margin:0}
.pv-ex .fb,.pv-situ .fb{margin-top:8px;font-size:.92em}

/* Chasse aux erreurs */
.pv-chat{border:1px solid var(--line);border-radius:18px;padding:14px;margin-bottom:14px;background:#fafbfe}
.pv-chat.ok{border-color:#9fd8b8;background:#f4fbf7}
.pv-chat.ko{border-color:#f0b4a8;background:#fff8f6}
.pv-msg{border-radius:14px;padding:10px 14px;margin-bottom:10px;max-width:92%}
.pv-msg>span:first-child{display:block;font-size:.8em;font-weight:800;color:var(--muted);margin-bottom:2px}
.pv-msg.user{background:#e8f7fa;margin-left:auto}
.pv-msg.ai{background:#fff;border:1px solid var(--line);line-height:1.9}
.pv-sent{cursor:pointer;border-radius:6px;padding:2px 3px;transition:background .15s;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.pv-chat:not(.ok):not(.ko) .pv-sent:hover{background:#eef3ff}
.pv-sent.sel{background:#ffe2a8;box-shadow:inset 0 -2px 0 #d98a00}
.pv-sent.found{background:#ffd8cf;box-shadow:inset 0 -2px 0 var(--bad)}
.pv-sent.missed{background:#ffd8cf;outline:2px dashed var(--bad)}
.pv-sent.false{background:#e2f3e9;text-decoration:line-through;text-decoration-color:var(--ok)}
.pv-chat.ok .pv-sent,.pv-chat.ko .pv-sent{cursor:default}
.pv-fb{font-size:.92em;margin:4px 0 10px}
.pv-fb p{margin:0 0 6px}

/* Prompts */
.pv-opt{display:block;width:100%;text-align:left;border:1px solid #cfd5e6;background:#fff;border-radius:12px;padding:10px 14px;margin:8px 0;cursor:pointer;font-size:.95em;color:var(--ink)}
.pv-opt:hover{border-color:var(--p2)}
.pv-opt.sel{border-color:var(--p);background:#eef3ff;font-weight:700}
.pv-opt.good{border-color:var(--ok);background:#e5f6ec}
.pv-opt.wrong{border-color:var(--bad);background:#ffe9e4}
.pv-prompt{font-family:"Cascadia Code",Consolas,monospace;font-size:.95em}
.pv-checks{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.pv-chk{border:1px solid #cfd5e6;background:#fff;border-radius:12px;padding:8px 14px;font-weight:750;cursor:pointer;color:var(--ink);font-size:.95em}
.pv-chk.on{border-color:var(--p);background:#eef3ff}
.pv-chk.good{border-color:var(--ok);background:#e5f6ec}
.pv-chk.wrong{border-color:var(--bad);background:#ffe9e4}
.pv-build{border:1px solid var(--line);border-radius:18px;padding:14px 16px;margin-bottom:14px}
.pv-build.ok{border-color:#9fd8b8;background:#f8fdfa}
.pv-build.ko{border-color:#f0b4a8;background:#fffaf8}
.pv-build h3{margin-top:0}
.pv-buildgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.pv-field label{display:block;font-weight:800;font-size:.92em;margin-bottom:4px}
.pv-input{width:100%;border:1px solid #cfd5e6;border-radius:10px;padding:8px 10px;font-size:.93em;background:#fff;color:var(--ink);height:auto}
.pv-preview{margin-top:12px;border-radius:14px;padding:12px 14px;background:#17213a;color:#e9ecff;font-family:"Cascadia Code",Consolas,monospace;font-size:.93em}
.pv-preview span{display:block;font-family:inherit;color:#a99bff;font-weight:800;margin-bottom:4px}
.pv-preview .pv-muted{color:#9aa3bf}

/* Situations */
.pv-situ{border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin-bottom:10px}
.pv-situ.ok{border-color:#9fd8b8;background:#f4fbf7}
.pv-situ.ko{border-color:#f0b4a8;background:#fff8f6}
.pv-situ p{margin:0 0 8px}
.pv-seg{display:inline-flex;flex-wrap:wrap;gap:6px;background:#f1f2f8;border-radius:14px;padding:5px}
.pv-seg button{border:0;background:transparent;padding:7px 12px;border-radius:10px;font-weight:800;color:var(--ink);cursor:pointer;font-size:.92em}
.pv-seg button.on.ok{background:#d9f2e4;color:#0f5c3a}
.pv-seg button.on.att{background:#ffeccc;color:#8a5600}
.pv-seg button.on.non{background:#ffdcd5;color:#8a2a1c}
.pv-charter ol{padding-left:22px}
.pv-charter li{margin-bottom:6px}

/* Quiz */
.pv-q{border:1px solid var(--line);border-radius:16px;padding:14px 16px;margin-bottom:12px}
.pv-q p{font-weight:750}
.pv-verdict{text-align:center;border-radius:16px;padding:16px;margin-bottom:14px;font-weight:800}
.pv-verdict.ok{background:#e5f6ec;color:#0f5c3a}
.pv-verdict.bad{background:#fff0ec;color:#8a2a1c}
.pv-score{font-size:2.4em;font-weight:900}

/* Toasts */
.pv-toasts{position:fixed;right:18px;bottom:18px;z-index:9999;display:flex;flex-direction:column;gap:8px}
.pv-toast{background:#17213a;color:#fff;padding:10px 16px;border-radius:12px;font-weight:700;box-shadow:0 10px 30px #0003;font-size:15px;transition:opacity .4s,transform .4s}
.pv-toast.ok{background:#178a57}
.pv-toast.out{opacity:0;transform:translateY(8px)}

@media print{
  .pv-hero,.pv-tabs,.pv-next,.pv-panel:not(.pv-charter),.pv-btn{display:none!important}
  .pv-charter{border:0;box-shadow:none}
}
@media (max-width:980px){
  .pv-g4,.pv-g5{grid-template-columns:repeat(2,minmax(0,1fr))}
  .pv-g3{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:640px){
  .pv-shell{padding:10px}
  .pv-hero{grid-template-columns:1fr;padding:24px 20px}
  .pv-hero h1{font-size:1.9em}
  .pv-g2,.pv-g3,.pv-g4,.pv-g5,.pv-flow,.pv-buildgrid{grid-template-columns:1fr}
  .pv-flow div:not(:last-child):after{content:"⬇";right:50%;top:auto;bottom:-16px;transform:translateX(50%)}
  .pv-bar{grid-template-columns:1fr 46px}
  .pv-bar .track{grid-column:1/-1;grid-row:2}
  .pv-panel{padding:16px}
  .pv-tab{padding:8px 10px;font-size:.88em}
  .pv-msg{max-width:100%}
}

/* ===== Spécifique photovoltaïque ===== */
.pv-chain{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin-bottom:6px}
.pv-chain div{position:relative;border-radius:14px;padding:12px;background:linear-gradient(160deg,#fff8e6,#eef3ff);border:1px solid var(--line);font-size:1.6em;text-align:center}
.pv-chain b{display:block;font-size:.6em;margin-top:4px}
.pv-chain span{display:block;font-size:.5em;color:var(--muted);line-height:1.35;margin-top:4px}
.pv-chain div:not(:last-child):after{content:"➜";position:absolute;right:-12px;top:22px;font-size:.6em;color:var(--p);z-index:1}
.pv-lab{display:grid;grid-template-columns:300px 1fr;gap:18px;align-items:start}
.pv-ctrls{display:flex;flex-direction:column;gap:12px;background:var(--soft);border:1px solid var(--line);border-radius:16px;padding:14px}
.pv-ctrls label{display:flex;flex-direction:column;gap:4px;font-weight:700;font-size:.92em;margin:0}
.pv-ctrls label b{color:var(--p)}
.pv-ctrls input[type=range]{width:100%}
.pv-ctrls fieldset{border:0;margin:0 0 4px;padding:0;display:flex;flex-direction:column;gap:10px}
.pv-ctrls legend{font-weight:900;font-size:.8em;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);border:0;margin:4px 0 0;width:auto}
.pv-presets{display:flex;flex-wrap:wrap;gap:6px}
.pv-presets button{border:1px solid var(--line);background:#fff;border-radius:10px;padding:5px 10px;font-weight:700;font-size:.85em;cursor:pointer;color:var(--ink)}
.pv-presets button:hover{border-color:var(--p2)}
.pv-chart{width:100%;height:auto;display:block;background:#fbfcff;border:1px solid var(--line);border-radius:14px;margin:8px 0}
.pv-chart .grid{stroke:#e5e9f2}
.pv-chart .ax{stroke:#64748b;stroke-width:1.5}
.pv-chart .tk{font-size:11px;fill:#475569}
.pv-chart .lab{font-size:12px;font-weight:700;fill:#334155}
.pv-chart .mk{font-size:12px;font-weight:800}
.pv-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:.85em;font-weight:700}
.pv-legend .b{color:#1d4ed8}.pv-legend .o{color:#d97706}.pv-legend .g{color:#16a34a}.pv-legend .gr{color:#64748b}
.pv-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin:8px 0}
.pv-kpis div{background:#fff;border:1px solid var(--line);border-radius:12px;padding:8px 10px}
.pv-kpis small{display:block;color:var(--muted);font-weight:700;font-size:.78em}
.pv-kpis b{font-size:1.15em}
.pv-kpis .hl{background:#fff7e0;border-color:#fcd88a}
.pv-explore{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.pv-explore span{border-radius:999px;padding:4px 12px;background:#eef1f6;font-weight:700;font-size:.85em;color:var(--muted)}
.pv-explore span.ok{background:#e5f6ec;color:#0f5c3a}
.pv-formula{background:#0b1f4d;color:#fff;border-radius:14px;padding:12px 16px;font-weight:800;margin:10px 0;font-size:1.02em}
.pv-table{width:100%;border-collapse:collapse;font-size:.92em}
.pv-table th,.pv-table td{border:1px solid #fff;padding:8px;text-align:center}
.pv-table th{background:#eef3ff}
.pv-tablewrap{overflow-x:auto}
.pv-ex{border:1px solid var(--line);border-radius:16px;padding:14px 16px;margin-bottom:12px}
.pv-ex.ok{border-color:#9fd8b8;background:#f4fbf7}
.pv-ex.ko{border-color:#f0b4a8;background:#fff8f6}
.pv-ex h4{margin:0 0 6px;font-weight:800;font-size:1em}
.pv-ex .data{background:#f4f6f8;border-radius:10px;padding:8px 12px;font-size:.93em;margin:6px 0 10px}
.pv-ex .fb{margin-top:8px;font-size:.92em}
.pv-field label{min-width:220px;font-weight:700;margin:0}
.pv-num{width:130px}
.pv-unit{font-weight:700;color:var(--muted)}
.pv-monthsel{display:flex;flex-wrap:wrap;gap:4px;margin:8px 0 0}
.pv-monthsel button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:3px 8px;font-size:.8em;font-weight:700;cursor:pointer;color:var(--ink)}
.pv-monthsel button.on{background:var(--p);color:#fff;border-color:var(--p)}
.pv-money{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;margin-top:10px}
.pv-money div{border-radius:12px;padding:10px 12px;background:#f0faf4;border:1px solid #c5e8d6}
.pv-money div.hl{background:#fff7e0;border-color:#fcd88a}
.pv-money small{display:block;font-weight:700;color:var(--muted);font-size:.8em}
.pv-money b{font-size:1.25em;display:block}
.pv-money span{font-size:.78em;color:var(--muted)}
.pv-missions{margin-top:14px;border:1px dashed #93b4f5;border-radius:14px;padding:10px 14px;background:#f8faff}
.pv-missions h3{margin:0 0 6px}
.pv-missions div{padding:4px 0;font-weight:650}
.pv-missions div.ok{color:#0f5c3a}
.pv-parts{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:8px}
.pv-part{display:flex;flex-direction:column;align-items:center;gap:4px;border:1px solid var(--line);background:#fff;border-radius:14px;padding:10px 6px;cursor:pointer;color:var(--ink);font-size:.82em;text-align:center}
.pv-part span{font-size:1.8em}
.pv-part i{font-style:normal;font-size:.8em;font-weight:800;color:#fff;background:#1d4ed8;border-radius:6px;padding:0 6px}
.pv-part.on{border:2px solid var(--p2);background:#fff8e6}
.pv-seq{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.pv-seq-done{margin:0;padding:12px 12px 12px 36px;border-radius:16px;background:#f4fbf7;border:1px solid #c5e8d6;min-height:100px}
.pv-seq-done li{margin-bottom:6px;font-weight:650}
.pv-seq-done li.empty{list-style:none;margin-left:-22px;color:var(--muted);font-weight:500}
.pv-seq-cards{display:flex;flex-direction:column;gap:8px}
.pv-seq-card{text-align:left;border:1px solid #d6dbe4;background:#fff;border-radius:12px;padding:10px 14px;cursor:pointer;color:var(--ink);font-size:.95em}
.pv-seq-card:hover:not([disabled]){border-color:var(--p2);background:#fffaf0}
.pv-seq-card.trap{background:#ffe9e4;border-color:#f0b4a8;text-decoration:line-through;opacity:.8}
.pv-card.warn{background:#fff8ec;border-color:#f3dcae}
@media (max-width:980px){.pv-chain{grid-template-columns:repeat(3,minmax(0,1fr))}.pv-lab{grid-template-columns:1fr}.pv-parts{grid-template-columns:repeat(4,minmax(0,1fr))}.pv-chain div:nth-child(3):after{display:none}}
@media (max-width:640px){.pv-chain{grid-template-columns:repeat(2,minmax(0,1fr))}.pv-chain div:after{display:none}.pv-parts{grid-template-columns:repeat(2,minmax(0,1fr))}.pv-seq{grid-template-columns:1fr}.pv-field label{min-width:0;width:100%}}
