// v-orders.jsx — Orders & Sales: live kitchen queue + sales analytics

// ─── Order status config ─────────────────────────────────────────────
const O_STATUS = {
  new:       { tone:'blue',   label:'New',              flow:'cooking',   cta:'Accept order' },
  cooking:   { tone:'orange', label:'Cooking',          flow:'ready',     cta:'Mark ready' },
  ready:     { tone:'green',  label:'Ready',            flowDelivery:'delivery', flowCollection:'completed', ctaDelivery:'Hand to driver', ctaCollection:'Mark collected' },
  delivery:  { tone:'purple', label:'Out for delivery', flow:'completed', cta:'Mark delivered' },
  completed: { tone:'grey',   label:'Completed',        flow:null,        cta:null },
};

function nextStatus(o) {
  const s = O_STATUS[o.status];
  if (o.status==='ready') return o.type==='delivery' ? s.flowDelivery : s.flowCollection;
  return s.flow;
}
function ctaFor(o) {
  const s = O_STATUS[o.status];
  if (o.status==='ready') return o.type==='delivery' ? s.ctaDelivery : s.ctaCollection;
  return s.cta;
}

// ─── Live order row ──────────────────────────────────────────────────
function OrderRow({ o, onAdvance, last }) {
  const st = O_STATUS[o.status];
  const done = o.status==='completed';
  const cta = ctaFor(o);
  return (
    <div style={{ display:'grid', gridTemplateColumns:'1.5fr 1.4fr 2.6fr 0.8fr 1fr 1.5fr', gap:12, alignItems:'center',
      padding:'13px 20px', borderBottom: last?'none':'1px solid var(--soft-line)', opacity: done?0.6:1, transition:'background 150ms' }}
      onMouseEnter={(e)=>e.currentTarget.style.background='var(--bg-elevated)'} onMouseLeave={(e)=>e.currentTarget.style.background='transparent'}>
      {/* order id + customer */}
      <div style={{ display:'flex', alignItems:'center', gap:11, minWidth:0 }}>
        <div style={{ width:38, height:38, borderRadius:10, flexShrink:0, background:'var(--dark-chocolate)', color:'var(--dust-cream)', display:'flex', alignItems:'center', justifyContent:'center', fontFamily:'var(--font-mono)', fontSize:11, fontWeight:500 }}>{o.name.split(' ')[0][0]}{o.name.split(' ')[1][0]}</div>
        <div style={{ minWidth:0 }}>
          <div style={{ fontFamily:'var(--font-display)', fontWeight:800, fontSize:13.5, color:'var(--fg-primary)', whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>
            {o.name}
            {o.bridge && <span style={{ marginLeft:7, verticalAlign:'1px', display:'inline-flex', alignItems:'center', gap:4, padding:'1px 7px', borderRadius:999, background:'rgba(46,139,78,0.12)', fontFamily:'var(--font-display)', fontWeight:800, fontSize:9.5, letterSpacing:'0.05em', textTransform:'uppercase', color:'#247a41' }}>Live · app</span>}
          </div>
          <div style={{ fontFamily:'var(--font-mono)', fontSize:10.5, color:'var(--warm-stone)' }}>#{o.id}</div>
        </div>
      </div>
      {/* type + estate */}
      <div style={{ minWidth:0 }}>
        <Pill tone={o.type==='delivery'?'orange':'blue'} icon={o.type==='delivery'?<I.truck c={o.type==='delivery'?'#c0500f':'#2f6694'} s={12}/>:<I.pin c="#2f6694" s={11}/>} style={{ fontSize:10, padding:'2px 7px' }}>{o.type==='delivery'?'Delivery':'Collection'}</Pill>
        <div style={{ fontFamily:'var(--font-body)', fontSize:11, color:'var(--warm-stone)', marginTop:4, whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>{o.estate}</div>
      </div>
      {/* items */}
      <div style={{ minWidth:0 }}>
        <div style={{ fontFamily:'var(--font-body)', fontSize:12.5, color:'var(--fg-primary)', lineHeight:1.4, overflow:'hidden', textOverflow:'ellipsis', whiteSpace:'nowrap' }}>{o.items}</div>
        <div style={{ fontFamily:'var(--font-body)', fontSize:10.5, color:'var(--warm-stone)', marginTop:2 }}>{o.qty} {o.qty===1?'item':'items'}</div>
      </div>
      {/* total */}
      <div style={{ fontFamily:'var(--font-display)', fontWeight:900, fontSize:14.5, color:'var(--fg-primary)' }}>£{o.total.toFixed(2)}</div>
      {/* status + timer */}
      <div>
        <Pill tone={st.tone} dot>{st.label}</Pill>
        <div style={{ display:'flex', alignItems:'center', gap:4, marginTop:5, fontFamily:'var(--font-mono)', fontSize:10.5, color: o.mins>=15&&!done?'#b0341a':'var(--warm-stone)' }}>
          <I.clock c={o.mins>=15&&!done?'#b0341a':'var(--warm-stone)'} s={12}/>{o.mins} min
        </div>
      </div>
      {/* action */}
      <div style={{ display:'flex', justifyContent:'flex-end' }}>
        {cta ? (
          <Btn kind={o.status==='new'?'accent':'primary'} size="sm" onClick={()=>onAdvance(o.id)}
            icon={o.status==='new'?<I.check c="#fff" s={15}/>:<I.arrow c="var(--dust-cream)" s={15}/>}>{cta}</Btn>
        ) : (
          <span style={{ display:'inline-flex', alignItems:'center', gap:6, fontFamily:'var(--font-display)', fontWeight:700, fontSize:12, color:'#247a41' }}><I.check c="#247a41" s={15}/>Done</span>
        )}
      </div>
    </div>
  );
}

// ─── Sales bar chart ─────────────────────────────────────────────────
function SalesChart({ data, metric, peakColor='var(--brand-orange)' }) {
  const [hover, setHover] = React.useState(null);
  const vals = data.map(d=>d[metric]);
  const max = Math.max(...vals, 1);
  const peakIdx = vals.indexOf(max);
  const fmt = (v)=> metric==='rev' ? '£'+v.toLocaleString() : v+' orders';
  // gridlines at 0/25/50/75/100%
  return (
    <div style={{ position:'relative', height:240, paddingLeft:46 }}>
      {/* y axis gridlines */}
      {[1,0.75,0.5,0.25,0].map((f,i)=>(
        <div key={i} style={{ position:'absolute', left:46, right:0, top:`${(1-f)*200}px`, height:1, background:'var(--soft-line)', opacity: f===0?1:0.6 }}>
          <span style={{ position:'absolute', left:-44, top:-7, width:38, textAlign:'right', fontFamily:'var(--font-mono)', fontSize:9.5, color:'var(--warm-stone)' }}>
            {metric==='rev' ? '£'+Math.round(max*f).toLocaleString() : Math.round(max*f)}
          </span>
        </div>
      ))}
      {/* bars */}
      <div style={{ position:'absolute', left:46, right:0, top:0, height:200, display:'flex', alignItems:'flex-end', gap: data.length>14?3:6 }}>
        {data.map((d,i)=>{
          const h = Math.max(3, d[metric]/max*100);
          const isPeak = i===peakIdx;
          const on = hover===i;
          return (
            <div key={i} onMouseEnter={()=>setHover(i)} onMouseLeave={()=>setHover(null)}
              style={{ flex:1, height:'100%', display:'flex', flexDirection:'column', justifyContent:'flex-end', alignItems:'center', position:'relative', cursor:'default' }}>
              {on && (
                <div style={{ position:'absolute', bottom:`calc(${h}% + 8px)`, zIndex:5, background:'var(--dark-chocolate)', color:'var(--dust-cream)', borderRadius:8, padding:'6px 9px', whiteSpace:'nowrap', boxShadow:'var(--shadow-md)', pointerEvents:'none' }}>
                  <div style={{ fontFamily:'var(--font-display)', fontWeight:800, fontSize:12 }}>{fmt(d[metric])}</div>
                  <div style={{ fontFamily:'var(--font-body)', fontSize:10, color:'#B6A595' }}>{metric==='rev'?d.ord+' orders':'£'+d.rev.toLocaleString()}</div>
                </div>
              )}
              <div style={{ width:'100%', maxWidth:46, height:`${h}%`, borderRadius:'5px 5px 0 0',
                background: isPeak||on ? peakColor : 'rgba(216,90,20,0.24)', transition:'height 500ms var(--ease-out), background 150ms' }}/>
            </div>
          );
        })}
      </div>
      {/* x labels */}
      <div style={{ position:'absolute', left:46, right:0, top:208, display:'flex', gap: data.length>14?3:6 }}>
        {data.map((d,i)=>(
          <div key={i} style={{ flex:1, textAlign:'center', fontFamily:'var(--font-mono)', fontSize:9.5, color:'var(--warm-stone)',
            visibility: data.length>14 && i%5!==0 && i!==data.length-1 ? 'hidden':'visible' }}>{d.label}</div>
        ))}
      </div>
    </div>
  );
}

// ─── KPI tile (local) ────────────────────────────────────────────────
function OTile({ icon, value, label, sub, delta, dir }) {
  const Icon = I[icon] || I.grid;
  const c = dir==='up' ? '#247a41' : dir==='down' ? '#b0341a' : '#7C675B';
  return (
    <Card pad={16} hover>
      <div style={{ display:'flex', alignItems:'center', justifyContent:'space-between' }}>
        <div style={{ width:34, height:34, borderRadius:10, background:'var(--bg-warm)', display:'flex', alignItems:'center', justifyContent:'center' }}><Icon c="var(--brand-orange)" s={18}/></div>
        <span style={{ display:'inline-flex', alignItems:'center', gap:3, fontFamily:'var(--font-display)', fontWeight:800, fontSize:11.5, color:c }}>
          {dir==='up'&&<I.trendUp c={c} s={14}/>}{dir==='down'&&<I.trendDown c={c} s={14}/>}{delta}
        </span>
      </div>
      <div style={{ marginTop:13, fontFamily:'var(--font-display)', fontWeight:900, fontSize:26, letterSpacing:'-0.02em', color:'var(--fg-primary)', lineHeight:1 }}>{value}</div>
      <div style={{ marginTop:6, fontFamily:'var(--font-display)', fontWeight:700, fontSize:12.5, color:'var(--fg-primary)' }}>{label}</div>
      <div style={{ marginTop:2, fontFamily:'var(--font-body)', fontSize:11.5, color:'var(--warm-stone)' }}>{sub}</div>
    </Card>
  );
}

// ─── Payout statements modal ─────────────────────────────────────────
function StatementsModal({ app, onClose }) {
  return (
    <div onClick={onClose} style={{ position:'fixed', inset:0, zIndex:340, background:'rgba(27,18,13,0.5)', backdropFilter:'blur(3px)', display:'flex', justifyContent:'center', alignItems:'flex-start', padding:'70px 24px', animation:'v-fade 200ms var(--ease-out)' }}>
      <div onClick={(e)=>e.stopPropagation()} style={{ width:'100%', maxWidth:540, background:'var(--bg-surface)', borderRadius:20, boxShadow:'var(--shadow-lg)', overflow:'hidden', animation:'v-pop 240ms var(--ease-out)' }}>
        <div style={{ display:'flex', alignItems:'center', justifyContent:'space-between', padding:'16px 22px', borderBottom:'1px solid var(--soft-line)' }}>
          <Eyebrow><I.receipt c="var(--brand-orange)" s={13}/> &nbsp;Payout statements</Eyebrow>
          <span onClick={onClose} style={{ cursor:'pointer', display:'flex', padding:4 }}><I.x c="var(--warm-stone)" s={16}/></span>
        </div>
        <div style={{ padding:'6px 10px 10px' }}>
          {PAYOUTS.map((p,i)=>(
            <div key={p.id} style={{ display:'flex', alignItems:'center', gap:13, padding:'13px 12px', borderBottom: i<PAYOUTS.length-1?'1px solid var(--soft-line)':'none' }}>
              <span style={{ width:36, height:36, borderRadius:10, background:'var(--bg-warm)', display:'flex', alignItems:'center', justifyContent:'center', flexShrink:0 }}><I.receipt c="var(--horse-brown)" s={16}/></span>
              <div style={{ flex:1, minWidth:0 }}>
                <div style={{ fontFamily:'var(--font-display)', fontWeight:800, fontSize:13, color:'var(--fg-primary)' }}>{p.period}</div>
                <div style={{ fontFamily:'var(--font-mono)', fontSize:10, color:'var(--warm-stone)', marginTop:2 }}>{p.id} · gross £{p.gross.toLocaleString()} · fee £{p.fees.toLocaleString()}</div>
              </div>
              <div style={{ textAlign:'right', flexShrink:0 }}>
                <div style={{ fontFamily:'var(--font-display)', fontWeight:900, fontSize:14, color:'var(--fg-primary)' }}>£{p.net.toLocaleString()}</div>
                <Pill tone={p.status==='paid'?'green':'amber'} dot>{p.status==='paid'?'Paid':'Pending'}</Pill>
              </div>
              <Btn size="sm" onClick={()=>app.toast(`Statement ${p.id} downloaded (PDF)`)} disabled={p.status!=='paid'}>PDF</Btn>
            </div>
          ))}
          <div style={{ padding:'10px 12px 4px', fontFamily:'var(--font-body)', fontSize:10, color:'var(--warm-stone)' }}>Statements are generated when a payout settles. Pending periods appear once paid.</div>
        </div>
      </div>
    </div>
  );
}

// ─── Screen ──────────────────────────────────────────────────────────
function OrdersScreen({ app }) {
  const [stmtsOpen, setStmtsOpen] = React.useState(false);
  // Bridged orders — placed live in the Lasso customer app (demo bridge via localStorage)
  const readBridge = () => {
    try {
      return (JSON.parse(localStorage.getItem('lasso_bridge_orders') || '[]')).map(b => ({
        ...b, mins: Math.max(0, Math.floor((Date.now() - (b.ts || Date.now())) / 60000)),
      }));
    } catch (e) { return []; }
  };
  const [orders, setOrders] = React.useState(() => [...readBridge(), ...ORDERS]);
  React.useEffect(() => {
    const sync = () => setOrders(os => {
      const known = new Set(os.map(o => o.id));
      const fresh = readBridge().filter(b => !known.has(b.id));
      return fresh.length ? [...fresh, ...os] : os;
    });
    window.addEventListener('storage', sync);
    const t = setInterval(sync, 2000);
    return () => { window.removeEventListener('storage', sync); clearInterval(t); };
  }, []);
  const [filter, setFilter] = React.useState('active');
  const [metric, setMetric] = React.useState('rev');

  const advance = (id) => setOrders(os => os.map(o => o.id===id ? { ...o, status: nextStatus(o), mins: 0 } : o));

  const counts = {
    active: orders.filter(o=>o.status!=='completed').length,
    new: orders.filter(o=>o.status==='new').length,
    cooking: orders.filter(o=>o.status==='cooking').length,
    ready: orders.filter(o=>o.status==='ready').length,
    completed: orders.filter(o=>o.status==='completed').length,
  };
  const shown = orders.filter(o => filter==='active' ? o.status!=='completed' : filter==='completed' ? o.status==='completed' : o.status===filter);

  const range = app.range;
  const sum = SALES_SUMMARY[range] || SALES_SUMMARY.today;
  const chartData = range==='today' ? SALES_HOURLY : range==='week' ? SALES_DAILY : SALES_MONTHLY;
  const rangeWord = range==='today' ? 'today' : range==='week' ? 'this week' : 'this month';

  const mixTotal = ORDER_MIX.reduce((s,m)=>s+m.count,0);
  const deliveryPct = Math.round(ORDER_MIX[0].count/mixTotal*100);
  const topMaxRev = Math.max(...TOP_SELLERS.map(t=>t.rev));

  const tabs = [
    { id:'active', label:'Active', n:counts.active },
    { id:'new', label:'New', n:counts.new },
    { id:'cooking', label:'Cooking', n:counts.cooking },
    { id:'ready', label:'Ready', n:counts.ready },
    { id:'completed', label:'Completed', n:counts.completed },
  ];

  return (
    <div>
      <PageHead eyebrow="Orders & Sales" title="Orders &amp; sales"
        sub="Live kitchen queue and takings for Fire &amp; Dough · Stadium MK"
        right={
          <div style={{ display:'flex', alignItems:'center', gap:10 }}>
            <Segmented options={[{value:'today',label:'Today'},{value:'week',label:'7 days'},{value:'month',label:'30 days'}]} value={app.range} onChange={app.setRange}/>
            <Btn kind="white" icon={<I.arrow c="var(--fg-primary)" s={15}/>} onClick={()=>app.toast('Exporting sales report to CSV…')}>Export</Btn>
          </div>
        }/>

      {/* KPI row */}
      <div style={{ display:'grid', gridTemplateColumns:'repeat(4,1fr)', gap:14, marginBottom:18 }}>
        <OTile icon="receipt" value={sum.orders.toLocaleString()} label={range==='today'?"Orders today":"Orders"} sub={sum.sub} delta={sum.ordDelta} dir="up"/>
        <OTile icon="pound" value={'£'+sum.revenue.toLocaleString()} label={range==='today'?"Revenue today":"Revenue"} sub={sum.sub} delta={sum.revDelta} dir="up"/>
        <OTile icon="tag" value={'£'+sum.aov.toFixed(2)} label="Avg order value" sub={rangeWord} delta={sum.aovDelta} dir="up"/>
        <OTile icon="clock" value={sum.prep+' min'} label="Avg prep time" sub={`${sum.accept}% acceptance`} delta={sum.acceptDelta} dir={sum.acceptDelta==='flat'?'flat':'up'}/>
      </div>

      {/* Live order queue */}
      <Card pad={0} style={{ overflow:'hidden', marginBottom:18 }}>
        <div style={{ display:'flex', alignItems:'center', gap:14, padding:'15px 20px', borderBottom:'1px solid var(--soft-line)', flexWrap:'wrap' }}>
          <div style={{ display:'flex', alignItems:'center', gap:9 }}>
            <span style={{ position:'relative', width:9, height:9, flexShrink:0 }}>
              <span style={{ position:'absolute', inset:0, borderRadius:'50%', background:'var(--live-green)' }}/>
              <span style={{ position:'absolute', inset:0, borderRadius:'50%', background:'var(--live-green)', animation:'v-pulse 2s var(--ease-out) infinite' }}/>
            </span>
            <Eyebrow><I.receipt c="var(--brand-orange)" s={13}/> &nbsp;Live order queue</Eyebrow>
            <Wire kind="partial"/>
          </div>
          <div style={{ display:'flex', gap:6, marginLeft:4, flexWrap:'wrap' }}>
            {tabs.map(t=>{
              const on = filter===t.id;
              return (
                <button key={t.id} onClick={()=>setFilter(t.id)} style={{ display:'inline-flex', alignItems:'center', gap:6, padding:'6px 12px', borderRadius:10, cursor:'pointer',
                  background: on?'var(--dark-chocolate)':'var(--bg-app)', color: on?'var(--dust-cream)':'var(--fg-primary)',
                  border:'1px solid', borderColor: on?'var(--dark-chocolate)':'var(--soft-line)',
                  fontFamily:'var(--font-display)', fontWeight:700, fontSize:12.5 }}>
                  {t.label}
                  <span style={{ fontFamily:'var(--font-mono)', fontSize:10.5, minWidth:16, textAlign:'center', padding:'1px 5px', borderRadius:6,
                    background: on?'rgba(245,239,231,0.16)':'var(--bg-warm)', color: on?'var(--dust-cream)':'var(--horse-brown)' }}>{t.n}</span>
                </button>
              );
            })}
          </div>
          <span style={{ marginLeft:'auto' }}><LastSync onRefresh={()=>{}} label="Queue updated"/></span>
        </div>

        {/* column header */}
        <div style={{ display:'grid', gridTemplateColumns:'1.5fr 1.4fr 2.6fr 0.8fr 1fr 1.5fr', gap:12, padding:'10px 20px', borderBottom:'1px solid var(--soft-line)', background:'var(--bg-app)' }}>
          {['Customer','Fulfilment','Items','Total','Status','Action'].map((h,i)=>(
            <span key={h} style={{ fontFamily:'var(--font-display)', fontWeight:700, fontSize:10.5, letterSpacing:'0.08em', textTransform:'uppercase', color:'var(--warm-stone)', textAlign: i===5?'right':'left' }}>{h}</span>
          ))}
        </div>

        {shown.length===0 ? (
          <div style={{ padding:'40px 20px', textAlign:'center', fontFamily:'var(--font-body)', fontSize:13, color:'var(--warm-stone)' }}>
            <I.check c="var(--live-green)" s={26}/>
            <div style={{ marginTop:8 }}>No {filter==='active'?'open':filter} orders right now.</div>
          </div>
        ) : shown.map((o,i)=> <OrderRow key={o.id} o={o} onAdvance={advance} last={i===shown.length-1}/>)}
      </Card>

      {/* Sales chart + fulfilment */}
      <div style={{ display:'grid', gridTemplateColumns:'1.7fr 1fr', gap:16, marginBottom:18 }}>
        <Card pad={0} style={{ overflow:'hidden' }}>
          <div style={{ padding:'16px 22px 12px', display:'flex', alignItems:'center', justifyContent:'space-between', gap:14, flexWrap:'wrap', borderBottom:'1px solid var(--soft-line)' }}>
            <div>
              <Eyebrow style={{ marginBottom:6 }}>Sales {rangeWord}</Eyebrow>
              <div style={{ display:'flex', alignItems:'baseline', gap:10 }}>
                <span style={{ fontFamily:'var(--font-display)', fontWeight:900, fontSize:24, color:'var(--fg-primary)', lineHeight:1 }}>£{sum.revenue.toLocaleString()}</span>
                <span style={{ display:'inline-flex', alignItems:'center', gap:3, fontFamily:'var(--font-display)', fontWeight:800, fontSize:12.5, color:'#247a41' }}><I.trendUp c="#247a41" s={14}/>{sum.revDelta}</span>
                <span style={{ fontFamily:'var(--font-body)', fontSize:12, color:'var(--warm-stone)' }}>{sum.orders.toLocaleString()} orders</span>
              </div>
            </div>
            <Segmented size="sm" options={[{value:'rev',label:'Revenue'},{value:'ord',label:'Orders'}]} value={metric} onChange={setMetric}/>
          </div>
          <div style={{ padding:'22px 22px 16px' }}>
            <SalesChart data={chartData} metric={metric}/>
            <div style={{ marginTop:14, paddingTop:13, borderTop:'1px solid var(--soft-line)', display:'flex', alignItems:'center', gap:8 }}>
              <I.flame c="var(--brand-orange)" s={14} f/>
              <span style={{ fontFamily:'var(--font-body)', fontSize:12, color:'var(--warm-stone)' }}>
                {range==='today' ? <>Peak trading <strong style={{ color:'var(--fg-primary)', fontFamily:'var(--font-display)' }}>20:00–21:00</strong> — staff the kitchen for the evening rush.</>
                : <>Weekends drive <strong style={{ color:'var(--fg-primary)', fontFamily:'var(--font-display)' }}>38%</strong> of takings. Fri–Sun is your window.</>}
              </span>
            </div>
          </div>
        </Card>

        {/* Fulfilment mix */}
        <Card>
          <Eyebrow style={{ marginBottom:16 }}><I.truck c="var(--brand-orange)" s={13}/> &nbsp;Fulfilment {rangeWord}</Eyebrow>
          <div style={{ display:'flex', alignItems:'center', gap:18 }}>
            <Ring pct={deliveryPct} size={94} stroke={11} color="#D85A14" track="rgba(62,124,176,0.25)">
              <div style={{ textAlign:'center' }}>
                <div style={{ fontFamily:'var(--font-display)', fontWeight:900, fontSize:23, color:'var(--fg-primary)', lineHeight:1 }}>{deliveryPct}%</div>
                <div style={{ fontFamily:'var(--font-body)', fontSize:9, color:'var(--warm-stone)' }}>delivery</div>
              </div>
            </Ring>
            <div style={{ flex:1 }}>
              {ORDER_MIX.map(m=>(
                <div key={m.label} style={{ display:'flex', alignItems:'center', gap:9, marginBottom:9 }}>
                  <span style={{ width:10, height:10, borderRadius:3, background:m.color, flexShrink:0 }}/>
                  <span style={{ fontFamily:'var(--font-body)', fontSize:12.5, color:'var(--fg-primary)', flex:1 }}>{m.label}</span>
                  <span style={{ fontFamily:'var(--font-display)', fontWeight:800, fontSize:13, color:'var(--fg-primary)' }}>{m.count}</span>
                </div>
              ))}
            </div>
          </div>
          <div style={{ marginTop:16, paddingTop:15, borderTop:'1px solid var(--soft-line)', display:'grid', gridTemplateColumns:'1fr 1fr', gap:14 }}>
            {[['Avg delivery','27 min'],['Avg prep',sum.prep+' min'],['On-time','94%'],['Acceptance',sum.accept+'%']].map(([l,v])=>(
              <div key={l}>
                <div style={{ fontFamily:'var(--font-display)', fontWeight:900, fontSize:18, color:'var(--fg-primary)' }}>{v}</div>
                <div style={{ fontFamily:'var(--font-body)', fontSize:11, color:'var(--warm-stone)', marginTop:2 }}>{l}</div>
              </div>
            ))}
          </div>
        </Card>
      </div>

      {/* Top sellers + payouts */}
      <div style={{ display:'grid', gridTemplateColumns:'1fr 1.25fr', gap:16 }}>
        {/* Top sellers */}
        <Card pad={0} style={{ overflow:'hidden' }}>
          <div style={{ padding:'16px 20px 12px', display:'flex', alignItems:'center', justifyContent:'space-between', borderBottom:'1px solid var(--soft-line)' }}>
            <Eyebrow><I.flame c="var(--brand-orange)" s={13} f/> &nbsp;Top sellers {rangeWord}</Eyebrow>
            <span onClick={()=>app.nav('menu')} style={{ fontFamily:'var(--font-display)', fontWeight:800, fontSize:12, color:'var(--brand-orange)', cursor:'pointer' }}>Menu →</span>
          </div>
          <div style={{ padding:'4px 20px 8px' }}>
            {TOP_SELLERS.map((t,i)=>(
              <div key={t.name} style={{ display:'flex', alignItems:'center', gap:12, padding:'11px 0', borderBottom: i<TOP_SELLERS.length-1?'1px solid var(--soft-line)':'none' }}>
                <span style={{ fontFamily:'var(--font-display)', fontWeight:900, fontSize:13, color:'var(--warm-stone)', width:16, textAlign:'center', flexShrink:0 }}>{i+1}</span>
                <div style={{ flex:1, minWidth:0 }}>
                  <div style={{ fontFamily:'var(--font-display)', fontWeight:800, fontSize:13, color:'var(--fg-primary)', whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>{t.name}</div>
                  <div style={{ marginTop:5, display:'flex', alignItems:'center', gap:8 }}>
                    <div style={{ flex:1, maxWidth:120 }}><Bar pct={t.rev/topMaxRev*100} color="var(--brand-orange)" h={5}/></div>
                    <span style={{ fontFamily:'var(--font-body)', fontSize:10.5, color:'var(--warm-stone)' }}>{t.qty} sold</span>
                  </div>
                </div>
                <div style={{ textAlign:'right', flexShrink:0 }}>
                  <div style={{ fontFamily:'var(--font-display)', fontWeight:900, fontSize:14, color:'var(--fg-primary)' }}>£{t.rev}</div>
                  <Trend dir={t.trendDir} pct={t.trendPct} size={11}/>
                </div>
              </div>
            ))}
          </div>
        </Card>

        {/* Payouts */}
        <Card pad={0} style={{ overflow:'hidden' }}>
          <div style={{ padding:'16px 20px 12px', display:'flex', alignItems:'center', justifyContent:'space-between', borderBottom:'1px solid var(--soft-line)' }}>
            <Eyebrow><I.pound c="var(--brand-orange)" s={13}/> &nbsp;Payouts &amp; reconciliation</Eyebrow>
            <span onClick={()=>setStmtsOpen(true)} style={{ fontFamily:'var(--font-display)', fontWeight:800, fontSize:12, color:'var(--brand-orange)', cursor:'pointer' }}>Statements →</span>
          </div>
          <div style={{ display:'grid', gridTemplateColumns:'1.4fr 1fr 1fr 1fr 1fr', gap:10, padding:'10px 20px', borderBottom:'1px solid var(--soft-line)', background:'var(--bg-app)' }}>
            {['Period','Gross','Lasso fee','Net','Status'].map((h,i)=>(
              <span key={h} style={{ fontFamily:'var(--font-display)', fontWeight:700, fontSize:10.5, letterSpacing:'0.06em', textTransform:'uppercase', color:'var(--warm-stone)', textAlign: i>=1&&i<=3?'right':'left' }}>{h}</span>
            ))}
          </div>
          {PAYOUTS.map((p,i)=>(
            <div key={p.id} style={{ display:'grid', gridTemplateColumns:'1.4fr 1fr 1fr 1fr 1fr', gap:10, alignItems:'center', padding:'13px 20px', borderBottom: i<PAYOUTS.length-1?'1px solid var(--soft-line)':'none' }}>
              <div style={{ minWidth:0 }}>
                <div style={{ fontFamily:'var(--font-display)', fontWeight:800, fontSize:13, color:'var(--fg-primary)' }}>{p.period}</div>
                <div style={{ fontFamily:'var(--font-mono)', fontSize:10, color:'var(--warm-stone)' }}>{p.id}</div>
              </div>
              <span style={{ fontFamily:'var(--font-display)', fontWeight:700, fontSize:12.5, color:'var(--fg-primary)', textAlign:'right' }}>£{p.gross.toLocaleString()}</span>
              <span style={{ fontFamily:'var(--font-body)', fontSize:12.5, color:'#b0341a', textAlign:'right' }}>−£{p.fees.toLocaleString()}</span>
              <span style={{ fontFamily:'var(--font-display)', fontWeight:900, fontSize:13.5, color:'var(--fg-primary)', textAlign:'right' }}>£{p.net.toLocaleString()}</span>
              <div>
                <Pill tone={p.status==='paid'?'green':'amber'} dot>{p.status==='paid'?'Paid':'Pending'}</Pill>
                <div style={{ fontFamily:'var(--font-body)', fontSize:10, color:'var(--warm-stone)', marginTop:3 }}>{p.date}</div>
              </div>
            </div>
          ))}
        </Card>
      </div>

      {stmtsOpen && <StatementsModal app={app} onClose={()=>setStmtsOpen(false)}/>}
    </div>
  );
}

Object.assign(window, { OrdersScreen, StatementsModal });
