/* ================================================================
   GoudAI — Premium SaaS Design System (R1 rebrand)
   Indigo-violet single accent · Inter Tight UI · neutral palette
   Fonts: Inter Tight (UI) + JetBrains Mono (code) + Instrument Serif (option editoriale)
   Dark mode conserve la profondeur d'origine, accent migre vers indigo.
   ================================================================ */

@import url('https://fonts.googleapis.com/css2?family=Inter+Tight:wght@300;400;500;600;700&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500&display=swap');

/* ── Variables — Dark (default) ── */
:root {
  --bg:             #080709;
  --bg-sidebar:     #0c0b10;
  --bg-modal:       #100f14;
  --bg-input:       #0f0e13;
  --surface:        #141218;
  --surface-2:      #1c1a22;
  --text:           #ece7e0;
  --text-secondary: #7c7180;
  --text-muted:     #3e3848;
  --border:         #201d28;
  --border-light:   #1a1820;
  --border-input:   #2c2836;
  /* R1: accent indigo-violet (oklch 54% 0.20 274), fallback hex pour navigateurs anciens */
  --accent:         oklch(60% 0.20 274);
  --accent-bright:  oklch(70% 0.18 274);
  --accent-soft:    oklch(28% 0.06 274 / 0.55);
  --accent-glow:    oklch(40% 0.10 274 / 0.45);
  --bg-msg-user:    #1c192a;
  --bg-msg-assistant: #100f14;
  --bg-hover:       #1a1820;
  --bg-active:      #221f2a;
  --btn-bg:         oklch(54% 0.20 274);
  --btn-text:       #ffffff;
  --scrollbar-thumb: #2a2634;
  --conv-delete-color: #463e52;
  --sp-title-color:  #5a5065;
  --bg-msg-user:     #1c192a;
}

/* ── Variables — Light mode (R1 : white-first SaaS premium) ── */
body:not(.dark) {
  --bg:             #ffffff;
  --bg-sidebar:     oklch(97% 0 0);
  --bg-modal:       #ffffff;
  --bg-input:       #ffffff;
  --surface:        oklch(97% 0 0);
  --surface-2:      oklch(94% 0 0);
  --text:           oklch(18% 0 0);
  --text-secondary: oklch(38% 0 0);
  --text-muted:     oklch(58% 0 0);
  --border:         oklch(91% 0 0);
  --border-light:   oklch(94% 0 0);
  --border-input:   oklch(85% 0 0);
  --accent:         oklch(54% 0.20 274);
  --accent-bright:  oklch(46% 0.22 274);
  --accent-soft:    oklch(94% 0.05 274);
  --accent-glow:    oklch(88% 0.08 274);
  --bg-msg-user:    oklch(94% 0.05 274);
  --bg-msg-assistant: oklch(97% 0 0);
  --bg-hover:       oklch(94% 0 0);
  --bg-active:      oklch(91% 0 0);
  --btn-bg:         oklch(54% 0.20 274);
  --btn-text:       #ffffff;
  --scrollbar-thumb: oklch(85% 0 0);
  --conv-delete-color: oklch(75% 0 0);
  --sp-title-color:  oklch(58% 0 0);
}

/* ── Reset ── */
*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
html { font-size:15px; }

body {
  font-family:'Inter Tight','Inter',system-ui,sans-serif;
  display:flex; height:100vh; overflow:hidden;
  background:var(--bg); color:var(--text); line-height:1.6;
}

/* Grain overlay */
body::before {
  content:''; position:fixed; inset:0; pointer-events:none; z-index:999;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.025'/%3E%3C/svg%3E");
  opacity:.4;
}

/* Scrollbars */
::-webkit-scrollbar{width:4px;height:4px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:99px}
::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}

/* ================================================================
   SIDEBAR
   ================================================================ */
.sidebar-toggle {
  position:fixed; top:14px; left:236px; z-index:100;
  background:transparent; border:1px solid var(--border);
  border-radius:8px; padding:5px 7px; cursor:pointer;
  color:var(--text-secondary); display:flex; align-items:center; justify-content:center;
  transition:left .3s cubic-bezier(.4,0,.2,1), color .15s, background .15s, border-color .15s;
}
.sidebar-toggle:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--accent-soft)}
.sidebar-toggle.collapsed{left:10px}

.sidebar {
  width:252px; min-width:252px;
  background:var(--bg-sidebar);
  display:flex; flex-direction:column;
  padding:28px 16px 16px;
  border-right:1px solid var(--border);
  transition:width .3s cubic-bezier(.4,0,.2,1), min-width .3s, padding .3s, opacity .2s;
  overflow:hidden; position:relative; z-index:1;
}
.sidebar::before {
  content:''; position:absolute; top:0; left:0; right:0; height:2px;
  background:linear-gradient(90deg,transparent,var(--accent),transparent);
  opacity:.55;
}
.sidebar.collapsed{width:0;min-width:0;padding:28px 0;opacity:0;border-right:none;pointer-events:none}

.sidebar-title {
  font-family:'Inter Tight','Inter',system-ui,sans-serif;
  font-size:1.5rem; font-weight:600; letter-spacing:-0.02em;
  margin-bottom:2px; color:var(--text); text-align:center;
  display:flex; align-items:center; justify-content:center; gap:8px; line-height:1.1;
}
.sidebar-logo{font-size:1.25rem;display:inline-flex;align-items:center;gap:8px}
/* R1: monogramme G — la couleur du fond (rect) suit le texte (currentColor),
   le contour interieur (path) reste sur le fond pour creer le creux. */
.goud-mark{color:var(--accent);flex-shrink:0;vertical-align:middle}
.version-badge {
  font-family:'Inter Tight','Inter',system-ui,sans-serif; font-size:.42em; font-weight:600;
  letter-spacing:.1em; color:var(--accent); background:var(--accent-soft);
  padding:2px 7px; border-radius:99px; vertical-align:middle;
  border:1px solid var(--accent-glow);
}
.sidebar-credit {
  display:block; text-align:center; font-size:.68rem;
  color:var(--text-muted); text-decoration:none; margin-bottom:22px;
  letter-spacing:.04em; transition:color .15s;
}
.sidebar-credit:hover{color:var(--accent)}

.new-chat-btn {
  background:var(--accent-soft); border:1px solid var(--accent-glow);
  border-radius:10px; padding:10px 14px;
  font-family:'Inter Tight','Inter',system-ui,sans-serif; font-size:.8rem; font-weight:500; letter-spacing:.03em;
  cursor:pointer; color:var(--accent-bright); transition:background .15s,transform .1s,box-shadow .15s;
  display:flex; align-items:center; gap:8px; width:100%;
}
.new-chat-btn:hover{background:var(--accent-glow);transform:translateY(-1px);box-shadow:0 4px 16px var(--accent-soft)}
.new-chat-btn:active{transform:translateY(0)}

/* Sidebar bottom */
.sidebar-bottom{margin-top:auto;padding-top:14px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:4px}
.sidebar-bottom-row{display:flex;gap:4px}
.sidebar-bottom-row .sidebar-bottom-btn{flex:1}
.sidebar-bottom-btn {
  background:none; border:1px solid transparent; border-radius:8px;
  padding:7px 10px; font-family:'Inter Tight','Inter',system-ui,sans-serif; font-size:.7rem;
  font-weight:500; letter-spacing:.04em; cursor:pointer; color:var(--text-secondary);
  transition:background .15s,color .15s,border-color .15s;
  display:flex; align-items:center; justify-content:center; gap:5px; white-space:nowrap;
}
.sidebar-bottom-btn:hover{background:var(--bg-hover);color:var(--text);border-color:var(--border)}

/* Sections */
.sp-section{margin-top:14px;border-top:1px solid var(--border);padding-top:12px}
.sp-header{display:flex;align-items:center;gap:5px;margin-bottom:5px;cursor:pointer}
.sp-header .sp-add-btn:first-of-type{margin-left:auto}
.sp-toggle{font-size:.78rem;color:var(--text-muted);display:inline-flex;width:14px;align-items:center;justify-content:center;transition:transform .2s,color .15s;user-select:none}
.sp-header:hover .sp-toggle{color:var(--accent)}
.sp-collapsible{overflow:hidden;transition:max-height .28s cubic-bezier(.4,0,.2,1),opacity .22s;max-height:2400px;opacity:1}
.sp-collapsible.collapsed{max-height:0;opacity:0}
.sp-title{font-size:.65rem;font-weight:600;color:var(--sp-title-color);text-transform:uppercase;letter-spacing:.1em;flex:1}
.sp-header:hover .sp-title{color:var(--text-secondary)}
.sp-add-btn {
  background:none; border:1px solid var(--border); border-radius:5px;
  width:22px; height:22px; font-size:.9rem; cursor:pointer; color:var(--text-muted);
  display:flex; align-items:center; justify-content:center;
  transition:background .15s,color .15s,border-color .15s; flex-shrink:0;
}
.sp-add-btn:hover{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-glow)}
.sp-list{display:flex;flex-direction:column;gap:1px}
.sp-item{display:flex;align-items:center;padding:6px 8px;border-radius:7px;font-size:.78rem;cursor:default;color:var(--text-secondary);transition:background .12s,color .12s;gap:4px}
.sp-item:hover{background:var(--bg-hover);color:var(--text)}
.sp-item-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp-item-actions{display:none;gap:2px;flex-shrink:0}
.sp-item:hover .sp-item-actions{display:flex}
.sp-item-btn{background:none;border:none;cursor:pointer;font-size:.78rem;padding:2px 5px;border-radius:4px;color:var(--text-muted);line-height:1;transition:color .12s,background .12s}
.sp-item-btn:hover{color:var(--text);background:var(--bg-active)}
.sp-item-btn.delete:hover{color:#f87171;background:rgba(248,113,113,.1)}

/* Conversations */
#conv-search {
  width:100%; background:var(--bg-input); border:1px solid var(--border-input);
  border-radius:8px; padding:7px 10px; font-family:'Inter Tight','Inter',system-ui,sans-serif; font-size:.76rem;
  color:var(--text); outline:none; margin-bottom:8px; transition:border-color .15s;
}
#conv-search:focus{border-color:var(--accent)}
#conv-search::placeholder{color:var(--text-muted)}

.cat-bar{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-bottom:6px}
.cat-icons{display:flex;gap:3px;flex-wrap:wrap}
.cat-icon{font-size:.82rem;padding:3px 7px;border-radius:99px;cursor:pointer;border:1px solid var(--border);background:none;transition:background .12s,border-color .12s,transform .1s;color:var(--text)}
.cat-icon:hover,.cat-icon.active{background:var(--accent-soft);border-color:var(--accent-glow);transform:scale(1.06)}
.cat-icon.drag-over{outline:2px dashed var(--accent)}
.cat-add-btn{font-size:.78rem;width:22px;height:22px;background:none;border:1px dashed var(--border);border-radius:99px;cursor:pointer;color:var(--text-muted);display:flex;align-items:center;justify-content:center;transition:color .12s,border-color .12s}
.cat-add-btn:hover{color:var(--accent);border-color:var(--accent)}
.conv-list-container{flex:1;min-height:0;overflow-y:auto}
.conv-list{display:flex;flex-direction:column;gap:1px;padding-right:2px}

