// ============================================================
// hifi-web.jsx — Web App: all core screens (uses WebShell)
// HFWeb({screen}) — login|dashboard|fleetmap|devices|detail|events|alerts|reports|settings
// ============================================================
function WebKPI({label, value, accent, trend, trendS='ok', spark='taupe'}){
  return (
    <Card pad={0} style={{flex:1,minWidth:0}}>
      <div className="hf-kpi">
        <Lbl>{label}</Lbl>
        <Row align="flex-end" justify="space-between" style={{marginTop:6}}>
          <div className={'v'+(accent?' accent':'')}>{value}</div>
          <div style={{marginBottom:4}}><Spark w={88} h={30} color={`var(--${spark})`}/></div>
        </Row>
        <Row gap={6} align="center" style={{marginTop:6}}>
          <span className="hf-mono" style={{fontSize:11,color:`var(--${trendS})`}}>{trend}</span>
          <span className="hf-label" style={{fontSize:9.5}}>vs last 24h</span>
        </Row>
      </div>
    </Card>
  );
}
const TblBadge = ({s,label}) => <Badge s={s} label={label}/>;

/* ---------------- LOGIN ---------------- */
function WLogin(){
  return (
    <div className="hf-app" style={{display:'flex',flexDirection:'column'}}>
      <CUI/>
      <div style={{flex:1,position:'relative',display:'flex',alignItems:'center',justifyContent:'center',background:'radial-gradient(120% 90% at 50% -10%, #0A1C40 0%, #000E26 60%)'}}>
        <div style={{position:'absolute',inset:0,opacity:.05,display:'flex',alignItems:'center',justifyContent:'center'}}><AegisMark size={620} color="var(--taupe)"/></div>
        <div className="hf-grid-bg" style={{position:'absolute',inset:0,opacity:.25}}/>
        <Card pad={36} style={{width:404,position:'relative',background:'var(--panel-1)'}} glow>
          <div style={{textAlign:'center'}}>
            <AegisMark size={56} color="var(--taupe)" glow/>
            <div className="hf-wordmark" style={{fontSize:30,marginTop:14}}>Aegis Cognis</div>
            <div className="hf-label" style={{marginTop:4}}>Command &amp; Monitoring Console</div>
          </div>
          <Col gap={13} style={{marginTop:30}}>
            <Field label="Organization" value="JSOC Task Force Alpha ▾"/>
            <Btn variant="accent" block lg style={{marginTop:4}}>Sign in with SSO</Btn>
            <div style={{textAlign:'center'}}><span className="hf-label" style={{fontSize:11,color:'var(--maint)'}}>Sign in with credentials</span></div>
          </Col>
          <div style={{height:1,background:'var(--line-soft)',margin:'24px 0 16px'}}/>
          <Row justify="space-between"><span className="hf-label" style={{fontSize:10}}>Forgot password</span><span className="hf-label" style={{fontSize:10}}>Contact admin</span></Row>
        </Card>
      </div>
    </div>
  );
}

