function VehicleScreen({ vehicle, onBack, onNav, onOpen }) {
  const { Button, Badge, Tabs, SpecList, Price, Dialog, Toast, Tooltip, Icon, Logo } = window.Ds55VeCulosDesignSystem_b5c845;
  const [tab, setTab] = React.useState('FICHA');
  const [foto, setFoto] = React.useState(0);
  const [midia, setMidia] = React.useState('FOTOS');
  const fotos = vehicle.fotos || [];
  const trilho = React.useRef(null);
  /* uma trilha só: no celular quem passa a foto é o dedo, no desktop as setas.
     O índice corrente fica num ref — ler o scrollLeft no meio de uma rolagem
     suave devolveria a foto que está passando, não a que foi pedida. */
  const fotoRef = React.useRef(0);
  const mostrar = React.useCallback((i, suave = true) => {
    fotoRef.current = i;
    setFoto(i);
    const el = trilho.current;
    if (el) el.scrollTo({ left: i * el.clientWidth, behavior: suave ? 'auto' : 'instant' });
  }, []);
  const passa = React.useCallback(d => {
    const n = fotos.length;
    if (!n) return;
    mostrar((fotoRef.current + d + n) % n);
  }, [fotos.length, mostrar]);
  const aoRolar = () => {
    const el = trilho.current;
    if (!el || !el.clientWidth) return;
    const i = Math.round(el.scrollLeft / el.clientWidth);
    fotoRef.current = i;
    setFoto(i);
  };
  React.useEffect(() => {
    const tecla = e => { if (e.key === 'ArrowRight') passa(1); if (e.key === 'ArrowLeft') passa(-1); };
    window.addEventListener('keydown', tecla);
    return () => window.removeEventListener('keydown', tecla);
  }, [passa]);
  /* a trilha some ao trocar para vídeo: ao voltar, recoloca na foto corrente */
  React.useEffect(() => {
    if (midia === 'VÍDEO') return;
    const el = trilho.current;
    if (el) el.scrollTo({ left: foto * el.clientWidth, behavior: 'instant' });
  }, [midia]);
  const [tocando, setTocando] = React.useState(false);
  const [modal, setModal] = React.useState(null); /* 'visita' | 'laudo' */
  const [horario, setHorario] = React.useState(null);
  const seg = (window.SEGMENTOS || []).find(s => s.id === vehicle.segmento) || { label: 'CURADORIA 55', cor: 'var(--seg-primeiro)', texto: 'var(--preto-asfalto)' };
  /* linha de ficha: ícone, rótulo em etiqueta e valor em fonte de leitura.
     O SpecList do DS (mono, caixa alta, sem quebra) serve para dados curtos;
     para frases ele espreme e estoura — por isso as abas usam esta linha. */
  const Linha = ({ icon, label, value }) => (
    <div style={{ display: 'flex', alignItems: 'baseline', gap: 'var(--esp-3)', padding: 'var(--esp-3) 0', borderBottom: 'var(--borda-fina) solid var(--border-hairline)' }}>
      <span style={{ alignSelf: 'center', display: 'inline-flex' }}><Icon name={icon} size={15} color="var(--text-muted)" /></span>
      {label && <span style={{ font: 'var(--type-etiqueta-p)', letterSpacing: 'var(--tracking-etiqueta)', textTransform: 'uppercase', color: 'var(--text-muted)', flex: '0 0 11ch' }}>{label}</span>}
      <span style={{ font: 'var(--type-corpo-p)', minWidth: 0 }}>{value}</span>
    </div>
  );
  const Grupo = ({ titulo, children }) => (
    <div style={{ display: 'flex', flexDirection: 'column' }}>
      {titulo && <span style={{ font: 'var(--type-etiqueta-p)', textTransform: 'uppercase', letterSpacing: 'var(--tracking-etiqueta)', color: 'var(--text-muted)', paddingBottom: 'var(--esp-2)' }}>{titulo}</span>}
      {children}
    </div>
  );
  const conteudo = {
    FICHA: (
      <div className="grade-ficha">
        <Grupo>
          <Linha icon="calendar" label="ANO" value={vehicle.anoRotulo || String(vehicle.year)} />
          <Linha icon="gauge" label="KM" value={vehicle.km} />
          <Linha icon="settings-2" label="CÂMBIO" value={vehicle.transmission} />
          <Linha icon="fuel" label="COMBUSTÍVEL" value={vehicle.fuel} />
          <Linha icon="palette" label="COR" value={vehicle.cor || '—'} />
        </Grupo>
        <Grupo>
          <Linha icon="users" label="DONOS" value={vehicle.donos || '—'} />
          <Linha icon="droplet" label="CONSUMO" value={vehicle.consumo || '—'} />
          <Linha icon="receipt" label="IPVA" value={vehicle.ipva || '—'} />
          <Linha icon="repeat" label="TROCA" value={vehicle.troca || '—'} />
          <Linha icon="hash" label="ESTOQUE" value={vehicle.id} />
        </Grupo>
      </div>
    ),
    EQUIPAMENTOS: (
      <div className="grade-ficha">
        <Grupo titulo="DE FÁBRICA">
          {(vehicle.equipamentos || []).map(e => <Linha key={e} icon="circle-check" value={e} />)}
        </Grupo>
        <Grupo titulo="PREPARO NA 55">
          {(vehicle.preparo || []).map(e => <Linha key={e} icon="badge-check" value={e} />)}
        </Grupo>
      </div>
    ),
    LAUDO: vehicle.laudoPendente ? (
      <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--esp-4)' }}>
        <Grupo>
          <Linha icon="clock" label="CAUTELAR" value="Em emissão — sai antes da entrega" />
          <Linha icon="file-text" label="ENVIO" value="No seu WhatsApp, assim que ficar pronto" />
          <Linha icon="shield-check" label="GARANTIA" value="A compra só se confirma com o laudo aprovado" />
        </Grupo>
        <p style={{ margin: 0, font: 'var(--type-corpo-p)', color: 'var(--text-muted)', maxWidth: '58ch' }}>{vehicle.laudo}</p>
      </div>
    ) : (
      <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--esp-4)' }}>
        <Grupo>
          <Linha icon="shield-check" label="CAUTELAR" value="Dekra · aprovado" />
          <Linha icon="circle-check" label="ESTRUTURA" value="Sem indício de sinistro" />
          <Linha icon="circle-check" label="CHASSI" value="Original, sem remarcação" />
          <Linha icon="circle-check" label="LEILÃO" value="Sem passagem" />
        </Grupo>
        <p style={{ margin: 0, font: 'var(--type-corpo-p)', color: 'var(--text-muted)', maxWidth: '58ch' }}>{vehicle.curadoria}</p>
      </div>
    ),
    'HISTÓRICO': (
      <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--esp-4)' }}>
        <Grupo>
          <Linha icon="users" label="DONOS" value={vehicle.donos || '—'} />
          <Linha icon="wrench" label="REVISÕES" value={vehicle.revisoes || '—'} />
          <Linha icon="receipt" label="IPVA" value={vehicle.ipva || '—'} />
          <Linha icon="circle-check" label="MULTAS" value="Sem débito" />
        </Grupo>
        <p style={{ margin: 0, font: 'var(--type-corpo-p)', color: 'var(--text-muted)', maxWidth: '58ch' }}>Documentação conferida antes do anúncio. O histórico completo acompanha o laudo em PDF.</p>
      </div>
    )
  };
  return (
    <div style={{ background: 'var(--papel)', minHeight: '100%' }}>
      <Header count={window.ESTOQUE.length} rota="estoque" onNav={onNav || onBack} dark />

      {/* cabeçalho escuro: o carro se apresenta antes da ficha */}
      <section style={{ background: 'var(--preto-asfalto)', color: 'var(--papel)' }}>
        <div style={{ height: 5, background: seg.cor }} />
        <div className="faixa" style={{ paddingTop: 'var(--esp-5)', paddingBottom: 'var(--esp-5)' }}>
          <button onClick={onBack} style={{ appearance: 'none', background: 'none', border: 'none', cursor: 'pointer', padding: 0, display: 'flex', alignItems: 'center', gap: 6, font: 'var(--type-etiqueta)', letterSpacing: 'var(--tracking-etiqueta)', color: '#9A9A93', marginBottom: 'var(--esp-6)', whiteSpace: 'nowrap' }}>
            <Icon name="arrow-left" size={14} /> VOLTAR AO ESTOQUE
          </button>
          <div className="ficha-cabecalho">
            <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--esp-3)' }}>
              <span style={{ display: 'inline-flex', alignItems: 'center', gap: 8, font: 'var(--type-etiqueta)', letterSpacing: 'var(--tracking-etiqueta)', color: '#9A9A93' }}>
                <Icon name={seg.icone || 'badge-check'} size={14} color={seg.cor} />{vehicle.marca ? `${vehicle.marca} · ` : ''}{seg.label} · {vehicle.id}
              </span>
              <h1 style={{ margin: 0, font: 'var(--peso-titulo) clamp(32px,3.4vw,48px)/1 var(--font-core)', letterSpacing: 'var(--tracking-titulo)' }}>{vehicle.model}</h1>
              <SpecList className="specs-ficha" tone="inherit" withIcons style={{ opacity: 0.72 }} items={[{ value: vehicle.anoRotulo || String(vehicle.year), icon: 'calendar' }, { value: vehicle.km, icon: 'gauge' }, { value: vehicle.transmission, icon: 'settings-2' }, { value: vehicle.engine, icon: 'fuel' }]} />
            </div>
            <Price className="preco-ficha" value={vehicle.price} size="lg" align="right" note="À VISTA · SEM TAXA ESCONDIDA" style={{ color: 'var(--papel)' }} />
          </div>
        </div>
      </section>

      <div className="faixa" style={{ paddingTop: 'var(--esp-7)', paddingBottom: 'var(--esp-7)' }}>
        <div className="grade-veiculo" style={{ alignItems: 'start' }}>
          <div>
            <div style={{ display: 'flex', gap: 'var(--esp-5)', paddingBottom: 'var(--esp-3)' }}>
              {[`FOTOS · ${fotos.length}`, 'VÍDEO'].map(m => (
                <button key={m} onClick={() => { setMidia(m); setTocando(false); }} style={{
                  appearance: 'none', background: 'none', border: 'none', cursor: 'pointer', padding: '0 0 3px',
                  font: 'var(--type-etiqueta)', textTransform: 'uppercase', letterSpacing: 'var(--tracking-etiqueta)', whiteSpace: 'nowrap',
                  color: midia === m ? 'var(--text-title)' : 'var(--text-muted)',
                  borderBottom: `var(--borda-grossa) solid ${midia === m ? seg.cor : 'transparent'}`
                }}>{m}{m === 'VÍDEO' && ' · 3 MIN'}</button>
              ))}
            </div>
            {midia !== 'VÍDEO' ? (
              <div className="galeria" style={{ aspectRatio: '4 / 3', background: 'var(--papel-2)', overflow: 'hidden' }}>
                {fotos.length
                  ? <div className="galeria-trilho" ref={trilho} onScroll={aoRolar}>
                      {fotos.map((src, i) => (
                        <div className="galeria-slide" key={i}>
                          <img src={src} alt={`${vehicle.model} — foto ${i + 1} de ${fotos.length}`} loading={i < 3 ? 'eager' : 'lazy'} />
                        </div>
                      ))}
                    </div>
                  : <span style={{ position: 'absolute', inset: 0, display: 'grid', placeItems: 'center', font: 'var(--type-etiqueta-p)', textTransform: 'uppercase', letterSpacing: 'var(--tracking-etiqueta)', color: 'var(--text-muted)' }}>FOTO · FUNDO NEUTRO · 4:3</span>}
                <span style={{ position: 'absolute', bottom: 'var(--esp-4)', right: 'var(--esp-4)' }}>
                  <Logo lockup="simbolo" color="branco" height={22} assetBase="/assets/logo/" />
                </span>
                {fotos.length > 0 && <span style={{ position: 'absolute', bottom: 'var(--esp-4)', left: 'var(--esp-4)', background: 'var(--preto-asfalto)', color: 'var(--papel)', padding: '4px 8px', font: 'var(--type-etiqueta-p)', letterSpacing: 'var(--tracking-etiqueta)', whiteSpace: 'nowrap' }}>{String(foto + 1).padStart(2, '0')} / {String(fotos.length).padStart(2, '0')}</span>}
                {fotos.length > 1 && ['anterior', 'proxima'].map(dir => (
                  <button className="galeria-seta" key={dir} aria-label={dir === 'anterior' ? 'Foto anterior' : 'Próxima foto'}
                    onClick={e => { e.stopPropagation(); passa(dir === 'anterior' ? -1 : 1); }}
                    style={{
                      position: 'absolute', top: '50%', transform: 'translateY(-50%)',
                      [dir === 'anterior' ? 'left' : 'right']: 'var(--esp-4)',
                      width: 48, height: 48, display: 'grid', placeItems: 'center', cursor: 'pointer',
                      border: 'none', background: 'var(--preto-asfalto)', color: 'var(--papel)', opacity: 0.88,
                      transition: 'var(--transicao-ui)'
                    }}>
                    <Icon name={dir === 'anterior' ? 'chevron-left' : 'chevron-right'} size={22} color="var(--papel)" />
                  </button>
                ))}
              </div>
            ) : (
              <div style={{ position: 'relative', aspectRatio: '16 / 9', background: 'var(--preto-asfalto)', overflow: 'hidden', display: 'grid', placeItems: 'center' }}>
                <span style={{ font: 'var(--type-etiqueta-p)', textTransform: 'uppercase', letterSpacing: 'var(--tracking-etiqueta)', color: '#6E6E68' }}>VÍDEO · APRESENTAÇÃO SEM CORTE · 16:9</span>
                <button onClick={() => setTocando(!tocando)} aria-label={tocando ? 'Pausar' : 'Dar play'} style={{
                  position: 'absolute', width: 74, height: 74, borderRadius: '50%', cursor: 'pointer',
                  border: 'none', background: seg.cor, color: seg.texto, display: 'grid', placeItems: 'center',
                  transition: 'var(--transicao-ui)'
                }}>
                  <Icon name={tocando ? 'pause' : 'play'} size={26} color={seg.texto} />
                </button>
                <div style={{ position: 'absolute', left: 0, right: 0, bottom: 0, padding: 'var(--esp-4)', display: 'flex', flexDirection: 'column', gap: 'var(--esp-3)' }}>
                  <div style={{ height: 3, background: 'rgba(242,240,235,0.25)' }}>
                    <div style={{ height: '100%', width: tocando ? '38%' : '0%', background: seg.cor, transition: 'width var(--dur-lento) var(--ease-padrao)' }} />
                  </div>
                  <SpecList tone="inherit" style={{ color: 'var(--papel)', opacity: 0.7 }}
                    items={[tocando ? '01:08 / 03:00' : '00:00 / 03:00', 'GRAVADO NA LOJA', 'SEM TRILHA']} />
                </div>
              </div>
            )}
            <div className="galeria-miniaturas" style={{ display: midia !== 'VÍDEO' ? 'flex' : 'none', marginTop: 'var(--esp-3)', paddingBottom: 'var(--esp-2)' }}>
              {fotos.map((src, i) => (
                <button key={i} aria-label={`Ver foto ${i + 1}`} onClick={() => mostrar(i)} style={{
                  appearance: 'none', padding: 0, width: 78, flex: '0 0 auto', aspectRatio: '4 / 3', cursor: 'pointer', overflow: 'hidden',
                  background: 'var(--papel-2)',
                  border: i === foto ? `var(--borda-grossa) solid ${seg.cor}` : 'var(--borda-fina) solid var(--border-default)'
                }}>
                  <img src={src} alt="" loading="lazy" style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block', opacity: i === foto ? 1 : 0.75 }} />
                </button>
              ))}
            </div>
          </div>

          {/* coluna de compra: bloco escuro, o único CTA colorido do site */}
          <div className="coluna-compra" style={{ display: 'flex', flexDirection: 'column', gap: 'var(--esp-4)' }}>
            <div style={{ background: 'var(--preto-asfalto)', color: 'var(--papel)', padding: 'var(--esp-5)', display: 'flex', flexDirection: 'column', gap: 'var(--esp-4)' }}>
              <div style={{ display: 'flex', gap: 'var(--esp-2)', flexWrap: 'wrap' }}>
                {vehicle.laudoPendente
                  ? <Badge tone="contorno" style={{ boxShadow: 'inset 0 0 0 1px var(--papel)', color: 'var(--papel)' }}>LAUDO A CAMINHO</Badge>
                  : <Badge tone="acento">LAUDO APROVADO</Badge>}
                {vehicle.status && <Badge tone={vehicle.status === 'RESERVADO' ? 'alerta' : 'contorno'} style={vehicle.status === 'RESERVADO' ? null : { boxShadow: 'inset 0 0 0 1px var(--papel)', color: 'var(--papel)' }}>{vehicle.status}</Badge>}
              </div>
              <Price value={vehicle.price} size="md" note={vehicle.fipe ? `FIPE R$ ${vehicle.fipe.toLocaleString('pt-BR')}` : 'ENTRADA + 48X NO BOLETO'} style={{ color: 'var(--papel)' }} />
              <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--esp-3)' }}>
                <Button size="lg" variant="accent" full onClick={() => { setModal('visita'); setHorario(null); }}>Agendar visita</Button>
                <Button size="lg" variant="secondary" full onClick={() => setModal('laudo')} style={{ color: 'var(--papel)', borderColor: 'var(--papel)' }}>Receber o laudo</Button>
              </div>
              <SpecList direction="column" tone="inherit" withIcons style={{ opacity: 0.65 }}
                items={[{ label: 'VISITA', value: 'SEG A SEX · 9H — 18H', icon: 'clock' }, { label: 'LOCAL', value: 'CURITIBA, PR', icon: 'map-pin' }, { label: 'TROCA', value: 'ACEITA NA AVALIAÇÃO', icon: 'repeat' }]} />
            </div>

            <div style={{ background: 'var(--surface-raised)', border: 'var(--borda-fina) solid var(--border-default)', borderTop: `4px solid ${seg.cor}`, padding: 'var(--esp-4)' }}>
              <div style={{ font: 'var(--type-etiqueta)', textTransform: 'uppercase', letterSpacing: 'var(--tracking-etiqueta)', color: 'var(--text-muted)', display: 'flex', alignItems: 'center', gap: 6 }}>
                <Icon name="shield-check" size={14} /> NOTA DE CURADORIA
                <Tooltip content="ESCRITA ANTES DA VISITA"><Icon name="info" size={13} /></Tooltip>
              </div>
              <p style={{ margin: 'var(--esp-2) 0 0', font: 'var(--type-corpo-p)' }}>{vehicle.curadoria}</p>
            </div>
          </div>

          {/* abas: no desktop seguem na coluna 1, sob as miniaturas; no celular, depois do CTA */}
          <div>
            <Tabs className="abas" items={['FICHA', 'EQUIPAMENTOS', 'LAUDO', 'HISTÓRICO']} value={tab} onChange={setTab} />
            <div style={{ paddingTop: 'var(--esp-5)' }}>{conteudo[tab]}</div>
          </div>
        </div>
      </div>

      {/* os demais carros do estoque, para a visita não morrer nesta ficha */}
      {onOpen && window.ESTOQUE.length > 1 && (
        <section style={{ borderTop: 'var(--borda-fina) solid var(--border-hairline)' }}>
          <div className="faixa" style={{ paddingTop: 'var(--esp-7)', paddingBottom: 'var(--esp-7)' }}>
            <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--esp-3)', paddingBottom: 'var(--esp-5)' }}>
              <Icon name="layers" size={15} color="var(--text-muted)" />
              <span style={{ font: 'var(--type-etiqueta)', textTransform: 'uppercase', letterSpacing: 'var(--tracking-etiqueta)', color: 'var(--text-muted)' }}>OUTROS DO ESTOQUE</span>
            </div>
            <div className="grade-continue">
              {window.ESTOQUE.filter(v => v.id !== vehicle.id).map(v => {
                const cor = ((window.SEGMENTOS || []).find(x => x.id === v.segmento) || {}).cor || 'var(--preto-asfalto)';
                return (
                  <article key={v.id} onClick={() => onOpen(v)} style={{ cursor: 'pointer', display: 'flex', flexDirection: 'column', gap: 'var(--esp-3)' }}>
                    <div style={{ height: 4, background: cor }} />
                    <div style={{ position: 'relative', aspectRatio: '4 / 3', background: 'var(--papel-2)', overflow: 'hidden' }}>
                      {(v.fotos || [])[0] && <img src={v.fotos[0]} alt={v.model} loading="lazy" style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block', filter: v.status === 'VENDIDO' ? 'grayscale(1)' : 'none' }} />}
                      {v.status && <span style={{ position: 'absolute', bottom: 'var(--esp-3)', left: 'var(--esp-3)', background: 'var(--preto-asfalto)', color: 'var(--papel)', padding: '5px 12px', borderRadius: 'var(--raio-pill)', font: 'var(--type-etiqueta-p)', textTransform: 'uppercase', letterSpacing: 'var(--tracking-etiqueta)', whiteSpace: 'nowrap' }}>{v.status}</span>}
                    </div>
                    <div style={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between', gap: 'var(--esp-3)' }}>
                      <h3 style={{ margin: 0, font: 'var(--peso-titulo) 19px/1.15 var(--font-core)', letterSpacing: 'var(--tracking-titulo)', minWidth: 0 }}>{v.model}</h3>
                      <span style={{ font: 'var(--peso-titulo) 17px/1 var(--font-core)', letterSpacing: 'var(--tracking-titulo)', whiteSpace: 'nowrap', flex: '0 0 auto' }}>R$ {v.price.toLocaleString('pt-BR')}</span>
                    </div>
                    <SpecList withIcons items={[{ value: v.anoRotulo || String(v.year), icon: 'calendar' }, { value: v.km, icon: 'gauge' }, { value: v.transmission, icon: 'settings-2' }]} />
                  </article>
                );
              })}
            </div>
          </div>
        </section>
      )}

      <Dialog className="modal-55" open={modal === 'visita'} width={620} title="Agendar visita" onClose={() => setModal(null)}>
        <div style={{ display: 'flex', flexDirection: 'column', gap: 'var(--esp-5)', paddingBottom: 'var(--esp-5)' }}>
          <Agenda valor={horario} onChange={setHorario} />
          <LeadForm vehicle={vehicle} assunto="visita" horario={horario} />
        </div>
      </Dialog>
      <Dialog className="modal-55" open={modal === 'laudo'} width={520} title="Receber o laudo" onClose={() => setModal(null)}>
        <div style={{ paddingBottom: 'var(--esp-5)' }}>
          <LeadForm vehicle={vehicle} assunto="laudo" />
        </div>
      </Dialog>

    </div>
  );
}

Object.assign(window, { VehicleScreen });