.conv-item{padding:8px 10px;border-radius:8px;cursor:pointer;color:var(--text-secondary);transition:background .12s,color .12s;position:relative;border:1px solid transparent}
.conv-item:hover{background:var(--bg-hover);color:var(--text)}
.conv-item.active{background:var(--surface);color:var(--text);border-color:var(--border)}
.conv-item.active::before{content:'';position:absolute;left:0;top:22%;bottom:22%;width:2px;background:var(--accent);border-radius:99px}
.conv-item.dragging{opacity:.4}
.conv-item[draggable="true"]{user-select:none}
.conv-item-content{display:flex;flex-direction:column;gap:1px;padding-right:32px}
.conv-item-title{font-size:.78rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}
.conv-item-date-line{display:flex;gap:6px;align-items:center}
.conv-item-date{font-size:.66rem;color:var(--text-muted)}
.conv-delete-btn,.conv-rename-btn,.conv-uncat-btn{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;color:var(--conv-delete-color);font-size:.82rem;padding:3px 5px;border-radius:5px;display:none;transition:color .12s,background .12s}
.conv-rename-btn{right:26px}
.conv-uncat-btn{right:48px}
.conv-item:hover .conv-delete-btn,.conv-item:hover .conv-rename-btn,.conv-item:hover .conv-uncat-btn{display:block}
.conv-delete-btn:hover{color:#f87171;background:rgba(248,113,113,.1)}
.conv-rename-btn:hover,.conv-uncat-btn:hover{color:var(--text);background:var(--bg-active)}
.conv-rename-input{width:100%;background:var(--bg-input);border:1px solid var(--accent);border-radius:6px;padding:4px 8px;font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.78rem;color:var(--text);outline:none}

/* ================================================================
   MAIN
   ================================================================ */
.main{flex:1;display:flex;flex-direction:column;height:100vh;overflow:hidden;position:relative;z-index:1}

.chat-container{flex:1;overflow-y:auto;padding:28px 40px;display:flex;flex-direction:column;gap:14px}

/* Messages */
@keyframes msgIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.message-wrapper{display:flex;flex-direction:column;max-width:74%;animation:msgIn .24s cubic-bezier(.22,1,.36,1)}
.message-wrapper-user{align-self:flex-start}
.message-wrapper-assistant{align-self:flex-end}
.message-wrapper .message{max-width:100%}

.message{max-width:74%;padding:14px 18px;border-radius:16px;font-size:.88rem;line-height:1.72;word-wrap:break-word;position:relative}
.message-user{align-self:flex-start;background:var(--bg-msg-user);border:1px solid var(--border);border-bottom-left-radius:4px}
.message-assistant{align-self:flex-end;background:var(--bg-msg-assistant);border:1px solid var(--border);border-bottom-right-radius:4px}
.message-user .message-text{white-space:pre-wrap}
.message-assistant.streaming::after{content:'▍';animation:blink .7s step-end infinite;color:var(--accent);font-size:.9em}
@keyframes blink{50%{opacity:0}}

/* Text */
.message-text{color:var(--text)}
.message-text p{margin:0 0 .6em}
.message-text p:last-child{margin-bottom:0}
.message-text pre{background:#070610;border:1px solid var(--border);border-radius:10px;padding:14px 16px;overflow-x:auto;font-size:.8rem;margin:10px 0;position:relative}
.message-text code{font-family:'JetBrains Mono',monospace;font-size:.84em;background:var(--surface);border:1px solid var(--border);padding:1px 5px;border-radius:4px;color:var(--accent-bright)}
.message-text pre code{background:none;border:none;padding:0;color:#d4c5a0;font-size:1em}
.message-text ul,.message-text ol{padding-left:1.4em;margin:4px 0 8px}
.message-text h1,.message-text h2,.message-text h3{font-family:'Instrument Serif','Iowan Old Style',Georgia,serif;font-weight:600;color:var(--text);margin:1em 0 .4em;line-height:1.2}
.message-text h1{font-size:1.35em}
.message-text h2{font-size:1.18em}
.message-text h3{font-size:1.05em}
.message-text blockquote{border-left:2px solid var(--accent);padding-left:14px;color:var(--text-secondary);margin:8px 0;font-style:italic}
.message-text table{border-collapse:collapse;width:100%;font-size:.83rem;margin:8px 0}
.message-text th,.message-text td{border:1px solid var(--border);padding:7px 12px;text-align:left}
.message-text th{background:var(--surface);font-weight:600;font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary)}
.message-text a{color:var(--accent-bright);text-decoration:none}
.message-text a:hover{text-decoration:underline}
.code-copy-btn{position:absolute;top:8px;right:8px;background:var(--surface);color:var(--text-secondary);border:1px solid var(--border);border-radius:5px;padding:3px 8px;font-size:.68rem;font-family:'Inter Tight','Inter',system-ui,sans-serif;cursor:pointer;opacity:0;transition:opacity .15s,color .15s;z-index:1}
.message-text pre:hover .code-copy-btn{opacity:1}
.code-copy-btn:hover{color:var(--accent);border-color:var(--accent-glow)}

/* Btn row */
.message-btn-row{display:flex;gap:3px;align-items:center;justify-content:flex-end;width:100%;margin-top:3px;padding:0 2px}
.message-btn-row .message-copy-btn,.message-btn-row .message-tts-btn,.message-btn-row .message-save-prompt-btn,.message-btn-row .regen-btn{opacity:0;transition:opacity .15s}
.message-wrapper:hover .message-btn-row .message-copy-btn,.message-wrapper:hover .message-btn-row .message-tts-btn,.message-wrapper:hover .message-btn-row .message-save-prompt-btn,.message-wrapper:hover .message-btn-row .regen-btn{opacity:1}
.message-gen-time{font-size:.65rem;color:var(--text-muted);margin-right:auto}
.message-copy-btn,.message-tts-btn,.regen-btn,.message-save-prompt-btn{background:none;border:none;padding:4px 6px;cursor:pointer;color:var(--text-muted);line-height:1;transition:color .12s;border-radius:5px}
.message-copy-btn:hover,.message-tts-btn:hover,.regen-btn:hover,.message-save-prompt-btn:hover{color:var(--accent);background:var(--accent-soft)}

/* Images */
.message-images{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}
.message-images img{max-width:400px;max-height:400px;border-radius:10px;object-fit:contain;cursor:pointer}
.message-user .message-images img{max-width:200px;max-height:200px;object-fit:cover}
.message-image-wrap{position:relative;display:inline-block}
.image-download-btn{position:absolute;bottom:8px;right:8px;background:rgba(0,0,0,.62);border:none;border-radius:6px;padding:5px 7px;cursor:pointer;color:#fff;line-height:1;opacity:0;transition:opacity .15s}
.message-image-wrap:hover .image-download-btn{opacity:1}

/* File chips */
.attach-file-chip,.message-file-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;background:var(--surface);border:1px solid var(--border-input);border-radius:7px;font-size:.76rem;color:var(--text)}
.message-file-chip{cursor:pointer;text-decoration:none;transition:background .12s;margin:3px 3px 3px 0}
.message-file-chip:hover{background:var(--bg-active)}
.attach-file-chip{max-width:200px}
.attach-file-chip-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.attach-file-chip-icon{flex-shrink:0}
.attach-file-chip-remove{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:.78rem;padding:0 2px;flex-shrink:0;line-height:1;transition:color .12s}
.attach-file-chip-remove:hover{color:#f87171}
.message-files{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}

/* Citations */
.citations-block{margin-top:12px;padding-top:10px;border-top:1px solid var(--border-light)}
.citations-title{font-size:.66rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}
.citations-list{list-style:none;display:flex;flex-wrap:wrap;gap:5px}
.citations-list li{display:inline-flex;align-items:center;gap:4px;font-size:.76rem;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:3px 8px;transition:background .12s}
.citations-list li:hover{background:var(--bg-hover)}
.citation-num{color:var(--accent);font-size:.66rem;font-weight:600}
.citations-list a{color:var(--text);text-decoration:none}
.citations-list a:hover{text-decoration:underline}

/* Model switch */
.model-switch-marker{text-align:center;font-size:.7rem;color:var(--text-muted);padding:6px 0;user-select:none;letter-spacing:.04em}

/* Thinking */
.thinking-block{margin-bottom:10px;border:1px solid var(--border-light);border-radius:10px;overflow:hidden;font-size:.82rem}
.thinking-block summary{padding:8px 12px;cursor:pointer;font-weight:600;font-size:.7rem;color:var(--accent);text-transform:uppercase;letter-spacing:.06em;background:var(--accent-soft);user-select:none;list-style:none;display:flex;align-items:center;gap:6px}
.thinking-block summary::before{content:'▶';font-size:.58rem;transition:transform .2s}
.thinking-block[open] summary::before{transform:rotate(90deg)}
.thinking-block summary::-webkit-details-marker{display:none}
.thinking-content{padding:10px 14px;color:var(--text-secondary);font-size:.78rem;line-height:1.55;max-height:300px;overflow-y:auto;border-top:1px solid var(--border)}
.thinking-content p{margin:0 0 .4em}
.thinking-content p:last-child{margin-bottom:0}
.thinking-content::-webkit-scrollbar{width:4px}
.thinking-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:2px}

/* Alert */
.model-alert{margin:0 32px;padding:8px 16px;background:var(--accent-soft);color:var(--accent-bright);border:1px solid var(--accent-glow);border-radius:8px;font-size:.78rem;text-align:center;animation:fadeIn .2s ease}
@keyframes fadeIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}

/* ================================================================
   MODEL BAR + TOKEN BAR
   ================================================================ */
.model-bar{display:flex;align-items:center;gap:8px;padding:7px 28px;border-top:1px solid var(--border-light);flex-wrap:wrap;background:var(--bg-sidebar)}
.model-bar-spacer{flex:1}
.model-label{font-size:.65rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}
.model-select{font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.76rem;padding:4px 8px;border:1px solid var(--border-input);border-radius:7px;background:var(--bg-input);color:var(--text);cursor:pointer;outline:none;transition:border-color .15s}
.model-select:hover{border-color:var(--accent-glow)}
.model-select:focus{border-color:var(--accent)}
.model-select:disabled{opacity:.4;cursor:not-allowed}

/* ----------------------------------------------------------------
   Unified Model Selector (C1) — onglets [Texte/Image/Recherche]
   Wrapper visuel autour des 3 selects natifs (source de vérité).
   ---------------------------------------------------------------- */
.ums{display:flex;flex-direction:column;gap:6px;flex:0 1 auto;min-width:240px;max-width:560px}
.ums-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border-light)}
.ums-tab{
    background:transparent;border:none;
    color:var(--text-muted);
    padding:6px 12px;
    cursor:pointer;
    font-family:'Inter Tight','Inter',system-ui,sans-serif;
    font-size:.72rem;
    font-weight:500;
    letter-spacing:.04em;
    border-bottom:2px solid transparent;
    transition:color .15s,border-color .15s,background .15s;
    display:inline-flex;align-items:center;gap:6px;
    border-radius:6px 6px 0 0;
}
.ums-tab:hover{color:var(--accent);background:var(--accent-soft)}
.ums-tab.active{color:var(--accent);border-bottom-color:var(--accent);background:var(--accent-soft)}
.ums-tab-icon{font-size:.95rem;line-height:1}
.ums-tab-label{white-space:nowrap}
.ums-panels{position:relative;display:flex;align-items:center}
.ums-panel{display:none;align-items:center;gap:8px;width:100%;flex-wrap:wrap}
.ums-panel.active{display:flex}
@media (max-width:768px){
    .ums{min-width:0;flex:1 1 100%;max-width:100%}
    .ums-tabs{gap:0;width:100%}
    .ums-tab{flex:1;justify-content:center;padding:5px 6px;font-size:.66rem}
    .ums-tab-label{display:none}
    .ums-tab-icon{font-size:1.1rem}
}

/* ================================================================
   R4 redesign — Command palette ⌘K
   ================================================================ */