/* ---------------- DASHBOARD ---------------- */
function WDashboard(){
  return (
    <WebShell active="Dashboard">
      <ScreenHead eyebrow="Live · updated 2s ago" title="Command Dashboard" size={38}
        right={<Row gap={10}><Chip><Icon k="cal" size={13}/> Last 24 hours</Chip><Btn variant="accent"><Icon k="report" size={14}/> Export</Btn></Row>}/>
      <Row gap={16} style={{marginBottom:16}}>
        <WebKPI label="Total Devices" value="312" trend="▲ 4" spark="taupe"/>
        <WebKPI label="Active Now" value="248" accent trend="▲ 12" spark="ok"/>
        <WebKPI label="Open Alerts" value="7" trend="3 critical" trendS="crit" spark="warn"/>
        <WebKPI label="Offline" value="57" trend="▼ 6" trendS="ok" spark="off"/>
      </Row>
      <Row gap={16} style={{marginBottom:16}} align="stretch">
        <Card pad={18} style={{flex:'1.15',minWidth:0}}>
          <Row justify="space-between" align="center"><Lbl>Fleet Health</Lbl><Chip>312 total</Chip></Row>
          <Row gap={20} align="center" style={{marginTop:10}}>
            <Donut size={150} center="79%" sub="HEALTHY"/>
            <Col gap={10} style={{flex:1}}>
              {[['ok','Healthy',181],['warn','Warning',42],['crit','Critical',12],['off','Offline',57]].map((r,i)=>(
                <Row key={i} gap={10} align="center"><Dot s={r[0]}/><span style={{flex:1,fontSize:12.5,color:'var(--text-dim)'}}>{r[1]}</span><Mono style={{fontSize:13,color:'var(--paper)'}}>{r[2]}</Mono></Row>
              ))}
            </Col>
          </Row>
        </Card>
        <Card pad={18} style={{width:300}}>
          <Lbl>Alert Summary</Lbl>
          <Col gap={9} style={{marginTop:12}}>
            {[['crit','Critical',3],['warn','Warning',4],['maint','Informational',11]].map((r,i)=>(
              <div key={i} className="hf-card-2" style={{padding:'10px 12px',display:'flex',alignItems:'center',gap:10,borderLeft:`3px solid var(--${r[0]})`}}>
                <Dot s={r[0]}/><span style={{flex:1,fontSize:12.5,color:'var(--text)'}}>{r[1]}</span><span className="hf-display" style={{fontSize:24,color:'var(--paper)'}}>{r[2]}</span>
              </div>
            ))}
          </Col>
        </Card>
        <Card pad={0} style={{flex:1,minWidth:0,overflow:'hidden'}}>
          <Row justify="space-between" align="center" style={{padding:'14px 16px 10px'}}><Lbl>Fleet Map</Lbl><Chip><Icon k="map" size={12}/> 6 sites</Chip></Row>
          <MapField h={186} watermark/>
        </Card>
      </Row>
      <Card pad={0} style={{overflow:'hidden'}}>
        <Row justify="space-between" align="center" style={{padding:'14px 16px 10px'}}><Lbl>Recent Events</Lbl><Row gap={8}><Chip>All severities</Chip><Chip>Live feed</Chip></Row></Row>
        <table className="hf-tbl">
          <thead><tr><th style={{width:120}}>Time</th><th>Device</th><th>Event</th><th style={{width:130}}>Severity</th><th>Description</th><th style={{width:90}}>Source</th></tr></thead>
          <tbody>
            {[['14:02:11','AC-9008','Diagnostic','crit','IMU self-test failed','agent'],
              ['13:58:40','AC-7741','Calibration','warn','Calibration window expiring','scheduler'],
              ['13:51:02','AC-3320','Firmware','maint','Updated to v2.4.1','ota'],
              ['13:40:17','AC-7740','Status','ok','Device came online','agent']].map((e,i)=>(
              <tr key={i}><td><Mono style={{color:'var(--text-mute)'}}>{e[0]}</Mono></td><td><Mono style={{color:'var(--paper)'}}>{e[1]}</Mono></td><td style={{color:'var(--text)'}}>{e[2]}</td><td><Badge s={e[3]}/></td><td>{e[4]}</td><td><span className="hf-label" style={{fontSize:10}}>{e[5]}</span></td></tr>
            ))}
          </tbody>
        </table>
      </Card>
    </WebShell>
  );
}

