.terminal{display:flex;flex-direction:column;height:100%;background:#00050ff2;font-family:var(--font-mono);font-size:13px;color:var(--cyber-blue);position:relative}.terminal:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,.1) 2px,rgba(0,0,0,.1) 4px);z-index:10}.terminal--glitch{animation:glitch .3s ease-in-out}.terminal--matrix .terminal__output{color:var(--cyber-green)}.terminal__output{flex:1;overflow-y:auto;padding:14px;white-space:pre-wrap;word-break:break-all;position:relative;z-index:1}.terminal__line{line-height:1.7;margin-bottom:3px;position:relative}.terminal__line:nth-child(7n):after{content:"";position:absolute;left:0;top:0;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,rgba(0,212,255,.03) 50%,transparent 100%);animation:flicker 5s linear infinite;pointer-events:none}.terminal__line--command{color:var(--cyber-blue)}.terminal__line--output{color:var(--cyber-blue-dark)}.terminal__line--error{color:var(--cyber-red);text-shadow:0 0 5px var(--cyber-red)}.terminal__line--success{color:var(--cyber-green);text-shadow:0 0 5px var(--cyber-green)}.terminal__line--info{color:var(--cyber-blue-light)}.terminal__line--warning{color:var(--cyber-yellow);text-shadow:0 0 5px rgba(255,255,0,.3)}.terminal__line--ascii{color:var(--cyber-blue);white-space:pre;font-size:10px;line-height:1.1;text-shadow:0 0 5px var(--cyber-blue);animation:glitchText 4s ease-in-out infinite}.terminal__prompt{color:var(--cyber-blue)}.terminal__prompt-user{color:var(--cyber-blue-light);text-shadow:0 0 5px var(--cyber-blue)}.terminal__prompt-at{color:var(--cyber-blue-darker)}.terminal__prompt-host{color:var(--cyber-purple);text-shadow:0 0 5px var(--cyber-purple)}.terminal__prompt-symbol{color:var(--cyber-blue-light);animation:blink 1s step-end infinite}.terminal__input-line{display:flex;align-items:center;padding:10px 14px;border-top:1px solid rgba(0,212,255,.3);background:linear-gradient(180deg,#001428cc,#000f1ee6);position:relative;z-index:2}.terminal__input{flex:1;background:transparent;border:none;color:var(--cyber-blue);font-family:var(--font-mono);font-size:13px;outline:none;caret-color:var(--cyber-blue)}.terminal__input::placeholder{color:var(--cyber-blue-darker)}.terminal__cursor{display:inline-block;width:8px;height:16px;background:var(--cyber-blue);animation:blink 1s step-end infinite;box-shadow:0 0 10px var(--cyber-blue)}.terminal a{color:var(--cyber-purple);text-decoration:underline}.terminal a:hover{color:var(--cyber-pink);text-shadow:0 0 5px var(--cyber-purple)}.terminal__data-table{margin:10px 0;border:1px solid var(--cyber-blue-darker);border-radius:4px;overflow:hidden}.terminal__data-row{display:flex;border-bottom:1px solid rgba(0,212,255,.2)}.terminal__data-row:last-child{border-bottom:none}.terminal__data-row--header{background:#00d4ff1a}.terminal__data-cell{padding:8px 12px;flex:1;color:var(--cyber-blue)}.terminal__data-cell--label{color:var(--cyber-blue-dark);min-width:120px;flex:0}.terminal__loading{display:flex;align-items:center;gap:8px;color:var(--cyber-blue-dark)}.terminal__loading-dots{display:flex;gap:4px}.terminal__loading-dot{width:6px;height:6px;background:var(--cyber-blue);border-radius:50%;animation:pulse 1s ease-in-out infinite}.terminal__loading-dot:nth-child(2){animation-delay:.2s}.terminal__loading-dot:nth-child(3){animation-delay:.4s}@media (max-width: 768px){.terminal{font-size:12px}.terminal__output{padding:12px}.terminal__prompt{font-size:12px}.terminal__input-line{padding:10px 12px}.terminal__data-cell{padding:6px 10px}.terminal__data-cell--label{min-width:100px}}@media (max-width: 480px){.terminal{font-size:11px}.terminal__output{padding:10px}.terminal__line{line-height:1.6;word-break:break-word}.terminal__prompt{font-size:11px}.terminal__prompt:before{font-size:10px}.terminal__input-line{padding:8px 10px}.terminal__input{font-size:12px}.terminal__data-row{flex-direction:column;border-bottom:1px solid rgba(0,212,255,.1)}.terminal__data-row--header{display:none}.terminal__data-cell{padding:4px 8px;width:100%}.terminal__data-cell--label{min-width:auto;font-weight:700;padding-top:8px}.terminal__data-cell:last-child{padding-bottom:8px}}:root,[data-theme=amber]{--accent: #f59e0b;--accent-bright: #fbbf24;--accent-dim: rgba(245, 158, 11, .14);--accent-glow: rgba(245, 158, 11, .35);--accent-status-bg: rgba(245, 158, 11, .12)}[data-theme=cyan]{--accent: #22d3ee;--accent-bright: #67e8f9;--accent-dim: rgba(34, 211, 238, .14);--accent-glow: rgba(34, 211, 238, .35);--accent-status-bg: rgba(34, 211, 238, .1)}[data-theme=green]{--accent: #4ade80;--accent-bright: #86efac;--accent-dim: rgba(74, 222, 128, .14);--accent-glow: rgba(74, 222, 128, .35);--accent-status-bg: rgba(74, 222, 128, .1)}[data-theme=purple]{--accent: #a78bfa;--accent-bright: #c4b5fd;--accent-dim: rgba(167, 139, 250, .14);--accent-glow: rgba(167, 139, 250, .35);--accent-status-bg: rgba(167, 139, 250, .1)}[data-theme=rose]{--accent: #fb7185;--accent-bright: #fda4af;--accent-dim: rgba(251, 113, 133, .14);--accent-glow: rgba(251, 113, 133, .35);--accent-status-bg: rgba(251, 113, 133, .1)}:root{--bg-0: #07090d;--bg-1: #0b0e14;--bg-2: #0e131b;--bg-3: #11161f;--bg-hover: rgba(255, 255, 255, .045);--bg-active: rgba(245, 158, 11, .1);--line: rgba(255, 255, 255, .07);--line-soft: rgba(255, 255, 255, .045);--tx-0: #e6ebf2;--tx-1: #aab4c2;--tx-2: #6b7686;--tx-3: #4a5462;--s-key: #f59e0b;--s-str: #9ece6a;--s-fn: #7aa2f7;--s-num: #e0af68;--s-com: #5a6675;--s-punc: #8b97a7;--r: 7px;--mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--activity-w: 54px;--side-w: 268px;--title-h: 38px;--status-h: 26px;--tab-h: 40px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;background:var(--bg-0);color:var(--tx-0);font-family:var(--mono);font-size:14px;-webkit-font-smoothing:antialiased;overflow:hidden}#root{height:100%}::selection{background:var(--accent-glow);color:#fff}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-bright)}#matrix{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none}.ide{position:relative;z-index:1;height:100%;display:flex;flex-direction:column;background:transparent}.titlebar{height:var(--title-h);flex:0 0 var(--title-h);display:flex;align-items:center;gap:14px;padding:0 12px;background:var(--bg-3);border-bottom:1px solid var(--line);font-size:12px;color:var(--tx-1);-webkit-user-select:none;user-select:none;position:relative;z-index:1}.lights{display:flex;gap:8px;align-items:center}.light{width:12px;height:12px;border-radius:50%;opacity:.9}.light.r{background:#ff5f57}.light.y{background:#febc2e}.light.g{background:#28c840}.brand{display:flex;align-items:center;gap:8px;font-weight:700;color:var(--tx-0);letter-spacing:.02em}.brand .logo{color:var(--accent);display:inline-flex}.menus{display:flex;gap:2px}.menu-item{padding:4px 8px;border-radius:5px;cursor:default;color:var(--tx-2);border:none;background:none;font:inherit}.menu-item:hover{background:var(--bg-hover);color:var(--tx-0)}.title-center{position:absolute;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;color:var(--tx-2);font-size:12px;white-space:nowrap}.title-center .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent-glow)}.title-right{margin-left:auto;display:flex;align-items:center;gap:10px}.body-row{flex:1 1 auto;display:flex;min-height:0;position:relative;z-index:1}.activity{width:var(--activity-w);flex:0 0 var(--activity-w);background:var(--bg-3);border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:center;padding:8px 0;gap:4px}.act-btn{width:40px;height:40px;border-radius:8px;display:grid;place-items:center;cursor:pointer;color:var(--tx-2);position:relative;transition:color .15s,background .15s;border:none;background:none}.act-btn:hover{color:var(--tx-0);background:var(--bg-hover)}.act-btn.active{color:var(--accent)}.act-btn.active:before{content:"";position:absolute;left:-8px;top:8px;bottom:8px;width:2px;border-radius:2px;background:var(--accent);box-shadow:0 0 8px var(--accent-glow)}.act-spacer{flex:1}.act-btn .badge{position:absolute;bottom:4px;right:4px;background:var(--accent);color:#1a1206;font-size:9px;font-weight:700;border-radius:6px;padding:0 4px;line-height:13px}.sidebar{width:var(--side-w);flex:0 0 var(--side-w);background:var(--bg-2);border-right:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden}.side-head{padding:12px 16px 8px;font-size:11px;letter-spacing:.14em;color:var(--tx-2);display:flex;align-items:center;justify-content:space-between}.side-section{padding:2px 0 10px}.side-scroll{overflow-y:auto;flex:1}.workspace-name{padding:4px 16px;font-size:11px;letter-spacing:.1em;color:var(--tx-1);font-weight:700;display:flex;align-items:center;gap:6px;cursor:default}.tree{padding:2px 0}.tree-row{display:flex;align-items:center;gap:7px;padding:4px 16px 4px 0;cursor:pointer;font-size:13px;color:var(--tx-1);position:relative;line-height:1.5;border:none;background:none;width:100%;text-align:left;font-family:var(--mono)}.tree-row:hover{background:var(--bg-hover)}.tree-row.active{background:var(--bg-active);color:var(--tx-0)}.tree-row.active:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--accent)}.tree-row .chev{width:14px;display:inline-flex;justify-content:center;color:var(--tx-2);flex-shrink:0}.tree-row .fname{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fi{width:15px;height:15px;flex:0 0 15px;display:inline-flex}.ext-md{color:#6ea8fe}.ext-json{color:var(--accent-bright)}.ext-ts{color:#4fb6ff}.ext-log{color:#9ece6a}.ext-edu{color:#c792ea}.ext-pdf{color:#ff7a85}.ext-tab{color:var(--accent)}.open-editors .tree-row{padding-left:16px}.oe-item{position:relative}.oe-item .tree-row{width:100%;padding-right:28px}.oe-close{position:absolute;right:4px;top:50%;transform:translateY(-50%);opacity:0;color:var(--tx-2);display:inline-flex;border-radius:4px;padding:2px;border:none;background:none;cursor:pointer}.oe-item:hover .oe-close{opacity:1}.oe-close:hover{background:var(--bg-hover);color:var(--tx-0)}.editor-region{flex:1 1 auto;display:flex;flex-direction:column;min-width:0;min-height:0}.tabs{height:var(--tab-h);flex:0 0 var(--tab-h);display:flex;align-items:stretch;background:var(--bg-3);border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{height:0}.tab-item{display:flex;align-items:stretch;border-right:1px solid var(--line);background:var(--bg-2);max-width:220px;position:relative}.tab{display:flex;align-items:center;gap:8px;padding:0 8px 0 14px;cursor:pointer;font-size:12.5px;color:var(--tx-2);white-space:nowrap;flex:1;min-width:0;border:none;background:none;font-family:var(--mono);text-align:left}.tab:hover{color:var(--tx-1)}.tab-item:hover{background:var(--bg-hover)}.tab.active{background:var(--bg-1);color:var(--tx-0)}.tab-item:has(.tab.active){background:var(--bg-1)}.tab.active:after{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--accent);box-shadow:0 0 10px var(--accent-glow)}.tab .tlabel{overflow:hidden;text-overflow:ellipsis}.tclose{width:22px;flex-shrink:0;align-self:stretch;display:grid;place-items:center;opacity:0;border:none;background:none;cursor:pointer;color:var(--tx-2);padding:0}.tab-item:hover .tclose,.tab-item:has(.tab.active) .tclose{opacity:.6}.tclose:hover{opacity:1!important;background:var(--bg-hover);color:var(--tx-0)}.breadcrumb{height:28px;display:flex;align-items:center;gap:6px;padding:0 18px;font-size:11.5px;color:var(--tx-2);border-bottom:1px solid var(--line-soft);background:var(--bg-1);white-space:nowrap;flex-shrink:0}.breadcrumb .sep{opacity:.5}.editor{flex:1 1 auto;overflow:auto;background:#0b0e14d1;position:relative}.panel{flex:0 0 auto;background:var(--bg-2);border-top:1px solid var(--line);display:flex;flex-direction:column;min-height:0}.panel-tabs{display:flex;align-items:center;gap:4px;padding:6px 12px;height:34px;border-bottom:1px solid var(--line-soft);font-size:11.5px;letter-spacing:.1em;flex-shrink:0}.panel-tab{padding:4px 10px;color:var(--tx-2);cursor:pointer;border-radius:5px;text-transform:uppercase}.panel-tab.active{color:var(--tx-0);position:relative}.panel-tab.active:after{content:"";position:absolute;left:10px;right:10px;bottom:-7px;height:2px;background:var(--accent)}.panel-actions{margin-left:auto;display:flex;gap:6px}.pa-btn{width:26px;height:24px;border-radius:5px;display:grid;place-items:center;color:var(--tx-2);cursor:pointer;border:none;background:none}.pa-btn:hover{background:var(--bg-hover);color:var(--tx-0)}.statusbar{height:var(--status-h);flex:0 0 var(--status-h);display:flex;align-items:center;font-size:11.5px;background:var(--bg-3);color:var(--tx-2);border-top:1px solid var(--line);-webkit-user-select:none;user-select:none;position:relative;z-index:1}.sb-left,.sb-right{display:flex;align-items:center;height:100%}.sb-right{margin-left:auto}.sb-item{display:flex;align-items:center;gap:6px;padding:0 10px;height:100%;cursor:default;white-space:nowrap;color:var(--tx-2)}.sb-item.accent{color:var(--accent);background:var(--accent-status-bg);border-right:1px solid var(--line)}.sb-item.click{cursor:pointer}.sb-item.click:hover{background:var(--bg-hover);color:var(--tx-0)}.sb-item.accent.click:hover{background:var(--accent-dim);color:var(--accent-bright)}.sb-sep{width:1px;height:14px;background:var(--line)}.sb-status-dot{width:8px;height:8px;border-radius:50%;background:#4ade80;box-shadow:0 0 0 2px #4ade8040}.kbd{font-family:var(--mono);font-size:11px;padding:2px 6px;border-radius:5px;background:#ffffff12;border:1px solid var(--line);color:var(--tx-1);cursor:pointer}.ide-terminal{flex:1;overflow-y:auto;padding:12px 16px;font-size:13px;line-height:1.6;background:var(--bg-1)}.ide-terminal .term-line{white-space:pre-wrap;word-break:break-word;color:var(--tx-1)}.ide-terminal .term-line.cmd .prompt{color:var(--accent)}.ide-terminal .term-line.cmd .path{color:var(--s-fn)}.ide-terminal .term-line.term-out .ok{color:#6ee780}.ide-terminal .term-line.term-out .hl{color:var(--accent)}.ide-terminal .term-line.term-err{color:#ff7a85}.ide-terminal .term-input-row{display:flex;align-items:center;gap:0}.ide-terminal .term-input-row .punc{margin-right:7px}.ide-terminal .term-input-row .prompt{color:var(--accent);white-space:nowrap}.ide-terminal .term-input-row .path{color:var(--s-fn);white-space:nowrap}.ide-terminal .term-input{flex:1;background:none;border:none;outline:none;color:var(--tx-0);font-family:var(--mono);font-size:13px;caret-color:var(--accent)}.palette-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;justify-content:center;padding-top:12vh;background:#00000073;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);border:none}.palette{width:min(640px,92vw);max-height:60vh;background:var(--bg-3);border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:0 30px 80px #0009,0 0 0 1px var(--accent-dim);display:flex;flex-direction:column}.palette-input-row{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)}.palette-input-row .ic{color:var(--accent);display:inline-flex}.palette-input{flex:1;background:none;border:none;outline:none;color:var(--tx-0);font-family:var(--mono);font-size:15px}.palette-input::placeholder{color:var(--tx-2)}.palette-list{overflow-y:auto;padding:6px}.palette-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:8px;cursor:pointer;color:var(--tx-1);border:none;background:none;width:100%;text-align:left;font-family:var(--mono)}.palette-item:hover,.palette-item.sel{background:var(--bg-active);color:var(--tx-0)}.palette-item .ic{color:var(--accent);display:inline-flex}.palette-item .pi-sub{margin-left:auto;font-size:11px;color:var(--tx-2)}.palette-empty{padding:10px 12px;font-size:12px;color:var(--tx-2);text-align:center}.preview{padding:40px 48px 90px;max-width:920px}.preview h1{font-size:30px;font-weight:700;color:var(--tx-0);letter-spacing:-.01em;margin-bottom:8px}.preview h2{font-size:13px;letter-spacing:.14em;color:var(--accent);text-transform:uppercase;margin:34px 0 16px;display:flex;align-items:center;gap:10px}.preview h2:after{content:"";flex:1;height:1px;background:var(--line)}.preview p{color:var(--tx-1);line-height:1.8;margin-bottom:14px;font-size:14px}.preview strong{color:var(--accent-bright);font-weight:600}.preview .muted{color:var(--tx-2);font-style:italic}.preview-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;gap:16px;color:var(--tx-2)}.preview-loading__spinner{width:20px;height:20px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.facts{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}.fact{background:var(--bg-2);padding:14px 16px}.fact .fk{font-size:11px;letter-spacing:.08em;color:var(--tx-2);text-transform:uppercase;margin-bottom:5px}.fact .fv{color:var(--tx-0);font-size:13.5px}.proj-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.card{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r);padding:18px;transition:border-color .18s,transform .18s,box-shadow .18s}.card:hover{border-color:var(--accent);transform:translateY(-2px);box-shadow:0 8px 30px #0006,0 0 0 1px var(--accent-dim)}.card .ctop{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.card .cname{color:var(--tx-0);font-weight:600;font-size:15px;display:flex;align-items:center;gap:8px}.card .cname .ic{color:var(--accent)}.card .cdesc{margin-bottom:14px}.card .cdesc p{color:var(--tx-1);font-size:13px;line-height:1.65;margin:0 0 6px}.card .cdesc p:last-child{margin-bottom:0}.card .clinks{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}.card .clinks a{font-size:12px;color:var(--accent);display:flex;align-items:center;gap:5px}.card .clinks a:hover{color:var(--accent-bright)}.stack{display:flex;flex-wrap:wrap;gap:6px}.chip{font-size:11px;padding:3px 9px;border-radius:20px;background:var(--bg-3);border:1px solid var(--line);color:var(--tx-1)}.pstatus{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;padding:3px 8px;border-radius:5px;font-weight:700}.pstatus.live,.pstatus.prod,.pstatus.termine{background:#6ee7801f;color:#6ee780}.pstatus.wip,.pstatus.en_cours{background:var(--accent-dim);color:var(--accent-bright)}.pstatus.archive{background:#6b768633;color:var(--tx-2)}.skill-groups{display:flex;flex-direction:column;gap:22px}.sg-cat{color:var(--accent);font-size:13px;margin-bottom:12px;display:flex;align-items:center;gap:8px}.sg-cat .ln{font-size:11px;color:var(--tx-3)}.skill-list{display:flex;flex-wrap:wrap;gap:8px}.skill{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r);padding:8px 13px;font-size:13px;color:var(--tx-0);display:flex;align-items:center;gap:8px;white-space:nowrap;transition:border-color .15s}.skill:hover{border-color:var(--accent)}.skill .sq{width:7px;height:7px;background:var(--accent);border-radius:2px}.timeline{position:relative;padding-left:26px}.timeline:before{content:"";position:absolute;left:6px;top:6px;bottom:6px;width:1px;background:var(--line)}.tl-item{position:relative;padding-bottom:26px}.tl-item:before{content:"";position:absolute;left:-23px;top:5px;width:11px;height:11px;border-radius:50%;background:var(--bg-1);border:2px solid var(--accent);box-shadow:0 0 10px var(--accent-glow)}.tl-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.tl-role{color:var(--tx-0);font-weight:600;font-size:15px}.tl-period{color:var(--accent);font-size:12px}.tl-org{color:var(--tx-2);font-size:12.5px;margin:3px 0 8px}.tl-points{list-style:none;display:flex;flex-direction:column;gap:6px}.tl-points li{color:var(--tx-1);font-size:13px;padding-left:16px;position:relative;line-height:1.55}.tl-points li:before{content:"▸";position:absolute;left:0;color:var(--accent)}.tl-tech{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.tl-meta{display:flex;flex-wrap:wrap;gap:10px;margin:4px 0 6px;color:var(--tx-2);font-size:12px}.tl-date{color:var(--accent)}.tl-desc{margin:8px 0 4px}.tl-desc p{color:var(--tx-1);font-size:13px;line-height:1.65;margin:0 0 5px;padding-left:12px;border-left:2px solid var(--line)}.tl-desc p:last-child{margin-bottom:0}.contact-card{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r);padding:6px 0;max-width:520px}.contact-row{display:flex;align-items:center;gap:14px;padding:14px 20px;color:var(--tx-1);border-bottom:1px solid var(--line-soft);text-decoration:none;font-size:13.5px;transition:background .15s,color .15s}.contact-row:last-child{border-bottom:none}.contact-row:hover{background:var(--bg-hover);color:var(--tx-0)}.contact-row .ic{color:var(--accent);display:inline-flex}.contact-row .ck{width:90px;color:var(--tx-2);font-size:12px}.contact-form{display:flex;flex-direction:column;gap:16px;max-width:520px;margin-top:24px}.form-group{display:flex;flex-direction:column;gap:6px}.form-group label{font-size:12px;color:var(--tx-2);letter-spacing:.06em;text-transform:uppercase}.form-group input,.form-group textarea{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r);color:var(--tx-0);font-family:var(--mono);font-size:13px;padding:10px 14px;outline:none;transition:border-color .15s}.form-group input:focus,.form-group textarea:focus{border-color:var(--accent)}.form-group input::placeholder,.form-group textarea::placeholder{color:var(--tx-3)}.form-group textarea{resize:vertical;min-height:100px}.form-error{color:#ff7a85;font-size:12px}.form-success{display:flex;align-items:center;gap:10px;color:#6ee780;font-size:14px;padding:16px 0}.form-consent-label{display:flex;align-items:flex-start;gap:10px;font-size:12px;color:var(--tx-2);line-height:1.6;cursor:pointer}.form-consent-label input[type=checkbox]{margin-top:2px;flex-shrink:0;width:14px;height:14px;accent-color:var(--accent);cursor:pointer}.legal-inline-link{color:var(--accent);text-decoration:underline;cursor:pointer}.legal-inline-link:hover{color:var(--accent-bright)}.legal-section{margin-bottom:28px}.legal-section h2{font-size:14px;font-weight:600;color:var(--accent);margin:0 0 10px;letter-spacing:.04em}.legal-section h3{font-size:12.5px;font-weight:600;color:var(--tx-1);margin:16px 0 6px;text-transform:uppercase;letter-spacing:.06em}.legal-section p{font-size:13px;color:var(--tx-2);line-height:1.7;margin:0 0 8px}.legal-section ul{margin:0 0 8px 18px;padding:0}.legal-section li{font-size:13px;color:var(--tx-2);line-height:1.7}.legal-section a{color:var(--accent);text-decoration:none}.legal-section a:hover{text-decoration:underline}.legal-section code{font-family:var(--mono);font-size:12px;background:var(--bg-3);padding:1px 5px;border-radius:3px;color:var(--tx-1)}.legal-note{font-size:11.5px;color:var(--tx-3);font-style:italic;border-left:2px solid var(--line);padding-left:10px;margin-top:8px}.legal-footer{font-size:11px;color:var(--tx-3);margin-top:32px;padding-top:16px;border-top:1px solid var(--line)}.btn{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:var(--r);font-family:var(--mono);font-size:13px;cursor:pointer;border:1px solid var(--line);background:var(--bg-2);color:var(--tx-0);transition:border-color .15s,background .15s,transform .1s}.btn:hover{border-color:var(--accent);background:var(--bg-hover)}.btn:active{transform:translateY(1px)}.btn.primary{background:var(--accent);color:#160f02;border-color:var(--accent);font-weight:700;box-shadow:0 0 24px var(--accent-glow)}.btn.primary:hover{background:var(--accent-bright)}.btn:disabled{opacity:.5;cursor:not-allowed}.welcome{padding:0;height:100%;display:flex;flex-direction:column}.w-screen{padding:8vh 8% 60px;max-width:1000px}.w-logo{font-size:clamp(40px,7vw,80px);font-weight:800;letter-spacing:-.02em;line-height:1;color:var(--tx-0);margin-bottom:6px}.w-logo .accent{color:var(--accent);text-shadow:0 0 30px var(--accent-glow)}.w-sub{color:var(--tx-1);font-size:clamp(15px,2vw,19px);margin-bottom:4px}.w-status{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:#6ee780;margin:14px 0 30px;padding:5px 12px;border:1px solid rgba(110,231,128,.25);border-radius:20px;background:#6ee7800f}.w-status .pulse{width:8px;height:8px;border-radius:50%;background:#6ee780;animation:wpulse 2s infinite}@keyframes wpulse{0%{box-shadow:0 0 #6ee78080}70%{box-shadow:0 0 0 9px #6ee78000}to{box-shadow:0 0 #6ee78000}}.w-tag{color:var(--tx-1);font-size:14.5px;line-height:1.8;max-width:720px;margin-bottom:34px}.w-actions{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:30px}.w-cols{display:grid;grid-template-columns:1fr 1fr;gap:40px;max-width:760px}.w-col h4{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--tx-2);margin-bottom:12px}.w-link{display:flex;align-items:center;gap:10px;padding:7px 0;color:var(--accent);cursor:pointer;font-size:14px}.w-link:hover{color:var(--accent-bright)}.w-link .wk{color:var(--tx-2)}.w-boot{padding:28px 32px;font-size:13.5px;line-height:1.7}.ascii{color:var(--accent);white-space:pre;font-size:11px;line-height:1.15;text-shadow:0 0 14px var(--accent-glow);margin-bottom:18px}.boot-rows{display:flex;gap:28px;flex-wrap:wrap;align-items:flex-start}.boot-info{flex:1 1 380px;min-width:280px}.boot-row{display:flex;align-items:baseline;margin-bottom:3px}.boot-key{color:var(--accent);display:inline-block;width:90px}.boot-val{color:var(--tx-0)}.editor-inner{display:flex;min-height:100%}.gutter{flex:0 0 56px;text-align:right;padding:22px 14px 60px;color:var(--tx-3);font-size:12.5px;line-height:1.85;-webkit-user-select:none;user-select:none;border-right:1px solid var(--line-soft);background:transparent}.code-body{flex:1;padding:22px 28px 80px;line-height:1.85;font-size:13.5px;min-width:0;color:var(--tx-1)}.code-body p{margin:0;min-height:1.85em;white-space:pre-wrap}.k{color:var(--s-key)}.str{color:var(--s-str)}.fn{color:var(--s-fn)}.com{color:var(--s-com);font-style:italic}.punc{color:var(--s-punc)}.prop{color:#8ad4ff}.about-header{display:flex;align-items:center;gap:24px;margin-bottom:28px;flex-wrap:wrap}.about-avatar{width:80px;height:80px;border-radius:50%;border:2px solid var(--accent);overflow:hidden;display:grid;place-items:center;color:var(--accent);background:var(--bg-2);flex-shrink:0}.about-avatar img{width:100%;height:100%;object-fit:cover}.toast{position:fixed;bottom:44px;left:50%;transform:translate(-50%);z-index:60;background:var(--bg-3);border:1px solid var(--accent);color:var(--tx-0);padding:10px 18px;border-radius:8px;box-shadow:0 10px 40px #00000080;font-size:13px}.sb-mode-btn{display:flex;align-items:center;justify-content:center;width:28px;height:100%;cursor:pointer;color:var(--tx-2);background:none;border:none;transition:color .15s,background .15s}.sb-mode-btn:hover{background:var(--bg-hover);color:var(--tx-0)}.theme-picker{position:relative}.theme-picker__trigger{display:flex;align-items:center;gap:6px;padding:0 10px;height:100%;cursor:pointer;color:var(--tx-2);font-size:11.5px;transition:color .15s,background .15s;border:none;background:none;font-family:var(--mono)}.theme-picker__trigger:hover{background:var(--bg-hover);color:var(--tx-0)}.theme-picker__dot{width:10px;height:10px;border-radius:50%;background:var(--accent);box-shadow:0 0 6px var(--accent-glow);flex-shrink:0}.theme-picker__panel{position:absolute;bottom:calc(100% + 6px);right:0;background:var(--bg-3);border:1px solid var(--line);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:10px;box-shadow:0 12px 40px #0009,0 0 0 1px var(--accent-dim);z-index:200;animation:fadeIn .15s ease both}.theme-picker__label{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--tx-3);padding-bottom:6px;border-bottom:1px solid var(--line)}.hue-track{width:24px;height:180px;border-radius:12px;position:relative;cursor:crosshair;flex-shrink:0;-webkit-user-select:none;user-select:none;background:linear-gradient(to bottom,#ee2b2b,#ee8c2b,#eeee2b,#8cee2b,#2bee2b,#2bee8c,#2beeee,#2b8cee,#2b2bee,#8c2bee,#ee2bee,#ee2b8c,#ee2b2b);box-shadow:0 0 0 1px var(--line),0 4px 16px #0006}.hue-thumb{position:absolute;left:50%;width:30px;height:6px;transform:translate(-50%,-50%);border:2px solid #fff;border-radius:3px;box-shadow:0 0 0 1px #00000080,0 2px 6px #0006;pointer-events:none}[data-mode=light]{--bg-0: #f3f4f6;--bg-1: #eaecf0;--bg-2: #e0e3e9;--bg-3: #d4d8e0;--bg-hover: rgba(0,0,0,.05);--bg-active: var(--accent-dim);--line: rgba(0,0,0,.1);--line-soft: rgba(0,0,0,.06);--tx-0: #0d1117;--tx-1: #374151;--tx-2: #6b7280;--tx-3: #9ca3af;--s-key: var(--accent);--s-fn: #1d4ed8;--s-str: #15803d;--s-num: #b45309;--s-com: #9ca3af;--s-punc: #374151}[data-mode=light] .editor{background:#eaecf0e0}[data-mode=light] .prop{color:#1d4ed8}[data-mode=light] .ext-md{color:#2563eb}[data-mode=light] .ext-ts{color:#1d4ed8}[data-mode=light] .ext-log{color:#16a34a}[data-mode=light] .ext-edu{color:#7c3aed}[data-mode=light] .ext-pdf{color:#dc2626}[data-mode=light] .sb-status-dot{background:#16a34a;box-shadow:0 0 0 2px #16a34a40}[data-mode=light] .w-status{color:#15803d;border-color:#16a34a4d;background:#16a34a14}[data-mode=light] .w-status .pulse{background:#16a34a}[data-mode=light] .pstatus.live,[data-mode=light] .pstatus.prod,[data-mode=light] .pstatus.termine{background:#16a34a1f;color:#15803d}[data-mode=light] .pstatus.wip,[data-mode=light] .pstatus.en_cours{background:var(--accent-dim);color:var(--accent)}[data-mode=light] .ide-terminal .term-line.term-out .ok{color:#15803d}[data-mode=light] .ide-terminal .term-line.term-err{color:#b91c1c}[data-mode=light] .ide-terminal{background:var(--bg-0);color:var(--tx-1)}[data-mode=light] .ide-terminal .term-line{color:var(--tx-1)}[data-mode=light] .form-error{color:#b91c1c}[data-mode=light] .form-success{color:#15803d}[data-mode=light] .palette-overlay{background:#0000004d}[data-mode=light] .palette{background:#fff;border-color:#0000001f}[data-mode=light] .palette-input{color:var(--tx-0)}[data-mode=light] .palette-item{color:var(--tx-1)}[data-mode=light] .palette-item:hover,[data-mode=light] .palette-item.sel{background:var(--bg-active);color:var(--tx-0)}[data-mode=light] .theme-picker__panel{background:#1e2028;border-color:#ffffff1a;box-shadow:0 12px 40px #0006}[data-mode=light] .theme-picker__label{color:#fff6;border-bottom-color:#ffffff1a}[data-mode=light] .toast{background:#fff;border-color:var(--accent);color:var(--tx-0);box-shadow:0 10px 40px #00000026}::-webkit-scrollbar{width:11px;height:11px}::-webkit-scrollbar-thumb{background:#ffffff17;border-radius:6px;border:3px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:#ffffff29;background-clip:padding-box}::-webkit-scrollbar-track{background:transparent}.fade-in{animation:fadeIn .75s ease both}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@media (max-width: 880px){.sidebar{display:none}.proj-grid,.facts,.w-cols{grid-template-columns:1fr}.title-center{display:none}.preview{padding:24px 20px 60px}}@media (max-width: 620px){.menus{display:none}:root{--activity-w: 46px}}.admin-page{width:100vw;height:100vh;background:var(--bg-0);overflow:auto}.admin{display:flex;height:100%;background:var(--bg-0)}.admin__sidebar{width:220px;background:var(--bg-1);border-right:1px solid var(--line);display:flex;flex-direction:column;flex-shrink:0}.admin__header{display:flex;align-items:center;gap:10px;padding:12px 16px;color:var(--tx-2);font-size:11px;text-transform:uppercase;letter-spacing:.1em;border-bottom:1px solid var(--line)}.admin__nav{flex:1;padding:6px;display:flex;flex-direction:column;gap:2px;overflow-y:auto}.admin__nav-item{display:flex;align-items:center;gap:10px;padding:8px 12px;background:transparent;border:none;color:var(--tx-2);font-size:13px;font-family:var(--mono);cursor:pointer;border-radius:4px;text-align:left;transition:background .12s,color .12s;width:100%}.admin__nav-item:hover{background:var(--bg-hover);color:var(--tx-1)}.admin__nav-item--active{background:var(--accent-dim);color:var(--accent)}.admin__user{display:flex;align-items:center;gap:8px;padding:10px 12px;color:var(--tx-3);font-size:11px;border-top:1px solid var(--line);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__content{flex:1;overflow:auto;padding:20px}.admin-login{display:flex;align-items:center;justify-content:center;height:100%}.admin-login__card{width:100%;max-width:380px;background:var(--bg-1);border:1px solid var(--line);border-radius:8px;overflow:hidden}.admin-login__header{padding:24px;text-align:center;border-bottom:1px solid var(--line)}.admin-login__header h2{margin:12px 0 4px;font-size:16px;color:var(--tx-0)}.admin-login__header p{font-size:12px;color:var(--tx-2)}.admin-login__form{padding:24px;display:flex;flex-direction:column;gap:16px}.admin-login__field{display:flex;flex-direction:column;gap:6px}.admin-login__field label{font-size:11px;color:var(--tx-2);text-transform:uppercase;letter-spacing:.06em}.admin-login__field input{padding:10px 12px;background:var(--bg-2);border:1px solid var(--line);border-radius:4px;color:var(--tx-0);font-family:var(--mono);font-size:13px;outline:none;transition:border-color .15s}.admin-login__field input:focus{border-color:var(--accent)}.admin-login__error{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#ff506414;border:1px solid rgba(255,80,100,.3);border-radius:4px;color:#ff5064;font-size:12px}.admin-section{background:var(--bg-1);border:1px solid var(--line);border-radius:6px;padding:16px}.admin-section+.admin-section{margin-top:16px}.admin-section__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--line)}.admin-section__header h2{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--tx-0);text-transform:uppercase;letter-spacing:.08em}.admin-badge{background:#ff50641f;color:#ff5064;border:1px solid rgba(255,80,100,.3);padding:2px 8px;border-radius:10px;font-size:10px;font-family:var(--mono)}.admin-loading{display:flex;align-items:center;justify-content:center;height:200px;gap:10px;color:var(--tx-3)}.admin-empty{text-align:center;padding:32px;color:var(--tx-3)}.admin-message{padding:10px 14px;border-radius:6px;margin-bottom:16px;font-size:13px}.admin-message--success{background:#64c86414;border:1px solid rgba(100,200,100,.25);color:#6cc644}.admin-message--error{background:#ff506414;border:1px solid rgba(255,80,100,.3);color:#ff5064}.admin-form{background:var(--bg-2);border:1px solid var(--line);border-radius:6px;padding:16px;margin-bottom:16px}.admin-form__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.admin-form__field{display:flex;flex-direction:column;gap:6px}.admin-form__field label{font-size:11px;color:var(--tx-2);text-transform:uppercase;letter-spacing:.06em}.admin-form__field input,.admin-form__field textarea,.admin-form__field select{padding:9px 10px;background:var(--bg-1);border:1px solid var(--line);border-radius:4px;color:var(--tx-0);font-family:var(--mono);font-size:13px;outline:none;transition:border-color .15s}.admin-form__field input:focus,.admin-form__field textarea:focus,.admin-form__field select:focus{border-color:var(--accent)}.admin-form__field textarea{resize:vertical;min-height:90px}.admin-form__field select option{background:var(--bg-1)}.admin-form__field--full{grid-column:1 / -1}.admin-form__field--checkbox{flex-direction:row;align-items:center}.admin-form__field--checkbox label{display:flex;align-items:center;gap:8px;font-weight:400;cursor:pointer;text-transform:none}.admin-form__actions{display:flex;gap:10px;margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}.admin-table{width:100%;border-collapse:collapse}.admin-table th,.admin-table td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line)}.admin-table th{color:var(--tx-2);font-size:11px;text-transform:uppercase;letter-spacing:.06em;background:var(--bg-2)}.admin-table td{color:var(--tx-1);font-size:13px}.admin-table tr:hover td{background:var(--bg-hover)}.admin-table__actions{display:flex;gap:6px}.admin-messages{display:flex;gap:0;height:calc(100vh - 200px);min-height:400px;border:1px solid var(--line);border-radius:6px;overflow:hidden}.admin-messages__list{width:320px;flex-shrink:0;overflow-y:auto;border-right:1px solid var(--line);background:var(--bg-1)}.admin-message-item{display:flex;align-items:stretch;gap:6px;border-bottom:1px solid var(--line);border-left:3px solid transparent;transition:background .12s}.admin-message-item:hover{background:var(--bg-hover)}.admin-message-item--selected{background:var(--accent-dim);border-left-color:var(--accent)}.admin-message-item--unread{background:var(--bg-2)}.admin-message-item--unread .admin-message-item__name{color:var(--tx-0);font-weight:600}.admin-message-item__btn{flex:1;min-width:0;display:flex;gap:10px;padding:12px 14px;cursor:pointer;text-align:left;background:transparent;border:none}.admin-message-item__icon{flex-shrink:0;color:var(--accent)}.admin-message-item__content{flex:1;min-width:0}.admin-message-item__header{display:flex;justify-content:space-between;gap:8px;margin-bottom:3px}.admin-message-item__name{font-size:13px;color:var(--tx-1)}.admin-message-item__date{font-size:10px;color:var(--tx-3);font-family:var(--mono);flex-shrink:0}.admin-message-item__subject{font-size:12px;color:var(--tx-2);margin-bottom:3px}.admin-message-item__preview{font-size:11px;color:var(--tx-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-message-item__delete{flex-shrink:0;align-self:center;margin-right:10px;opacity:0;transition:opacity .15s;padding:6px;border-radius:4px}.admin-message-item:hover .admin-message-item__delete{opacity:.7}.admin-message-item__delete:hover{opacity:1}.admin-messages__detail{flex:1;background:var(--bg-0);overflow-y:auto}.admin-message-detail{padding:20px}.admin-message-detail__header{padding-bottom:12px;border-bottom:1px solid var(--line);margin-bottom:16px}.admin-message-detail__header h3{font-size:15px;color:var(--tx-0);margin-bottom:8px}.admin-message-detail__meta{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--tx-2)}.admin-message-detail__body{line-height:1.7;white-space:pre-wrap;margin-bottom:24px;color:var(--tx-1);font-size:13px}.admin-message-detail__actions{display:flex;gap:10px}.admin-message-detail__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--tx-3);gap:16px}.admin-cv{display:flex;flex-direction:column;gap:16px}.admin-cv__current{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;background:var(--bg-2);border:1px solid var(--line);border-radius:6px;gap:16px;flex-wrap:wrap}.admin-cv__file-info{display:flex;align-items:center;gap:12px}.admin-cv__file-icon{color:var(--accent);flex-shrink:0}.admin-cv__file-details{display:flex;flex-direction:column;gap:3px}.admin-cv__filename{color:var(--tx-0);font-family:var(--mono);font-size:13px}.admin-cv__meta{color:var(--tx-2);font-size:12px}.admin-cv__actions{display:flex;gap:8px}.admin-cv__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;color:var(--tx-3);gap:12px;border:1px dashed var(--line);border-radius:6px}.admin-cv__upload{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.admin-cv__input{display:none}.admin-cv__hint{color:var(--tx-3);font-size:12px}.admin-cv__uploading{color:var(--accent);font-size:13px;animation:admin-pulse 1s infinite}@keyframes admin-pulse{0%,to{opacity:1}50%{opacity:.5}}.admin-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:4px;font-family:var(--mono);font-size:12px;cursor:pointer;transition:background .15s,border-color .15s,color .15s;border:1px solid var(--line);background:transparent;text-decoration:none;white-space:nowrap}.admin-btn--primary{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.admin-btn--primary:hover{background:var(--accent);color:var(--bg-0)}.admin-btn--secondary{color:var(--tx-2)}.admin-btn--secondary:hover{background:var(--bg-hover);color:var(--tx-1);border-color:var(--tx-2)}.admin-btn--danger{background:#ff506414;border-color:#ff50644d;color:#ff5064}.admin-btn--danger:hover{background:#ff50642e;border-color:#ff50648c}.admin-btn:disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.admin-login__submit{width:100%;justify-content:center}.admin-form__field--checkbox input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}.admin-skill-bar{height:6px;border-radius:3px;background:var(--bg-2);border:1px solid var(--line);overflow:hidden}.admin-skill-bar__fill{height:100%;background:var(--accent);border-radius:3px}.admin-status{display:inline-block;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:700;padding:3px 8px;border-radius:5px}.admin-status--en_cours{background:var(--accent-dim);color:var(--accent-bright)}.admin-status--termine{background:#6ee7801f;color:#6ee780}.admin-status--archive{background:#6b768633;color:var(--tx-2)}
