const { BrandLock, Button, Input, Card, Badge, Icon, Modal, SectionHeader, KpiCard, StatusDot } = window.KKPMarineDigitalDesignSystem_4fef83;

/* Mirrors the design system's own PortalFooter (see _ds_bundle.js) — that
   component references BrandLock as a bare free variable that only resolves
   inside its own module scope, so importing it directly throws here. Same
   markup and copy, wired to the BrandLock this file already has in scope. */
function OmsFooter(){
  const cols = [
    { h:'Tentang KKP', items:['Sejarah','Visi dan Misi','Tugas dan Fungsi','Struktur Organisasi'] },
    { h:'Publikasi', items:['Siaran Pers','Infografis','E-Majalah Segara','Video Kegiatan'] },
    { h:'Layanan', items:['KUSUKA','Portal Data KP','PPID','JDIH','LAPOR!'] },
  ];
  return (
    <footer style={{background:'var(--kkp-indigo-900)',color:'#fff',marginTop:'var(--space-20)'}}>
      <div style={{maxWidth:'var(--layout-max)',margin:'0 auto',padding:'var(--space-16) var(--layout-gutter) var(--space-8)',display:'grid',gridTemplateColumns:'1.4fr repeat(3,1fr)',gap:'var(--space-10)'}}>
        <div>
          <BrandLock src={(window.__resources && window.__resources.logoMark) || '../../assets/logo-kkp-mark.png'} product="Republik Indonesia" inverse height={52} />
          <p style={{marginTop:'var(--space-4)',fontSize:'var(--type-body-sm-size)',color:'rgba(255,255,255,.72)',lineHeight:1.7}}>
            Jl. Medan Merdeka Timur No.16, Jakarta Pusat<br />
            Telp. (021) 3519070 ext. 7433 · Fax (021) 3864293<br />
            humas.kkp@kkp.go.id · Call Center 141
          </p>
        </div>
        {cols.map(c=>(
          <div key={c.h}>
            <div style={{fontSize:'var(--type-label-size)',fontWeight:700,letterSpacing:'var(--type-label-tracking)',textTransform:'uppercase',color:'var(--kkp-azure-300)',marginBottom:'var(--space-4)'}}>{c.h}</div>
            {c.items.map(i=>(
              <a key={i} href="#" onClick={e=>e.preventDefault()} style={{display:'block',padding:'5px 0',border:'none',fontSize:'var(--type-body-sm-size)',color:'rgba(255,255,255,.78)'}}>{i}</a>
            ))}
          </div>
        ))}
      </div>
      <div style={{borderTop:'1px solid rgba(255,255,255,.14)',padding:'var(--space-4) var(--layout-gutter)'}}>
        <div style={{maxWidth:'var(--layout-max)',margin:'0 auto',display:'flex',justifyContent:'space-between',fontSize:'var(--type-caption-size)',color:'rgba(255,255,255,.6)'}}>
          <span>© 2026 Kementerian Kelautan dan Perikanan Republik Indonesia</span>
          <span>Kebijakan Privasi · Peta Situs · Aksesibilitas</span>
        </div>
      </div>
    </footer>
  );
}

/* Fades + slides a section in the first time it scrolls into view — pure
   IntersectionObserver, no animation library. */
function Reveal({ children, style }){
  const ref = React.useRef(null);
  const [shown,setShown] = React.useState(false);
  React.useEffect(()=>{
    const el = ref.current;
    if (!el) return;
    const io = new IntersectionObserver(([entry])=>{
      if (entry.isIntersecting) { setShown(true); io.disconnect(); }
    }, { threshold: 0.15 });
    io.observe(el);
    return () => io.disconnect();
  }, []);
  return (
    <div ref={ref} style={{...style, opacity:shown?1:0, transform:shown?'none':'translateY(24px)',
      transition:'opacity .7s var(--ease-standard), transform .7s var(--ease-standard)'}}>
      {children}
    </div>
  );
}

/* Dark frosted-glass panel with hairline-divided rows, in the vein of
   webflow.com/made-in-webflow/website/glassmorphism-pricing-table — one big
   glass surface rather than N separate floating cards. */