/* ---------------- FLEET MAP ---------------- */
function WFleetMap(){
  return (
    <WebShell active="Fleet Map">
      <ScreenHead eyebrow="Geospatial · real-time" title="Fleet Map"
        right={<Row gap={10}><Chip>Dark</Chip><Chip><Icon k="map" size={12}/> 6 sites · 312 devices</Chip></Row>}/>
      <Row gap={16} align="stretch" style={{height:'calc(100% - 70px)'}}>
        <Card pad={16} style={{width:250,flex:'none'}}>
          <Lbl>Filters</Lbl>
          <Field value="" ph="⌕ Name / serial" w="100%" />
          {['Division','Team','Device Type','Status'].map((g,i)=>(
            <div key={i} style={{marginTop:16}}>
              <Lbl style={{marginBottom:8}}>{g}</Lbl>
              <Col gap={8}>{[0,1].map(j=><Row key={j} gap={8} align="center"><span style={{width:15,height:15,borderRadius:4,border:'1px solid var(--line)',background:j?'transparent':'var(--royal)'}}/><span style={{fontSize:12,color:'var(--text-dim)'}}>{g} {j+1}</span></Row>)}</Col>
            </div>
          ))}
          <Row gap={8} style={{marginTop:20}}><Btn variant="primary" style={{flex:1}}>Apply</Btn><Btn variant="ghost" style={{flex:1}}>Reset</Btn></Row>
        </Card>
        <Card pad={0} style={{flex:1,minWidth:0,overflow:'hidden',position:'relative'}}>
          <MapField h={620} watermark pins={[['ok','24%','28%'],['warn','52%','38%'],['crit','40%','60%'],['off','70%','52%'],['ok','20%','70%'],['ok','62%','22%'],['ok','80%','74%'],['maint','34%','46%']]}/>
          <div style={{position:'absolute',left:'40%',top:'60%',transform:'translate(-50%,-120%)'}}>
            <Card pad={14} style={{width:210,background:'var(--panel-1)'}} glow>
              <Row justify="space-between" align="center"><Mono style={{fontSize:13,color:'var(--paper)'}}>AC-7741</Mono><Badge s="warn"/></Row>
              <div className="hf-label" style={{marginTop:6}}>Team Bravo · Sensor</div>
              <div style={{fontSize:11,color:'var(--text-dim)',marginTop:6}}>Last event: calibration due</div>
              <div style={{marginTop:10}}><span className="hf-label" style={{fontSize:10,color:'var(--maint)'}}>View detail →</span></div>
            </Card>
          </div>
          <Col gap={6} style={{position:'absolute',right:14,top:14}}>
            {['＋','－','◳'].map((c,i)=><div key={i} className="hf-iconbtn" style={{background:'var(--panel-1)'}}>{c}</div>)}
          </Col>
        </Card>
      </Row>
    </WebShell>
  );
}