.cmd-palette-overlay{
    position:fixed;inset:0;z-index:10001;
    background:rgba(0,0,0,.5);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
    display:flex;align-items:flex-start;justify-content:center;padding:14vh 16px 16px;
    animation:cmd-fade .15s ease;
}
body:not(.dark) .cmd-palette-overlay{background:rgba(15,15,20,.32)}
@keyframes cmd-fade{from{opacity:0}to{opacity:1}}
.cmd-palette{
    width:100%;max-width:640px;
    background:var(--bg-modal);
    border:1px solid var(--border);
    border-radius:14px;
    box-shadow:0 24px 60px rgba(0,0,0,.4),0 4px 12px rgba(0,0,0,.15);
    display:flex;flex-direction:column;
    overflow:hidden;
    animation:cmd-pop .18s cubic-bezier(.2,.7,.3,1.2);
    max-height:70vh;
}
@keyframes cmd-pop{from{opacity:0;transform:translateY(-8px) scale(.98)}to{opacity:1;transform:none}}
.cmd-palette-search{
    display:flex;align-items:center;gap:10px;
    padding:14px 16px;border-bottom:1px solid var(--border-light);
    color:var(--text-muted);
}
.cmd-palette-search input{
    flex:1;background:transparent;border:none;outline:none;
    font-family:'Inter Tight','Inter',system-ui,sans-serif;
    font-size:15px;color:var(--text);
}
.cmd-palette-kbd{
    display:inline-flex;align-items:center;justify-content:center;
    min-width:20px;height:20px;padding:0 6px;
    font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:500;
    background:var(--surface);color:var(--text-secondary);
    border:1px solid var(--border);border-radius:4px;
    letter-spacing:.5px;
}
.cmd-palette-results{
    flex:1;overflow-y:auto;padding:6px;
}
.cmd-palette-group{
    padding:10px 12px 4px;
    font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;
    color:var(--text-muted);
}
.cmd-palette-item{
    display:flex;align-items:center;gap:10px;
    padding:9px 12px;border-radius:7px;cursor:pointer;
    color:var(--text);font-size:13.5px;
    transition:background .1s;
}
.cmd-palette-item:hover,
.cmd-palette-item.active{
    background:var(--accent-soft);color:var(--accent);
}
.cmd-palette-item-icon{
    display:inline-flex;align-items:center;justify-content:center;
    width:24px;height:24px;border-radius:6px;
    background:var(--surface);color:var(--text-secondary);
    font-size:13px;flex-shrink:0;
}
.cmd-palette-item.active .cmd-palette-item-icon{background:var(--accent-glow);color:var(--accent)}
.cmd-palette-item-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmd-palette-item-meta{font-size:11px;color:var(--text-muted);font-family:'JetBrains Mono',monospace}
.cmd-palette-empty{padding:24px 16px;text-align:center;color:var(--text-muted);font-size:13px}
.cmd-palette-footer{
    display:flex;gap:14px;justify-content:flex-end;
    padding:8px 14px;border-top:1px solid var(--border-light);
    background:var(--bg-sidebar);font-size:11px;color:var(--text-muted);
}
.cmd-palette-footer span{display:inline-flex;align-items:center;gap:5px}
@media (max-width:768px){
    .cmd-palette-overlay{padding:8vh 8px 8px}
    .cmd-palette{max-height:80vh}
    .cmd-palette-footer{display:none}
}

.token-bar{display:flex;justify-content:space-between;padding:5px 28px;font-size:.66rem;color:var(--text-muted);border-top:1px solid var(--border-light);letter-spacing:.02em}
#token-info,#cost-info{font-variant-numeric:tabular-nums;font-family:'JetBrains Mono',monospace}

/* ================================================================
   INPUT
   ================================================================ */
.input-area{padding:14px 28px 22px;border-top:1px solid var(--border-light);display:flex;flex-direction:column;align-items:center;gap:7px;background:var(--bg-sidebar);transition:background .15s}
.input-area.drag-over{background:var(--accent-soft)}
.input-area.drag-over .input-wrapper{border-color:var(--accent)}

.input-wrapper{display:flex;align-items:flex-end;width:100%;max-width:820px;border:1.5px solid var(--border-input);border-radius:18px;padding:8px 8px 8px 14px;transition:border-color .2s,box-shadow .2s;background:var(--bg-input);gap:6px}
.input-wrapper:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft),0 0 22px var(--accent-glow)}

#attach-preview{display:flex;flex-wrap:wrap;gap:8px;width:100%;max-width:820px}
#attach-preview:empty{display:none}
.attach-thumb{position:relative;display:inline-block}
.attach-thumb img{width:58px;height:58px;object-fit:cover;border-radius:8px;border:1px solid var(--border)}
.attach-thumb-remove{position:absolute;top:-5px;right:-5px;background:var(--btn-bg);color:var(--btn-text);border:none;border-radius:50%;width:17px;height:17px;font-size:.65rem;cursor:pointer;display:flex;align-items:center;justify-content:center}

#attach-btn{background:none;border:1px solid var(--border-input);border-radius:50%;width:30px;height:30px;min-width:30px;min-height:30px;font-size:1.05rem;cursor:pointer;color:var(--text-secondary);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .15s,border-color .15s,background .15s;margin-bottom:2px}
#attach-btn:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--accent-soft)}

.web-search-toggle{background:none;border:1px solid var(--border-input);border-radius:7px;cursor:pointer;color:var(--text-secondary);padding:4px 6px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,color .15s,border-color .15s;margin-bottom:2px}
.web-search-toggle:hover{color:var(--text);background:var(--bg-hover);border-color:var(--border)}
.web-search-toggle.active{color:#60a5fa;border-color:#60a5fa;background:rgba(96,165,250,.1)}

.enhance-prompt-btn,#prompt-picker-btn{background:none;border:none;cursor:pointer;padding:4px;color:var(--text-muted);flex-shrink:0;transition:color .15s;display:flex;align-items:center;justify-content:center;margin-bottom:2px}
.enhance-prompt-btn:hover:not(:disabled){color:var(--accent-bright)}
.enhance-prompt-btn:disabled{opacity:.25;cursor:not-allowed}
.enhance-prompt-btn.revert{color:var(--accent)}
#prompt-picker-btn:hover{color:var(--text)}

.mic-btn{background:none;border:none;cursor:pointer;padding:4px;color:var(--text-muted);flex-shrink:0;transition:color .15s;display:flex;align-items:center;justify-content:center;margin-bottom:2px}
.mic-btn:hover{color:var(--text)}
.mic-btn.recording{color:#f87171;animation:pulse-mic 1s ease-in-out infinite}
@keyframes pulse-mic{0%,100%{opacity:1}50%{opacity:.4}}

.prompt-input{flex:1;min-width:0;border:none;outline:none;font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.9rem;resize:none;max-height:200px;line-height:1.55;padding:4px 0;background:transparent;align-self:center;color:var(--text)}
.prompt-input::placeholder{color:var(--text-muted)}

.send-btn{background:var(--btn-bg);color:var(--btn-text);border:none;border-radius:12px;padding:7px 18px;font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.82rem;font-weight:600;letter-spacing:.04em;cursor:pointer;transition:opacity .15s,transform .1s,box-shadow .15s;white-space:nowrap;flex-shrink:0}
.send-btn:disabled{opacity:.25;cursor:not-allowed}
.send-btn:not(:disabled):hover{opacity:.88;transform:translateY(-1px);box-shadow:0 4px 18px var(--accent-glow)}
.send-btn:active{transform:translateY(0)}
.send-btn.stop-mode{background:#991b1b;color:#fff}

.input-hint{font-size:.66rem;color:var(--text-muted);letter-spacing:.04em}

.prompt-picker-dropdown{position:relative;width:100%;max-width:820px;background:var(--bg-modal);border:1px solid var(--border);border-radius:12px;max-height:200px;overflow-y:auto;box-shadow:0 8px 32px rgba(0,0,0,.4);z-index:100}
.prompt-picker-item{padding:8px 14px;font-size:.8rem;cursor:pointer;color:var(--text);transition:background .1s;border-bottom:1px solid var(--border-light)}
.prompt-picker-item:last-child{border-bottom:none}
.prompt-picker-item:hover{background:var(--bg-hover)}
.prompt-picker-item-name{font-weight:500}
.prompt-picker-item-preview{font-size:.7rem;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.prompt-picker-empty{padding:12px 14px;font-size:.76rem;color:var(--text-muted);text-align:center}

.export-btns-group{position:absolute;bottom:204px;left:18px;z-index:10;display:flex;flex-direction:row;gap:5px}
.export-action-btn{background:var(--bg-sidebar);border:1px solid var(--border);border-radius:9px;padding:7px 10px;cursor:pointer;color:var(--text-secondary);display:flex;align-items:center;transition:background .12s,color .12s,border-color .12s}
.export-action-btn:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--accent-soft)}

/* ================================================================
   MODALS
   ================================================================ */
.sp-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.65);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;z-index:1000}
.sp-modal{background:var(--bg-modal);border:1px solid var(--border);border-radius:16px;padding:26px;width:480px;max-width:90vw;max-height:82vh;overflow-y:auto;display:flex;flex-direction:column;gap:12px;box-shadow:0 24px 80px rgba(0,0,0,.6),0 0 0 1px rgba(255,255,255,.03);color:var(--text)}
.sp-modal h3{font-family:'Instrument Serif','Iowan Old Style',Georgia,serif;font-size:1.25rem;font-weight:600;margin:0;letter-spacing:.02em}
.sp-modal-label{font-size:.68rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em}
.sp-modal-input{font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.86rem;padding:8px 12px;border:1px solid var(--border-input);border-radius:9px;outline:none;background:var(--bg-input);color:var(--text);transition:border-color .15s}
.sp-modal-input:focus{border-color:var(--accent)}
.sp-modal-textarea{font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.86rem;padding:10px 12px;border:1px solid var(--border-input);border-radius:9px;outline:none;resize:vertical;min-height:120px;background:var(--bg-input);color:var(--text);line-height:1.6;transition:border-color .15s}
.sp-modal-textarea:focus{border-color:var(--accent)}
.sp-modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}
.sp-modal-spacer{flex:1}
.sp-modal-btn{font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.8rem;font-weight:500;padding:8px 18px;border-radius:9px;cursor:pointer;border:none;transition:opacity .15s,background .15s}
.sp-modal-btn-cancel{background:var(--surface);color:var(--text-secondary);border:1px solid var(--border)}
.sp-modal-btn-cancel:hover{background:var(--bg-hover);color:var(--text)}
.sp-modal-btn-save{background:var(--btn-bg);color:var(--btn-text)}
.sp-modal-btn-save:hover{opacity:.85}
.sp-modal-btn-optimize{background:none;border:1px solid #7c3aed;color:#a78bfa;transition:background .15s,color .15s}
.sp-modal-btn-optimize:hover{background:#7c3aed;color:#fff}
.sp-modal-btn-optimize:disabled{opacity:.4;cursor:not-allowed}

.apikey-field{display:flex;align-items:center;gap:6px}
.apikey-input{flex:1;min-width:0}
.apikey-toggle-vis{background:none;border:1px solid var(--border-input);border-radius:7px;padding:7px 9px;cursor:pointer;color:var(--text-secondary);display:flex;align-items:center;justify-content:center;transition:color .15s,background .15s;flex-shrink:0}
.apikey-toggle-vis:hover{color:var(--accent);background:var(--accent-soft);border-color:var(--accent-glow)}
.apikey-intro{font-size:.76rem;color:var(--text-secondary);line-height:1.55;margin:0}
.apikey-link{font-size:.7rem;color:var(--accent);text-decoration:none;transition:color .15s;margin-top:-4px}
.apikey-link:hover{color:var(--accent-bright);text-decoration:underline}

.cat-color-picker{width:40px;height:32px;border:1px solid var(--border-input);border-radius:7px;cursor:pointer;padding:2px;background:var(--bg-input)}
.emoji-picker-wrapper{position:relative}
.emoji-picker-selected{background:var(--surface);border:1px solid var(--border-input);border-radius:8px;padding:6px 12px;cursor:pointer;font-size:1.2rem;display:inline-flex;align-items:center;justify-content:center;transition:border-color .15s}
.emoji-picker-selected:hover{border-color:var(--accent)}
.emoji-picker{position:absolute;top:calc(100% + 4px);left:0;z-index:200;background:var(--bg-modal);border:1px solid var(--border);border-radius:12px;padding:10px;width:280px;box-shadow:0 8px 32px rgba(0,0,0,.5)}
.emoji-search{width:100%;background:var(--bg-input);border:1px solid var(--border-input);border-radius:7px;padding:6px 10px;font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.78rem;color:var(--text);outline:none;margin-bottom:8px}
.emoji-search:focus{border-color:var(--accent)}
.emoji-tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:8px}
.emoji-tab{background:none;border:1px solid var(--border);border-radius:6px;padding:3px 7px;cursor:pointer;font-size:.72rem;color:var(--text-secondary);transition:background .12s,color .12s}
.emoji-tab:hover,.emoji-tab.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-glow)}
.emoji-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:2px;max-height:160px;overflow-y:auto}
.emoji-btn{background:none;border:none;cursor:pointer;border-radius:5px;font-size:1rem;padding:3px;transition:background .1s;text-align:center}
.emoji-btn:hover{background:var(--bg-hover)}

/* ================================================================
   DASHBOARD
   ================================================================ */