const darkGlassPanel = {
  background:'rgba(11,18,32,.55)', backdropFilter:'blur(24px) saturate(180%)', WebkitBackdropFilter:'blur(24px) saturate(180%)',
  border:'1px solid rgba(255,255,255,.14)', borderRadius:'var(--radius-lg)', boxShadow:'0 24px 64px rgba(0,0,0,.28)', overflow:'hidden',
};

const FEATURED_APPS = [
  {id:'digitaltwin',kicker:'Ekosistem 3D',title:'Marine Ecosystem Digital Twin',description:'Jelajahi perubahan historis mangrove, lamun, dan terumbu karang dari pesisir hingga bawah laut.',icon:'globe',metric:'2018–2025',metricLabel:'rentang histori',image:'https://images.unsplash.com/photo-1546026423-cc4642628d2b?auto=format&fit=crop&w=1200&q=80'},
  {id:'realtime',kicker:'Situation room',title:'Realtime Monitoring',description:'Pantau kapal, pelabuhan, kawasan konservasi, alert GeoEvent, dan laporan lapangan dalam satu tampilan.',icon:'graph-time-series',metric:'24/7',metricLabel:'monitoring aktif',image:'https://images.unsplash.com/photo-1524661135-423995f22d0b?auto=format&fit=crop&w=1200&q=80'},
  {id:'evika',kicker:'Konservasi',title:'Dashboard EVIKA',description:'Bandingkan efektivitas pengelolaan kawasan konservasi per tahun dan buka detail setiap kawasan.',icon:'graph-bar',metric:'127',metricLabel:'kawasan',image:'https://images.unsplash.com/photo-1530053969600-caed2596d242?auto=format&fit=crop&w=1200&q=80'},
  {id:'bluecarbon',kicker:'Ekonomi biru',title:'Blue Carbon Intelligence',description:'Analisis potensi karbon mangrove dan lamun, risiko kehilangan habitat, serta peluang restorasi.',icon:'polygon-vertices',metric:'2D + 3D',metricLabel:'analisis spasial',image:'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?auto=format&fit=crop&w=1200&q=80'},
  {id:'search',kicker:'Satu Data KKP',title:'Katalog Data Geospasial',description:'Temukan dataset dan layanan peta resmi KKP, lalu tambahkan langsung ke ruang kerja analisis.',icon:'data',metric:'12.480',metricLabel:'data tersedia',image:'https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&fit=crop&w=1200&q=80'},
];

