Elnor Repo Reader

Q_WORKSPACE_V4_alt1 (1).jsx

Design Mockups/Archived Mockups/DOC20 Mockups and Design/DOC20 Archived Mockups/DOC20 Workspace Redo/Q_WORKSPACE_V4_alt1 (1).jsx

Short text page 34ea8877adf4. Generated 2026-06-09T01:23:58.539Z from commit dbaa25962edc11ab30e8d4ca1715f9ae5bf77331. Worktree: clean.

Open readable HTML page · Open raw txt · Open path URL

ELNOR REPO READER TEXT MIRROR
Original path: Design Mockups/Archived Mockups/DOC20 Mockups and Design/DOC20 Archived Mockups/DOC20 Workspace Redo/Q_WORKSPACE_V4_alt1 (1).jsx
Source repo: /Users/OpenClaw1/Elnor/Elnor Specs
Git branch: main
Git commit: dbaa25962edc11ab30e8d4ca1715f9ae5bf77331
Generated: 2026-06-09T01:23:58.539Z

---

import { useState, useRef, useCallback, useEffect } from "react";
// ═══ TOKENS + ICONS + COMPONENTS — verbatim from Q_NOTES_FULL ═══
const font={sans:"'Söhne','Helvetica Neue',-apple-system,BlinkMacSystemFont,sans-serif"};
const R={sm:"6px",md:"10px",full:"9999px"};
const c={bgApp:"#F8F8F6",bgPanel:"#FFFFFF",bgPanelAlt:"#F9FAFB",bgCard:"#FFFFFF",bgInput:"#EFF1F3",bgSidebar:"#131820",textPri:"#1A1D21",textSec:"#5E6570",textTer:"#8B919A",accentBtn:"#31588c",warn:"#D97706",error:"#B04040",border:"#E0E2E5",borderLight:"#ECEEF0",green:"#2E8B57",agentAv:"#a1a7aa",borderDark:"#263040"};
const Ic=({d,size=18,color,sw=1.75})=><svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color||"currentColor"} strokeWidth={sw} strokeLinecap="round" strokeLinejoin="round"><path d={d}/></svg>;
const I={Plus:p=><Ic {...p} d="M12 5v14 M5 12h14"/>,X:p=><Ic {...p} d="M18 6L6 18 M6 6l12 12"/>,Check:p=><Ic {...p} d="M20 6L9 17l-5-5"/>,Pin:p=><Ic {...p} d="M12 17v5 M9 2l.5 5L7 10l1.5 3h7L17 10l-2.5-3L15 2"/>,Spark:p=><Ic {...p} d="M12 2l1.5 4.5L18 8l-4.5 1.5L12 14l-1.5-4.5L6 8l4.5-1.5L12 2z M12 14l1 3 3 1-3 1-1 3-1-3-3-1 3-1 1-3z"/>,MsgCircle:p=><Ic {...p} d="M21 11.5a8.38 8.38 0 01-.9 3.8 8.5 8.5 0 01-7.6 4.7 8.38 8.38 0 01-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 01-.9-3.8 8.5 8.5 0 014.7-7.6 8.38 8.38 0 013.8-.9h.5a8.48 8.48 0 018 8v.5z"/>,ChevD:p=><Ic {...p} d="M6 9l6 6 6-6"/>,ChevR:p=><Ic {...p} d="M9 18l6-6-6-6"/>,Search:p=><Ic {...p} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>,Maximize:p=><Ic {...p} d="M8 3H5a2 2 0 00-2 2v3m18 0V5a2 2 0 00-2-2h-3m0 18h3a2 2 0 002-2v-3M3 16v3a2 2 0 002 2h3"/>,Save:p=><Ic {...p} d="M19 21H5a2 2 0 01-2-2V5a2 2 0 012-2h11l5 5v11a2 2 0 01-2 2z M17 21v-8H7v8 M7 3v5h8"/>,Copy:p=><Ic {...p} d="M20 9h-9a2 2 0 00-2 2v9a2 2 0 002 2h9a2 2 0 002-2v-9a2 2 0 00-2-2z M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/>,Link:p=><Ic {...p} d="M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71 M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71"/>,Eye:p=><Ic {...p} d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z M12 9a3 3 0 100 6 3 3 0 000-6z"/>,Edit:p=><Ic {...p} d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7 M18.5 2.5a2.12 2.12 0 013 3L12 15l-4 1 1-4 9.5-9.5z"/>,Undo:p=><Ic {...p} d="M3 7v6h6 M21 17a9 9 0 00-9-9 9 9 0 00-6.69 3L3 13"/>,Redo:p=><Ic {...p} d="M21 7v6h-6 M3 17a9 9 0 019-9 9 9 0 016.69 3L21 13"/>,Folder:p=><Ic {...p} d="M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h9a2 2 0 012 2v11z"/>,FileText:p=><Ic {...p} d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z M14 2v6h6 M16 13H8 M16 17H8"/>,Trash:p=><Ic {...p} d="M3 6h18 M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2"/>,Archive:p=><Ic {...p} d="M21 8v13H3V8 M1 3h22v5H1z M10 12h4"/>,Settings:p=><Ic {...p} d="M12 15a3 3 0 100-6 3 3 0 000 6z"/>,List:p=><Ic {...p} d="M8 6h13 M8 12h13 M8 18h13 M3 6h.01 M3 12h.01 M3 18h.01"/>,Bell:p=><Ic {...p} d="M18 8A6 6 0 006 8c0 7-3 9-3 9h18s-3-2-3-9 M13.73 21a2 2 0 01-3.46 0"/>,Calendar:p=><Ic {...p} d="M19 4H5a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2V6a2 2 0 00-2-2z M16 2v4 M8 2v4 M3 10h18"/>,Mail:p=><Ic {...p} d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z M22 6l-10 7L2 6"/>,Zap:p=><Ic {...p} d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/>,Sun:p=><Ic {...p} d="M12 17a5 5 0 100-10 5 5 0 000 10z M12 1v2 M12 21v2 M4.22 4.22l1.42 1.42 M18.36 18.36l1.42 1.42 M1 12h2 M21 12h2 M4.22 19.78l1.42-1.42 M18.36 5.64l1.42-1.42"/>,};
const Dot=({color,size=8})=><span style={{display:"inline-flex",width:size,height:size,flexShrink:0}}><span style={{display:"block",width:size,height:size,borderRadius:"50%",backgroundColor:color}}/></span>;
const Btn=({children,primary,ghost,small,onClick,disabled,style:s})=><button onClick={disabled?undefined:onClick} style={{padding:small?"2px 8px":"5px 14px",borderRadius:R.sm,border:primary?"none":ghost?`1.5px solid ${c.border}`:`1px solid ${c.border}`,backgroundColor:primary?(disabled?c.accentBtn+"60":c.accentBtn):"transparent",color:primary?"#fff":c.textSec,fontSize:small?11:12.5,fontWeight:primary?550:450,cursor:disabled?"not-allowed":"pointer",fontFamily:font.sans,display:"flex",alignItems:"center",gap:5,height:small?22:28,opacity:disabled?.5:1,...s}}>{children}</button>;
const Av=({letter,color,size=20})=><div style={{width:size,height:size,borderRadius:R.sm,backgroundColor:color||c.accentBtn,color:"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:size*.42,fontWeight:700,flexShrink:0}}>{letter}</div>;
const TBtn=({icon,title,active,onClick,label,dropdown})=><button onClick={onClick} title={title} style={{padding:label?"3px 8px":"3px 6px",borderRadius:R.sm,border:`1px solid ${active?c.accentBtn+"40":c.borderLight}`,backgroundColor:active?c.accentBtn+"08":"transparent",cursor:"pointer",display:"flex",alignItems:"center",gap:4,color:active?c.accentBtn:c.textSec,fontFamily:font.sans,fontSize:10.5,fontWeight:active?600:450,height:26}} onMouseEnter={e=>{if(!active)e.currentTarget.style.backgroundColor=c.bgInput}} onMouseLeave={e=>{e.currentTarget.style.backgroundColor=active?c.accentBtn+"08":"transparent"}}>{icon}{label&&<span>{label}</span>}{dropdown&&<I.ChevD size={8}/>}</button>;
const Sep=()=><div style={{width:1,height:18,backgroundColor:c.borderLight,margin:"0 3px",flexShrink:0}}/>;
const Toast=({msg,onDone})=>{useEffect(()=>{const t=setTimeout(onDone,2200);return()=>clearTimeout(t)},[onDone]);return <div style={{position:"fixed",bottom:24,left:"50%",transform:"translateX(-50%)",backgroundColor:c.textPri,color:"#fff",padding:"8px 18px",borderRadius:R.sm,fontSize:12,fontWeight:500,fontFamily:font.sans,zIndex:9999,boxShadow:"0 4px 16px rgba(0,0,0,0.2)"}}>{msg}</div>};
const DItem=({children,onClick,active})=><button onClick={onClick} style={{display:"flex",alignItems:"center",gap:6,width:"100%",padding:"6px 10px",border:"none",cursor:"pointer",backgroundColor:active?c.accentBtn+"08":"transparent",fontSize:11.5,color:c.textPri,textAlign:"left",borderRadius:R.sm,fontFamily:font.sans,fontWeight:active?600:400}} onMouseEnter={e=>{if(!active)e.currentTarget.style.backgroundColor=c.bgInput}} onMouseLeave={e=>{if(!active)e.currentTarget.style.backgroundColor=active?c.accentBtn+"08":"transparent"}}>{children}</button>;

// ═══ DATA ═══
const tcColors={You:{del:c.accentBtn,ins:c.accentBtn},Elnor:{del:"#B04040",ins:"#2E8B57"}};
const agents=[{name:"Elnor",color:c.agentAv,letter:"E"},{name:"Scout",color:"#5B5F97",letter:"S"}];

// To-Do items (rendered as checkboxes in the note)
const initTasks=[
  {id:"t1",text:"Draft expert disclosure for Christensen",done:false,pri:1,due:"Apr 4",link:"Expert Depo Prep",sub:[{id:"s1",text:"Pull Christensen CV",done:true},{id:"s2",text:"List opinions to be offered",done:false},{id:"s3",text:"Identify documents reviewed",done:false}]},
  {id:"t2",text:"Review Henderson MSJ brief — Elnor's tracked changes",done:false,pri:1,due:"Mar 20",link:"Henderson Discovery Priorities"},
  {id:"t3",text:"Respond to Sparacino re: Narayanan agreement",done:false,pri:2,due:"Mar 19"},
  {id:"t4",text:"Follow up: opposing counsel on discovery extension",done:false,pri:2,due:"Mar 19"},
  {id:"t5",text:"Review Quark patent analysis — new filings",done:false,pri:3,link:"Quark Patent Analysis"},
  {id:"t6",text:"File Folb trial exhibit list",done:true,pri:2,due:"Mar 17"},
];

// Inline thread data
const initThreads=[
  {id:"th1",collapsed:false,contextQuote:"opposing counsel on discovery extension",messages:[
    {id:"m1",author:"You",color:c.accentBtn,body:"@Elnor draft a response declining the extension, cite the scheduling order deadline and the prejudice from further delay",time:"45m ago"},
    {id:"m2",author:"Elnor",color:c.agentAv,body:"Draft ready. Key points: scheduling order set discovery cutoff March 28, extension would prejudice plaintiff's expert disclosure timeline, defendant has had 4 months to complete discovery. I've included the exact order language. Want me to open it in a new note or paste below?",time:"40m ago"},
  ]},
];

// ═══════════════════════════════════════════
export default function WorkspaceV4Alt1(){
  const idC=useRef(300);const nid=()=>"x"+(++idC.current);
  // Panel toggles
  const [browserOpen,setBrowserOpen]=useState(true);
  const [noteListOpen,setNoteListOpen]=useState(true);
  const [commentsOpen,setCommentsOpen]=useState(false);
  const [rightTab,setRightTab]=useState("comments");
  // Editor
  const [bubbleMenu,setBubbleMenu]=useState(null);
  const [findBar,setFindBar]=useState(false);
  const [fullScreen,setFullScreen]=useState(false);
  const [openDrop,setOpenDrop]=useState(null);
  const [toast,setToast]=useState(null);
  const [agentIdx]=useState(0);
  // Today note
  const [tasks,setTasks]=useState(initTasks);
  const [expandedTask,setExpandedTask]=useState(null);
  const [threads,setThreads]=useState(initThreads);
  const [threadReplyId,setThreadReplyId]=useState(null);
  const [threadReplyText,setThreadReplyText]=useState("");
  const [briefSections,setBriefSections]=useState({elnor:true,calendar:true,email:true,system:true,news:false});

  const editorRef=useRef(null);
  const agent=agents[agentIdx];
  const flash=msg=>setToast(msg);
  const activeTasks=tasks.filter(t=>!t.done);
  const doneTasks=tasks.filter(t=>t.done);
  const priColor=p=>p===1?c.error:p===2?c.warn:c.accentBtn;
  const priLabel=p=>p===1?"P1":p===2?"P2":"P3";
  const toggleTask=id=>setTasks(p=>p.map(t=>t.id===id?{...t,done:!t.done}:t));
  const toggleSub=(pid,sid)=>setTasks(p=>p.map(t=>t.id===pid?{...t,sub:t.sub.map(s=>s.id===sid?{...s,done:!s.done}:s)}:t));
  const toggleThread=id=>setThreads(p=>p.map(t=>t.id===id?{...t,collapsed:!t.collapsed}:t));
  const addThreadReply=(tid)=>{if(!threadReplyText.trim())return;setThreads(p=>p.map(t=>t.id===tid?{...t,messages:[...t.messages,{id:nid(),author:"You",color:c.accentBtn,body:threadReplyText.trim(),time:"just now"}]}:t));setThreadReplyId(null);setThreadReplyText("")};
  const toggleBrief=key=>setBriefSections(p=>({...p,[key]:!p[key]}));

  // Bubble menu (from Q_NOTES_FULL)
  const handleMouseUp=useCallback(e=>{if(e.target.closest("[data-bubble]"))return;const sel=window.getSelection();if(!sel||sel.isCollapsed||!sel.toString().trim()){setBubbleMenu(null);return}const text=sel.toString().trim();if(text.length<3)return;const rect=sel.getRangeAt(0).getBoundingClientRect();const er=editorRef.current?.getBoundingClientRect();if(!er)return;setBubbleMenu({x:rect.left-er.left+rect.width/2,y:rect.top-er.top-8,text})},[]);
  const dismissBubble=()=>{setBubbleMenu(null);window.getSelection()?.removeAllRanges()};

  // ─── Inline Thread Component ───
  const InlineThread=({th})=>{
    if(th.collapsed) return (
      <div onClick={()=>toggleThread(th.id)} style={{margin:"8px 0",padding:"7px 12px",borderRadius:R.sm,border:`1px solid ${c.borderLight}`,backgroundColor:c.bgPanelAlt,cursor:"pointer",display:"flex",alignItems:"center",gap:8}} onMouseEnter={e=>e.currentTarget.style.borderColor=c.accentBtn+"40"} onMouseLeave={e=>e.currentTarget.style.borderColor=c.borderLight}>
        <I.ChevR size={10} color={c.textTer}/><Av letter="E" color={c.agentAv} size={16}/>
        <span style={{fontSize:11.5,color:c.textSec,flex:1}}><strong style={{color:c.agentAv}}>Elnor</strong> · {th.messages.length} messages</span>
        <span style={{fontSize:9.5,color:c.textTer}}>{th.messages[th.messages.length-1]?.time}</span>
      </div>
    );
    return (
      <div style={{margin:"10px 0",borderRadius:R.sm,border:`1px solid ${c.accentBtn}20`,backgroundColor:c.accentBtn+"03",overflow:"hidden"}}>
        <div onClick={()=>toggleThread(th.id)} style={{padding:"5px 12px",display:"flex",alignItems:"center",gap:6,cursor:"pointer",backgroundColor:c.accentBtn+"06",borderBottom:`1px solid ${c.accentBtn}15`}}>
          <I.ChevD size={10} color={c.accentBtn}/><I.MsgCircle size={11} color={c.accentBtn}/>
          <span style={{fontSize:10.5,fontWeight:600,color:c.accentBtn,flex:1}}>Thread · {th.messages.length}</span>
          {th.contextQuote&&<span style={{fontSize:9,color:c.textTer,fontStyle:"italic",maxWidth:200,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}>re: "{th.contextQuote}"</span>}
        </div>
        {th.messages.map((msg,i)=><div key={msg.id} style={{padding:"7px 14px",borderBottom:i<th.messages.length-1?`1px solid ${c.borderLight}`:"none",backgroundColor:msg.author==="You"?"transparent":c.agentAv+"06"}}>
          <div style={{display:"flex",alignItems:"center",gap:6,marginBottom:3}}>
            <Av letter={msg.author[0]} color={msg.color} size={16}/>
            <span style={{fontSize:11,fontWeight:650,color:msg.color}}>{msg.author}</span>
            <span style={{fontSize:9,color:c.textTer}}>{msg.time}</span>
            {msg.author==="You"&&<><span style={{fontSize:9,color:c.textTer,cursor:"pointer",marginLeft:"auto"}} onClick={e=>{e.stopPropagation();flash("Edit…")}}>edit</span><span style={{fontSize:9,color:c.error+"80",cursor:"pointer"}} onClick={e=>{e.stopPropagation();flash("Delete…")}}>delete</span></>}
          </div>
          <div style={{fontSize:12.5,lineHeight:1.55,color:c.textSec,paddingLeft:22}}>{msg.body}</div>
        </div>)}
        {threadReplyId===th.id?<div style={{padding:"7px 14px",borderTop:`1px solid ${c.borderLight}`,backgroundColor:c.bgPanelAlt}}>
          <textarea value={threadReplyText} onChange={e=>setThreadReplyText(e.target.value)} placeholder="Reply… (Enter to send, @Elnor to mention)" autoFocus onKeyDown={e=>{if(e.key==="Enter"&&!e.shiftKey){e.preventDefault();addThreadReply(th.id)}}} style={{width:"100%",padding:"6px 8px",borderRadius:R.sm,border:`1px solid ${c.border}`,fontSize:12,fontFamily:font.sans,outline:"none",minHeight:36,resize:"vertical"}}/>
          <div style={{display:"flex",gap:4,marginTop:4}}><Btn small primary onClick={()=>addThreadReply(th.id)} disabled={!threadReplyText.trim()}>Send</Btn><Btn small ghost onClick={()=>{setThreadReplyId(null);setThreadReplyText("")}}>Cancel</Btn></div>
        </div>
        :<div style={{padding:"5px 14px",borderTop:`1px solid ${c.borderLight}`,backgroundColor:c.bgPanelAlt}}>
          <div onClick={()=>{setThreadReplyId(th.id);setThreadReplyText("")}} style={{display:"flex",alignItems:"center",gap:5,padding:"4px 8px",borderRadius:R.sm,border:`1px solid ${c.border}`,backgroundColor:c.bgCard,cursor:"text"}}>
            <I.Plus size={10} color={c.textTer}/><span style={{fontSize:11,color:c.textTer}}>Reply… (@Elnor)</span>
          </div>
        </div>}
      </div>
    );
  };

  // ─── Brief Section ───
  const BriefBlock=({sectionKey,icon,title,items})=>{
    if(!briefSections[sectionKey])return null;
    return <div style={{marginBottom:6}}>
      <div style={{display:"flex",alignItems:"center",gap:6,marginBottom:4}}>
        {icon}<span style={{fontSize:12,fontWeight:650,color:c.textSec}}>{title}</span>
        <span style={{fontSize:9.5,color:c.textTer}}>({items.length})</span>
      </div>
      {items.map((item,i)=><div key={i} style={{display:"flex",alignItems:"flex-start",gap:6,padding:"3px 0 3px 20px"}}>
        {item.accent&&<Dot color={item.accent} size={5}/>}
        <span style={{flex:1,fontSize:12.5,color:c.textSec,lineHeight:1.45}}>{item.text}</span>
        <span style={{fontSize:9.5,color:c.textTer,flexShrink:0,whiteSpace:"nowrap"}}>{item.time}</span>
      </div>)}
    </div>;
  };

  return (
    <div style={{display:"flex",width:"100%",height:"100vh",fontFamily:font.sans,color:c.textPri,backgroundColor:c.bgApp}} onClick={()=>setOpenDrop(null)}>
      <style>{`*{box-sizing:border-box;margin:0;padding:0}::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:transparent;border-radius:2px}*:hover::-webkit-scrollbar-thumb{background:#d1d5db}::selection{background:${c.accentBtn}22}`}</style>
      {toast&&<Toast msg={toast} onDone={()=>setToast(null)}/>}

      {/* ═══ SIDEBAR RAIL ═══ */}
      <div style={{width:44,flexShrink:0,backgroundColor:c.bgSidebar,borderRight:`1px solid ${c.borderDark}`,display:"flex",flexDirection:"column",alignItems:"center",paddingTop:10,gap:6}}>
        <div style={{width:26,height:26,borderRadius:R.sm,backgroundColor:c.accentBtn,color:"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:11,fontWeight:700,marginBottom:6}}>Q</div>
        <button onClick={()=>setBrowserOpen(!browserOpen)} title="Browser (⌘B)" style={{width:28,height:28,borderRadius:R.sm,border:"none",cursor:"pointer",backgroundColor:browserOpen?"#ffffff18":"transparent",color:browserOpen?"#fff":"#777",display:"flex",alignItems:"center",justifyContent:"center"}}><I.Search size={15}/></button>
        <button onClick={()=>setNoteListOpen(!noteListOpen)} title="Notes sidebar" style={{width:28,height:28,borderRadius:R.sm,border:"none",cursor:"pointer",backgroundColor:noteListOpen?"#ffffff18":"transparent",color:noteListOpen?"#fff":"#777",display:"flex",alignItems:"center",justifyContent:"center"}}><I.FileText size={15}/></button>
        <button onClick={()=>setCommentsOpen(!commentsOpen)} title="Comments" style={{width:28,height:28,borderRadius:R.sm,border:"none",cursor:"pointer",backgroundColor:commentsOpen?"#ffffff18":"transparent",color:commentsOpen?"#fff":"#777",display:"flex",alignItems:"center",justifyContent:"center"}}><I.MsgCircle size={15}/></button>
      </div>

      {/* ═══ BROWSER — placeholder ═══ */}
      {browserOpen&&<div style={{width:260,flexShrink:0,backgroundColor:c.bgPanel,borderRight:`1px solid ${c.border}`,display:"flex",flexDirection:"column"}}>
        <div style={{padding:"10px 12px",borderBottom:`1px solid ${c.borderLight}`,display:"flex",alignItems:"center",justifyContent:"space-between"}}>
          <span style={{fontSize:12,fontWeight:650}}>Browser</span>
          <button onClick={()=>setBrowserOpen(false)} style={{border:"none",background:"none",cursor:"pointer",display:"flex",color:c.textTer}}><I.X size={12}/></button>
        </div>
        <div style={{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:20}}>
          <div style={{textAlign:"center",fontSize:11,color:c.textTer,fontStyle:"italic",lineHeight:1.6}}>
            Q_BROWSER_R13.jsx<br/>plugs in here verbatim<br/><br/>
            <span style={{fontSize:10}}>260px · collapsible</span>
          </div>
        </div>
      </div>}

      {/* ═══ NOTES SIDEBAR — placeholder with To-Do Lists folder ═══ */}
      {noteListOpen&&!fullScreen&&<div style={{width:220,flexShrink:0,backgroundColor:c.bgPanel,borderRight:`1px solid ${c.border}`,display:"flex",flexDirection:"column"}}>
        <div style={{padding:"8px 10px",borderBottom:`1px solid ${c.borderLight}`,display:"flex",alignItems:"center",justifyContent:"space-between"}}>
          <span style={{fontSize:12.5,fontWeight:650}}>Notes</span>
          <button onClick={()=>setNoteListOpen(false)} style={{border:"none",background:"none",cursor:"pointer",display:"flex",color:c.textTer}}><I.X size={12}/></button>
        </div>
        {/* Simulated note list showing Today pinned */}
        <div style={{flex:1,overflowY:"auto"}}>
          {/* Pinned Today */}
          <div style={{padding:"7px 10px",borderBottom:`1px solid ${c.borderLight}`,borderLeft:`2px solid ${c.accentBtn}`,backgroundColor:c.accentBtn+"06"}}>
            <div style={{display:"flex",alignItems:"center",gap:3,marginBottom:2}}><I.Pin size={8} color={c.warn}/><I.Sun size={10} color={c.warn}/><span style={{fontSize:12,fontWeight:600}}>Today — Wednesday, Mar 18</span></div>
            <div style={{fontSize:9.5,color:c.textTer}}>just now · {activeTasks.length} tasks · 4 Elnor items</div>
          </div>
          {/* To-Do Lists folder */}
          <div style={{padding:"4px 8px",borderBottom:`1px solid ${c.borderLight}`,backgroundColor:c.bgPanelAlt}}>
            <div style={{display:"flex",alignItems:"center",gap:4}}><I.ChevD size={9} color={c.textTer}/><I.Folder size={11} color={c.warn}/><span style={{fontSize:11.5,fontWeight:600}}>To-Do Lists</span></div>
          </div>
          <div style={{padding:"6px 10px 6px 28px",borderBottom:`1px solid ${c.borderLight}`,cursor:"pointer"}} onMouseEnter={e=>e.currentTarget.style.backgroundColor=c.bgInput} onMouseLeave={e=>e.currentTarget.style.backgroundColor="transparent"}>
            <div style={{fontSize:11.5,fontWeight:450}}>Henderson Tasks</div><div style={{fontSize:9.5,color:c.textTer}}>1d · 8 items</div>
          </div>
          <div style={{padding:"6px 10px 6px 28px",borderBottom:`1px solid ${c.borderLight}`,cursor:"pointer"}} onMouseEnter={e=>e.currentTarget.style.backgroundColor=c.bgInput} onMouseLeave={e=>e.currentTarget.style.backgroundColor="transparent"}>
            <div style={{fontSize:11.5,fontWeight:450}}>Weekly Review</div><div style={{fontSize:9.5,color:c.textTer}}>3d · 3 items</div>
          </div>
          {/* Daily Notes folder */}
          <div style={{padding:"4px 8px",borderBottom:`1px solid ${c.borderLight}`,backgroundColor:c.bgPanelAlt}}>
            <div style={{display:"flex",alignItems:"center",gap:4}}><I.ChevR size={9} color={c.textTer}/><I.Folder size={11} color={c.textTer}/><span style={{fontSize:11.5,fontWeight:600}}>Daily Notes</span><span style={{fontSize:9,color:c.textTer}}>14</span></div>
          </div>
          {/* Regular folders/notes */}
          <div style={{padding:"4px 8px",borderBottom:`1px solid ${c.borderLight}`,backgroundColor:c.bgPanelAlt}}>
            <div style={{display:"flex",alignItems:"center",gap:4}}><I.ChevD size={9} color={c.textTer}/><I.Folder size={11} color={c.warn}/><span style={{fontSize:11.5,fontWeight:600}}>Henderson Case</span></div>
          </div>
          {["Henderson Discovery Priorities","Judge Chen Conference Notes","Privilege Review Checklist"].map((n,i)=><div key={i} style={{padding:"6px 10px 6px 28px",borderBottom:`1px solid ${c.borderLight}`,cursor:"pointer"}} onMouseEnter={e=>e.currentTarget.style.backgroundColor=c.bgInput} onMouseLeave={e=>e.currentTarget.style.backgroundColor="transparent"}>
            <div style={{fontSize:11.5,fontWeight:450}}>{n}</div><div style={{fontSize:9.5,color:c.textTer}}>{["2h","3d","1d"][i]}{i===0&&" · 💬2"}{i===0&&<span style={{color:c.green}}> · ✏2</span>}</div>
          </div>)}
          <div style={{padding:"4px 8px",borderBottom:`1px solid ${c.borderLight}`,backgroundColor:c.bgPanelAlt}}>
            <div style={{display:"flex",alignItems:"center",gap:4}}><I.ChevR size={9} color={c.textTer}/><I.Folder size={11} color={c.warn}/><span style={{fontSize:11.5,fontWeight:600}}>Quark Patents</span></div>
          </div>
        </div>
        <div style={{padding:"3px 8px",borderTop:`1px solid ${c.borderLight}`,fontSize:9,color:c.textTer}}>12 notes · Modified</div>
      </div>}

      {/* ═══ MAIN WORKSPACE ═══ */}
      <div style={{flex:1,display:"flex",flexDirection:"column",overflow:"hidden"}}>
        {/* ─── Full toolbar (from Q_NOTES_FULL) ─── */}
        <div style={{display:"flex",alignItems:"center",gap:3,padding:"4px 10px",borderBottom:`1px solid ${c.border}`,backgroundColor:c.bgPanel,flexWrap:"wrap"}}>
          <select style={{padding:"2px 4px",borderRadius:3,border:`1px solid ${c.borderLight}`,fontSize:10.5,fontFamily:font.sans,color:c.textSec,backgroundColor:"transparent",height:24}}><option>Paragraph</option><option>H1</option><option>H2</option></select>
          <TBtn icon={<span style={{fontWeight:700,fontSize:12}}>B</span>}/><TBtn icon={<span style={{fontStyle:"italic",fontSize:12}}>I</span>}/><TBtn icon={<span style={{textDecoration:"underline",fontSize:12}}>U</span>}/>
          <Sep/><TBtn icon={<I.Undo size={13}/>}/><TBtn icon={<I.Redo size={13}/>}/>
          <Sep/><TBtn icon={<I.Copy size={13}/>} title="Copy all" onClick={()=>flash("Copied")}/>
          <div style={{position:"relative"}}><TBtn icon={<I.Save size={13}/>} label="Save As…" dropdown onClick={e=>{e.stopPropagation();setOpenDrop(openDrop==="save"?null:"save")}}/>
            {openDrop==="save"&&<div onClick={e=>e.stopPropagation()} style={{position:"absolute",top:28,left:0,backgroundColor:c.bgCard,border:`1px solid ${c.border}`,borderRadius:R.sm,boxShadow:"0 8px 24px rgba(0,0,0,0.12)",zIndex:999,minWidth:180,padding:4}}>
              <DItem onClick={()=>{flash("Export MD");setOpenDrop(null)}}>Export as Markdown</DItem>
              <DItem onClick={()=>{flash("Export DOCX");setOpenDrop(null)}}>Export as DOCX</DItem>
              <DItem onClick={()=>{flash("Export PDF");setOpenDrop(null)}}>Export as PDF</DItem>
              <div style={{borderTop:`1px solid ${c.borderLight}`,margin:"2px 0"}}/>
              <DItem onClick={()=>{flash("Save as Prompt");setOpenDrop(null)}}>Save as Prompt</DItem>
            </div>}</div>
          <TBtn icon={<I.Link size={13}/>} label="Ref" onClick={()=>flash("Ref copied")}/>
          <Sep/><TBtn icon={<I.Search size={13}/>} active={findBar} onClick={()=>setFindBar(!findBar)}/><TBtn icon={<I.Maximize size={13}/>} active={fullScreen} onClick={()=>setFullScreen(!fullScreen)}/>
          <Sep/><TBtn icon={<I.MsgCircle size={13}/>} label="2" active={commentsOpen&&rightTab==="comments"} onClick={()=>{if(commentsOpen&&rightTab==="comments")setCommentsOpen(false);else{setCommentsOpen(true);setRightTab("comments")}}}/>
          <Sep/><TBtn icon={<I.Eye size={13}/>} label="Markup" active/>
          <div style={{position:"relative"}}><TBtn icon={<I.Edit size={13}/>} label="0" dropdown onClick={e=>{e.stopPropagation();setOpenDrop(openDrop==="review"?null:"review")}}/>
            {openDrop==="review"&&<div onClick={e=>e.stopPropagation()} style={{position:"absolute",top:28,right:0,backgroundColor:c.bgCard,border:`1px solid ${c.border}`,borderRadius:R.sm,boxShadow:"0 8px 24px rgba(0,0,0,0.12)",zIndex:999,minWidth:160,padding:4}}>
              <DItem onClick={()=>{flash("Accept All");setOpenDrop(null)}}>✓ Accept All</DItem>
              <DItem onClick={()=>{flash("Reject All");setOpenDrop(null)}}>✗ Reject All</DItem>
            </div>}</div>
          <div style={{flex:1}}/><span style={{fontSize:10,color:c.green,fontWeight:500}}>Saved just now</span>
          <Sep/><button onClick={()=>{if(commentsOpen&&rightTab==="send")setCommentsOpen(false);else{setCommentsOpen(true);setRightTab("send")}}} style={{padding:"3px 10px",borderRadius:R.sm,border:`1px solid ${c.accentBtn}40`,backgroundColor:(commentsOpen&&rightTab==="send")?c.accentBtn:c.accentBtn+"08",cursor:"pointer",display:"flex",alignItems:"center",gap:4,color:(commentsOpen&&rightTab==="send")?"#fff":c.accentBtn,fontFamily:font.sans,fontSize:10.5,fontWeight:600,height:26}}><I.Spark size={12}/>Send to Agent</button>
        </div>
        {findBar&&<div style={{display:"flex",alignItems:"center",gap:6,padding:"5px 12px",borderBottom:`1px solid ${c.borderLight}`,backgroundColor:c.bgPanelAlt}}><I.Search size={12} color={c.textTer}/><input placeholder="Find in note…" autoFocus style={{flex:1,border:"none",backgroundColor:"transparent",fontSize:12,fontFamily:font.sans,outline:"none",maxWidth:250}}/><span style={{fontSize:10,color:c.textTer}}>0/0</span><button onClick={()=>setFindBar(false)} style={{padding:2,border:"none",cursor:"pointer",backgroundColor:"transparent",display:"flex",color:c.textTer}}><I.X size={12}/></button></div>}

        {/* ─── CONTENT ─── */}
        <div style={{flex:1,display:"flex",overflow:"hidden"}}>

          {/* ═══ TODAY NOTE (the main editor content) ═══ */}
          <div style={{flex:1,display:"flex",flexDirection:"column",overflow:"hidden",minWidth:0}}>
            <div ref={editorRef} style={{flex:1,overflowY:"auto",padding:"20px 32px 60px",position:"relative",userSelect:"text"}} onMouseUp={handleMouseUp} onMouseDown={e=>{if(bubbleMenu&&!e.target.closest("[data-bubble]"))setBubbleMenu(null)}}>

              {/* Title */}
              <div style={{display:"flex",alignItems:"center",gap:8,marginBottom:4}}>
                <I.Sun size={20} color={c.warn}/>
                <div style={{fontSize:22,fontWeight:700,color:c.textPri}} contentEditable suppressContentEditableWarning>Today — Wednesday, March 18</div>
              </div>
              <div style={{fontSize:10.5,color:c.textTer,marginBottom:20,display:"flex",alignItems:"center",gap:4}}>
                <I.Pin size={9} color={c.warn}/> Pinned · Auto-generated · {activeTasks.length} open tasks · Configurable sections
                <button onClick={()=>flash("Configure Today template…")} style={{border:`1px solid ${c.borderLight}`,borderRadius:3,backgroundColor:"transparent",cursor:"pointer",padding:"1px 6px",fontSize:9,color:c.textTer,fontFamily:font.sans,display:"flex",alignItems:"center",gap:2,marginLeft:4}}><I.Settings size={9}/>Configure</button>
              </div>

              {/* ═══ TO DO SECTION ═══ */}
              <h2 style={{fontSize:16,fontWeight:700,color:c.textPri,margin:"0 0 10px",paddingBottom:5,borderBottom:`1px solid ${c.borderLight}`}}>To Do</h2>

              {activeTasks.map(task=><div key={task.id} style={{marginBottom:4}}>
                <div style={{display:"flex",alignItems:"flex-start",gap:8,padding:"5px 0",cursor:"pointer"}} onClick={()=>setExpandedTask(expandedTask===task.id?null:task.id)}>
                  <input type="checkbox" checked={false} onChange={()=>toggleTask(task.id)} onClick={e=>e.stopPropagation()} style={{width:16,height:16,accentColor:c.accentBtn,marginTop:1,flexShrink:0}}/>
                  <div style={{flex:1,minWidth:0}}>
                    <span style={{fontSize:14,lineHeight:1.5,color:c.textPri}}>{task.text}</span>
                    <div style={{display:"flex",gap:6,marginTop:2,alignItems:"center",flexWrap:"wrap"}}>
                      <span style={{fontSize:9.5,fontWeight:700,color:priColor(task.pri),border:`1px solid ${priColor(task.pri)}35`,borderRadius:3,padding:"0 4px"}}>{priLabel(task.pri)}</span>
                      {task.due&&<span style={{fontSize:10.5,color:c.textTer}}>{task.due}</span>}
                      {task.link&&<span style={{fontSize:10.5,color:c.accentBtn,cursor:"pointer",display:"flex",alignItems:"center",gap:2}} onClick={e=>{e.stopPropagation();flash(`Opening "${task.link}"`)}}><I.Link size={9}/>{task.link}</span>}
                      {task.sub&&task.sub.length>0&&<span style={{fontSize:10.5,color:c.textTer}}>{task.sub.filter(s=>s.done).length}/{task.sub.length}</span>}
                    </div>
                  </div>
                </div>
                {/* Subtasks */}
                {expandedTask===task.id&&task.sub&&task.sub.length>0&&<div style={{padding:"2px 0 6px 28px"}}>
                  {task.sub.map(s=><div key={s.id} style={{display:"flex",alignItems:"center",gap:6,padding:"3px 0"}}>
                    <input type="checkbox" checked={s.done} onChange={()=>toggleSub(task.id,s.id)} style={{width:14,height:14,accentColor:c.accentBtn}}/>
                    <span style={{fontSize:13,color:s.done?c.textTer:c.textSec,textDecoration:s.done?"line-through":"none"}}>{s.text}</span>
                  </div>)}
                  <div style={{display:"flex",gap:4,marginTop:4}}>
                    <Btn small ghost onClick={()=>flash("@Elnor…")}><I.Spark size={9} color={c.agentAv}/>@Elnor</Btn>
                    <Btn small ghost><I.Plus size={9}/>Subtask</Btn>
                    <Btn small ghost onClick={()=>flash(task.link?`Open "${task.link}"`:"Link note…")}><I.Link size={9}/>{task.link?"Open":"Link"}</Btn>
                  </div>
                </div>}
                {/* Inline thread attached to a task */}
                {task.id==="t4"&&threads.filter(th=>th.contextQuote?.includes("opposing counsel")).map(th=><div key={th.id} style={{marginLeft:28}}><InlineThread th={th}/></div>)}
              </div>)}

              {/* Add task */}
              <div style={{display:"flex",alignItems:"center",gap:8,padding:"6px 0",marginBottom:8}}>
                <input type="checkbox" disabled style={{width:16,height:16,opacity:0.3}}/>
                <span contentEditable suppressContentEditableWarning style={{flex:1,fontSize:14,color:c.textTer,outline:"none"}} onFocus={e=>{if(e.target.textContent==="Add task…")e.target.textContent=""}} onBlur={e=>{if(!e.target.textContent.trim())e.target.textContent="Add task…"}}>Add task…</span>
              </div>

              {/* Done */}
              {doneTasks.length>0&&<div style={{marginBottom:16}}>
                <div style={{fontSize:10.5,fontWeight:650,color:c.textTer,textTransform:"uppercase",letterSpacing:".05em",marginBottom:4}}>Done ({doneTasks.length})</div>
                {doneTasks.map(t=><div key={t.id} style={{display:"flex",alignItems:"center",gap:8,padding:"3px 0",opacity:.4}}>
                  <input type="checkbox" checked onChange={()=>toggleTask(t.id)} style={{width:15,height:15,accentColor:c.accentBtn}}/>
                  <span style={{fontSize:13,textDecoration:"line-through",color:c.textTer}}>{t.text}</span>
                </div>)}
              </div>}

              {/* ═══ MORNING BRIEF ═══ */}
              <h2 style={{fontSize:16,fontWeight:700,color:c.textPri,margin:"20px 0 10px",paddingBottom:5,borderBottom:`1px solid ${c.borderLight}`,display:"flex",alignItems:"center",gap:6}}>
                <I.Spark size={15} color={c.agentAv}/>Morning Brief
                <span style={{fontSize:9.5,color:c.textTer,fontWeight:400,marginLeft:"auto"}}>Populated by Elnor · 6:00 AM</span>
              </h2>

              <BriefBlock sectionKey="elnor" icon={<I.Spark size={12} color={c.agentAv}/>} title="Overnight Activity" items={[
                {text:"Reviewed 3 Henderson deposition transcripts — flagged 2 citation issues in Chen depo",time:"5h ago"},
                {text:"Updated Quark patent landscape — 4 new filings",time:"4h ago"},
                {text:"Scanned SEC filings — no new Henderson-relevant 10-K amendments",time:"3h ago"},
              ]}/>
              <BriefBlock sectionKey="calendar" icon={<I.Calendar size={12} color={c.error}/>} title="Deadlines" items={[
                {text:"Expert disclosure deadline — Folb v. City of LA",time:"47 days",accent:c.error},
                {text:"Henderson MSJ response due",time:"12 days",accent:c.warn},
                {text:"Danny Christensen engagement call",time:"Tomorrow 2pm"},
              ]}/>
              <BriefBlock sectionKey="email" icon={<I.Mail size={12} color={c.accentBtn}/>} title="Emails to Respond" items={[
                {text:"Sparacino — Narayanan agreement redline",time:"Yesterday"},
                {text:"Opposing counsel — discovery extension request",time:"2d ago",accent:c.warn},
              ]}/>
              <BriefBlock sectionKey="system" icon={<I.Bell size={12} color={c.warn}/>} title="System" items={[
                {text:"OneDrive sync paused — re-auth needed",time:"6h ago",accent:c.warn},
                {text:"DOC15 red-team review completed — 3 findings flagged",time:"2h ago",accent:c.green},
              ]}/>

              {/* ═══ WORKING NOTES (free-form) ═══ */}
              <h2 style={{fontSize:16,fontWeight:700,color:c.textPri,margin:"24px 0 10px",paddingBottom:5,borderBottom:`1px solid ${c.borderLight}`}}>Working Notes</h2>
              <p style={{fontSize:14,lineHeight:1.75,color:c.textSec,marginBottom:8}} contentEditable suppressContentEditableWarning>Christensen engagement agreement needs the opinion scope narrowed — he can testify on damages methodology but not on liability. Check the retainer letter.</p>
              <p style={{fontSize:14,lineHeight:1.75,color:c.textSec,marginBottom:8}} contentEditable suppressContentEditableWarning>Call with Sparacino re: Narayanan — need to confirm NY vs CA choice of law for the restrictive covenant. NY probably governs but CA may void it entirely under Bus & Prof Code § 16600.</p>
              <p style={{fontSize:14,lineHeight:1.75,color:c.textTer,fontStyle:"italic"}} contentEditable suppressContentEditableWarning>Type here… @Elnor to ask inline</p>

              {/* Bubble menu (from Q_NOTES_FULL) */}
              {bubbleMenu&&<div data-bubble="1" style={{position:"absolute",left:Math.max(10,Math.min(bubbleMenu.x-140,(editorRef.current?.clientWidth||500)-300)),top:bubbleMenu.y-44,backgroundColor:c.bgCard,border:`1px solid ${c.border}`,borderRadius:R.sm,boxShadow:"0 4px 16px rgba(0,0,0,0.12)",padding:"4px 6px",display:"flex",gap:2,zIndex:100,alignItems:"center"}}>
                <button onClick={()=>{flash("Comment…");dismissBubble()}} style={{padding:"5px 10px",borderRadius:R.sm,border:"none",cursor:"pointer",backgroundColor:c.accentBtn,color:"#fff",fontSize:11,fontWeight:600,fontFamily:font.sans,display:"flex",alignItems:"center",gap:4}}><I.MsgCircle size={11}/>Comment</button><Sep/>
                <div style={{display:"flex",alignItems:"center",gap:2,padding:"2px 6px",borderRadius:R.sm,border:`1px solid ${c.borderLight}`,cursor:"pointer"}}><Dot color={agent.color} size={6}/><span style={{fontSize:10,fontWeight:500}}>{agent.name}</span></div>
                <button onClick={()=>{flash(`Sent to ${agent.name}`);dismissBubble()}} style={{padding:"5px 8px",borderRadius:R.sm,border:"none",cursor:"pointer",backgroundColor:"transparent",color:c.textSec,fontSize:11,fontFamily:font.sans,display:"flex",alignItems:"center",gap:3}} onMouseEnter={e=>e.currentTarget.style.backgroundColor=c.bgInput} onMouseLeave={e=>e.currentTarget.style.backgroundColor="transparent"}><I.Spark size={11}/>Ask {agent.name}</button>
                {["Rewrite","Expand","Shorten"].map(a=><button key={a} onClick={()=>{flash(`${agent.name}: ${a}…`);dismissBubble()}} style={{padding:"5px 8px",borderRadius:R.sm,border:"none",cursor:"pointer",backgroundColor:"transparent",color:c.textSec,fontSize:11,fontFamily:font.sans}} onMouseEnter={e=>e.currentTarget.style.backgroundColor=c.bgInput} onMouseLeave={e=>e.currentTarget.style.backgroundColor="transparent"}>{a}</button>)}
                <button onClick={dismissBubble} style={{padding:3,border:"none",cursor:"pointer",backgroundColor:"transparent",color:c.textTer,display:"flex"}}><I.X size={11}/></button>
              </div>}
            </div>
          </div>

          {/* ═══ COMMENTS / SEND PANEL — placeholder ═══ */}
          {commentsOpen&&!fullScreen&&<div style={{width:rightTab==="send"?290:260,flexShrink:0,borderLeft:`1px solid ${c.border}`,display:"flex",flexDirection:"column",backgroundColor:c.bgPanelAlt}}>
            <div style={{display:"flex",borderBottom:`1px solid ${c.borderLight}`,flexShrink:0}}>
              <button onClick={()=>setRightTab("comments")} style={{flex:1,padding:"7px 0",border:"none",cursor:"pointer",backgroundColor:rightTab==="comments"?c.bgPanelAlt:c.bgInput,color:rightTab==="comments"?c.accentBtn:c.textTer,fontSize:10.5,fontWeight:rightTab==="comments"?650:450,fontFamily:font.sans,borderBottom:rightTab==="comments"?`2px solid ${c.accentBtn}`:"2px solid transparent",display:"flex",alignItems:"center",justifyContent:"center",gap:3}}><I.MsgCircle size={10}/>Comments</button>
              <button onClick={()=>setRightTab("send")} style={{flex:1,padding:"7px 0",border:"none",cursor:"pointer",backgroundColor:rightTab==="send"?c.bgPanel:c.bgInput,color:rightTab==="send"?c.accentBtn:c.textTer,fontSize:10.5,fontWeight:rightTab==="send"?650:450,fontFamily:font.sans,borderBottom:rightTab==="send"?`2px solid ${c.accentBtn}`:"2px solid transparent",display:"flex",alignItems:"center",justifyContent:"center",gap:3}}><I.Spark size={10}/>Send to Agent</button>
              <button onClick={()=>setCommentsOpen(false)} style={{width:26,border:"none",cursor:"pointer",backgroundColor:"transparent",display:"flex",alignItems:"center",justifyContent:"center",color:c.textTer}}><I.X size={11}/></button>
            </div>
            <div style={{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:16}}>
              <div style={{textAlign:"center",fontSize:11,color:c.textTer,fontStyle:"italic",lineHeight:1.6}}>
                Comments + Send to Agent<br/>from Q_NOTES_FULL.jsx<br/>plugs in here verbatim<br/><br/>
                <span style={{fontSize:10}}>Full comment cards + Send drawer<br/>@mention support in specs</span>
              </div>
            </div>
          </div>}
        </div>
      </div>

      {/* ═══ CHAT INDICATOR ═══ */}
      <div style={{width:40,borderLeft:`1px solid ${c.border}`,backgroundColor:c.bgPanel,display:"flex",flexDirection:"column",alignItems:"center",paddingTop:12,gap:8,flexShrink:0}}>
        <div style={{writingMode:"vertical-rl",fontSize:10,fontWeight:600,color:c.accentBtn,letterSpacing:".05em",cursor:"pointer",padding:"8px 4px"}}>CHAT →</div>
        <Dot color={c.green} size={6}/>
        <div style={{fontSize:8,color:c.textTer,writingMode:"vertical-rl"}}>Henderson</div>
      </div>
    </div>
  );
}