.dashboard-modal{width:700px;max-height:86vh}
.dashboard-header{display:flex;align-items:center;justify-content:space-between}
.dashboard-header h3{font-family:'Instrument Serif','Iowan Old Style',Georgia,serif;font-size:1.25rem;font-weight:600;margin:0}
.dashboard-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border)}
.dashboard-tab{font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.76rem;font-weight:500;letter-spacing:.04em;padding:8px 14px;border:none;background:none;color:var(--text-muted);cursor:pointer;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}
.dashboard-tab:hover{color:var(--text)}
.dashboard-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.dashboard-content{overflow-y:auto;max-height:60vh}
.dashboard-table{width:100%;border-collapse:collapse;font-size:.8rem}
.dashboard-table th,.dashboard-table td{padding:8px 12px;text-align:left;border-bottom:1px solid var(--border-light)}
.dashboard-table th{font-weight:600;color:var(--text-muted);font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;position:sticky;top:0;background:var(--bg-modal)}
.dashboard-table td{color:var(--text)}
.dashboard-table td.num,.dashboard-table th.num{text-align:right;font-variant-numeric:tabular-nums;font-family:'JetBrains Mono',monospace}
.dashboard-table tbody tr:hover{background:var(--bg-hover)}
.dashboard-empty{text-align:center;color:var(--text-muted);padding:32px 0;font-size:.8rem}
.dashboard-content::-webkit-scrollbar{width:4px}
.dashboard-content::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:2px}
.dashboard-chart{padding:14px 0}
.dashboard-chart-title{font-size:.66rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}
.dashboard-bar-chart{display:flex;flex-direction:column;gap:7px}
.dashboard-bar-row{display:flex;align-items:center;gap:8px;font-size:.76rem}
.dashboard-bar-label{width:120px;min-width:120px;text-align:right;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dashboard-bar-track{flex:1;height:18px;background:var(--surface);border-radius:4px;overflow:hidden}
.dashboard-bar-fill{height:100%;border-radius:4px;transition:width .4s cubic-bezier(.4,0,.2,1);min-width:2px}
.dashboard-bar-value{width:70px;min-width:70px;font-size:.7rem;color:var(--text-secondary);font-variant-numeric:tabular-nums;font-family:'JetBrains Mono',monospace}
.dashboard-charts-row{display:flex;gap:24px}
.dashboard-charts-row .dashboard-chart{flex:1;min-width:0}
.dashboard-separator{border:none;border-top:1px solid var(--border-light);margin:8px 0}

/* ================================================================
   UTILS
   ================================================================ */
.spin{animation:spin 1s linear infinite}
@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}