/* ---------------- DEVICES TABLE ---------------- */
function WDevices(){
  const rows=[['AC-7740','7740-AC-22','Sensor','Bravo','ok',.9,'2m','34.0,-118.2'],
    ['AC-7741','7741-AC-09','Sensor','Bravo','warn',.62,'14m','34.1,-118.3'],
    ['AC-3320','3320-AC-77','Relay','Alpha','ok',.84,'1m','33.9,-118.1'],
    ['AC-9008','9008-AC-03','Beacon','Recon','crit',.21,'8m','34.2,-118.4'],
    ['AC-5512','5512-AC-41','Relay','Alpha','off',0,'3d','—'],
    ['AC-6620','6620-AC-18','Sensor','Echo','ok',.78,'5m','34.0,-118.0'],
    ['AC-7088','7088-AC-55','Beacon','Recon','maint',.5,'21m','34.3,-118.5']];
  return (
    <WebShell active="Devices">
      <ScreenHead eyebrow="312 devices · all teams" title="Devices"
        right={<Row gap={8}><Chip>Type ▾</Chip><Chip>Team ▾</Chip><Chip>Status ▾</Chip><Btn variant="accent"><Icon k="report" size={13}/> Export</Btn></Row>}/>
      <div className="hf-card-2" style={{padding:'9px 14px',display:'flex',alignItems:'center',gap:14,marginBottom:12,borderColor:'color-mix(in srgb,var(--maint) 35%,transparent)'}}>
        <Chip>3 selected</Chip>
        <span className="hf-label" style={{color:'var(--maint)'}}>Export</span><span className="hf-label" style={{color:'var(--maint)'}}>Assign to Team</span><span className="hf-label" style={{color:'var(--maint)'}}>Tag</span>
      </div>
      <Card pad={0} style={{overflow:'hidden'}}>
        <table className="hf-tbl">
          <thead><tr><th style={{width:34}}>☑</th><th>Name</th><th>Serial</th><th>Type</th><th>Team</th><th style={{width:120}}>Status</th><th style={{width:90}}>Health</th><th>Last Seen</th><th>Location</th></tr></thead>
          <tbody>
            {rows.map((r,i)=>(
              <tr key={i}>
                <td><span style={{width:14,height:14,borderRadius:4,border:'1px solid var(--line)',background:i<3?'var(--royal)':'transparent',display:'inline-block'}}/></td>
                <td><Mono style={{color:'var(--paper)'}}>{r[0]}</Mono></td>
                <td><Mono style={{color:'var(--text-mute)'}}>{r[1]}</Mono></td>
                <td>{r[2]}</td><td>{r[3]}</td>
                <td><Badge s={r[4]}/></td>
                <td><Ring size={22} pct={r[5]} s={r[4]==='off'?'off':r[4]==='crit'?'crit':r[4]==='warn'?'warn':'ok'}/></td>
                <td><Mono style={{color:'var(--text-mute)'}}>{r[6]}</Mono></td>
                <td><Mono style={{fontSize:11,color:'var(--text-mute)'}}>{r[7]}</Mono></td>
              </tr>
            ))}
          </tbody>
        </table>
      </Card>
      <Row justify="flex-end" gap={10} align="center" style={{marginTop:14}}>
        <Chip>50 / page ▾</Chip>
        <Row gap={4}>{['‹','1','2','3','›'].map((p,i)=><Chip key={i} style={p==='1'?{background:'var(--royal)',color:'var(--paper)',borderColor:'var(--royal-lift)'}:{}}>{p}</Chip>)}</Row>
      </Row>
    </WebShell>
  );
}