function FeaturedAppsCarousel({go}){
  const scroller=React.useRef(null),[active,setActive]=React.useState(0);
  const move=(index)=>{const next=Math.max(0,Math.min(FEATURED_APPS.length-1,index));setActive(next);const node=scroller.current,el=node?.children[next],first=node?.children[0];if(node&&el&&first)node.scrollTo({left:el.offsetLeft-first.offsetLeft,behavior:'smooth'});};
  const onScroll=()=>{const node=scroller.current,first=node?.children[0];if(!node||!first)return;setActive(Math.max(0,Math.min(FEATURED_APPS.length-1,Math.round(node.scrollLeft/(first.clientWidth+16)))));};
  return <div>
    <div ref={scroller} onScroll={onScroll} style={{display:'flex',gap:16,overflowX:'auto',padding:'6px max(var(--layout-gutter),calc((100vw - var(--layout-max))/2 + var(--layout-gutter))) 16px',scrollSnapType:'x mandatory',scrollbarWidth:'none'}}>
      {FEATURED_APPS.map((app,index)=><article key={app.id} onClick={()=>go(app.id)} style={{position:'relative',flex:'0 0 280px',height:292,scrollSnapAlign:'start',overflow:'hidden',borderRadius:'var(--radius-lg)',boxShadow:active===index?'0 16px 38px rgba(18,21,74,.2)':'var(--shadow-md)',cursor:'pointer',transform:active===index?'translateY(-2px)':'none',transition:'transform .22s var(--ease-standard),box-shadow .22s var(--ease-standard)',background:'var(--kkp-indigo-900)'}}>
        <img src={app.image} alt="" style={{position:'absolute',inset:0,width:'100%',height:'100%',objectFit:'cover'}}/>
        <div style={{position:'absolute',inset:0,background:'linear-gradient(0deg,rgba(11,18,32,.98) 0%,rgba(18,21,74,.82) 58%,rgba(11,18,32,.08) 100%)'}}/>
        <div style={{position:'absolute',inset:'auto 0 0',zIndex:1,padding:'18px',color:'#fff'}}>
          <div style={{display:'flex',alignItems:'center',gap:7}}><span style={{width:28,height:28,borderRadius:'var(--radius-sm)',display:'grid',placeItems:'center',background:'rgba(0,158,232,.26)',border:'1px solid rgba(255,255,255,.18)'}}><Icon name={app.icon} size={14} style={{filter:'invert(1)'}}/></span><span className="kkp-eyebrow" style={{fontSize:9,color:'var(--kkp-lime-500)'}}>{app.kicker}</span></div>
          <h3 style={{fontSize:18,lineHeight:1.2,margin:'11px 0 6px',letterSpacing:'-.01em'}}>{app.title}</h3>
          <p style={{fontSize:11.5,lineHeight:1.5,color:'rgba(255,255,255,.72)',margin:0,height:52,overflow:'hidden'}}>{app.description}</p>
          <div style={{display:'flex',alignItems:'center',justifyContent:'space-between',gap:10,marginTop:12,paddingTop:10,borderTop:'1px solid rgba(255,255,255,.14)'}}><div><strong style={{display:'block',fontSize:16,color:'#fff'}}>{app.metric}</strong><span style={{fontSize:8,textTransform:'uppercase',letterSpacing:'.07em',color:'rgba(255,255,255,.5)'}}>{app.metricLabel}</span></div><button aria-label={'Buka '+app.title} onClick={e=>{e.stopPropagation();go(app.id);}} style={{border:0,borderRadius:'50%',background:'var(--kkp-lime-500)',color:'var(--kkp-indigo-900)',width:32,height:32,fontWeight:800,cursor:'pointer'}}>→</button></div>
        </div>
        <span style={{position:'absolute',right:10,top:10,zIndex:2,padding:'4px 8px',borderRadius:'var(--radius-pill)',background:'rgba(11,18,32,.72)',color:'#fff',fontSize:9,display:'flex',alignItems:'center',gap:5}}><StatusDot tone="good"/>Tersedia</span>
      </article>)}
    </div>
    <div style={{maxWidth:'var(--layout-max)',margin:'0 auto',padding:'0 var(--layout-gutter)',display:'flex',alignItems:'center',justifyContent:'space-between'}}>
      <div style={{display:'flex',gap:7}}>{FEATURED_APPS.map((app,i)=><button key={app.id} onClick={()=>move(i)} aria-label={'Buka '+app.title} style={{width:i===active?30:8,height:8,border:0,borderRadius:8,padding:0,cursor:'pointer',background:i===active?'var(--kkp-azure-600)':'var(--kkp-indigo-100)',transition:'width .22s var(--ease-standard)'}}/>)}</div>
      <div style={{display:'flex',gap:8}}><Button variant="secondary" size="s" iconStart="chevron-left" disabled={active===0} onClick={()=>move(active-1)}>Sebelumnya</Button><Button variant="secondary" size="s" iconEnd="chevron-right" disabled={active===FEATURED_APPS.length-1} onClick={()=>move(active+1)}>Berikutnya</Button></div>
    </div>
  </div>;
}