.lightbox-overlay{position:fixed;inset:0;background:rgba(0,0,0,.92);z-index:9000;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.lightbox-img{max-width:92vw;max-height:92vh;border-radius:10px;box-shadow:0 16px 64px rgba(0,0,0,.6);object-fit:contain}
.lightbox-close{position:fixed;top:16px;right:20px;background:var(--surface);border:1px solid var(--border);border-radius:50%;width:42px;height:42px;font-size:1.4rem;color:var(--text);cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:9001;transition:background .15s,color .15s}
.lightbox-close:hover{background:var(--bg-hover);color:var(--accent)}

#conv-sp-section{flex:1;min-height:0;display:flex;flex-direction:column}
#conv-sp-section>.sp-collapsible{flex:1;min-height:0;display:flex;flex-direction:column}
#conv-sp-section>.sp-collapsible.collapsed{flex:0;max-height:0;overflow:hidden}

/* ================================================================
   GITHUB BACKUP
   ================================================================ */
.gh-sync-row{display:flex;gap:5px;margin-bottom:4px}
.gh-sync-btn{flex:1;font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:9px;font-weight:600;padding:6px 4px;border-radius:7px;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;letter-spacing:.05em;text-transform:uppercase;transition:opacity .15s,transform .1s}
.gh-sync-btn:disabled{opacity:.3;cursor:not-allowed}
.gh-sync-btn:not(:disabled):hover{opacity:.85;transform:translateY(-1px)}
.gh-push-btn{background:#238636;color:#fff}
.gh-pull-btn{background:#1f6feb;color:#fff}
.gh-cfg-btn{background:var(--surface);color:var(--text-secondary);border:1px solid var(--border)}
.gh-cfg-btn:hover{color:var(--accent);border-color:var(--accent-glow);background:var(--accent-soft)}
.gh-status{font-size:9px;text-align:center;color:var(--text-muted);min-height:14px;margin-bottom:2px;transition:.3s;font-family:'JetBrains Mono',monospace}
.gh-status.ok{color:#3fb950}
.gh-status.err{color:#f85149}
#gh-pat-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.72);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);z-index:9999;display:none;align-items:center;justify-content:center}
#gh-pat-modal{background:var(--bg-modal);border:1px solid var(--border);border-radius:16px;padding:26px;width:min(90vw,420px);color:var(--text);box-shadow:0 24px 80px rgba(0,0,0,.6)}
#gh-pat-modal h3{font-family:'Instrument Serif','Iowan Old Style',Georgia,serif;font-size:1.15rem;font-weight:600;margin:0 0 8px}
#gh-pat-modal p{font-size:.76rem;color:var(--text-secondary);margin:0 0 14px;line-height:1.55}
#gh-pat-modal a{color:var(--accent)}
.gh-pat-input-wrap{display:flex;gap:6px;margin-bottom:16px}
#gh-pat-input{flex:1;background:var(--bg-input);border:1px solid var(--border-input);border-radius:9px;padding:8px 12px;color:var(--text);font-size:.84rem;font-family:'JetBrains Mono',monospace;outline:none;transition:border-color .15s}
#gh-pat-input:focus{border-color:var(--accent)}
.gh-pat-actions{display:flex;justify-content:flex-end;gap:8px}
.gh-pat-save-btn{background:var(--btn-bg);color:var(--btn-text);border:none;border-radius:9px;padding:8px 18px;cursor:pointer;font-family:'Inter Tight','Inter',system-ui,sans-serif;font-weight:600;font-size:.8rem}
.gh-pat-save-btn:hover{opacity:.85}
.gh-pat-cancel-btn{background:var(--surface);color:var(--text-secondary);border:1px solid var(--border);border-radius:9px;padding:8px 14px;cursor:pointer;font-family:'Inter Tight','Inter',system-ui,sans-serif;font-size:.8rem}
.gh-pat-cancel-btn:hover{background:var(--bg-hover);color:var(--text)}

/* ================================================================
   MOBILE
   ================================================================ */
/* C3: backdrop sombre + blur, fade animé. z-index 299 pour passer
   sous la sidebar (z-index 300+ en mobile) mais au-dessus du reste. */
.sidebar-overlay{position:fixed;inset:0;background:rgba(0,0,0,.62);z-index:299;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);opacity:0;visibility:hidden;transition:opacity .25s ease,visibility .25s ease;pointer-events:none}
.sidebar-overlay.active{opacity:1;visibility:visible;pointer-events:auto}
/* C3: lock du scroll body quand la sidebar mobile est ouverte */
body.sidebar-locked{overflow:hidden}

@media(max-width:768px){
  body{padding-bottom:env(safe-area-inset-bottom,0px)}
  .sidebar{position:fixed;top:0;left:0;bottom:0;width:82vw !important;max-width:320px !important;min-width:0 !important;z-index:300;padding:20px 14px 16px !important;overflow-y:auto;overflow-x:hidden;transform:translateX(-100%);transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .2s !important;opacity:1 !important;border-right:1px solid var(--border) !important;padding-top:calc(20px + env(safe-area-inset-top,0px)) !important}
  .sidebar.open{transform:translateX(0);box-shadow:6px 0 40px rgba(0,0,0,.5)}
  .sidebar.collapsed{width:82vw !important;max-width:320px !important;min-width:0 !important;padding:20px 14px 16px !important;opacity:1 !important}
  .sidebar-toggle{left:10px !important;top:calc(8px + env(safe-area-inset-top,0px));z-index:150;width:38px;height:38px;padding:6px;border-radius:9px}
  .sidebar-toggle.collapsed{left:10px !important}
  .main{width:100vw;height:100vh;height:100dvh;padding-top:calc(44px + env(safe-area-inset-top,0px))}
  .chat-container{padding:12px 12px 8px;gap:12px}
  .message{max-width:90% !important;font-size:.86rem;padding:10px 13px}
  .message-wrapper{max-width:90%}
  .model-bar{padding:6px 10px;gap:4px 6px}
  .model-bar-spacer{display:none}
  .model-label{font-size:.6rem}
  .model-select{font-size:.7rem;padding:3px 5px;max-width:130px;flex:1;min-width:70px}
  .token-bar{padding:4px 10px;font-size:.6rem;flex-wrap:wrap}
  .input-area{padding:8px 8px calc(10px + env(safe-area-inset-bottom,0px));gap:6px}
  .input-wrapper{max-width:100%;border-radius:14px;padding:5px 5px 5px 8px;gap:3px}
  .prompt-input{font-size:16px;max-height:140px}
  .input-hint{display:none}
  .send-btn{padding:7px 12px;font-size:.78rem;border-radius:10px}
  /* Mobile : compacter les boutons + masquer les redondants
     (#enhance-prompt-btn et #prompt-picker-btn sont deja dans la toolbar
     en-dessous, leur duplication ici reduit la zone d'ecriture). */
  #attach-btn,.mic-btn,.web-search-toggle{min-width:32px;min-height:32px;width:32px;height:32px;padding:0;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}
  #enhance-prompt-btn,#prompt-picker-btn{display:none !important}
  /* Mobile : toolbar plus visible (sans les inline buttons elle servait
     a peine — boutons plus larges, pleine largeur, accent-soft fond). */
  .composer-toolbar{
    gap:6px !important;
    margin:6px 0 0 !important;
    padding:0 2px;
    width:100%;
  }
  .composer-toolbar .prompt-toolbar-btn{
    flex:1 1 auto;
    justify-content:center;
    min-height:36px;
    padding:7px 12px !important;
    font-size:0.78rem !important;
    background:var(--accent-soft);
    border-color:var(--accent-glow) !important;
    color:var(--accent) !important;
  }
  .composer-toolbar .prompt-toolbar-btn svg{opacity:1 !important}
  .export-btns-group{bottom:auto;top:calc(52px + env(safe-area-inset-top,0px));left:auto;right:10px;flex-direction:column;gap:4px}
  .sp-modal-overlay{align-items:flex-end !important}
  .sp-modal{width:100% !important;max-width:100% !important;border-radius:20px 20px 0 0 !important;max-height:88vh;padding-bottom:calc(20px + env(safe-area-inset-bottom,0px)) !important}
  .dashboard-modal{max-height:90vh;border-radius:20px 20px 0 0 !important}
  .message-text table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .message-text pre{overflow-x:auto;-webkit-overflow-scrolling:touch;font-size:.74rem}
  .gh-sync-btn{font-size:9px;padding:6px 3px}
}

@media(max-width:380px){
  .message{max-width:95% !important;font-size:.84rem}
  .model-select{max-width:100px}
  .sidebar{width:90vw !important}
}

/* ═══════════════════════════════════════════════════════════════
   GoudAI Chat — CSS additions (canvas, menus, mobile fixes)
   ═══════════════════════════════════════════════════════════════ */

/* ── Layout principal ───────────────────────────────────────────── */
.main { display: flex !important; flex-direction: row !important; height: 100vh; height: 100dvh; overflow: hidden; }
@media (max-width: 768px) { .main { flex-direction: column !important; } }
@media (max-width: 768px) { .main { flex-direction: column !important; } }
.chat-wrapper { flex: 1 1 auto; display: flex; flex-direction: column; min-width: 0; overflow: hidden; position: relative; height: 100%; }
.main:not(.canvas-open) .chat-wrapper { flex: 1 1 100% !important; }

/* ── Canvas panel ─────────────────────────────────────────────────
   Fix mobile + theme-aware : toutes les couleurs hardcodees
   rgba(255,255,255,...) et #fff/#e8e0d0 migrees vers variables. */
.canvas-panel { flex: 0 0 0; width: 0; display: flex; flex-direction: column; overflow: hidden; transition: all 0.25s ease; background: var(--bg-modal); }
.canvas-panel.open { flex: 0 0 50%; width: 50%; border-left: 1px solid var(--border); }
.canvas-header { display: flex; align-items: center; justify-content: space-between; padding: 0 12px; height: 44px; background: var(--bg-modal); border-bottom: 1px solid var(--border); flex-shrink: 0; gap: 8px; }
.canvas-header-left { display: flex; align-items: center; overflow-x: auto; flex: 1; scrollbar-width: none; }
.canvas-tab { display: flex; align-items: center; gap: 6px; padding: 6px 14px; font-size: 12.5px; color: var(--text-muted); cursor: pointer; border-bottom: 2px solid transparent; white-space: nowrap; transition: all 0.15s; }
.canvas-tab:hover { color: var(--text-secondary); }
.canvas-tab.active { color: var(--text); border-bottom-color: var(--accent); background: var(--bg-hover); }
.canvas-tab-close { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 15px; padding: 0 2px; }
.canvas-tab-close:hover { color: oklch(56% 0.20 28); }
.canvas-header-right { display: flex; align-items: center; gap: 4px; flex-shrink: 0; }
.canvas-action-btn { display: flex; align-items: center; gap: 5px; padding: 5px 10px; background: transparent; border: 1px solid var(--border); border-radius: 6px; color: var(--text-secondary); font-size: 12px; cursor: pointer; transition: all 0.15s; white-space: nowrap; }
.canvas-action-btn:hover { background: var(--bg-hover); color: var(--text); }
.canvas-action-btn.active { background: var(--accent); color: var(--btn-text); border-color: var(--accent); }
.canvas-action-btn.primary { background: var(--accent-soft); border-color: var(--accent-glow); color: var(--accent); }
.canvas-btn-close-panel { padding: 5px 8px !important; font-size: 16px !important; }
.canvas-subtoolbar { display: flex; align-items: center; gap: 2px; padding: 6px 14px; background: var(--bg-sidebar); border-bottom: 1px solid var(--border-light); flex-shrink: 0; }
.canvas-view-btn { padding: 4px 12px; font-size: 12px; background: none; border: none; border-radius: 5px; color: var(--text-muted); cursor: pointer; }
.canvas-view-btn.active { color: var(--text); background: var(--bg-hover); }
.canvas-body { flex: 1; overflow: hidden; display: flex; flex-direction: column; position: relative; }
.canvas-code-view { flex: 1; overflow: auto; background: var(--bg-modal); }
.canvas-code-view code { display: block; padding: 20px 24px; font-family: 'JetBrains Mono', Consolas, monospace; font-size: 13px; line-height: 1.65; background: transparent !important; color: var(--text); }
.canvas-editor { flex: 1; width: 100%; height: 100%; background: var(--bg-modal); color: var(--text); border: none; outline: none; padding: 20px 24px; font-family: 'JetBrains Mono', Consolas, monospace; font-size: 13px; line-height: 1.65; resize: none; tab-size: 2; }
.canvas-iframe-wrap { flex: 1; display: flex; background: #fff; }
.canvas-iframe { flex: 1; width: 100%; border: none; }

/* Canvas export menu */
.canvas-export-wrap { position: relative; }
.canvas-export-dropdown { position: absolute; top: calc(100% + 6px); right: 0; background: var(--bg-modal); border: 1px solid var(--border); border-radius: 10px; min-width: 230px; z-index: 300; box-shadow: 0 12px 40px rgba(0,0,0,0.25); overflow: hidden; display: none; }
.canvas-export-dropdown.open { display: block; }
.canvas-export-section { padding: 6px 0; border-bottom: 1px solid var(--border-light); }
.canvas-export-section:last-child { border-bottom: none; }
.canvas-export-section-label { padding: 4px 14px 2px; font-size: 10px; text-transform: uppercase; color: var(--text-muted); }
.canvas-export-item { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 14px; background: none; border: none; color: var(--text); font-size: 13px; cursor: pointer; text-align: left; }
.canvas-export-item:hover { background: var(--bg-hover); }
.canvas-export-icon { font-size: 15px; width: 20px; text-align: center; }

/* Canvas history */
.canvas-history-panel { position: absolute; top: 0; right: 0; bottom: 0; width: 280px; background: var(--bg-sidebar); border-left: 1px solid var(--border); z-index: 200; display: flex; flex-direction: column; transform: translateX(100%); transition: transform 0.2s; }
.canvas-history-panel.open { transform: translateX(0); }
.canvas-history-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 14px; border-bottom: 1px solid var(--border); font-size: 13px; font-weight: 600; color: var(--text); }
.canvas-history-close { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 18px; }
.canvas-history-list { flex: 1; overflow-y: auto; }
.canvas-history-item { padding: 10px 14px; border-bottom: 1px solid var(--border-light); cursor: pointer; }
.canvas-history-time { font-size: 11px; color: var(--accent); font-weight: 600; }
.canvas-history-snippet { font-size: 11px; color: var(--text-muted); font-family: monospace; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.canvas-history-restore-btn { margin-top: 4px; padding: 2px 8px; background: var(--accent-soft); border: 1px solid var(--accent-glow); border-radius: 4px; color: var(--accent); font-size: 11px; cursor: pointer; }

/* Canvas badge inline */
.canvas-inline-badge { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; margin: 6px 0; background: var(--accent-soft); border: 1px solid var(--accent-glow); border-radius: 8px; color: var(--accent); font-size: 12.5px; cursor: pointer; }
.canvas-inline-badge:hover { background: var(--accent-glow); }

/* Canvas reopen button */
.canvas-reopen-fab { position: absolute; top: 12px; right: 16px; z-index: 100; display: flex; align-items: center; gap: 7px; padding: 7px 14px; background: var(--bg-modal); border: 1px solid var(--accent-glow); border-radius: 20px; color: var(--accent); font-size: 12.5px; cursor: pointer; box-shadow: 0 2px 12px rgba(0,0,0,0.15); }
.canvas-reopen-fab:hover { background: var(--accent-soft); }

/* ── Copy / TTS menu ────────────────────────────────────────────── */
.copy-menu { display: none; position: fixed; background: var(--bg-sidebar); border: 1px solid rgba(255,255,255,0.12); border-radius: 8px; box-shadow: 0 4px 20px rgba(0,0,0,0.4); z-index: 10000; overflow: hidden; }
.copy-menu.open { display: block; }
.copy-menu-item { padding: 8px 16px; font-size: 13px; color: var(--text, #f0e6c8); cursor: pointer; white-space: nowrap; }
.copy-menu-item:hover { background: rgba(255,255,255,0.07); }

/* ── Custom select ──────────────────────────────────────────────── */
.custom-select { position: relative; display: inline-block; }
.custom-select-trigger { display: flex; align-items: center; justify-content: space-between; padding: 4px 10px; cursor: pointer; background: var(--bg-input, #1a1723); border: 1px solid var(--border-input, #2a2433); border-radius: 6px; font-size: 13px; color: var(--text, #f0e6c8); min-width: 120px; gap: 6px; user-select: none; }
.custom-select-trigger:hover { border-color: var(--accent); }
.custom-select.disabled .custom-select-trigger { opacity: 0.5; cursor: not-allowed; }
.custom-select-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; }
.custom-select-arrow { font-size: 10px; opacity: 0.5; flex-shrink: 0; }
.custom-select-dropdown { display: none; position: fixed; z-index: 9999; min-width: 200px; max-height: 320px; overflow-y: auto; background: var(--bg-sidebar); border: 1px solid var(--border-input, #2a2433); border-radius: 8px; box-shadow: 0 8px 32px rgba(0,0,0,0.5); }
.custom-select.open .custom-select-dropdown { display: block; }
.custom-select-provider { border-top: 1px solid rgba(255,255,255,0.06); }
.custom-select-provider:first-child { border-top: none; }
.custom-select-group { padding: 6px 12px 2px; font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: rgba(255,255,255,0.3); }
.custom-select-option { display: flex; align-items: center; gap: 8px; justify-content: flex-start; padding: 8px 12px; cursor: pointer; font-size: 12px; color: var(--text); transition: background 0.12s; }
.custom-select-option:hover, .custom-select-option.selected { background: var(--accent-soft); color: var(--accent); }
.custom-select-option--empty { padding: 8px 12px; font-size: 12px; color: var(--text-muted); cursor: pointer; }
.custom-select-option--empty:hover { background: var(--bg-hover); }
.custom-select-option-text { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
/* K3: ProviderMark — vrais logos SVG des providers IA (Kiro v3.1).
   Badge 22px avec couleur de fond derivee du hue par provider. Les SVG
   ont fill="currentColor" et color est defini en oklch teinte par hue. */
.provider-mark {
    display: inline-flex; align-items: center; justify-content: center;
    width: 22px; height: 22px; border-radius: 6px;
    background: oklch(94% 0.04 var(--provider-hue, 270));
    color: oklch(35% 0.14 var(--provider-hue, 270));
    flex-shrink: 0;
}
.provider-mark svg { display: block; width: 13px; height: 13px; }
/* K3: pour les <img src=images/Provider.svg> (fill currentColor), on doit
   appliquer la couleur via filter car les <img> ne propagent pas currentColor.
   Solution : SVG inline serait ideal, mais <img> simplifie le DOM.
   Trick : on utilise mask-image qui supporte le color via background-color. */
.provider-mark img {
    width: 13px; height: 13px;
    display: block;
    /* On veut que le SVG prenne la couleur du conteneur (color: oklch...).
       <img> n'herite pas, donc on mask et background-color. */
    -webkit-mask: var(--mark-mask, none) center/contain no-repeat;
    mask: var(--mark-mask, none) center/contain no-repeat;
    background-color: currentColor;
}
.provider-mark img[src*="OpenAI"]     { --mark-mask: url('../images/OpenAI.svg'); }
.provider-mark img[src*="Anthropic"]  { --mark-mask: url('../images/Anthropic.svg'); }
.provider-mark img[src*="Google"]     { --mark-mask: url('../images/Google.svg'); }
.provider-mark img[src*="Mistral"]    { --mark-mask: url('../images/Mistral.svg'); }
.provider-mark img[src*="Grok"]       { --mark-mask: url('../images/Grok.svg'); }
.provider-mark img[src*="DeepSeek"]   { --mark-mask: url('../images/DeepSeek.svg'); }
.provider-mark img[src*="Perplexity"] { --mark-mask: url('../images/Perplexity.svg'); }
.provider-mark img[src*="Z.ai"]       { --mark-mask: url('../images/Z.ai.svg'); }
.provider-mark img[src*="OpenRouter"] { --mark-mask: url('../images/OpenRouter.svg'); }
body.dark .provider-mark {
    background: oklch(28% 0.05 var(--provider-hue, 270));
    color: oklch(85% 0.12 var(--provider-hue, 270));
}
.custom-select-option-name { font-weight: 500; }
.custom-select-option-price { font-size: 10px; }
body:not(.dark) .custom-select-option-price { color: rgba(0,0,0,0.45); }
body.dark .custom-select-option-price { color: rgba(255,255,255,0.4); }
.custom-select-info { display: inline-flex; align-items: center; justify-content: center; width: 13px; height: 13px; border-radius: 50%; border: 1px solid rgba(255,255,255,0.3); font-size: 9px; font-weight: 700; font-style: italic; color: rgba(255,255,255,0.4); cursor: default; margin-left: 4px; }

/* Tooltip */
#custom-select-tooltip { position: fixed; background: var(--text, #f0e6c8); color: var(--bg, #080709); font-size: 11px; line-height: 1.4; padding: 6px 10px; border-radius: 6px; width: 220px; pointer-events: none; opacity: 0; transition: opacity 0.15s; z-index: 10001; }
#custom-select-tooltip.visible { opacity: 1; }

/* Doc download buttons */
.chat-doc-download-wrap { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; padding-top: 12px; border-top: 1px solid rgba(255,255,255,0.08); }
.chat-doc-download-btn { display: inline-flex; align-items: center; gap: 6px; padding: 7px 16px; background: var(--accent-soft); border: 1px solid var(--accent-glow); border-radius: 8px; color: var(--accent); font-size: 13px; cursor: pointer; font-weight: 500; }
.chat-doc-download-btn:hover { background: var(--accent-glow); }
.chat-doc-download-btn.secondary { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.15); color: rgba(255,255,255,0.6); }

/* ── Mobile ─────────────────────────────────────────────────────── */
@media (max-width: 768px) {
    .main { flex-direction: column !important; }
    .chat-wrapper { flex: 1 1 auto !important; width: 100% !important; }
    .main.canvas-open .chat-wrapper { display: none !important; }
    .canvas-panel.open { flex: 0 0 100% !important; width: 100% !important; }

    /* Model bar mobile : une ligne scrollable */
    .model-bar { flex-wrap: nowrap !important; overflow-x: auto !important; padding: 4px 8px !important; gap: 4px !important; scrollbar-width: none; }
    .model-bar::-webkit-scrollbar { display: none; }
    .model-label { display: none !important; }
    .model-bar-spacer { display: none !important; }

    /* Custom select mobile */
    .custom-select-trigger { min-width: 70px !important; max-width: 120px !important; font-size: 11px !important; padding: 4px 8px !important; }
    .custom-select-text { max-width: 80px; }

    /* Dropdown mobile : bottom sheet */
    .custom-select.open .custom-select-dropdown { position: fixed !important; bottom: 0 !important; left: 0 !important; right: 0 !important; top: auto !important; width: 100% !important; max-height: 60vh !important; border-radius: 16px 16px 0 0 !important; min-width: unset !important; }
}


/* ═══════════════════════════════════════════════════════
   MOBILE FIX - GoudAI Chat
   ═══════════════════════════════════════════════════════ */

/* Layout de base */
html, body {
    height: 100%;
    height: 100dvh;
    overflow: hidden;
}

.main {
    display: flex !important;
    flex-direction: row !important;
    height: 100vh;
    height: 100dvh;
    overflow: hidden;
    position: relative;
}

.chat-wrapper {
    flex: 1 1 auto;
    display: flex !important;
    flex-direction: column !important;
    min-width: 0;
    height: 100%;
    overflow: hidden;
    position: relative;
}

/* Chat container doit etre visible et scrollable */
.chat-container {
    flex: 1 1 auto !important;
    overflow-y: auto !important;
    overflow-x: hidden !important;
    min-height: 0 !important;
}

/* Input area en bas */
.input-area {
    flex-shrink: 0 !important;
}

.model-bar {
    flex-shrink: 0 !important;
}

.token-bar {
    flex-shrink: 0 !important;
}

/* Mobile */
@media (max-width: 768px) {
    .main {
        flex-direction: column !important;
        padding-top: calc(44px + env(safe-area-inset-top, 0px));
    }

    .chat-wrapper {
        flex: 1 1 auto !important;
        width: 100% !important;
        height: 100% !important;
    }

    /* Cacher chat quand canvas ouvert */
    .main.canvas-open .chat-wrapper {
        display: none !important;
    }

    .canvas-panel.open {
        flex: 0 0 100% !important;
        width: 100% !important;
    }

    /* Model bar scrollable horizontalement */
    .model-bar {
        display: flex !important;
        flex-wrap: nowrap !important;
        overflow-x: auto !important;
        overflow-y: visible !important;
        padding: 4px 8px !important;
        gap: 4px !important;
        scrollbar-width: none;
        -webkit-overflow-scrolling: touch;
    }
    .model-bar::-webkit-scrollbar { display: none; }
    .model-label { display: none !important; }
    .model-bar-spacer { display: none !important; }

    /* Custom selects compacts */
    .custom-select-trigger {
        min-width: 60px !important;
        max-width: 100px !important;
        font-size: 11px !important;
        padding: 4px 7px !important;
    }
    .custom-select-text {
        max-width: 70px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    /* Dropdown mobile = bottom sheet */
    .custom-select.open .custom-select-dropdown {
        position: fixed !important;
        bottom: 0 !important;
        left: 0 !important;
        right: 0 !important;
        top: auto !important;
        width: 100% !important;
        max-height: 55vh !important;
        border-radius: 16px 16px 0 0 !important;
        min-width: unset !important;
        z-index: 9999 !important;
    }

    /* Input area */
    .input-area {
        padding: 8px 10px calc(8px + env(safe-area-inset-bottom, 0px)) !important;
    }

    /* Messages */
    .message {
        max-width: 92% !important;
        font-size: 0.87rem !important;
    }
}

/* Fix mobile - input visible */
@media (max-width: 768px) {
    .chat-wrapper {
        height: 100dvh !important;
        max-height: 100dvh !important;
    }
    .chat-container {
        flex: 1 1 0 !important;
        min-height: 0 !important;
        max-height: none !important;
    }
    .input-area {
        flex-shrink: 0 !important;
        position: relative !important;
        z-index: 10 !important;
    }
    .model-bar {
        flex-shrink: 0 !important;
    }
    .token-bar {
        flex-shrink: 0 !important;
    }
}

/* Fix safe area mobile */
@media (max-width: 768px) {
    .input-area {
        padding-bottom: calc(12px + env(safe-area-inset-bottom, 16px)) !important;
    }
    .main {
        padding-bottom: 0 !important;
    }
    /* Eviter que la barre navigateur cache le contenu */
    body {
        padding-bottom: env(safe-area-inset-bottom, 0px);
    }
}

/* Fix barre saisie coupée sur Android */
@media (max-width: 768px) {
    .input-area {
        padding-bottom: max(12px, env(safe-area-inset-bottom, 12px)) !important;
        margin-bottom: 0 !important;
    }
    body {
        overflow: hidden;
    }
}

/* Fix chat-container trop grand sur mobile */
@media (max-width: 768px) {
    .chat-wrapper {
        min-height: 0 !important;
        flex: 1 1 0 !important;
    }
    .chat-container {
        min-height: 0 !important;
        flex: 1 1 0 !important;
        overflow-y: auto !important;
    }
}

/* Fix sidebar buttons sur mobile */
@media (max-width: 768px) {
    .sidebar {
        z-index: 10000 !important;
    }
    .sidebar-bottom {
        position: relative;
        z-index: 10001 !important;
        pointer-events: all !important;
    }
    .sidebar-bottom-btn {
        pointer-events: all !important;
        position: relative;
        z-index: 10001 !important;
    }
    .sidebar-bottom-row {
        pointer-events: all !important;
        position: relative;
        z-index: 10001 !important;
    }
}

/* Fix sidebar mobile z-index */
@media (max-width: 768px) {
    .sidebar {
        z-index: 99999 !important;
    }
    .sidebar * {
        pointer-events: all !important;
        position: relative;
        z-index: auto;
    }
    .sidebar-bottom,
    .sidebar-bottom-row,
    .sidebar-bottom-btn {
        z-index: 99999 !important;
        pointer-events: all !important;
    }
}

/* Fix sidebar mobile z-index */
@media (max-width: 768px) {
    .sidebar {
        z-index: 99999 !important;
    }
    .sidebar * {
        pointer-events: all !important;
        position: relative;
        z-index: auto;
    }
    .sidebar-bottom,
    .sidebar-bottom-row,
    .sidebar-bottom-btn {
        z-index: 99999 !important;
        pointer-events: all !important;
    }
}

/* Sidebar fermée par défaut sur mobile */
@media (max-width: 768px) {
    .sidebar:not(.open) {
        transform: translateX(-100%) !important;
        visibility: hidden;
    }
    .sidebar.open {
        transform: translateX(0) !important;
        visibility: visible;
    }
}

/* Sidebar mobile - masquage total */
@media (max-width: 768px) {
    .sidebar {
        display: none !important;
    }
    .sidebar.open {
        display: flex !important;
        position: fixed !important;
        top: 0 !important;
        left: 0 !important;
        bottom: 0 !important;
        width: 82vw !important;
        max-width: 320px !important;
        z-index: 99999 !important;
        transform: none !important;
        overflow-y: auto !important;
    }
}

/* Sidebar mobile - masquage total */
@media (max-width: 768px) {
    .sidebar {
        display: none !important;
    }
    .sidebar.open {
        display: flex !important;
        position: fixed !important;
        top: 0 !important;
        left: 0 !important;
        bottom: 0 !important;
        width: 82vw !important;
        max-width: 320px !important;
        z-index: 99999 !important;
        transform: none !important;
        overflow-y: auto !important;
    }
}

/* Bouton fermer sidebar mobile */
@media (max-width: 768px) {
    #sidebar-close-btn {
        display: block !important;
    }
}

/* ─────────── Composer toolbar (Kiro v3 - PR9) ─────────── */
/* Ligne d'actions visibles juste sous le composer (#input-wrapper).
   Affiche 1 a 2 boutons selon updatePromptToolbar() :
   - mode insert  : bouton "Inserer un prompt" (textarea vide)
   - mode enhance : "Ameliorer" + "Enregistrer" (texte present, pre-enhance)
   - mode revert  : "Revenir" (variante destructive) + "Enregistrer" (post-enhance) */
.composer-toolbar {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    margin: 6px 0 4px;
    min-height: 30px;
    flex-wrap: wrap;
}
.prompt-toolbar-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: transparent;
    border: 1px solid var(--border, #2a2a2a);
    color: var(--text-secondary, #a0a0a0);
    cursor: pointer;
    padding: 5px 12px;
    border-radius: 16px;
    font-size: 0.75rem;
    font-weight: 500;
    transition: color 0.15s, border-color 0.15s, background 0.15s;
    line-height: 1.2;
}
.prompt-toolbar-btn svg {
    stroke: currentColor;
    flex-shrink: 0;
    opacity: 0.7;
}
.prompt-toolbar-btn:hover:not(:disabled) {
    color: var(--accent);
    border-color: var(--accent);
    background: rgba(196, 136, 30, 0.08);
}
.prompt-toolbar-btn:hover:not(:disabled) svg {
    opacity: 1;
}
.prompt-toolbar-btn:disabled {
    opacity: 0.4;
    cursor: not-allowed;
}
.prompt-toolbar-btn.revert {
    color: #f87171;
    border-color: #f87171;
}
.prompt-toolbar-btn.revert:hover:not(:disabled) {
    background: rgba(248, 113, 113, 0.08);
}

/* Animation shimmer sur le textarea pendant l'amelioration en cours */
.prompt-input.enhancing {
    background: linear-gradient(90deg,
        var(--bg-input, #1a1a1a) 0%,
        rgba(196, 136, 30, 0.15) 50%,
        var(--bg-input, #1a1a1a) 100%);
    background-size: 200% 100%;
    animation: enhanceShimmer 1.6s linear infinite;
}
@keyframes enhanceShimmer {
    0%   { background-position: 100% 0; }
    100% { background-position: -100% 0; }
}

/* ─────────── Right panel (Kiro v3 - PR3) ─────────── */
/* 3e colonne du body flex (apres .sidebar et .main).
   Contient les onglets de reglages (General, Image, etc.).
   Contenu rempli en PR4/PR5. */
.right-panel {
    width: 280px;
    min-width: 280px;
    background: var(--bg-sidebar, #131210);
    display: flex;
    flex-direction: column;
    padding: 16px 14px;
    border-left: 1px solid var(--border, #2a2a2a);
    transition: width 0.25s ease, min-width 0.25s ease, padding 0.2s ease, opacity 0.2s ease;
    overflow: hidden;
    height: 100vh;
    height: 100dvh;
    box-sizing: border-box;
}
.right-panel.collapsed {
    width: 0;
    min-width: 0;
    padding: 16px 0;
    opacity: 0;
    border-left: none;
}
.rp-panel-title {
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--text-secondary, #a0a0a0);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 12px;
    padding: 0 4px;
}
.rp-tabs {
    display: flex;
    gap: 0;
    margin-bottom: 14px;
    border-bottom: 1px solid var(--border, #2a2a2a);
    position: relative;
}
.rp-tabs::after {
    content: '';
    position: absolute;
    bottom: -1px;
    left: var(--rp-tab-x, 0);
    width: var(--rp-tab-w, 0);
    height: 2px;
    background: var(--accent);
    transition: left 0.28s cubic-bezier(0.4, 0, 0.2, 1), width 0.28s cubic-bezier(0.4, 0, 0.2, 1);
}
.rp-tab {
    flex: 1;
    padding: 8px 0;
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--text-secondary, #a0a0a0);
    background: none;
    border: none;
    cursor: pointer;
    transition: color 0.2s;
}
.rp-tab.active {
    color: var(--accent);
}
.rp-tab:hover:not(.active) {
    color: var(--text, #e9e9e9);
}
.rp-tab-content {
    display: none;
    flex-direction: column;
    flex: 1;
    overflow-y: auto;
    padding: 4px 2px;
}
.rp-tab-content.active {
    display: flex;
    animation: rp-tab-fade-in 0.22s ease;
}
@keyframes rp-tab-fade-in {
    from { opacity: 0; transform: translateY(4px); }
    to   { opacity: 1; transform: translateY(0); }
}
.rp-placeholder {
    color: var(--text-secondary, #a0a0a0);
    font-size: 0.85rem;
    line-height: 1.5;
    text-align: center;
    margin: 24px 8px;
    padding: 16px;
    border: 1px dashed var(--border, #2a2a2a);
    border-radius: 8px;
}

/* ─────────── Right panel — onglet Général (Kiro v3 - PR4) ─────────── */
/* Sections de parametres LLM (temperature, top-p, max_tokens...) avec toggle
   d'activation. Section.rp-param-disabled : opacity reduite + non interactive. */
.right-panel-section {
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 8px;
    padding: 10px 12px;
    margin: 8px 0;
    background: var(--bg-card, rgba(255, 255, 255, 0.02));
    transition: opacity 0.2s;
}
.right-panel-section.rp-param-disabled {
    opacity: 0.45;
}
.right-panel-section.rp-param-disabled .rp-range,
.right-panel-section.rp-param-disabled .rp-effort-select {
    pointer-events: none;
    filter: grayscale(0.4);
}
.right-panel-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 6px;
}
.rp-title-group {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 1;
    min-width: 0;
}
.right-panel-title {
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--text, #e9e9e9);
}
.rp-param-toggle {
    appearance: none;
    -webkit-appearance: none;
    width: 14px;
    height: 14px;
    border: 1.5px solid var(--border, #2a2a2a);
    border-radius: 3px;
    background: transparent;
    cursor: pointer;
    position: relative;
    flex-shrink: 0;
    transition: background 0.15s, border-color 0.15s;
}
.rp-param-toggle:checked {
    background: var(--accent);
    border-color: var(--accent);
}
.rp-param-toggle:checked::after {
    content: '';
    position: absolute;
    left: 3.5px;
    top: 0px;
    width: 4px;
    height: 8px;
    border: solid #fff;
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}
.rp-range-value {
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--accent);
    font-variant-numeric: tabular-nums;
    min-width: 40px;
    text-align: right;
}
.rp-range {
    width: 100%;
    height: 4px;
    appearance: none;
    -webkit-appearance: none;
    background: var(--border, #2a2a2a);
    border-radius: 2px;
    outline: none;
    cursor: pointer;
}
.rp-range::-webkit-slider-thumb {
    appearance: none;
    -webkit-appearance: none;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--accent);
    cursor: pointer;
    border: 2px solid var(--bg-card, #1e1e1e);
    transition: transform 0.1s;
}
.rp-range::-webkit-slider-thumb:hover { transform: scale(1.15); }
.rp-range::-moz-range-thumb {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--accent);
    cursor: pointer;
    border: 2px solid var(--bg-card, #1e1e1e);
}
.rp-effort-select {
    width: 100%;
    background: var(--bg-input, #1a1a1a);
    color: var(--text, #e9e9e9);
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 6px;
    padding: 6px 10px;
    font-size: 0.8rem;
    cursor: pointer;
}
.rp-reset-btn {
    margin-top: 12px;
    width: 100%;
    background: transparent;
    border: 1px solid var(--border, #2a2a2a);
    color: var(--text-secondary, #a0a0a0);
    border-radius: 6px;
    padding: 7px 10px;
    font-size: 0.78rem;
    cursor: pointer;
    transition: color 0.15s, border-color 0.15s;
}
.rp-reset-btn:hover {
    color: var(--accent);
    border-color: var(--accent);
}

/* ─────────── Right panel — onglet Image (Kiro v3 - PR5) ─────────── */
/* Format buttons (square / portrait / landscape) */
.image-format-options {
    display: flex;
    gap: 6px;
    width: 100%;
}
.image-format-btn {
    flex: 1;
    background: transparent;
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 6px;
    padding: 8px 0;
    color: var(--text-secondary, #a0a0a0);
    cursor: pointer;
    transition: color 0.15s, border-color 0.15s, background 0.15s;
    display: flex;
    align-items: center;
    justify-content: center;
}
.image-format-btn:hover {
    color: var(--text, #e9e9e9);
    border-color: var(--text-secondary, #a0a0a0);
}
.image-format-btn.active {
    color: var(--accent);
    border-color: var(--accent);
    background: rgba(196, 136, 30, 0.1);
}

/* Sections data-providers : visibles uniquement pour le provider du modele image actif */
[data-providers].rp-section-disabled {
    display: none !important;
}

/* ─────────── Categories v2 - color grid 22 couleurs (Kiro v3 - PR6) ─────────── */
.cat-color-grid {
    display: grid;
    grid-template-columns: repeat(11, 1fr);
    gap: 6px;
    margin: 6px 0 12px;
}
.cat-color-swatch {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 2px solid transparent;
    cursor: pointer;
    position: relative;
    transition: transform 0.12s, border-color 0.12s;
    padding: 0;
    background: transparent;
}
.cat-color-swatch:hover {
    transform: scale(1.1);
}
.cat-color-swatch.selected {
    border-color: var(--text, #e9e9e9);
    box-shadow: 0 0 0 2px var(--bg, #131210), 0 0 0 4px var(--text, #e9e9e9);
}
.cat-color-swatch.selected::after {
    content: '\2713';
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    font-weight: bold;
    color: #fff;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
}
@media (max-width: 480px) {
    .cat-color-grid { grid-template-columns: repeat(8, 1fr); }
}

/* ─────────── Modale FAQ (Kiro v3 - PR8) ─────────── */
.faq-modal {
    max-width: 720px;
    width: 92vw;
    max-height: 80vh;
    display: flex;
    flex-direction: column;
}
.faq-tabs {
    display: flex;
    gap: 4px;
    margin: 12px 0 14px;
    border-bottom: 1px solid var(--border, #2a2a2a);
}
.faq-tab {
    background: none;
    border: none;
    color: var(--text-secondary, #a0a0a0);
    padding: 8px 14px;
    font-size: 0.82rem;
    font-weight: 600;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    transition: color 0.15s, border-color 0.15s;
}
.faq-tab:hover {
    color: var(--text, #e9e9e9);
}
.faq-tab.active {
    color: var(--accent);
    border-bottom-color: var(--accent);
}
.faq-container {
    overflow-y: auto;
    flex: 1;
    padding-right: 6px;
}
.faq-item {
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 8px;
    margin-bottom: 8px;
    overflow: hidden;
    background: rgba(255, 255, 255, 0.02);
}
.faq-question {
    background: none;
    border: none;
    color: var(--text, #e9e9e9);
    font-size: 0.88rem;
    font-weight: 500;
    text-align: left;
    cursor: pointer;
    padding: 12px 14px;
    width: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    transition: background 0.12s;
}
.faq-question:hover {
    background: rgba(196, 136, 30, 0.06);
}
.faq-question::after {
    content: '+';
    color: var(--accent);
    font-size: 1.4rem;
    font-weight: 300;
    line-height: 1;
    transition: transform 0.2s;
    flex-shrink: 0;
}
.faq-item.open .faq-question::after {
    content: '\2212'; /* minus */
}
.faq-answer {
    display: none;
    padding: 4px 16px 14px;
    color: var(--text-secondary, #a0a0a0);
    font-size: 0.85rem;
    line-height: 1.55;
}
.faq-item.open .faq-answer {
    display: block;
}
.faq-answer strong { color: var(--text, #e9e9e9); }
.faq-answer code {
    background: var(--bg-input, #1a1a1a);
    color: var(--accent);
    padding: 1px 6px;
    border-radius: 4px;
    font-size: 0.8em;
}

/* ─────────── Modale Configuration v2 - 7 onglets (Kiro v3 - PR7) ─────────── */
.config-modal {
    max-width: 720px;
    width: 92vw;
    max-height: 85vh;
    display: flex;
    flex-direction: column;
}
.config-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 2px;
    margin: 12px 0 14px;
    border-bottom: 1px solid var(--border, #2a2a2a);
    padding-bottom: 0;
}
.config-tab {
    background: none;
    border: none;
    color: var(--text-secondary, #a0a0a0);
    padding: 8px 12px;
    font-size: 0.78rem;
    font-weight: 600;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    transition: color 0.15s, border-color 0.15s;
    white-space: nowrap;
}
.config-tab:hover {
    color: var(--text, #e9e9e9);
}
.config-tab.active {
    color: var(--accent);
    border-bottom-color: var(--accent);
}
.config-tab-panel {
    display: none;
    overflow-y: auto;
    flex: 1;
    padding-right: 4px;
    animation: configPanelFade 0.18s ease;
}
.config-tab-panel.active {
    display: block;
}
@keyframes configPanelFade {
    from { opacity: 0; transform: translateY(4px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* Theme radios (onglet Apparence) */
.theme-choice-row {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin: 10px 0;
}
.theme-choice {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 8px;
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s;
}
.theme-choice:hover {
    border-color: var(--accent);
    background: var(--accent-soft);
}
.theme-choice input[type="radio"] {
    accent-color: var(--accent);
    width: 16px;
    height: 16px;
}
.theme-choice input[type="radio"]:checked ~ span {
    color: var(--accent);
    font-weight: 600;
}
/* R6: SVG inline icons dans les labels (theme + lang choice) */
.theme-choice span { display: inline-flex; align-items: center; gap: 8px; }
.theme-choice .ico { color: var(--text-secondary); flex-shrink: 0; }
.theme-choice input[type="radio"]:checked ~ span .ico { color: var(--accent); }
/* R6: cmd-palette icon SVG centre dans la pastille */
.cmd-palette-item-icon svg { display: block; }

@media (max-width: 600px) {
    .config-tabs { font-size: 0.72rem; }
    .config-tab { padding: 7px 8px; font-size: 0.72rem; }
}

/* ============================================================
   P2 : Onglet Confidentialité — cartes choix de stockage + tableau
   ============================================================ */
.storage-cards {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px;
    margin: 18px 0 24px;
}
@media (max-width: 720px) {
    .storage-cards { grid-template-columns: 1fr; }
}
.storage-card {
    display: block;
    cursor: pointer;
    position: relative;
    border: 2px solid var(--border);
    border-radius: 12px;
    padding: 18px 18px 16px;
    background: var(--bg-modal);
    transition: border-color .15s, background .15s, box-shadow .15s;
}
.storage-card:hover {
    border-color: var(--accent-glow);
    background: var(--accent-soft);
}
.storage-card input[type="radio"] {
    position: absolute;
    top: 16px;
    right: 16px;
    width: 18px;
    height: 18px;
    accent-color: var(--accent);
    cursor: pointer;
}
.storage-card:has(input:checked) {
    border-color: var(--accent);
    background: var(--accent-soft);
    box-shadow: 0 0 0 3px var(--accent-soft);
}
.storage-card-content { display: flex; flex-direction: column; gap: 10px; }
.storage-card-header { display: flex; align-items: flex-start; gap: 12px; padding-right: 28px; }
.storage-card-icon {
    color: var(--accent);
    background: var(--accent-soft);
    border-radius: 8px;
    padding: 8px;
    width: 38px !important;
    height: 38px !important;
    flex-shrink: 0;
}
.storage-card:has(input:checked) .storage-card-icon {
    background: var(--accent);
    color: #fff;
}
.storage-card-title {
    font-size: 1rem;
    font-weight: 600;
    color: var(--text);
    letter-spacing: -0.01em;
    line-height: 1.2;
}
.storage-card-tagline {
    font-size: 0.78rem;
    color: var(--text-muted);
    margin-top: 2px;
    line-height: 1.3;
}
.storage-card-list {
    list-style: none;
    padding: 0;
    margin: 4px 0 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-size: 0.82rem;
    color: var(--text);
    line-height: 1.5;
}
.storage-card-list strong {
    color: var(--text-secondary);
    font-weight: 500;
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    display: block;
    margin-bottom: 1px;
}

.storage-section-title {
    font-size: 0.85rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--text-muted);
    margin: 28px 0 10px;
}

.storage-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.85rem;
    margin-bottom: 14px;
}
.storage-table th {
    background: var(--surface);
    color: var(--text-secondary);
    font-weight: 600;
    text-align: left;
    padding: 10px 12px;
    border: 1px solid var(--border);
    font-size: 0.78rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.storage-table td {
    padding: 10px 12px;
    border: 1px solid var(--border-light);
    color: var(--text);
    vertical-align: top;
}
.storage-table tbody tr:nth-child(even) { background: var(--surface); }

.storage-note {
    background: var(--accent-soft);
    border-left: 3px solid var(--accent);
    color: var(--text);
    font-size: 0.82rem;
    line-height: 1.55;
    padding: 12px 16px;
    border-radius: 4px 8px 8px 4px;
    margin: 8px 0 0;
}

/* ─────────── User widget (sidebar bottom — refonte P1.4) ─────────── */
/* Remplace les inline style="" + onmouseover/out de mountUserWidget()
   dans auth.js. BEM strict (.user-widget, .user-widget__xxx). */
.user-widget {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 8px 8px;
    border-top: 1px solid var(--border, #2a2a2a);
    margin-bottom: 4px;
}
.user-widget__avatar {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    flex-shrink: 0;
    border: 1px solid var(--border, #2a2a2a);
    object-fit: cover;
}
.user-widget__avatar--initial {
    background: var(--accent-soft, rgba(196, 136, 30, 0.1));
    border-color: var(--accent-glow, rgba(196, 136, 30, 0.4));
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.9rem;
    font-weight: 600;
    color: var(--accent);
}
.user-widget__info {
    min-width: 0;
    flex: 1;
}
.user-widget__name {
    font-size: 0.78rem;
    font-weight: 600;
    color: var(--text, #e9e9e9);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.user-widget__email {
    font-size: 0.65rem;
    color: var(--text-muted, var(--text-secondary, #a0a0a0));
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.user-widget__logout {
    background: none;
    border: none;
    cursor: pointer;
    padding: 4px;
    color: var(--text-muted, var(--text-secondary, #a0a0a0));
    border-radius: 6px;
    transition: color 0.15s, background 0.15s;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
}
.user-widget__logout:hover {
    color: var(--accent);
    background: var(--accent-soft, rgba(196, 136, 30, 0.1));
}

/* ────────────────── Page de connexion (index.html) — Refonte P1.5 ────────────────── */
/* Tout le CSS deplace depuis le bloc <style> inline d'index.html (~243 lignes).
   Tous les selecteurs sont prefixes .login-page pour eviter les collisions
   avec app.html qui partage ce stylesheet. Les variables CSS sont
   re-declarees en scope .login-page (override pour cette seule page). */
/* R1: fonts deja chargees en haut du fichier (Inter Tight + Instrument Serif) */

/* R5: white-first SaaS premium — palette claire neutre, accent indigo. */
body.login-page {
    --bg:           #ffffff;
    --surface:      #ffffff;
    --surface-2:    oklch(97% 0 0);
    --border:       oklch(91% 0 0);
    --border-input: oklch(85% 0 0);
    --text:         oklch(18% 0 0);
    --text-sec:     oklch(38% 0 0);
    --text-muted:   oklch(58% 0 0);
    --accent:       oklch(54% 0.20 274);
    --accent-b:     oklch(46% 0.22 274);
    --accent-soft:  oklch(94% 0.05 274);
    --accent-glow:  oklch(88% 0.08 274);
    --error:        oklch(56% 0.20 28);
    --error-bg:     oklch(94% 0.05 28);

    font-family: 'Inter Tight','Inter',system-ui,sans-serif;
    background:
        radial-gradient(1200px 600px at 50% -20%, var(--accent-soft), transparent 60%),
        var(--bg);
    color: var(--text);
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
    padding: 20px;
    position: relative;
    overflow: hidden;
}
body.login-page *, body.login-page *::before, body.login-page *::after {
    margin: 0; padding: 0; box-sizing: border-box;
}
body.login-page::before {
    content: '';
    position: fixed;
    width: 700px; height: 700px;
    background: radial-gradient(circle, var(--accent-glow) 0%, transparent 65%);
    top: 60%; left: 50%;
    transform: translate(-50%, -50%);
    pointer-events: none;
    opacity: .5;
}
body.login-page::after {
    content: '';
    position: fixed; inset: 0;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.018'/%3E%3C/svg%3E");
    pointer-events: none;
    opacity: 1;
    z-index: 0;
}

.login-page .card {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 18px;
    padding: 44px 38px;
    width: 100%;
    max-width: 420px;
    position: relative;
    z-index: 1;
    /* R5: shadow subtile premium SaaS plutot que les ombres profondes du dark mode */
    box-shadow:
        0 1px 3px rgba(0,0,0,.04),
        0 8px 24px rgba(0,0,0,.06),
        0 24px 64px rgba(0,0,0,.08);
}
.login-page .card::before {
    content: '';
    position: absolute; top: 0; left: 25%; right: 25%; height: 2px;
    background: linear-gradient(90deg, transparent, var(--accent), transparent);
    border-radius: 99px;
    opacity: .9;
}
.login-page .logo {
    font-family: 'Inter Tight','Inter',system-ui,sans-serif;
    font-size: 2rem;
    font-weight: 600;
    letter-spacing: -0.03em;
    color: var(--text);
    text-align: center;
    margin-bottom: 4px;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
}
.login-page .logo span { color: var(--accent); }
.login-page .goud-mark { color: var(--accent); }
.login-page .tagline {
    text-align: center;
    font-size: .75rem;
    color: var(--text-muted);
    letter-spacing: .08em;
    text-transform: uppercase;
    margin-bottom: 32px;
}
.login-page .tabs {
    display: flex;
    gap: 0;
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    margin-bottom: 24px;
}
.login-page .tab-btn {
    flex: 1;
    background: none;
    border: none;
    padding: 9px;
    font-family: 'Inter Tight','Inter',system-ui,sans-serif;
    font-size: .8rem;
    font-weight: 500;
    letter-spacing: .04em;
    cursor: pointer;
    color: var(--text-sec);
    transition: background .15s, color .15s;
}
.login-page .tab-btn.active {
    background: var(--accent-soft);
    color: var(--accent-b);
}
.login-page .form { display: flex; flex-direction: column; gap: 14px; }
.login-page .form.hidden { display: none; }
.login-page label {
    font-size: .68rem;
    font-weight: 600;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: .08em;
    display: block;
    margin-bottom: 5px;
}
.login-page input {
    width: 100%;
    background: var(--bg);
    border: 1px solid var(--border-input);
    border-radius: 10px;
    padding: 10px 13px;
    font-family: 'Inter Tight','Inter',system-ui,sans-serif;
    font-size: .9rem;
    color: var(--text);
    outline: none;
    transition: border-color .15s, box-shadow .15s;
}
.login-page input:focus {
    border-color: var(--accent);
    box-shadow: 0 0 0 3px var(--accent-soft);
}
.login-page input::placeholder { color: var(--text-muted); }
.login-page .submit-btn {
    background: var(--accent);
    color: #ffffff;
    border: none;
    border-radius: 11px;
    padding: 12px;
    font-family: 'Inter Tight','Inter',system-ui,sans-serif;
    font-size: .92rem;
    font-weight: 600;
    letter-spacing: -.005em;
    cursor: pointer;
    transition: background .15s, transform .1s, box-shadow .15s;
    margin-top: 4px;
}
.login-page .submit-btn:hover:not(:disabled) {
    background: var(--accent-b);
    transform: translateY(-1px);
    box-shadow: 0 8px 24px var(--accent-glow);
}
.login-page .submit-btn:disabled { opacity: .35; cursor: not-allowed; }
.login-page .divider {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 4px 0;
    font-size: .72rem;
    color: var(--text-muted);
    letter-spacing: .06em;
}
.login-page .divider::before, .login-page .divider::after {
    content: ''; flex: 1; height: 1px; background: var(--border);
}
.login-page .google-btn {
    width: 100%;
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 11px;
    padding: 10px 14px;
    font-family: 'Inter Tight','Inter',system-ui,sans-serif;
    font-size: .86rem;
    font-weight: 500;
    color: var(--text);
    cursor: pointer;
    transition: background .15s, border-color .15s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    text-decoration: none;
}
.login-page .google-btn:hover { background: var(--surface-2); border-color: var(--accent-glow); }
.login-page .google-btn svg { flex-shrink: 0; }
.login-page .alert {
    padding: 10px 13px;
    border-radius: 9px;
    font-size: .82rem;
    display: none;
}
.login-page .alert.error {
    background: var(--error-bg);
    color: var(--error);
    border: 1px solid oklch(80% 0.10 28);
    display: block;
}
.login-page .alert.success {
    background: oklch(94% 0.05 158);
    color: oklch(40% 0.13 158);
    border: 1px solid oklch(80% 0.10 158);
    display: block;
}
.login-page .spin {
    display: inline-block;
    width: 14px; height: 14px;
    border: 2px solid rgba(255,255,255,.35);
    border-top-color: #ffffff;
    border-radius: 50%;
    animation: loginSpin .7s linear infinite;
    vertical-align: middle;
}
@keyframes loginSpin { to { transform: rotate(360deg); } }
.login-page .url-error {
    background: var(--error-bg);
    color: var(--error);
    border: 1px solid oklch(80% 0.10 28);
    border-radius: 9px;
    padding: 10px 13px;
    font-size: .82rem;
    margin-bottom: 16px;
    display: none;
}
@media (max-width: 480px) {
    .login-page .card { padding: 28px 20px; border-radius: 16px; }
    .login-page .logo { font-size: 2rem; }
}

/* Refonte P4.4 : anti-zoom iOS sur les inputs des modales (Config, FAQ, etc.).
   Sans cela, taper dans une input <16px declenche un zoom auto Safari. */
@media (max-width: 768px) {
    .sp-modal-input,
    .apikey-input,
    .login-page input {
        font-size: 16px !important;
    }
}

/* Fix spacing modale Config v2 (PR7) — onglet Cles API.
   Sans cela, le <label OPENAI> apparaissait colle au <a>Obtenir une cle --></a>
   precedent (les deux sont inline par defaut dans la modale). */
.config-tab-panel .sp-modal-label {
    display: block;
    margin-top: 14px;
    margin-bottom: 4px;
}
.config-tab-panel .sp-modal-label:first-child {
    margin-top: 0;
}
.config-tab-panel .apikey-link {
    display: block;
    margin-top: 6px;
}

/* Bouton toggle du right panel - fixed top-right (symetrique du #sidebar-toggle a gauche) */
.right-panel-toggle {
    position: fixed;
    top: 14px;
    right: 14px;
    z-index: 100;
    width: 36px;
    height: 36px;
    padding: 6px;
    background: var(--bg-card, #1e1e1e);
    border: 1px solid var(--border, #2a2a2a);
    border-radius: 8px;
    color: var(--text-secondary, #a0a0a0);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: color 0.15s, border-color 0.15s, background 0.15s, right 0.25s ease;
}
.right-panel-toggle:hover {
    color: var(--accent);
    border-color: var(--accent-glow, var(--accent));
    background: var(--accent-soft, rgba(196, 136, 30, 0.08));
}
.right-panel-toggle.collapsed {
    /* Quand le panel est ferme, le bouton reste a droite (le panel a width:0). */
    right: 14px;
}

/* Mobile : right panel devient overlay full-height (pas full-width pour rester fonctionnel) */
@media (max-width: 768px) {
    .right-panel {
        position: fixed;
        top: 0;
        right: 0;
        height: 100vh;
        height: 100dvh;
        z-index: 90;
        box-shadow: -8px 0 24px rgba(0, 0, 0, 0.4);
    }
    .right-panel.collapsed {
        transform: translateX(100%);
        opacity: 1;
    }
    .right-panel-toggle {
        top: calc(8px + env(safe-area-inset-top, 0px));
        right: 10px;
        z-index: 150;
        width: 38px;
        height: 38px;
        padding: 6px;
        border-radius: 9px;
    }
}