/* ---------------- DEVICE DETAIL ---------------- */
function WDetail(){
  return (
    <WebShell active="Devices">
      <Card pad={16} style={{marginBottom:14}}>
        <Row justify="space-between" align="flex-start">
          <Row gap={13} align="center">
            <div style={{width:44,height:44,borderRadius:10,background:'var(--panel-2)',border:'1px solid var(--line)',display:'flex',alignItems:'center',justifyContent:'center',color:'var(--taupe)'}}><Icon k="device" size={22}/></div>
            <div><Row gap={10} align="center"><Display size={26} style={{whiteSpace:'nowrap'}}>AC-7740</Display><Badge s="ok"/></Row><div className="hf-label" style={{marginTop:4}}>SN 7740-AC-22 · Sensor · Team Bravo · USB connected</div></div>
          </Row>
          <Row gap={8}><Btn variant="ghost">Push Config</Btn><Btn variant="ghost">Trigger OTA</Btn><Btn variant="primary"><Icon k="map" size={13}/> View on Map</Btn></Row>
        </Row>
      </Card>
      <Row gap={14} style={{marginBottom:14}}>
        <WebKPI label="Health Score" value="90" accent trend="stable" spark="ok"/>
        <WebKPI label="Uptime 30d" value="98.4%" trend="▲ 0.3%" spark="taupe"/>
        <WebKPI label="Last Seen" value="2m" trend="online" spark="ok"/>
        <WebKPI label="Firmware" value="2.3" trend="update ready" trendS="warn" spark="warn"/>
      </Row>
      <Row gap={14} align="stretch">
        <Col gap={14} style={{flex:'1.4',minWidth:0}}>
          <Card pad={16}>
            <Row justify="space-between" align="center"><Lbl>Health Metrics</Lbl><Seg items={['24h','7d','30d']} active="7d"/></Row>
            <Row gap={14} style={{marginTop:14}}>
              {[['Battery','ok'],['Temperature','warn'],['Signal','maint'],['Error rate','crit']].map((c,i)=>(
                <div key={i} className="hf-card-2" style={{flex:1,padding:11}}><Lbl style={{fontSize:9.5}}>{c[0]}</Lbl><div style={{marginTop:6}}><Spark w={150} h={34} color={`var(--${c[1]})`}/></div></div>
              ))}
            </Row>
          </Card>
          <Card pad={0} style={{overflow:'hidden'}}>
            <Row justify="space-between" align="center" style={{padding:'13px 16px 8px'}}><Lbl>Event History</Lbl><span className="hf-label" style={{fontSize:10,color:'var(--maint)'}}>All events →</span></Row>
            <table className="hf-tbl">
              <thead><tr><th style={{width:90}}>Time</th><th>Type</th><th style={{width:120}}>Severity</th><th>Description</th></tr></thead>
              <tbody>{[['14:02','Status','ok','Came online'],['12:48','Firmware','maint','OTA check'],['09:11','Calibration','ok','Passed'],['2d','Diagnostic','warn','Thermal marginal']].map((e,i)=>(
                <tr key={i}><td><Mono style={{color:'var(--text-mute)'}}>{e[0]}</Mono></td><td style={{color:'var(--text)'}}>{e[1]}</td><td><Badge s={e[2]}/></td><td>{e[3]}</td></tr>
              ))}</tbody>
            </table>
          </Card>
        </Col>
        <Col gap={12} style={{width:300}}>
          <Card pad={14}><Lbl>Location Trail</Lbl><div style={{marginTop:10,borderRadius:8,overflow:'hidden'}}><MapField h={130} pins={[['ok','46%','50%']]}/></div><Row justify="space-between" align="center" style={{marginTop:8}}><Chip>7d ▾</Chip><span className="hf-label" style={{fontSize:10,color:'var(--maint)'}}>Open in Fleet Map</span></Row></Card>
          <Card pad={14}><Lbl>Assigned Team</Lbl><div style={{fontSize:13,fontWeight:600,color:'var(--paper)',marginTop:6}}>Team Bravo · Signals Div</div></Card>
          <Card pad={14}><Row justify="space-between" align="center"><div><Lbl>Calibration</Lbl><Row gap={6} align="center" style={{marginTop:6}}><Dot s="ok"/><span style={{fontSize:12,color:'var(--text)'}}>Pass · 12d ago</span></Row></div><Chip>78d left</Chip></Row></Card>
          <Card pad={14}><Row justify="space-between" align="center"><div><Lbl>Firmware</Lbl><Mono style={{fontSize:12,color:'var(--paper)',display:'block',marginTop:6}}>v2.3.0 → v2.4.1</Mono></div><Btn variant="accent" style={{padding:'6px 12px'}}>OTA</Btn></Row></Card>
        </Col>
      </Row>
    </WebShell>
  );
}