function OmsLanding({ go, role, onRoleChange, reduceTransparency, onToggleTransparency }){
  const [step,setStep] = React.useState('landing'); // landing → auth
  const [mode,setMode] = React.useState('ai'); // 'ai' | 'search'
  const [q,setQ] = React.useState('');
  const [pendingDest,setPendingDest] = React.useState(null);
  const [pendingRequest,setPendingRequest] = React.useState(null);
  const submit = () => { setPendingDest(mode==='ai'?'assistant':'search'); setPendingRequest(mode==='ai'&&q.trim()?{seedQuestion:q.trim()}:null); setStep('auth'); };
  const openApp = (dest, req) => { setPendingDest(dest); setPendingRequest(req||null); setStep('auth'); };
  const glass = {background:'rgba(255,255,255,.55)',backdropFilter:'blur(20px) saturate(180%)',WebkitBackdropFilter:'blur(20px) saturate(180%)',border:'1px solid rgba(255,255,255,.5)',borderRadius:'var(--radius-lg)',boxShadow:'0 8px 32px rgba(11,18,32,.12)',overflow:'hidden'};
  return (
    <div style={{minHeight:'100vh',position:'relative',background:'radial-gradient(circle at 15% 10%,#7dd3fc55,transparent 45%),radial-gradient(circle at 85% 15%,#a5f3a555,transparent 45%),radial-gradient(circle at 50% 90%,#818cf855,transparent 50%),var(--surface-page)'}}>
      <div style={{background:'var(--gradient-deep-ocean)',position:'relative',overflow:'hidden'}}>
        <video autoPlay muted loop playsInline poster="https://images.unsplash.com/photo-1546026423-cc4642628d2b?auto=format&fit=crop&w=1920&q=80"
          style={{position:'absolute',inset:0,width:'100%',height:'100%',objectFit:'cover',opacity:.55}}>
          <source src={(window.__resources && window.__resources.heroVideo) || '../../assets/video/hero-ocean.mp4'} type="video/mp4" />
        </video>
        <div style={{position:'absolute',inset:0,background:'var(--scrim-left)',pointerEvents:'none'}}></div>
        <div style={{position:'relative',maxWidth:'var(--layout-max)',margin:'0 auto',padding:'var(--space-6) var(--layout-gutter) var(--space-16)'}}>
          <div style={{display:'flex',alignItems:'center',gap:'var(--space-6)'}}>
            <BrandLock src={(window.__resources && window.__resources.logoMark) || '../../assets/logo-kkp-mark.png'} product="Ocean Monitoring System" inverse height={44} />
            <div style={{marginLeft:'auto',display:'flex',gap:'var(--space-3)'}}>
              <Button variant="inverse" iconStart="book">Dokumentasi</Button>
              <Button variant="primary" iconStart="user" onClick={()=>openApp('assistant')}>Masuk dengan SSO</Button>
            </div>
          </div>
          <div style={{maxWidth:760,marginTop:'var(--space-16)',pointerEvents:'none'}}>
            <span className="kkp-eyebrow" style={{color:'var(--kkp-lime-500)'}}>Ocean Monitoring System</span>
            <h1 style={{color:'#fff',fontSize:'var(--type-display-1-size)',lineHeight:'var(--type-display-1-lh)',fontWeight:800,letterSpacing:'var(--type-display-1-tracking)',margin:'var(--space-4) 0'}}>
              Laut Indonesia, dalam satu layar
            </h1>
            <p style={{fontSize:'var(--type-body-lg-size)',color:'rgba(255,255,255,.86)',maxWidth:580}}>
              Cukup tanya seperti bertanya ke rekan kerja, atau telusuri sendiri datanya. Setiap jawaban
              selalu jelas sumbernya, dan hal-hal penting tetap dicek oleh orang sebelum dikirim.
            </p>
            <div style={{display:'flex',gap:2,marginBottom:'var(--space-3)',pointerEvents:'auto'}}>
              <button onClick={()=>setMode('ai')} style={{border:'none',cursor:'pointer',padding:'10px 16px',borderRadius:'var(--radius-pill)',fontSize:13,fontWeight:700,fontFamily:'var(--kkp-font-sans)',display:'flex',alignItems:'center',gap:6,
                background:mode==='ai'?'#fff':'rgba(255,255,255,.14)',color:mode==='ai'?'var(--kkp-indigo-800)':'rgba(255,255,255,.85)'}}>
                <Icon name="lightbulb" size={14} />Tanya AI
              </button>
              <button onClick={()=>setMode('search')} style={{border:'none',cursor:'pointer',padding:'10px 16px',borderRadius:'var(--radius-pill)',fontSize:13,fontWeight:700,fontFamily:'var(--kkp-font-sans)',display:'flex',alignItems:'center',gap:6,
                background:mode==='search'?'#fff':'rgba(255,255,255,.14)',color:mode==='search'?'var(--kkp-indigo-800)':'rgba(255,255,255,.85)'}}>
                <Icon name="search" size={14} />Cari data
              </button>
            </div>
            <div style={{borderRadius:mode==='ai'?'var(--radius-lg)':'var(--radius-pill)',overflow:'hidden',background:'rgba(255,255,255,.16)',backdropFilter:'blur(16px) saturate(180%)',WebkitBackdropFilter:'blur(16px) saturate(180%)',border:'1px solid rgba(255,255,255,.32)',boxShadow:'0 8px 32px rgba(0,0,0,.18)',pointerEvents:'auto',transition:'border-radius var(--duration-base) var(--ease-standard)'}}
              onKeyDown={e=>{if(e.key==='Enter'&&!e.shiftKey){e.preventDefault();submit();}}}>
              {mode==='ai' ? (
                <div style={{display:'flex',flexDirection:'column',padding:'4px 8px 10px'}}>
                  <textarea value={q} onChange={e=>setQ(e.target.value)} rows={2} placeholder="Tanyakan apa saja tentang laut Indonesia… (contoh: bagaimana tren suhu laut di WPP 715?)"
                    style={{resize:'none',border:'none',background:'transparent',color:'#fff',fontSize:16,lineHeight:1.4,fontFamily:'var(--kkp-font-sans)',padding:'8px 10px 0',outline:'none'}} />
                  <div style={{display:'flex',alignItems:'center',justifyContent:'space-between',marginTop:6}}>
                    <div style={{display:'flex',gap:6,flexWrap:'wrap'}}>
                      {['Anomali SST bulan ini','Status kawasan konservasi'].map(s=>(
                        <button key={s} onClick={()=>setQ(s)} style={{border:'1px solid rgba(255,255,255,.28)',background:'rgba(255,255,255,.08)',color:'rgba(255,255,255,.85)',borderRadius:'var(--radius-pill)',fontSize:11,padding:'5px 10px',cursor:'pointer',fontFamily:'var(--kkp-font-sans)'}}>{s}</button>
                      ))}
                    </div>
                    <button onClick={submit} aria-label="Kirim" style={{border:'none',cursor:'pointer',background:'var(--kkp-lime-500)',color:'#12154a',width:36,height:36,borderRadius:'var(--radius-pill)',display:'flex',alignItems:'center',justifyContent:'center',flex:'none'}}>
                      <Icon name="chevron-right" size={16} />
                    </button>
                  </div>
                </div>
              ) : (
                <div style={{display:'flex',alignItems:'center'}}>
                  <input value={q} onChange={e=>setQ(e.target.value)} placeholder="Cari dataset, peta, atau aplikasi…"
                    style={{flex:1,minWidth:0,border:'none',background:'transparent',color:'#fff',fontSize:15,fontFamily:'var(--kkp-font-sans)',padding:'0 4px 0 12px',outline:'none'}} />
                  <button onClick={submit} aria-label="Kirim" style={{border:'none',cursor:'pointer',background:'var(--kkp-lime-500)',color:'#12154a',width:44,height:44,margin:4,borderRadius:'var(--radius-pill)',display:'flex',alignItems:'center',justifyContent:'center',flex:'none'}}>
                    <Icon name="search" size={16} />
                  </button>
                </div>
              )}
            </div>
          </div>
          <div style={{display:'grid',gridTemplateColumns:'repeat(4,1fr)',gap:'var(--space-4)',marginTop:'var(--space-16)',pointerEvents:'auto'}}>
            {[['Applications','6','apps','apps'],['Datasets','12.480','data','search'],['Maps','386','map','search'],['Tools / Model','54','crop','assistant']].map(([l,v,i,dest])=>(
              <button key={l} onClick={()=>openApp(dest)} style={{textAlign:'left',cursor:'pointer',border:'1px solid rgba(255,255,255,.25)',background:'rgba(255,255,255,.12)',borderRadius:'var(--radius-lg)',padding:'var(--space-5)',backdropFilter:'blur(16px) saturate(180%)',WebkitBackdropFilter:'blur(16px) saturate(180%)',boxShadow:'0 8px 32px rgba(0,0,0,.14)',transition:'var(--transition-interactive)'}}
                onMouseEnter={e=>e.currentTarget.style.background='rgba(255,255,255,.22)'} onMouseLeave={e=>e.currentTarget.style.background='rgba(255,255,255,.12)'}>
                <span style={{filter:'invert(1)',display:'inline-flex',opacity:.9}}><Icon name={i} size={18} /></span>
                <div style={{fontFamily:'var(--kkp-font-display)',fontSize:28,fontWeight:800,color:'#fff',marginTop:8,letterSpacing:'-.02em'}}>{v}</div>
                <div style={{fontSize:'var(--type-caption-size)',color:'rgba(255,255,255,.75)'}}>{l}</div>
              </button>
            ))}
          </div>
        </div>
      </div>

      <Reveal style={{maxWidth:'var(--layout-max)',margin:'0 auto',padding:'var(--space-16) var(--layout-gutter) 0'}}>
        <SectionHeader eyebrow="Berita & Update" title="Kabar terbaru seputar OMS"
          description="Pembaruan data, fitur baru, dan pemberitahuan layanan." />
        <div style={{display:'grid',gridTemplateColumns:'1.6fr 1fr',gap:'var(--space-4)'}}>
          {(() => {
            const NEWS = [
              ['oms-news-1','Layanan citra SST kini diperbarui setiap 6 jam','Frekuensi pembaruan anomali suhu permukaan laut dipercepat dari harian menjadi 4× sehari, memakai citra MODIS/Aqua terbaru.','17 Sep 2026','Fitur baru','https://images.unsplash.com/photo-1439405326854-014607f694d7?auto=format&fit=crop&w=1200&q=75'],
              ['oms-news-2','Data batas WPP-NRI 2026 tersedia di katalog','Revisi batas 11 Wilayah Pengelolaan Perikanan kini dapat diunduh dan ditelusuri.','12 Sep 2026','Data baru','https://images.unsplash.com/photo-1524661135-423995f22d0b?auto=format&fit=crop&w=640&q=70'],
              ['oms-news-3','Pemeliharaan aliran VMS/AIS, Sabtu 20 Sep','Aliran posisi kapal akan tertunda maksimal 2 jam selama pemeliharaan server.','10 Sep 2026','Pemberitahuan','https://images.unsplash.com/photo-1494412651409-8963ce7935a7?auto=format&fit=crop&w=640&q=70'],
              ['oms-news-4','Kembaran digital batimetri: 3 wilayah baru','WPP 715, 718, dan 573 kini memiliki tampilan 3D batimetri di map viewer.','02 Sep 2026','Fitur baru','https://images.unsplash.com/photo-1551244072-5d12893278ab?auto=format&fit=crop&w=640&q=70'],
            ];
            const ACCENT = { 'Fitur baru':'var(--kkp-lime-500)', 'Data baru':'var(--kkp-azure-500)', 'Pemberitahuan':'#f59e0b' };
            const [feature, ...rest] = NEWS;
            const [id,t,d,date,tag,img] = feature;
            return (
              <>
                <div style={{...glass,borderLeft:'4px solid '+ACCENT[tag],display:'flex',flexDirection:'column'}}>
                  <div style={{aspectRatio:'16/9',position:'relative',backgroundImage:"url('"+img+"')",backgroundSize:'cover',backgroundPosition:'center'}}></div>
                  <div style={{padding:'var(--space-5)',display:'flex',flexDirection:'column',gap:6,flex:1}}>
                    <div style={{display:'flex',alignItems:'center',gap:8}}>
                      <Badge tone="good">{tag}</Badge>
                      <span className="kkp-mono" style={{fontSize:11,color:'var(--text-muted)'}}>{date}</span>
                    </div>
                    <div style={{fontWeight:800,color:'var(--text-heading)',fontSize:'var(--type-h3-size)',lineHeight:1.25}}>{t}</div>
                    <div style={{fontSize:13,color:'var(--text-muted)'}}>{d}</div>
                  </div>
                </div>
                <div style={{display:'flex',flexDirection:'column',gap:'var(--space-3)'}}>
                  {rest.map(([id,t,d,date,tag])=>(
                    <div key={id} style={{...glass,borderLeft:'3px solid '+ACCENT[tag],flex:1,display:'flex',flexDirection:'column',justifyContent:'center',padding:'var(--space-4)'}}>
                      <div style={{display:'flex',alignItems:'center',gap:8,marginBottom:4}}>
                        <Badge tone={tag==='Pemberitahuan'?'warn':tag==='Data baru'?'info':'good'}>{tag}</Badge>
                        <span className="kkp-mono" style={{fontSize:11,color:'var(--text-muted)'}}>{date}</span>
                      </div>
                      <div style={{fontWeight:700,color:'var(--text-heading)',fontSize:13,lineHeight:1.35}}>{t}</div>
                    </div>
                  ))}
                </div>
              </>
            );
          })()}
        </div>
      </Reveal>

      <Reveal style={{maxWidth:'var(--layout-max)',margin:'0 auto',padding:'var(--space-16) 0 0'}}>
        <div style={{padding:'0 var(--layout-gutter)'}}>
          <SectionHeader eyebrow="Aplikasi" title="Aplikasi yang terhubung"
            description="Semua aplikasi digital KKP yang bisa Anda akses dari sini." action={<Button variant="secondary" size="s" iconEnd="chevron-right" onClick={()=>go('apps')}>Lihat semua aplikasi</Button>} />
        </div>
        <FeaturedAppsCarousel go={go}/>
      </Reveal>

      <Reveal style={{maxWidth:'var(--layout-max)',margin:'0 auto',padding:'var(--space-16) var(--layout-gutter) var(--space-16)'}}>
        <SectionHeader eyebrow="Data" title="Data yang bisa Anda telusuri"
          description="Sebagian dari data laut resmi yang tersedia — klik “Tanya AI” untuk menjalankan kueri sungguhan, langsung dari angka terakhir yang dihitung di sini." action={<Button variant="secondary" size="s" iconEnd="chevron-right" onClick={()=>go('search')}>Lihat semua data</Button>} />
        <div style={darkGlassPanel}>
          {[
            ['data','Jumlah nelayan','Sulawesi Tengah · Portal Satu Data KKP','107.626','orang','Berapa jumlah nelayan di Sulawesi Tengah?'],
            ['graph-time-series','Stok karbon biru','Area contoh Jawa Tengah · SIDAKO Ocean Accounting','6.121.993','tC','Hitung blue carbon di Jawa Tengah'],
            ['graph-bar','Nilai EVIKA tertinggi','Kep. Alor, NTT · SIDAKO (snapshot)','94,21','%','Status EVIKA Kepulauan Alor'],
            ['data','Angka konsumsi ikan','Rata-rata provinsi · Portal Satu Data KKP','56,48','kg/kapita/th','Konsumsi ikan di Maluku'],
          ].map(([icon,label,source,value,unit,seed],i)=>(
            <div key={label} onClick={()=>openApp('assistant',{seedQuestion:seed})}
              style={{display:'flex',alignItems:'center',gap:'var(--space-4)',padding:'var(--space-5) var(--space-6)',cursor:'pointer',
                borderTop:i>0?'1px solid rgba(255,255,255,.12)':'none',transition:'background var(--duration-base) var(--ease-standard)'}}
              onMouseEnter={e=>e.currentTarget.style.background='rgba(255,255,255,.05)'} onMouseLeave={e=>e.currentTarget.style.background='transparent'}>
              <span style={{width:40,height:40,flex:'none',borderRadius:'var(--radius-md)',background:'rgba(255,255,255,.1)',display:'flex',alignItems:'center',justifyContent:'center'}}>
                <span style={{filter:'invert(1)',display:'flex'}}><Icon name={icon} size={18} /></span>
              </span>
              <div style={{flex:1,minWidth:0}}>
                <div style={{fontWeight:700,color:'#fff',fontSize:14}}>{label}</div>
                <div style={{fontSize:12,color:'rgba(255,255,255,.55)',marginTop:2}}>{source}</div>
              </div>
              <div style={{textAlign:'right',flex:'none'}}>
                <div style={{fontFamily:'var(--kkp-font-display)',fontWeight:800,fontSize:30,color:'#fff',letterSpacing:'-.02em',lineHeight:1}}>{value}</div>
                <div style={{fontSize:11,color:'rgba(255,255,255,.55)',marginTop:2}}>{unit}</div>
              </div>
              <span style={{marginLeft:'var(--space-4)',flex:'none',border:'none',cursor:'pointer',background:'var(--kkp-lime-500)',color:'#12154a',fontSize:12,fontWeight:700,borderRadius:'var(--radius-pill)',padding:'9px 16px',display:'flex',alignItems:'center',gap:5}}>
                <Icon name="lightbulb" size={13} />Tanya AI
              </span>
            </div>
          ))}
          <div style={{padding:'var(--space-3) var(--space-6)',borderTop:'1px solid rgba(255,255,255,.12)',fontSize:10.5,color:'rgba(255,255,255,.45)'}}>
            Angka di atas adalah hasil kueri nyata terakhir dari Portal Satu Data KKP dan SIDAKO — klik untuk menjalankan ulang secara langsung.
          </div>
        </div>
      </Reveal>

      <OmsFooter />

      {step === 'auth' ? (
        <div className="kkp-modal__scrim" style={{position:'fixed',background:'rgba(11,18,32,.35)',backdropFilter:'blur(4px)'}} onClick={()=>setStep('landing')}>
          <div className="kkp-modal" style={{maxWidth:420,background:'rgba(255,255,255,.65)',backdropFilter:'blur(24px) saturate(180%)',WebkitBackdropFilter:'blur(24px) saturate(180%)',border:'1px solid rgba(255,255,255,.6)',boxShadow:'0 16px 48px rgba(11,18,32,.22)'}} onClick={e=>e.stopPropagation()}>
            <div className="kkp-modal__head">
              <div>
                <h3 style={{margin:0,fontSize:'var(--type-h2-size)'}}>Masuk ke akun Anda</h3>
                <p style={{margin:'4px 0 0',fontSize:'var(--type-body-sm-size)',color:'var(--text-muted)'}}>Gunakan akun KKP Anda atau akun mitra yang sudah terdaftar</p>
              </div>
            </div>
            <div className="kkp-modal__body" style={{display:'flex',flexDirection:'column',gap:'var(--space-4)'}}>
              <div><div className="kkp-eyebrow">Peran prototype</div><div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:7,marginTop:8}}>{window.OMS_ROLES.map(r=><button key={r.id} onClick={()=>onRoleChange(r.id)} style={{textAlign:'left',padding:'8px 9px',borderRadius:'var(--radius-sm)',cursor:'pointer',fontFamily:'inherit',border:role.id===r.id?'1px solid var(--kkp-azure-500)':'1px solid var(--border-subtle)',background:role.id===r.id?'var(--surface-accent-soft)':'rgba(255,255,255,.5)',color:'var(--text-heading)'}}><span style={{display:'flex',alignItems:'center',gap:7}}><span style={{width:22,height:22,borderRadius:'50%',display:'grid',placeItems:'center',background:r.color,color:'#101540',fontSize:8,fontWeight:800}}>{r.initials}</span><b style={{fontSize:9.5}}>{r.name}</b></span><small style={{display:'block',fontSize:7.5,color:'var(--text-muted)',marginTop:4}}>{r.unit}</small></button>)}</div></div>
              <Button block variant="brand" iconStart="user" onClick={()=>go(pendingDest||'assistant', pendingRequest)}>Masuk dengan Akun KKP</Button>
              <div style={{display:'flex',alignItems:'center',gap:'var(--space-3)',color:'var(--text-muted)',fontSize:'var(--type-caption-size)'}}>
                <span style={{flex:1,height:1,background:'var(--border-subtle)'}}></span>atau<span style={{flex:1,height:1,background:'var(--border-subtle)'}}></span>
              </div>
              <Input label="Surel dinas" placeholder="nama@kkp.go.id" icon="user" />
              <Input label="Kata sandi" type="password" placeholder="••••••••" />
              <Button block variant="primary" onClick={()=>go(pendingDest||'assistant', pendingRequest)}>Masuk</Button>
              <p style={{margin:0,fontSize:'var(--type-caption-size)',color:'var(--text-muted)'}}>
                Aktif sebagai <b>{role.name}</b>. Data, tools, dan aplikasi disesuaikan dengan peran ini.
              </p>
            </div>
          </div>
        </div>
      ) : null}
    </div>
  );
}
Object.assign(window, { OmsLanding });
