.exo-dashboard{display:flex;flex-direction:column;gap:10px;margin:10px 0 14px}.exo-stats-grid{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.exo-stat-card{background:#fff;border:1px solid #e5e7eb;border-radius:14px;box-shadow:0 1px 3px rgba(0,0,0,.03);padding:10px 12px}.exo-stat-label{color:#9ca3af;font-size:11px;letter-spacing:.08em;margin-bottom:4px;text-transform:uppercase}.exo-stat-value{color:#111827;font-size:16px;font-weight:600}.exo-stat-sub{color:#6b7280;font-size:11px;margin-top:2px}.exo-reco{background:#f9fafb;border:1px dashed #d1d5db;border-radius:14px;padding:8px 10px}.exo-reco-title{color:#111827;font-size:12px;font-weight:600;margin-bottom:4px}.exo-reco-list{display:flex;flex-wrap:wrap;font-size:11px;gap:4px}.exo-reco-pill{background:#fff;border:1px solid #e5e7eb;border-radius:999px;cursor:pointer;padding:3px 8px;transition:background .15s ease,border-color .15s ease}.exo-reco-pill:hover{background:#eef7fb;border-color:#d1e7f4}.exo-parcours{display:flex;flex-wrap:wrap;gap:6px}.exo-parcours-title{color:#9ca3af;font-size:11px;letter-spacing:.08em;margin-bottom:2px;text-transform:uppercase}.exo-parcours-btn{background:#f9f9f9;border:1px solid #e5e7eb;border-radius:999px;color:#374151;cursor:pointer;font-size:11px;padding:5px 10px;transition:background .15s ease,border-color .15s ease,transform .08s ease}.exo-parcours-btn:hover{background:#eef2ff;border-color:#c7d2fe;transform:translateY(-.5px)}.exo-parcours-btn.active{background:#1785a5;border-color:#1785a5;color:#fff}.exo-card{border-radius:18px;transition:box-shadow .18s ease,transform .12s ease,border-color .18s ease,background .18s ease}.exo-card:hover{border-color:#d1e7f4;box-shadow:0 4px 12px rgba(0,0,0,.04);transform:translateY(-1px)}.exo-header-bar{background:linear-gradient(90deg,#1785a5,#04b6ed);border-radius:18px 18px 0 0;height:4px;left:0;position:absolute;right:0;top:0}.exo-header{align-items:center;padding-top:4px}.exo-header-main{min-width:0}.exo-title{color:#111827;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.exo-header-subtitle{font-size:11px;margin-top:2px}.exo-header-right{gap:6px}.exo-status-pill{align-items:center;color:#4b5563;display:inline-flex;font-size:11px;gap:4px}.exo-status-pill--success{background:#ecfdf5;border-color:#bbf7d0;color:#166534}.exo-level-pill{background:#f0fdf4;border:1px solid #90ee90;color:#006400;font-weight:600;padding:2px 8px}.exo-toggle{align-items:center;display:inline-flex;font-size:12px;gap:4px;padding:6px 10px;transition:background .15s ease,border-color .15s ease,transform .08s ease}.exo-toggle:after{content:"▾";font-size:10px;transition:transform .18s ease}.exo-toggle[aria-expanded=true]:after{transform:rotate(-180deg)}.exo-toggle:hover{background:#eef7fb;border-color:#d1e7f4;transform:translateY(-.5px)}.ets-exo-meta{margin:4px 0 8px}.ets-badge{background:#f5f7fa;color:#333;display:inline-block;font-size:11px;font-weight:500;letter-spacing:.02em;padding:3px 10px;transition:background .15s ease,border-color .15s ease,transform .08s ease}.ets-badge:hover{background:#eef7fb;border-color:#d1e7f4;transform:translateY(-.5px)}.ets-badge-cat{background:#ecf8ff;border-color:#bfe3f5;color:#026e8f}.ets-badge-level{background:#f0fdf4;border-color:#90ee90;color:#006400}.ets-badge-notion{background:#fff7ed;border-color:#fed7aa;color:#9a3412}.ets-badge-tags{background:#f3f4f6;border-color:#d1d5db;color:#4b5563}.ets-badge-points{color:#111827;font-weight:600}.ets-badge-new{background:#eef2ff;border-color:#c7d2fe;color:#4338ca}.ets-badge-required{background:#fef3c7;border-color:#fde68a;color:#92400e}.exo-body{transition:max-height .35s ease,opacity .25s ease}.exo-body.collapsed{max-height:0;opacity:0}.exo-body.expanded{opacity:1}.exo-objectif-block{background:#fff;border-left:4px solid rgba(23,133,165,.25);border-radius:6px;box-shadow:0 0 0 transparent;margin:1.2em 0;padding:1.2em 1.4em;transition:box-shadow .2s ease,border-color .2s ease}.exo-objectif-block:hover{border-left-color:rgba(23,133,165,.35);box-shadow:0 1px 4px rgba(0,0,0,.05)}.exo-objectif-block{font-size:.95rem;line-height:1.55;margin:24px 0 16px;padding:18px 14px 12px}.exo-objectif-block:before{background:#fff;border-radius:4px;color:#6b7280;font-size:.75rem;left:.8em;letter-spacing:.06em;padding:0 6px;top:-.65em}.exo-objectif-block li,.exo-objectif-block p,.exo-objectif-block ul{color:rgba(0,0,0,.85)}.exo-objectif-block ul{margin-top:.4em;padding-left:1.2em}.exo-context-toggle{color:#1785a5;cursor:pointer;font-size:.75rem;margin-top:6px;text-decoration:underline;transition:color .15s ease}.exo-context-toggle:hover{color:#0f5e73}.exo-example-block{background:#111827;border:1px solid #1f2937;border-radius:12px;color:#e5e7eb;font-family:ui-monospace,Consolas,monospace;overflow:hidden}.exo-example-header{background:#020617;border-bottom:1px solid #1f2937;padding:6px 8px}.exo-example-title{color:#e5e7eb;font-weight:500}.exo-example-copy-btn{background:#111827;border:1px solid #4b5563;border-radius:999px;color:#e5e7eb;cursor:pointer;font-size:11px;padding:2px 8px}.exo-example-copy-btn:hover{background:#1f2937}.exo-example-body{padding:8px 10px;white-space:pre-wrap}.exo-extra-block{margin-bottom:12px}.exo-help-bubble{margin-top:4px}.exo-hints-timeline{list-style:none;margin:4px 0 2px;padding-left:0}.exo-hint-step{font-size:12px;padding-left:18px;position:relative}.exo-hint-step:before{background:#e5e7eb;border-radius:999px;content:"";height:6px;left:6px;position:absolute;top:6px;width:6px}.exo-hint-step-active:before{background:#1785a5}.exo-editor-wrapper{margin-top:4px;position:relative}.exo-editor-toolbar{color:#6b7280;font-size:10px;gap:6px;position:absolute;right:8px;top:6px}.exo-editor-lang-pill{background:#f9fafb;border:1px solid #d1d5db;border-radius:999px;padding:1px 6px}.exo-card .CodeMirror{border:1px solid #e5e7eb;border-radius:10px}.exo-card .CodeMirror-lines{padding:8px 10px}.exo-card .CodeMirror-activeline-background{background:rgba(23,133,165,.05)}.ets-exo-editor{background:#f5f7fa;border:1px solid #e6e6e9;border-radius:10px;box-sizing:border-box;font-family:ui-monospace,Consolas,monospace;font-size:14px;min-height:80px;padding:10px;resize:vertical;width:100%}.exo-actions{margin:10px 0}.exo-btn{border-radius:10px;color:#111827;font-size:13px;padding:8px 12px;transition:background .15s ease,border-color .15s ease,transform .08s ease}.exo-btn:hover{background:#eef7fb;border-color:#d1e7f4;transform:translateY(-.5px)}.exo-btn-primary{border-color:#1785a5}.exo-btn-primary:hover{background:#0f6e8a;border-color:#0f6e8a}.exo-btn-success{background:#16a34a;border-color:#16a34a;color:#fff}.exo-btn-danger{background:#fff;border-color:#dc2626;color:#b91c1c}.exo-output{margin-top:8px;padding:10px}#ets-output-label{font-size:12px}.exo-output-stdout{background:#fafafa;border:1px dashed #e6e6e9}.exo-output-report{background:#fbfbff;border:1px dashed #e6e6e9}.exo-output-error{background:#fef2f2;border-color:#fecaca;color:#b91c1c}.exo-score{color:#555;font-size:12px;margin-top:8px}.exo-global-progress-label{font-variant-numeric:tabular-nums}.exo-help-animated{animation:exoHintFade .18s ease-out}@keyframes exoHintFade{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}.exo-card-debug{background:#fff7f7;border-color:#fecaca}.exo-card-debug .exo-header-bar{background:linear-gradient(90deg,#b91c1c,#f97316)}.exo-card--analysis{background:#f5fafe;border-left:6px solid #1785a5}.exo-analysis-layout{gap:16px;margin:14px 0}.exo-analysis-block{border:1px solid #d8e8ef;color:#0f3b47;font-size:14px;padding:12px 14px}.exo-analysis-label{color:#0a5773;letter-spacing:.03em;text-transform:uppercase}.exo-analysis-code{border:1px dashed #c7dfe9}.CodeMirror-linenumbers{background:#f0f4f7;border-right:1px solid #d6dde3;color:#6b7280;font-size:12px;padding-right:8px}.CodeMirror-gutters{background:#f0f4f7;border-right:none!important}.exo-analysis-code span:before{font-family:ui-monospace,Consolas,monospace;width:24px}.exo-analysis-layout{display:grid;gap:18px;grid-template-columns:1fr 1fr;margin:18px 0}@media (max-width:900px){.exo-analysis-layout{grid-template-columns:1fr}}.exo-analysis-block{background:#fff;border:1px solid #d0e2ec;border-radius:12px;padding:14px}.exo-analysis-label{color:#0c5066;font-size:13px;font-weight:600;margin-bottom:6px}.exo-analysis-code{background:#f0f7fa;border:1px dashed #9ec5d7;border-radius:8px;counter-reset:line;font-family:ui-monospace,Consolas,monospace;font-size:13px;padding:10px;white-space:pre-wrap}.exo-analysis-code span{counter-increment:line;display:block}.exo-analysis-code span:before{color:#6b7280;content:counter(line);display:inline-block;font-size:12px;margin-right:8px;text-align:right;width:28px}.exo-analysis-layout,.exo-refactor-layout{gap:22px;margin:16px 0 20px}.exo-analysis-block,.exo-refactor-original{box-shadow:0 0 0 transparent;padding:14px 16px;transition:box-shadow .15s ease}.exo-analysis-block:hover,.exo-refactor-original:hover{box-shadow:0 2px 10px rgba(0,0,0,.06)}.exo-analysis-label,.exo-refactor-label{color:#1785a5;font-size:13px;letter-spacing:.03em}.exo-analysis-code,.exo-refactor-code{line-height:1.48;padding:12px}.exo-editor-wrapper,.exo-refactor-editor-wrapper{background:#fff;border:1px solid #e5e7eb;border-radius:12px;display:flex;flex-direction:column;overflow:hidden;padding:0}.exo-editor-wrapper:hover,.exo-refactor-editor-wrapper:hover{box-shadow:0 2px 10px rgba(0,0,0,.06)}.exo-editor{background:#fff;font-family:Consolas,monospace;min-height:120px;padding:12px}.CodeMirror{border-radius:0 0 12px 12px;font-size:14px;height:auto!important;padding:8px 0}.exo-refactor-code{border-left:3px solid #e79057}.exo-analysis-code{border-left:3px solid #1785a5}@media (max-width:600px){.exo-analysis-code,.exo-refactor-code{font-size:12px}}.exo-card{background:#fff;border:1px solid #e5e7eb;border-radius:16px;box-shadow:0 2px 6px rgba(0,0,0,.02);margin:16px 0;padding:14px 16px 16px;position:relative}.exo-header-bar{display:none}.exo-card:before{background:linear-gradient(90deg,#1785a5,#04b6ed);border-radius:16px 16px 0 0;content:"";display:block;height:3px;margin:-14px -16px 10px}.exo-header{align-items:baseline;color:#444;cursor:pointer;display:flex;font-size:13px;justify-content:space-between;margin-bottom:8px}.exo-header-main{display:flex;flex-direction:column;gap:2px}.exo-title{color:#333;font-size:13px;font-weight:600;letter-spacing:.03em}.exo-header-subtitle{color:#6b7280;font-size:12px}.exo-header-right{align-items:center;display:flex;gap:8px}.exo-status-pill{background:#f9fafb;border:1px solid #e5e7eb;border-radius:999px;color:#6b7280;font-size:12px;font-style:italic;padding:2px 8px}.exo-status-pill--success{background:#ecfdf3;border-color:#90ee90;color:#006400}.exo-level-pill{background:#f9fafb;padding:2px 7px}.exo-level-pill,.exo-toggle{border:1px solid #e5e7eb;border-radius:999px;color:#4b5563;font-size:11px}.exo-toggle{background:#f9f9f9;cursor:pointer;font-family:inherit;padding:4px 9px;transition:background .15s ease,border-color .15s ease}.exo-toggle:hover{background:#f3f4f6;border-color:#d1d5db}.ets-exo-meta{display:flex;flex-wrap:wrap;font-size:11px;gap:6px;margin-bottom:8px}.ets-badge{background:#f9fafb;border:1px solid #e5e7eb;border-radius:999px;color:#4b5563;padding:2px 8px}.ets-badge-new{background:#e0f2fe;border-color:#04b6ed;color:#0369a1}.ets-badge-required{background:#fff7ed;border-color:#e79057;color:#9a3412}.ets-badge-cat{border-color:#d1d5db}.ets-badge-notion{background:#e8f4f8;border-color:#1785a5;color:#155e75}.ets-badge-tags{border-style:dashed}.ets-badge-points{background:#f3f4f6;border-color:#d1d5db}.exo-body{margin-top:8px;overflow:hidden;transition:max-height .18s ease}.exo-objectif-block{background:#f9fafb;border:1px solid #e5e7eb;border-radius:12px;color:#1f2933;font-size:13px;margin:8px 0 12px;padding:10px 12px 10px 32px;position:relative}.exo-objectif-block:before{color:#9ca3af;content:"OBJECTIF";font-size:11px;font-weight:700;left:10px;letter-spacing:.08em;margin-bottom:2px;position:absolute;text-transform:uppercase;top:8px}.exo-extra-block{background:#fff;border:1px dashed #e5e7eb;border-radius:10px;margin:6px 0 10px;padding:8px 10px}.exo-help-bubble{background:#fffdf5;border:1px solid #f0e0aa;border-radius:10px;font-size:12px;margin-top:6px;padding:8px 10px}.exo-help-bubble-inner{display:flex;flex-direction:column;gap:4px}.exo-help-bubble-header{font-size:11px;font-weight:600}.exo-hints-timeline{font-size:12px;margin:4px 0;padding-left:16px}.exo-hint-step{color:#4b5563;margin:2px 0}.exo-hint-step-active{color:#155e9c;font-weight:600}.exo-help-icon{align-items:center;background:#f9fafb;border:1px solid #ddd;border-radius:999px;cursor:pointer;display:inline-flex;font-size:13px;height:26px;justify-content:center;transition:background .15s ease,border-color .15s ease,transform .08s ease;width:26px}.exo-help-icon:hover{background:#f3f4f6;border-color:#d1d5db;transform:translateY(-1px)}.exo-example-block{background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;font-size:13px;margin-top:6px;padding:8px 10px}.exo-example-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.exo-example-title{color:#374151;font-size:12px;font-weight:600}.exo-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 6px}.exo-btn{background:#f9f9f9;border:1px solid #e5e7eb;border-radius:999px;color:#4b5563;cursor:pointer;font-family:inherit;font-size:12px;padding:5px 10px;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease,transform .08s ease}.exo-btn:hover{background:#f3f4f6;border-color:#d1d5db}.exo-btn-primary{background:#1785a5;border:1px solid #1785a5;border-radius:999px;color:#fff;cursor:pointer;font-size:13px;padding:7px 14px}.exo-btn-primary:hover{background:#04b6ed;box-shadow:0 2px 6px rgba(23,133,165,.25)}.exo-btn-success{background:#ecfdf3;border:1px solid #90ee90;border-radius:999px;color:#006400;cursor:pointer;font-size:13px;padding:7px 14px}.exo-btn-success:hover{background:#d1fae5;box-shadow:0 2px 6px rgba(22,163,74,.2)}.exo-output{background:#f9f9f9;border-radius:10px;border-top:1px solid #e5e7eb;color:#111827;font-family:ui-monospace,Consolas,monospace;font-size:13px;margin-top:4px;padding:8px 10px;white-space:pre-wrap}.exo-output-stdout{border-left:3px solid #1785a5}.exo-output-report{border-left:3px solid #e5e7eb}.exo-editor-wrapper{background:#fff;border:1px solid #e5e7eb;border-radius:12px;display:flex;flex-direction:column;overflow:hidden;padding:0}.exo-editor-toolbar{align-items:center;background:#f9fafb;border-bottom:1px solid #e5e7eb;color:#4b5563;display:flex;font-size:12px;justify-content:space-between;padding:8px 12px}.exo-editor-lang-pill{background:#1785a5;border-radius:6px;color:#fff;font-size:11px;letter-spacing:.04em;padding:2px 7px;text-transform:uppercase}.exo-editor{border:none;box-sizing:border-box;min-height:80px;outline:none!important;padding:10px 12px;resize:vertical;width:100%}.exo-card .CodeMirror,.exo-editor{background:#f5f7fa;border-radius:0 0 12px 12px;font-family:ui-monospace,Consolas,monospace;font-size:14px}.exo-card .CodeMirror{border:none;border-top:1px solid #e5e7eb}.exo-card .CodeMirror-lines{padding:6px 8px}.exo-card .CodeMirror{background-image:linear-gradient(90deg,transparent 0,transparent 80ch,rgba(23,133,165,.05) 0)}.CodeMirror .CodeMirror-linenumber{color:#d0d0d0}.CodeMirror-gutters{border-right:1px solid #eee}.exo-analysis-layout,.exo-refactor-layout{display:grid;gap:18px;grid-template-columns:1fr 1fr;margin:12px 0 14px}@media (max-width:850px){.exo-analysis-layout,.exo-refactor-layout{grid-template-columns:1fr}}.exo-analysis-block,.exo-refactor-original{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:12px 14px}.exo-analysis-label,.exo-refactor-label{font-size:12px;font-weight:700;letter-spacing:.08em;margin-bottom:6px;text-transform:uppercase}.exo-analysis-label{color:#1785a5}.exo-refactor-label{color:#e79057}.exo-analysis-code,.exo-refactor-code{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;font-family:ui-monospace,Consolas,monospace;font-size:13px;line-height:1.5;max-height:420px;overflow-y:auto;padding:10px;white-space:pre-wrap}.exo-analysis-code::-webkit-scrollbar,.exo-refactor-code::-webkit-scrollbar{width:6px}.exo-analysis-code::-webkit-scrollbar-thumb,.exo-refactor-code::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:999px}.exo-category-section{margin:20px 0}.exo-category-header{align-items:center;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border:1px solid #e2e8f0;border-radius:12px;cursor:pointer;display:flex;justify-content:space-between;margin-bottom:12px;padding:12px 16px;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.exo-category-header:hover{background:linear-gradient(135deg,#f1f5f9,#e2e8f0);border-color:#cbd5e1;box-shadow:0 2px 8px rgba(0,0,0,.04)}.exo-category-title{align-items:center;color:#1e293b;display:flex;font-size:15px;font-weight:600;gap:10px}.exo-category-title i{color:#1785a5;font-size:16px;text-align:center;width:24px}.exo-category-count{background:#fff;border:1px solid #e2e8f0;border-radius:999px;color:#64748b;font-size:12px;font-weight:500;padding:2px 8px}.exo-category-toggle{background:transparent;border:none;color:#64748b;cursor:pointer;padding:4px 8px;transition:transform .2s ease,color .15s ease}.exo-category-toggle:hover{color:#1785a5}.exo-category-toggle i{transition:transform .25s ease}.exo-category-section.collapsed .exo-category-toggle i{transform:rotate(-90deg)}.exo-category-section.collapsed .exo-category-cards{display:none}.exo-category-cards{animation:fadeInCards .2s ease}@keyframes fadeInCards{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.exo-category-stats{background:#fff;border:1px solid #e5e7eb;border-radius:14px;margin:12px 0;padding:12px 14px}.exo-category-stats-title{color:#374151;font-size:12px;font-weight:600;margin-bottom:10px}.exo-category-stats-grid{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.exo-cat-stat{align-items:center;background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;cursor:pointer;display:flex;gap:8px;padding:8px 10px;transition:background .15s ease,border-color .15s ease,transform .08s ease}.exo-cat-stat:hover{background:#f1f5f9;border-color:#cbd5e1;transform:translateY(-1px)}.exo-cat-stat i{color:#1785a5;font-size:14px;text-align:center;width:20px}.exo-cat-stat-name{color:#374151;flex:1;font-size:12px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.exo-cat-stat-progress{color:#6b7280;font-size:11px;font-weight:600;min-width:36px;text-align:right}.exo-cat-stat-bar{background:#e5e7eb;border-radius:999px;height:4px;overflow:hidden;width:40px}.exo-cat-stat-fill{background:linear-gradient(90deg,#1785a5,#04b6ed);border-radius:999px;height:100%;transition:width .3s ease}.exo-cat-stat[data-complete=true] .exo-cat-stat-fill{background:linear-gradient(90deg,#10b981,#34d399)}.exo-cat-stat[data-complete=true] i{color:#10b981}@media (max-width:600px){.exo-category-header{padding:10px 12px}.exo-category-title{font-size:14px;gap:8px}.exo-category-title i{font-size:14px;width:20px}.exo-category-stats-grid{grid-template-columns:1fr}.exo-cat-stat{padding:6px 8px}}