/* ---------------- EVENTS ---------------- */
function WEvents(){
  return (
    <WebShell active="Events">
      <ScreenHead eyebrow="Org-wide · virtualized" title="Events Log"
        right={<Row gap={8}><Chip><Icon k="cal" size={12}/> Last 24h</Chip><Chip>Device ▾</Chip><Chip>Type ▾</Chip><Chip>Severity ▾</Chip><Btn variant="accent"><Icon k="report" size={13}/> Export CSV</Btn></Row>}/>
      <Card pad={0} style={{overflow:'hidden'}}>
        <table className="hf-tbl">
          <thead><tr><th style={{width:110}}>Timestamp</th><th>Device</th><th>Event Type</th><th style={{width:120}}>Severity</th><th>Description</th><th style={{width:90}}>Source</th></tr></thead>
          <tbody>
            <tr><td><Mono style={{color:'var(--text-mute)'}}>14:02:11</Mono></td><td><Mono style={{color:'var(--paper)'}}>AC-9008</Mono></td><td style={{color:'var(--text)'}}>◬ Diagnostic</td><td><Badge s="crit"/></td><td>IMU self-test failed</td><td><span className="hf-label" style={{fontSize:10}}>agent</span></td></tr>
          </tbody>
        </table>
        {/* expanded row */}
        <div style={{background:'#0a1c40',borderTop:'1px solid var(--line)',borderBottom:'1px solid var(--line)',padding:16}}>
          <Row gap={18} align="stretch">
            <Col gap={6} style={{flex:1}}><Lbl>Payload</Lbl><div className="hf-inset" style={{padding:'10px 12px'}}><Col gap={5}>{['{"test":"imu_selftest",','  "axis":"gyro_z",','  "result":"FAIL","code":0x4C}'].map((l,i)=><Mono key={i} style={{fontSize:11,color:'var(--text-dim)'}}>{l}</Mono>)}</Col></div></Col>
            <Col gap={6} style={{flex:1}}><Lbl>Related events</Lbl><div style={{fontSize:12,color:'var(--text-dim)',lineHeight:1.6}}>2 prior diagnostics flagged thermal drift on this unit in the last 48h.</div><span className="hf-label" style={{fontSize:10,color:'var(--maint)'}}>Open device AC-9008 →</span></Col>
          </Row>
        </div>
        <table className="hf-tbl">
          <tbody>
            {[['13:58:40','AC-7741','⊹ Calibration','warn','Calibration window expiring','scheduler'],
              ['13:51:02','AC-3320','↻ Firmware','maint','Updated to v2.4.1','ota'],
              ['13:40:17','AC-7740','● Status','ok','Device came online','agent'],
              ['13:22:55','AC-5512','◍ Connectivity','off','Lost contact > 72h','monitor'],
              ['12:58:03','AC-6620','⊹ Calibration','ok','Calibration passed','tech']].map((e,i)=>(
              <tr key={i}><td style={{width:110}}><Mono style={{color:'var(--text-mute)'}}>{e[0]}</Mono></td><td><Mono style={{color:'var(--paper)'}}>{e[1]}</Mono></td><td style={{color:'var(--text)'}}>{e[2]}</td><td style={{width:120}}><Badge s={e[3]}/></td><td>{e[4]}</td><td style={{width:90}}><span className="hf-label" style={{fontSize:10}}>{e[5]}</span></td></tr>
            ))}
          </tbody>
        </table>
      </Card>
    </WebShell>
  );
}

/* ---------------- ALERTS ---------------- */
function WAlerts(){
  return (
    <WebShell active="Alerts">
      <ScreenHead eyebrow="7 active · 3 critical" title="Alerts"
        right={<Btn variant="ghost"><Icon k="gear" size={13}/> Alert Rules</Btn>}/>
      <Row gap={7} style={{marginBottom:14}}>
        {[['All',7,false],['Critical',3,true],['Warning',4,false],['Info',11,false]].map((t,i)=>(
          <div key={i} className="hf-chip" style={t[2]?{background:'var(--royal)',color:'var(--paper)',borderColor:'var(--royal-lift)',padding:'6px 12px'}:{padding:'6px 12px'}}>{t[0]} · {t[1]}</div>
        ))}
      </Row>
      <Col gap={9}>
        {[['crit','AC-9008','IMU self-test failed — device unresponsive','2m','Active'],
          ['crit','AC-7741','Calibration expired (88 days)','14m','Active'],
          ['crit','AC-5512','Offline > 72h','3h','Acknowledged'],
          ['warn','AC-3320','Thermal range marginal','38m','Snoozed'],
          ['warn','AC-7740','Firmware update available','1h','Active'],
          ['warn','AC-6620','Battery below 20%','2h','Active']].map((a,i)=>(
          <Card key={i} pad={0} style={{borderLeft:`3px solid var(--${a[0]})`}}>
            <Row align="center" gap={14} style={{padding:'12px 16px'}}>
              <Badge s={a[0]} style={{minWidth:78}}/>
              <Mono style={{fontSize:12,color:'var(--paper)',minWidth:70}}>{a[1]}</Mono>
              <span style={{flex:1,fontSize:13,color:'var(--text)'}}>{a[2]}</span>
              <span className="hf-mono" style={{fontSize:11,color:'var(--text-mute)'}}>{a[3]}</span>
              <Chip style={a[4]==='Active'?{color:'var(--taupe)'}:{}}>{a[4]}</Chip>
              <Row gap={6}><Chip>Ack</Chip><Chip>Snooze</Chip><Chip>Resolve</Chip></Row>
            </Row>
          </Card>
        ))}
      </Col>
    </WebShell>
  );
}

/* ---------------- REPORTS ---------------- */
function WReports(){
  return (
    <WebShell active="Reports">
      <ScreenHead eyebrow="Templates &amp; builder" title="Reports"
        right={<Btn variant="primary">＋ New Report</Btn>}/>
      <Lbl style={{marginBottom:10}}>Templates</Lbl>
      <Row gap={12} style={{marginBottom:18}}>
        {[['Fleet Health','donut + table',true],['Calibration Compliance','% in-window',false],['Uptime','30-day trend',false],['Event Frequency','by type',false]].map((t,i)=>(
          <Card key={i} pad={14} style={{flex:1,borderColor:t[2]?'var(--taupe)':'var(--line-soft)',background:t[2]?'color-mix(in srgb,var(--taupe) 9%,var(--panel-1))':'var(--panel-1)'}}>
            <div style={{width:30,height:30,borderRadius:8,background:'var(--panel-2)',border:'1px solid var(--line)',display:'flex',alignItems:'center',justifyContent:'center',color:'var(--taupe)',marginBottom:10}}><Icon k="report" size={16}/></div>
            <div style={{fontSize:13,fontWeight:600,color:'var(--paper)'}}>{t[0]}</div><div className="hf-label" style={{fontSize:9.5,marginTop:2}}>{t[1]}</div>
          </Card>
        ))}
      </Row>
      <Row gap={16} align="stretch">
        <Card pad={16} style={{width:260,flex:'none'}}>
          <Lbl>Parameters</Lbl>
          <Col gap={11} style={{marginTop:12}}>
            <Field label="Date range" value="Last 30 days"/>
            <Field label="Scope" value="All divisions"/>
            <Field label="Device type" value="All types"/>
            <Field label="Group by" value="Team"/>
          </Col>
        </Card>
        <Card pad={18} style={{flex:1,minWidth:0}}>
          <Row justify="space-between" align="center"><Lbl>Fleet Health Summary · Preview</Lbl><Row gap={8}><Btn variant="ghost" style={{padding:'6px 11px'}}>⬇ PDF</Btn><Btn variant="ghost" style={{padding:'6px 11px'}}>⬇ CSV</Btn></Row></Row>
          <Row gap={22} align="center" style={{marginTop:16}}>
            <Donut size={130} center="79%" sub="HEALTHY"/>
            <Col gap={10} style={{flex:1}}>
              <div><Lbl style={{fontSize:9.5}}>Uptime 30d</Lbl><div style={{marginTop:4}}><Spark w={240} color="var(--ok)"/></div></div>
              <div><Lbl style={{fontSize:9.5}}>Calibration compliance</Lbl><div style={{height:8,background:'var(--line-soft)',borderRadius:4,marginTop:6,overflow:'hidden'}}><div style={{width:'88%',height:'100%',background:'var(--taupe)',borderRadius:4}}/></div></div>
            </Col>
          </Row>
          <Card pad={0} style={{overflow:'hidden',marginTop:16}}>
            <table className="hf-tbl"><thead><tr><th>Team</th><th>Healthy</th><th>Warning</th><th>Critical</th><th>Offline</th></tr></thead>
            <tbody>{[['Bravo',42,5,1,3],['Alpha',38,7,2,6],['Recon',29,3,4,2]].map((r,i)=>(<tr key={i}><td style={{color:'var(--paper)'}}>{r[0]}</td><td>{r[1]}</td><td>{r[2]}</td><td>{r[3]}</td><td>{r[4]}</td></tr>))}</tbody></table>
          </Card>
        </Card>
      </Row>
    </WebShell>
  );
}

/* ---------------- SETTINGS ---------------- */
function WSettings(){
  return (
    <WebShell active="Settings">
      <ScreenHead eyebrow="Your preferences" title="Settings"/>
      <Row gap={16} align="flex-start">
        <SubNav items={['Profile','Notifications','Display','API Keys']} active="Profile" label="Settings"/>
        <Col gap={14} style={{flex:1,minWidth:0}}>
          <Card pad={16}>
            <Lbl>Profile</Lbl>
            <Row gap={14} align="center" style={{marginTop:12}}>
              <div className="hf-avatar" style={{width:54,height:54,fontSize:18}}>MO</div>
              <Col gap={10} style={{flex:1}}>
                <Row gap={10}><Field label="Name" value="M. Operator"/><Field label="Role" value="Ops Analyst (read-only)"/></Row>
                <Field label="Email" value="m.operator@jsoc-tfa.mil"/>
              </Col>
            </Row>
            <Row gap={8} style={{marginTop:14}}><Btn variant="ghost">Change Password</Btn><Btn variant="ghost">Configure MFA</Btn></Row>
          </Card>
          <Row gap={14}>
            <Card pad={16} style={{flex:1}}><Lbl>Notifications</Lbl><Col gap={11} style={{marginTop:12}}>{[['Critical alerts','email + in-app',true],['Warnings','in-app',true],['Weekly digest','email',false]].map((r,i)=>(<Row key={i} justify="space-between" align="center"><div><div style={{fontSize:12.5,color:'var(--text)'}}>{r[0]}</div><div className="hf-label" style={{fontSize:9}}>{r[1]}</div></div><Toggle on={r[2]}/></Row>))}</Col></Card>
            <Card pad={16} style={{flex:1}}><Lbl>Display</Lbl><Col gap={12} style={{marginTop:12}}><Seg items={['Light','Dark','System']} active="Dark"/><Row justify="space-between" align="center"><span style={{fontSize:12.5,color:'var(--text)'}}>Timezone</span><Chip>UTC ▾</Chip></Row><Row justify="space-between" align="center"><span style={{fontSize:12.5,color:'var(--text)'}}>Units</span><Chip>Metric ▾</Chip></Row></Col></Card>
          </Row>
          <Card pad={16}><Row justify="space-between" align="center"><Lbl>API Keys</Lbl><Btn variant="ghost" style={{padding:'6px 11px'}}>＋ Generate</Btn></Row>
            <Card pad={0} style={{overflow:'hidden',marginTop:10}}><table className="hf-tbl"><thead><tr><th>Label</th><th>Key</th><th>Scopes</th><th>Last used</th><th></th></tr></thead>
            <tbody>{[['Fleet read-only','ak_•••• 4f2a','read','2h'],['Reports export','ak_•••• 9c11','read · export','1d']].map((r,i)=>(<tr key={i}><td style={{color:'var(--paper)'}}>{r[0]}</td><td><Mono style={{color:'var(--text-mute)'}}>{r[1]}</Mono></td><td>{r[2]}</td><td><Mono style={{color:'var(--text-mute)'}}>{r[3]}</Mono></td><td><span className="hf-label" style={{fontSize:10,color:'var(--crit)'}}>Revoke</span></td></tr>))}</tbody></table></Card>
          </Card>
        </Col>
      </Row>
    </WebShell>
  );
}

const WEB_SCREENS = {login:WLogin, dashboard:WDashboard, fleetmap:WFleetMap, devices:WDevices, detail:WDetail, events:WEvents, alerts:WAlerts, reports:WReports, settings:WSettings};
function HFWeb({screen='dashboard'}){ const C=WEB_SCREENS[screen]||WDashboard; return <C/>; }
window.HFWeb = HFWeb;
