Files
wursor/packages/app/public/features/integrations.html
T
SinachPatandClaude Sonnet 4.6 19b8f29523 fix: sync integrations page logos with landing page
Replace all mismatched SVG icons in integrations.html (both the card grid
and the status section) with the exact paths from page.tsx:

- GitHub: correct octocat path (M12 2C6.477, not M12 0C5.37)
- Figma: 24×24 5-segment logo (was stretched 38×57 viewBox)
- Linear: official brand mark fill=#5e6ad2 (was 100×100 white diagonal)
- Cursor: actual prism brand logo (was a generic hexagon outline)
- TypeScript: clean T+S letterform on #3178c6 bg (was noisy stripe overlay)
- React: centred atom cx/cy=12 with r=2 dot (was off-centre cy=11)
- Status section: same fixes applied to the second logo set

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 18:22:25 +01:00

834 lines
65 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Integrations — Originmain</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root{--bg:#FFFFFF;--bg-subtle:#FAFAFA;--bg-muted:#F4F4F5;--bg-strong:#EBEBEB;--bg-inv:#0A0A0A;--bg-inv-2:#141414;--bg-inv-3:#1C1C1C;--fg:#0A0A0A;--fg-2:#52525B;--fg-3:#A1A1AA;--fg-4:#D4D4D8;--fg-inv:rgba(255,255,255,0.92);--fg-inv-2:rgba(255,255,255,0.52);--fg-inv-3:rgba(255,255,255,0.28);--blue:#0066FF;--blue-dark:#0050CC;--blue-light:#3385FF;--blue-soft:rgba(0,102,255,0.07);--blue-mid:rgba(0,102,255,0.15);--purple:#7C3AED;--teal:#0891B2;--border:rgba(0,0,0,0.07);--border-2:rgba(0,0,0,0.12);--border-inv:rgba(255,255,255,0.08);--border-inv-2:rgba(255,255,255,0.14);--r-1:4px;--r-2:8px;--r-3:12px;--r-4:16px;--r-5:20px;--r-6:24px;--r-full:9999px;--sh-xs:0 1px 2px rgba(0,0,0,0.05);--sh-sm:0 1px 3px rgba(0,0,0,0.07),0 1px 2px rgba(0,0,0,0.05);--sh-md:0 4px 8px rgba(0,0,0,0.06),0 2px 4px rgba(0,0,0,0.04);--sh-lg:0 10px 24px rgba(0,0,0,0.08),0 4px 8px rgba(0,0,0,0.05);--sh-xl:0 20px 40px rgba(0,0,0,0.09),0 8px 16px rgba(0,0,0,0.05);--sh-2xl:0 32px 64px rgba(0,0,0,0.11),0 16px 32px rgba(0,0,0,0.06);--font:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;--mono:'JetBrains Mono','SF Mono',ui-monospace,'Cascadia Code',monospace;}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
html{font-size:16px;scroll-behavior:smooth;-webkit-font-smoothing:antialiased;}
body{font-family:var(--font);background:var(--bg);color:var(--fg);line-height:1.6;overflow-x:hidden;}
img,svg{display:block;max-width:100%;}
a{color:inherit;text-decoration:none;}
button{font-family:inherit;cursor:pointer;border:none;background:none;}
.wrap{max-width:1120px;margin:0 auto;padding:0 40px;}
.section{padding:112px 0;}
.section-muted{background:var(--bg-subtle);}
.section-dark{background:var(--bg-inv);}
.d1{font-size:clamp(2.5rem,6vw,4.5rem);font-weight:900;line-height:1.02;letter-spacing:-0.045em;color:var(--fg);}
.d2{font-size:clamp(1.875rem,3.5vw,2.75rem);font-weight:800;line-height:1.1;letter-spacing:-0.038em;color:var(--fg);}
.d3{font-size:clamp(1.25rem,2.5vw,1.625rem);font-weight:700;line-height:1.25;letter-spacing:-0.028em;color:var(--fg);}
.subtitle{font-size:clamp(1rem,1.8vw,1.125rem);font-weight:400;line-height:1.75;color:var(--fg-2);}
.label{font-family:var(--mono);font-size:0.6875rem;font-weight:500;letter-spacing:0.1em;text-transform:uppercase;color:var(--fg-3);}
.label-blue{color:var(--blue);}
.btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--font);font-size:0.9375rem;font-weight:600;padding:11px 22px;border-radius:var(--r-2);transition:transform 0.12s cubic-bezier(.16,1,.3,1),opacity 0.12s,box-shadow 0.12s;white-space:nowrap;letter-spacing:-0.01em;position:relative;overflow:hidden;}
.btn::after{content:'';position:absolute;inset:0;background:rgba(255,255,255,0);transition:background 0.12s;}
.btn:hover::after{background:rgba(255,255,255,0.06);}
.btn:active{transform:scale(0.98)!important;}
.btn-primary{background:var(--fg);color:var(--bg);box-shadow:var(--sh-sm);}
.btn-primary:hover{transform:translateY(-1px);box-shadow:var(--sh-md);}
.btn-secondary{background:transparent;color:var(--fg);border:1px solid var(--border-2);}
.btn-secondary:hover{background:var(--bg-muted);transform:translateY(-1px);}
.btn-blue{background:var(--blue);color:#fff;box-shadow:0 4px 12px rgba(0,102,255,0.3);}
.btn-blue:hover{background:var(--blue-dark);transform:translateY(-1px);}
.btn-lg{font-size:1rem;padding:13px 28px;}
.btn-white{background:#fff;color:#0A0A0A;box-shadow:0 4px 12px rgba(255,255,255,0.15);}
.btn-white:hover{background:#F5F5F5;transform:translateY(-1px);}
.btn-outline-white{background:transparent;color:rgba(255,255,255,0.72);border:1px solid rgba(255,255,255,0.18);}
.btn-outline-white:hover{background:rgba(255,255,255,0.06);color:rgba(255,255,255,0.9);transform:translateY(-1px);}
.divider{height:1px;background:var(--border);}
.section-head{text-align:center;max-width:640px;margin:0 auto 72px;}
.section-head .label{display:block;margin-bottom:16px;}
.section-head .d2{margin-bottom:18px;}
/* NAV */
#nav{position:fixed;top:0;left:0;right:0;z-index:200;height:60px;display:flex;align-items:center;padding:0 40px;transition:background 0.2s,border-color 0.2s,box-shadow 0.2s;}
#nav.scrolled{background:rgba(255,255,255,0.85);backdrop-filter:blur(20px) saturate(1.6);-webkit-backdrop-filter:blur(20px) saturate(1.6);border-bottom:1px solid var(--border);box-shadow:var(--sh-xs);}
.nav-inner{max-width:1120px;margin:0 auto;width:100%;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;}
.nav-logo{justify-self:start;font-size:1rem;font-weight:800;letter-spacing:-0.04em;color:var(--fg);display:flex;align-items:center;gap:2px;}
.nav-logo span{color:var(--blue);}
.nav-links{justify-self:center;display:flex;align-items:center;gap:0;list-style:none;}
.nav-links a{font-size:0.9375rem;font-weight:500;color:var(--fg-2);padding:6px 14px;border-radius:var(--r-1);transition:color 0.12s,background 0.12s;letter-spacing:-0.01em;}
.nav-links a:hover{color:var(--fg);}
.nav-links a.active{color:var(--blue);}
.nav-actions{justify-self:end;display:flex;align-items:center;gap:8px;}
/* Dropdown */
.nav-dropdown{position:relative;}
.nav-dropdown>a{display:flex;align-items:center;gap:4px;}
.nav-dd-caret{transition:transform 0.15s;}
/* caret rotation handled via JS .open class */
.nav-dropdown-menu{position:absolute;top:calc(100% + 10px);left:50%;transform:translateX(-50%) translateY(-4px);background:rgba(255,255,255,0.98);backdrop-filter:blur(20px);border:1px solid var(--border);border-radius:var(--r-3);box-shadow:var(--sh-xl);padding:8px;min-width:240px;opacity:0;visibility:hidden;transition:opacity 0.15s,transform 0.15s,visibility 0.15s;pointer-events:none;}
.nav-dropdown-menu.open{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0);pointer-events:all;}
.nav-dropdown.open .nav-dd-caret{transform:rotate(180deg);}
/* Mobile sub-nav */
.nav-mobile-sub{display:none;padding:2px 0 6px 14px;flex-direction:column;}
.nav-mobile-sub.open{display:flex;}
.nav-mobile-sub a{font-size:0.875rem;color:rgba(255,255,255,0.4);padding:8px 4px;border-bottom:1px solid rgba(255,255,255,0.06);letter-spacing:-0.01em;transition:color 0.1s;}
.nav-mobile-sub a:last-child{border-bottom:none;}
.nav-mobile-sub a:hover{color:rgba(255,255,255,0.8);}
/* Dark hero: white nav before scrolling */
#nav:not(.scrolled) .nav-logo{color:rgba(255,255,255,0.92);}
#nav:not(.scrolled) .nav-logo span{color:#3385FF;}
#nav:not(.scrolled) .nav-links a{color:rgba(255,255,255,0.5);}
#nav:not(.scrolled) .nav-links a:hover{color:rgba(255,255,255,0.9);}
#nav:not(.scrolled) .nav-actions .btn-secondary{color:rgba(255,255,255,0.65);border-color:rgba(255,255,255,0.2);background:transparent;}
#nav:not(.scrolled) .nav-burger span{background:rgba(255,255,255,0.8);}
.nav-dd-item{display:flex;align-items:flex-start;gap:10px;padding:9px 10px;border-radius:var(--r-2);transition:background 0.1s;cursor:pointer;}
.nav-dd-item:hover{background:var(--bg-muted);}
.nav-dd-item.current{background:var(--blue-soft);}
.nav-dd-icon{width:30px;height:30px;background:var(--blue-soft);border:1px solid var(--blue-mid);border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:13px;color:var(--blue);}
.nav-dd-text{display:flex;flex-direction:column;}
.nav-dd-name{font-size:0.8125rem;font-weight:600;color:var(--fg);letter-spacing:-0.01em;}
.nav-dd-desc{font-size:0.6875rem;color:var(--fg-3);margin-top:1px;line-height:1.4;}
.nav-dd-sep{height:1px;background:var(--border);margin:4px 0;}
.nav-burger{display:none;flex-direction:column;justify-content:center;align-items:center;gap:5px;width:36px;height:36px;background:none;border:none;cursor:pointer;padding:4px;border-radius:var(--r-2);}
.nav-burger span{display:block;width:20px;height:2px;background:var(--fg);border-radius:2px;transition:transform 0.22s cubic-bezier(0.16,1,0.3,1),opacity 0.18s;transform-origin:center;}
.nav-burger.open span:nth-child(1){transform:translateY(7px) rotate(45deg);}
.nav-burger.open span:nth-child(2){opacity:0;transform:scaleX(0);}
.nav-burger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg);}
.nav-mobile{display:none;position:absolute;top:60px;left:0;right:0;background:rgba(255,255,255,0.97);backdrop-filter:blur(20px);border-bottom:1px solid var(--border);box-shadow:0 8px 32px rgba(0,0,0,0.07);padding:12px 24px 24px;flex-direction:column;gap:2px;}
.nav-mobile.open{display:flex;}
.nav-mobile ul{list-style:none;display:flex;flex-direction:column;}
.nav-mobile ul li a{display:block;font-size:1rem;font-weight:500;color:var(--fg-2);padding:11px 4px;border-bottom:1px solid var(--border);letter-spacing:-0.01em;}
.nav-mobile ul li:last-child a{border-bottom:none;}
.nav-mobile-ctas{display:flex;gap:8px;margin-top:16px;}
.nav-mobile-ctas .btn{flex:1;justify-content:center;padding:10px 12px;font-size:.875rem;}
/* PAGE HERO */
#page-hero{padding:140px 40px 100px;background:var(--bg-inv);position:relative;overflow:hidden;text-align:center;}
#page-hero::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 80% 60% at 50% -10%,rgba(0,102,255,0.14),transparent 60%),radial-gradient(ellipse 40% 40% at 80% 70%,rgba(0,102,255,0.06),transparent 50%),radial-gradient(ellipse 50% 50% at 15% 60%,rgba(124,58,237,0.06),transparent 50%);pointer-events:none;}
.page-hero-inner{position:relative;max-width:800px;margin:0 auto;}
.page-hero-inner .label{color:rgba(255,255,255,0.3);margin-bottom:20px;display:block;}
.page-hero-inner .d1{color:var(--fg-inv);margin-bottom:22px;}
.page-hero-inner .subtitle{color:var(--fg-inv-2);max-width:620px;margin:0 auto 44px;}
.page-hero-ctas{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;}
/* INTEGRATION BENTO GRID */
.int-bento{width:100%;max-width:840px;margin:72px auto 0;position:relative;}
.int-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.int-card{background:#111118;border:1px solid rgba(255,255,255,0.08);border-radius:14px;padding:22px 20px 18px;display:flex;flex-direction:column;align-items:flex-start;gap:10px;position:relative;overflow:hidden;transition:border-color 0.2s,transform 0.2s;}
.int-card::before{content:'';position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,0.03),transparent 60%);pointer-events:none;}
.int-card:hover{border-color:rgba(255,255,255,0.14);transform:translateY(-2px);}
.int-logo{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;}
.int-name{font-size:0.875rem;font-weight:700;color:rgba(255,255,255,0.88);letter-spacing:-0.02em;}
.int-desc{font-size:0.6875rem;color:rgba(255,255,255,0.35);line-height:1.5;flex:1;}
.int-status{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:0.5625rem;color:#10B981;font-weight:600;background:rgba(16,185,129,0.1);border:1px solid rgba(16,185,129,0.2);padding:3px 8px;border-radius:var(--r-full);margin-top:4px;}
.int-status-dot{width:5px;height:5px;border-radius:50%;background:#10B981;animation:live-pulse 2s ease-in-out infinite;}
@keyframes live-pulse{0%,100%{box-shadow:0 0 0 2px rgba(16,185,129,0.25);}50%{box-shadow:0 0 0 4px rgba(16,185,129,0.1);}}
/* GitHub brand */
.int-card.github .int-logo{background:#21262D;}
/* Figma brand */
.int-card.figma .int-logo{background:#1E1E2E;}
/* Linear brand */
.int-card.linear .int-logo{background:#0D0D1A;}
/* Slack brand */
.int-card.slack .int-logo{background:#1A1A2E;}
/* VSCode brand */
.int-card.vscode .int-logo{background:#0D1117;}
/* Cursor brand */
.int-card.cursor .int-logo{background:#111118;}
/* TypeScript brand */
.int-card.typescript .int-logo{background:#3178c6;}
/* React brand */
.int-card.react .int-logo{background:#0D1A1A;}
/* HOW IT WORKS SECTION */
.hiw-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin-top:64px;position:relative;}
.hiw-steps::before{content:'';position:absolute;top:28px;left:12.5%;right:12.5%;height:1px;background:linear-gradient(90deg,transparent,var(--border-2) 20%,var(--border-2) 80%,transparent);}
.hiw-step{display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 20px;position:relative;z-index:1;}
.hiw-num{width:56px;height:56px;border-radius:50%;background:var(--bg);border:1px solid var(--border-2);display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:1rem;font-weight:700;color:var(--blue);margin-bottom:20px;box-shadow:var(--sh-sm);}
.hiw-step h3{font-size:0.9375rem;font-weight:700;color:var(--fg);letter-spacing:-0.02em;margin-bottom:8px;}
.hiw-step p{font-size:0.8125rem;color:var(--fg-2);line-height:1.6;}
/* FEATURE SPLIT */
.feat-split{display:grid;grid-template-columns:1fr 1fr;gap:96px;align-items:center;max-width:1120px;margin:0 auto;}
.feat-split.rev{direction:rtl;}
.feat-split.rev>*{direction:ltr;}
.feat-copy .label{display:block;margin-bottom:16px;}
.feat-copy .d3{margin-bottom:16px;}
.feat-copy .subtitle{margin-bottom:28px;}
.feat-pts{list-style:none;display:flex;flex-direction:column;gap:12px;margin-bottom:32px;}
.feat-pts li{display:flex;align-items:flex-start;gap:10px;font-size:0.9375rem;color:var(--fg-2);line-height:1.55;}
.feat-pt-icon{width:20px;height:20px;border-radius:3px;background:var(--blue-soft);border:1px solid var(--blue-mid);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;font-size:0.625rem;color:var(--blue);}
/* Feature visual */
.feat-vis{border-radius:var(--r-5);overflow:hidden;box-shadow:var(--sh-2xl);border:1px solid var(--border);aspect-ratio:4/3;position:relative;}
.feat-vis-dark{background:#0D0D11;border-color:rgba(255,255,255,0.07);}
.feat-vis-light{background:var(--bg-muted);}
/* TECH SECTION */
.tech-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:56px;}
.tech-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--r-4);padding:32px 28px;transition:box-shadow 0.2s;}
.tech-card:hover{box-shadow:var(--sh-lg);}
.tech-icon{width:44px;height:44px;background:var(--blue-soft);border:1px solid var(--blue-mid);border-radius:var(--r-2);display:flex;align-items:center;justify-content:center;font-size:1.25rem;margin-bottom:18px;}
.tech-card h3{font-size:1rem;font-weight:700;color:var(--fg);letter-spacing:-0.02em;margin-bottom:8px;}
.tech-card p{font-size:0.875rem;color:var(--fg-2);line-height:1.65;}
.tech-tag{display:inline-block;margin-top:14px;font-family:var(--mono);font-size:0.625rem;letter-spacing:0.08em;text-transform:uppercase;color:var(--blue);background:var(--blue-soft);border:1px solid var(--blue-mid);padding:3px 9px;border-radius:var(--r-full);}
/* CODE BLOCK */
.code-block{background:#111118;border:1px solid rgba(255,255,255,0.07);border-radius:var(--r-3);padding:24px;font-family:var(--mono);font-size:0.75rem;line-height:1.75;color:rgba(255,255,255,0.75);overflow-x:auto;}
.code-block .kw{color:#7EB8FF;}
.code-block .str{color:#7DDBA0;}
.code-block .cm{color:rgba(255,255,255,0.28);}
.code-block .fn{color:#FFBA7B;}
.code-block .nm{color:#D4A0FF;}
.code-block .pu{color:rgba(255,255,255,0.5);}
/* STATUS GRID */
.status-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:56px;}
.status-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--r-4);padding:24px 20px;display:flex;align-items:center;gap:14px;transition:box-shadow 0.15s,border-color 0.15s;}
.status-card:hover{box-shadow:var(--sh-md);border-color:var(--border-2);}
.status-logo-wrap{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;}
.status-info{flex:1;min-width:0;}
.status-info h3{font-size:0.9375rem;font-weight:700;color:var(--fg);letter-spacing:-0.02em;margin-bottom:2px;}
.status-info p{font-size:0.75rem;color:var(--fg-3);}
.status-badge{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:0.5625rem;color:#10B981;font-weight:600;background:rgba(16,185,129,0.08);border:1px solid rgba(16,185,129,0.18);padding:3px 8px;border-radius:var(--r-full);margin-top:6px;white-space:nowrap;}
.status-badge-dot{width:5px;height:5px;border-radius:50%;background:#10B981;}
/* RELATED */
.related-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:48px;}
.related-card{border:1px solid var(--border);border-radius:var(--r-4);padding:24px;transition:box-shadow 0.15s,border-color 0.15s;display:flex;flex-direction:column;gap:10px;}
.related-card:hover{box-shadow:var(--sh-md);border-color:var(--border-2);}
.related-icon{font-size:1.25rem;}
.related-card h3{font-size:0.9375rem;font-weight:700;color:var(--fg);letter-spacing:-0.02em;}
.related-card p{font-size:0.8125rem;color:var(--fg-2);line-height:1.6;flex:1;}
.related-link{font-size:0.8125rem;font-weight:600;color:var(--blue);}
/* CTA */
#cta-bottom{background:var(--bg-inv);padding:120px 40px;position:relative;overflow:hidden;text-align:center;}
#cta-bottom::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 60% 80% at 30% 50%,rgba(0,102,255,0.12),transparent 60%),radial-gradient(ellipse 60% 80% at 70% 50%,rgba(0,102,255,0.08),transparent 60%);pointer-events:none;}
.cta-inner{position:relative;max-width:680px;margin:0 auto;}
.cta-headline{font-size:clamp(2rem,4.5vw,3.5rem);font-weight:900;letter-spacing:-0.045em;color:var(--fg-inv);line-height:1.05;margin-bottom:18px;}
.cta-sub{font-size:1.0625rem;color:var(--fg-inv-2);margin-bottom:44px;line-height:1.65;}
.cta-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;}
/* FOOTER */
footer{background:#08080C;border-top:1px solid rgba(255,255,255,0.06);padding:72px 40px 40px;}
.ft-inner{max-width:1120px;margin:0 auto;}
.ft-top{display:grid;grid-template-columns:260px repeat(4,1fr);gap:48px;padding-bottom:56px;border-bottom:1px solid rgba(255,255,255,0.07);margin-bottom:36px;}
.ft-brand-logo{font-size:1rem;font-weight:800;letter-spacing:-0.04em;color:rgba(255,255,255,0.92);margin-bottom:8px;}
.ft-brand-logo span{color:#3385FF;}
.ft-brand-tag{font-size:0.875rem;color:rgba(255,255,255,0.3);line-height:1.65;max-width:200px;}
.ft-col h4{font-size:0.875rem;font-weight:600;color:rgba(255,255,255,0.7);margin-bottom:16px;letter-spacing:-0.01em;}
.ft-col ul{list-style:none;display:flex;flex-direction:column;gap:10px;}
.ft-col a{font-size:0.875rem;color:rgba(255,255,255,0.32);transition:color 0.14s;letter-spacing:-0.01em;}
.ft-col a:hover{color:rgba(255,255,255,0.65);}
.ft-bottom{display:flex;justify-content:space-between;align-items:center;}
.ft-copy{font-size:0.8125rem;color:rgba(255,255,255,0.22);}
/* REVEAL */
.reveal{opacity:0;transform:translateY(22px);transition:opacity 0.7s cubic-bezier(0.16,1,0.3,1),transform 0.7s cubic-bezier(0.16,1,0.3,1);}
.reveal.in{opacity:1;transform:none;}
.stagger>*{opacity:0;transform:translateY(16px);transition:opacity 0.55s cubic-bezier(0.16,1,0.3,1),transform 0.55s cubic-bezier(0.16,1,0.3,1);}
.stagger.in>*:nth-child(1){opacity:1;transform:none;transition-delay:0s;}
.stagger.in>*:nth-child(2){opacity:1;transform:none;transition-delay:0.07s;}
.stagger.in>*:nth-child(3){opacity:1;transform:none;transition-delay:0.14s;}
.stagger.in>*:nth-child(4){opacity:1;transform:none;transition-delay:0.21s;}
.stagger.in>*:nth-child(5){opacity:1;transform:none;transition-delay:0.28s;}
.stagger.in>*:nth-child(6){opacity:1;transform:none;transition-delay:0.35s;}
.stagger.in>*:nth-child(7){opacity:1;transform:none;transition-delay:0.42s;}
.stagger.in>*:nth-child(8){opacity:1;transform:none;transition-delay:0.49s;}
@media(max-width:1024px){.feat-split{grid-template-columns:1fr;gap:56px;}.feat-split.rev{direction:ltr;}.hiw-steps{grid-template-columns:1fr 1fr;gap:40px;}.hiw-steps::before{display:none;}.tech-grid{grid-template-columns:1fr 1fr;}.related-grid{grid-template-columns:1fr 1fr;}.status-grid{grid-template-columns:1fr 1fr;}.int-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:768px){.wrap{padding:0 24px;}#nav{padding:0 24px;}.nav-inner{display:flex;justify-content:space-between;}.nav-links,.nav-actions .btn{display:none;}.nav-burger{display:flex;}#page-hero{padding:120px 24px 80px;}.int-bento{margin-top:48px;}.hiw-steps{grid-template-columns:1fr;}.tech-grid,.related-grid,.status-grid{grid-template-columns:1fr;}.ft-top{grid-template-columns:1fr 1fr;}.int-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:480px){.ft-top{grid-template-columns:1fr;}.int-grid{grid-template-columns:1fr 1fr;}}
</style>
</head>
<body>
<!-- NAV -->
<nav id="nav">
<div class="nav-inner">
<a href="/" class="nav-logo">Origin<span>main</span></a>
<ul class="nav-links">
<li class="nav-dropdown">
<a href="/#features" style="display:flex;align-items:center;gap:4px;">
Product
<svg class="nav-dd-caret" width="10" height="6" viewBox="0 0 10 6" fill="none"><path d="M1 1l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
</a>
<div class="nav-dropdown-menu">
<a class="nav-dd-item" href="/features/live-artboard.html">
<div class="nav-dd-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1.5" y="2.5" width="11" height="9" rx="1.5" stroke="currentColor" stroke-width="1.3"/><path d="M5 6.5l1.8 2 1.2-1.6 1.4 2" stroke="currentColor" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
<div class="nav-dd-text"><span class="nav-dd-name">Live Artboard</span><span class="nav-dd-desc">Your app rendered live in the canvas</span></div>
</a>
<a class="nav-dd-item" href="/features/origin-graph.html">
<div class="nav-dd-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="2.5" r="1.5" fill="currentColor"/><circle cx="2.5" cy="11" r="1.5" fill="currentColor"/><circle cx="11.5" cy="11" r="1.5" fill="currentColor"/><path d="M6.2 3.8L3.2 9.6M7.8 3.8l3 5.8M3.8 11h6.4" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/></svg></div>
<div class="nav-dd-text"><span class="nav-dd-name">Origin Graph</span><span class="nav-dd-desc">Every component, indexed and queryable</span></div>
</a>
<a class="nav-dd-item" href="/features/intent-diff.html">
<div class="nav-dd-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1.5" y="4" width="6.5" height="7.5" rx="1.3" stroke="currentColor" stroke-width="1.3"/><rect x="6" y="2.5" width="6.5" height="7.5" rx="1.3" stroke="currentColor" stroke-width="1.3"/></svg></div>
<div class="nav-dd-text"><span class="nav-dd-name">Intent Diff</span><span class="nav-dd-desc">Ship component-level diffs, not redlines</span></div>
</a>
<div class="nav-dd-sep"></div>
<a class="nav-dd-item" href="/features/completion-zone.html">
<div class="nav-dd-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor"><path d="M7 1.5L8.1 5.4 12 6.5l-3.9 1.1L7 11.5 5.9 7.6 2 6.5l3.9-1.1z"/><circle cx="11" cy="2.5" r="1" fill="currentColor" opacity="0.5"/></svg></div>
<div class="nav-dd-text"><span class="nav-dd-name">Completion Zone</span><span class="nav-dd-desc">AI-filled design, constrained to your system</span></div>
</a>
<a class="nav-dd-item" href="/features/agent-bridge.html">
<div class="nav-dd-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"><path d="M1.5 5h11M9.5 2.5l3 2.5-3 2.5"/><path d="M12.5 9h-11M4.5 6.5L1.5 9l3 2.5"/></svg></div>
<div class="nav-dd-text"><span class="nav-dd-name">Agent Bridge</span><span class="nav-dd-desc">MCP channel to Cursor, Claude Code &amp; more</span></div>
</a>
<a class="nav-dd-item current" href="/features/integrations.html">
<div class="nav-dd-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"><path d="M5.5 8.5l3-3"/><path d="M3.8 6.8L2.8 7.8A2.5 2.5 0 006.3 11l1-1"/><path d="M10.2 7.2l1-1A2.5 2.5 0 007.7 3l-1 1"/></svg></div>
<div class="nav-dd-text"><span class="nav-dd-name">Integrations</span><span class="nav-dd-desc">Linear, Slack, GitHub, Figma &amp; more</span></div>
</a>
</div>
</li>
<li><a href="/features/integrations.html" class="active">🔗 Integrations</a></li>
<li><a href="/#pricing">Pricing</a></li>
<li><a href="#">Docs</a></li>
</ul>
<div class="nav-actions">
<a href="#" class="btn btn-secondary" style="padding:7px 16px;font-size:.875rem">Log in</a>
<a href="/sign-up" class="btn btn-primary" style="padding:8px 18px;font-size:.875rem">Get Started</a>
<button class="nav-burger" id="nav-burger" aria-label="Menu"><span></span><span></span><span></span></button>
</div>
</div>
<div class="nav-mobile" id="nav-mobile">
<ul>
<li>
<a href="/#features" id="mob-product-toggle" style="display:flex;justify-content:space-between;align-items:center;">
Product
<svg id="mob-dd-caret" width="10" height="6" viewBox="0 0 10 6" fill="none" style="transition:transform 0.15s;"><path d="M1 1l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
</a>
<div class="nav-mobile-sub" id="nav-mobile-sub">
<a href="/features/live-artboard.html">Live Artboard</a>
<a href="/features/origin-graph.html">Origin Graph</a>
<a href="/features/intent-diff.html">Intent Diff</a>
<a href="/features/completion-zone.html">Completion Zone</a>
<a href="/features/agent-bridge.html">Agent Bridge</a>
<a href="/features/integrations.html">Integrations</a>
</div>
</li>
<li><a href="/features/integrations.html">🔗 Integrations</a></li>
<li><a href="/#pricing">Pricing</a></li>
<li><a href="#">Docs</a></li>
</ul>
<div class="nav-mobile-ctas">
<a href="#" class="btn btn-secondary">Log in</a>
<a href="/sign-up" class="btn btn-primary">Get Started</a>
</div>
</div>
</nav>
<!-- HERO -->
<section id="page-hero">
<div class="page-hero-inner">
<span class="label reveal">Integrations</span>
<h1 class="d1 reveal">Connect your<br>entire workflow.</h1>
<p class="subtitle reveal">Originmain integrates with GitHub, Figma, Linear, Slack, VS Code, Cursor, TypeScript, and React — so every part of your design-to-code pipeline is connected, without changing how you work.</p>
<div class="page-hero-ctas reveal">
<a href="/sign-up" class="btn btn-white btn-lg">Get Started Free</a>
<a href="#how-it-works" class="btn btn-outline-white btn-lg">See how it works ↓</a>
</div>
</div>
<!-- Integration bento grid -->
<div class="int-bento reveal">
<div class="int-grid">
<!-- GitHub -->
<div class="int-card github">
<div class="int-logo">
<svg width="22" height="22" viewBox="0 0 24 24" fill="rgba(255,255,255,.85)"><path d="M12 2C6.477 2 2 6.477 2 12c0 4.418 2.865 8.168 6.839 9.49.5.092.682-.217.682-.482 0-.237-.009-.866-.013-1.7-2.782.604-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.31.678.921.678 1.856 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12c0-5.523-4.477-10-10-10z"/></svg>
</div>
<div>
<div class="int-name">GitHub</div>
<div class="int-desc">PR reviews trigger automatic diffs. Every merge computes a full component-level diff.</div>
</div>
<span class="int-status"><span class="int-status-dot"></span>Live</span>
</div>
<!-- Figma -->
<div class="int-card figma">
<div class="int-logo">
<svg viewBox="0 0 24 24" width="20" height="20" fill="none"><path d="M8 2h4v6H8a3 3 0 010-6z" fill="#F24E1E"/><path d="M12 2h4a3 3 0 010 6h-4V2z" fill="#FF7262"/><path d="M8 8h4v6H8a3 3 0 010-6z" fill="#A259FF"/><path d="M12 11a3 3 0 116 0 3 3 0 01-6 0z" fill="#1ABCFE"/><path d="M8 14h4v4a3 3 0 11-4-4z" fill="#0ACF83"/></svg>
</div>
<div>
<div class="int-name">Figma</div>
<div class="int-desc">Design tokens, components &amp; layouts synced live into the graph.</div>
</div>
<span class="int-status"><span class="int-status-dot"></span>Live</span>
</div>
<!-- Linear -->
<div class="int-card linear">
<div class="int-logo">
<svg viewBox="0 0 24 24" width="20" height="20" fill="#5e6ad2"><path d="M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z"/></svg>
</div>
<div>
<div class="int-name">Linear</div>
<div class="int-desc">Issue tracking tied to component changes. Auto-creates issues when drift is detected.</div>
</div>
<span class="int-status"><span class="int-status-dot"></span>Live</span>
</div>
<!-- Slack -->
<div class="int-card slack">
<div class="int-logo">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none"><path d="M5.042 15.165a2.528 2.528 0 01-2.52 2.52 2.528 2.528 0 01-2.521-2.52 2.528 2.528 0 012.52-2.52h2.521v2.52z" fill="#E01E5A"/><path d="M6.313 15.165a2.528 2.528 0 012.521-2.52 2.528 2.528 0 012.52 2.52v6.313A2.528 2.528 0 018.834 24a2.528 2.528 0 01-2.521-2.522v-6.313z" fill="#E01E5A"/><path d="M8.834 5.042a2.528 2.528 0 01-2.521-2.52A2.528 2.528 0 018.834 0a2.528 2.528 0 012.52 2.522v2.52H8.834z" fill="#36C5F0"/><path d="M8.834 6.313a2.528 2.528 0 012.52 2.521 2.528 2.528 0 01-2.52 2.52H2.522A2.528 2.528 0 010 8.834a2.528 2.528 0 012.522-2.521h6.312z" fill="#36C5F0"/><path d="M18.956 8.834a2.528 2.528 0 012.522-2.521A2.528 2.528 0 0124 8.834a2.528 2.528 0 01-2.522 2.52h-2.522V8.834z" fill="#2EB67D"/><path d="M17.688 8.834a2.528 2.528 0 01-2.522 2.52 2.528 2.528 0 01-2.521-2.52V2.522A2.528 2.528 0 0115.166 0a2.528 2.528 0 012.522 2.522v6.312z" fill="#2EB67D"/><path d="M15.166 18.956a2.528 2.528 0 012.522 2.522A2.528 2.528 0 0115.166 24a2.528 2.528 0 01-2.521-2.522v-2.522h2.521z" fill="#ECB22E"/><path d="M15.166 17.688a2.528 2.528 0 01-2.521-2.522 2.528 2.528 0 012.521-2.521h6.313A2.528 2.528 0 0124 15.166a2.528 2.528 0 01-2.521 2.522h-6.313z" fill="#ECB22E"/></svg>
</div>
<div>
<div class="int-name">Slack</div>
<div class="int-desc">Deploy alerts, review pings, and diff summaries posted to your channels.</div>
</div>
<span class="int-status"><span class="int-status-dot"></span>Live</span>
</div>
<!-- VS Code -->
<div class="int-card vscode">
<div class="int-logo">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none"><path d="M23.15 2.587L18.21.21a1.494 1.494 0 00-1.705.29l-9.46 8.63-4.12-3.128a.999.999 0 00-1.276.057L.327 7.261A1 1 0 00.326 8.74L3.899 12 .326 15.26a1 1 0 00.001 1.479L1.65 17.94a.999.999 0 001.276.057l4.12-3.128 9.46 8.63a1.492 1.492 0 001.704.29l4.942-2.377A1.5 1.5 0 0024 19.923V4.077a1.5 1.5 0 00-.85-1.49zm-5.146 14.861L10.826 12l7.178-5.448v10.896z" fill="#007ACC"/></svg>
</div>
<div>
<div class="int-name">VS Code</div>
<div class="int-desc">Extension with inline diff annotations. See component history without leaving your editor.</div>
</div>
<span class="int-status"><span class="int-status-dot"></span>Live</span>
</div>
<!-- Cursor -->
<div class="int-card cursor">
<div class="int-logo">
<svg viewBox="0 0 24 24" width="20" height="20" fill="rgba(255,255,255,.88)"><path d="M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23"/></svg>
</div>
<div>
<div class="int-name">Cursor</div>
<div class="int-desc">Origin diffs surface as Cursor suggestions. Accept/reject via the Agent Bridge.</div>
</div>
<span class="int-status"><span class="int-status-dot"></span>Live</span>
</div>
<!-- TypeScript -->
<div class="int-card typescript">
<div class="int-logo">
<svg viewBox="0 0 18 18" width="18" height="18"><rect x="0.5" y="4.5" width="8.5" height="1.8" rx="0.5" fill="white"/><rect x="3.75" y="4.5" width="1.9" height="9.2" rx="0.5" fill="white"/><path d="M15.8 7.2c-.5-.9-1.4-1.4-2.5-1.4-1.4 0-2.3.7-2.3 1.9 0 1 .9 1.6 2.1 2 1.3.4 2.3 1.1 2.3 2.3 0 1.3-1.1 2.1-2.6 2.1-1.1 0-2-.4-2.6-1.3" stroke="white" stroke-width="1.7" stroke-linecap="round" fill="none"/></svg>
</div>
<div>
<div class="int-name">TypeScript</div>
<div class="int-desc">Type-safe component contracts. Prop inference from your TypeScript types.</div>
</div>
<span class="int-status"><span class="int-status-dot"></span>Live</span>
</div>
<!-- React -->
<div class="int-card react">
<div class="int-logo">
<svg viewBox="0 0 24 24" width="22" height="22" fill="none"><ellipse cx="12" cy="12" rx="10" ry="4" stroke="#61dafb" stroke-width="1.3"/><ellipse cx="12" cy="12" rx="10" ry="4" stroke="#61dafb" stroke-width="1.3" transform="rotate(60 12 12)"/><ellipse cx="12" cy="12" rx="10" ry="4" stroke="#61dafb" stroke-width="1.3" transform="rotate(120 12 12)"/><circle cx="12" cy="12" r="2" fill="#61dafb"/></svg>
</div>
<div>
<div class="int-name">React</div>
<div class="int-desc">Component tree, hooks, and context all mapped to the graph. Full React Fiber integration.</div>
</div>
<span class="int-status"><span class="int-status-dot"></span>Live</span>
</div>
</div>
</div>
</section>
<!-- HOW IT WORKS -->
<section id="how-it-works" class="section">
<div class="wrap">
<div class="section-head reveal">
<span class="label">How it works</span>
<h2 class="d2">From connect to notify in four steps.</h2>
<p class="subtitle">Every integration follows the same secure pipeline — events flow in, diffs are computed, and your team is alerted in the tools they already use.</p>
</div>
<div class="hiw-steps stagger">
<div class="hiw-step">
<div class="hiw-num">01</div>
<h3>Connect</h3>
<p>Authorize via OAuth or register a webhook. Originmain handles token refresh and credential storage with zero manual config.</p>
</div>
<div class="hiw-step">
<div class="hiw-num">02</div>
<h3>Sync</h3>
<p>Events flow into Originmain in real time. Each payload is verified with HMAC signatures before any processing begins.</p>
</div>
<div class="hiw-step">
<div class="hiw-num">03</div>
<h3>Diff</h3>
<p>Changes are automatically fed into the Intent Diff engine. Component-level diffs are computed and attributed to the triggering event.</p>
</div>
<div class="hiw-step">
<div class="hiw-num">04</div>
<h3>Notify</h3>
<p>Your team is alerted where they work — a Slack message, a PR comment, a Linear issue update, or an inline editor annotation.</p>
</div>
</div>
</div>
</section>
<!-- DEEP DIVE: GITHUB -->
<div class="section" style="padding:100px 40px;">
<div class="feat-split reveal">
<div class="feat-copy">
<span class="label label-blue">GitHub integration</span>
<h2 class="d3">Every merge computes<br>a full component diff.</h2>
<p class="subtitle">When a PR is opened, Originmain receives the push event and immediately kicks off a component-level diff across the entire affected subtree. The result is posted back to the PR as a structured comment — no manual review step.</p>
<ul class="feat-pts">
<li><span class="feat-pt-icon"></span>PR events trigger automatic diff computation the moment they are received.</li>
<li><span class="feat-pt-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="2.5" r="1.5" fill="currentColor"/><circle cx="2.5" cy="11" r="1.5" fill="currentColor"/><circle cx="11.5" cy="11" r="1.5" fill="currentColor"/><path d="M6.2 3.8L3.2 9.6M7.8 3.8l3 5.8M3.8 11h6.4" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/></svg></span>Branch tracking keeps the Origin Graph in sync with every push — not just merges.</li>
<li><span class="feat-pt-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"><path d="M1.5 5h11M9.5 2.5l3 2.5-3 2.5"/><path d="M12.5 9h-11M4.5 6.5L1.5 9l3 2.5"/></svg></span>Originmain posts a structured diff comment directly onto the GitHub PR for inline review.</li>
</ul>
<a href="#" class="btn btn-blue">Connect GitHub</a>
</div>
<div class="feat-vis feat-vis-dark reveal">
<div style="position:absolute;inset:0;padding:20px;display:flex;flex-direction:column;gap:0;overflow:hidden;">
<!-- Webhook payload -->
<div style="font-family:var(--mono);font-size:0.4375rem;color:rgba(255,255,255,0.22);letter-spacing:0.1em;text-transform:uppercase;margin-bottom:8px;">Incoming webhook payload</div>
<div class="code-block" style="padding:14px;font-size:0.625rem;line-height:1.65;border-radius:8px;flex-shrink:0;">
<span class="pu">{</span>
<span class="kw">"event"</span><span class="pu">:</span> <span class="str">"pull_request"</span><span class="pu">,</span>
<span class="kw">"action"</span><span class="pu">:</span> <span class="str">"opened"</span><span class="pu">,</span>
<span class="kw">"number"</span><span class="pu">:</span> <span class="nm">142</span><span class="pu">,</span>
<span class="kw">"head"</span><span class="pu">: {</span>
<span class="kw">"sha"</span><span class="pu">:</span> <span class="str">"a4f3c2d"</span><span class="pu">,</span>
<span class="kw">"ref"</span><span class="pu">:</span> <span class="str">"feat/dashboard-v2"</span>
<span class="pu">},</span>
<span class="kw">"x-hub-signature-256"</span><span class="pu">:</span> <span class="str">"sha256=…"</span>
<span class="pu">}</span></div>
<!-- Arrow -->
<div style="display:flex;align-items:center;justify-content:center;padding:8px 0;gap:8px;">
<div style="flex:1;height:1px;background:rgba(255,255,255,0.07);"></div>
<div style="font-family:var(--mono);font-size:0.5rem;color:rgba(255,255,255,0.25);display:flex;align-items:center;gap:5px;">
<span style="width:16px;height:16px;background:rgba(16,185,129,0.12);border:1px solid rgba(16,185,129,0.2);border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:0.4rem;color:#10B981;"></span>
HMAC verified · diff triggered
</div>
<div style="flex:1;height:1px;background:rgba(255,255,255,0.07);"></div>
</div>
<!-- Diff result -->
<div style="font-family:var(--mono);font-size:0.4375rem;color:rgba(255,255,255,0.22);letter-spacing:0.1em;text-transform:uppercase;margin-bottom:8px;">Computed component diff</div>
<div style="background:#111118;border:1px solid rgba(255,255,255,0.07);border-radius:8px;padding:14px;font-family:var(--mono);font-size:0.625rem;line-height:1.65;flex-shrink:0;">
<div style="color:#FFBA7B;margin-bottom:6px;">~ DashboardHeader</div>
<div style="color:rgba(255,255,255,0.35);padding-left:10px;margin-bottom:3px;"> <span style="color:#F87171;">- title: "Overview"</span></div>
<div style="color:rgba(255,255,255,0.35);padding-left:10px;margin-bottom:8px;"> <span style="color:#4ADE80;">+ title: "Dashboard v2"</span></div>
<div style="color:#7EB8FF;margin-bottom:6px;">+ MetricCard (new)</div>
<div style="color:rgba(255,255,255,0.35);padding-left:10px;margin-bottom:3px;"> <span style="color:#4ADE80;">+ metric="weekly_active"</span></div>
<div style="color:rgba(255,255,255,0.35);padding-left:10px;"> <span style="color:#4ADE80;">+ format="number"</span></div>
</div>
<!-- Arrow to PR comment -->
<div style="display:flex;align-items:center;justify-content:center;padding:8px 0;gap:8px;">
<div style="flex:1;height:1px;background:rgba(255,255,255,0.07);"></div>
<div style="font-family:var(--mono);font-size:0.5rem;color:rgba(255,255,255,0.25);">posted to PR #142</div>
<div style="flex:1;height:1px;background:rgba(255,255,255,0.07);"></div>
</div>
<!-- PR comment mock -->
<div style="background:#161B22;border:1px solid rgba(255,255,255,0.08);border-radius:8px;padding:10px;flex-shrink:0;">
<div style="display:flex;align-items:center;gap:6px;margin-bottom:6px;">
<div style="width:14px;height:14px;border-radius:50%;background:linear-gradient(135deg,#0066FF,#7C3AED);"></div>
<span style="font-family:var(--mono);font-size:0.5rem;color:rgba(255,255,255,0.5);font-weight:600;">originmain-bot</span>
<span style="font-family:var(--mono);font-size:0.4375rem;color:rgba(255,255,255,0.2);">commented just now</span>
</div>
<div style="font-family:var(--mono);font-size:0.5625rem;color:rgba(255,255,255,0.65);">Origin Diff — 2 components changed, 1 added</div>
<div style="font-family:var(--mono);font-size:0.5rem;color:rgba(255,255,255,0.35);margin-top:3px;">View full diff on Originmain →</div>
</div>
</div>
</div>
</div>
</div>
<!-- DEEP DIVE: FIGMA -->
<div class="section section-muted" style="padding:100px 40px;">
<div class="feat-split rev reveal">
<div class="feat-copy">
<span class="label label-blue">Figma integration</span>
<h2 class="d3">Design changes update<br>the graph automatically.</h2>
<p class="subtitle">Connect your Figma file and Originmain subscribes to every change. Design tokens, component definitions, and layout compositions are extracted and mapped directly into the Origin Graph — no manual export, no hand-off step.</p>
<ul class="feat-pts">
<li><span class="feat-pt-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor"><path d="M7 1.5L8.1 5.4 12 6.5l-3.9 1.1L7 11.5 5.9 7.6 2 6.5l3.9-1.1z"/><circle cx="11" cy="2.5" r="1" fill="currentColor" opacity="0.5"/></svg></span>Design tokens (color, spacing, typography) are extracted and kept in sync as you iterate in Figma.</li>
<li><span class="feat-pt-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1.5" y="2.5" width="11" height="9" rx="1.5" stroke="currentColor" stroke-width="1.3"/><path d="M5 6.5l1.8 2 1.2-1.6 1.4 2" stroke="currentColor" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/></svg></span>Component library updates propagate to every artboard that references them — instantly.</li>
<li><span class="feat-pt-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1.5" y="4" width="6.5" height="7.5" rx="1.3" stroke="currentColor" stroke-width="1.3"/><rect x="6" y="2.5" width="6.5" height="7.5" rx="1.3" stroke="currentColor" stroke-width="1.3"/></svg></span>Layout changes generate Intent Diffs that can be handed directly to the Agent Bridge.</li>
</ul>
<a href="#" class="btn btn-blue">Connect Figma</a>
</div>
<div class="feat-vis feat-vis-light reveal">
<div style="position:absolute;inset:0;padding:24px;display:flex;flex-direction:column;gap:12px;overflow:hidden;">
<!-- Token sync panel -->
<div style="font-size:0.6875rem;font-weight:700;color:#0A0A0A;letter-spacing:-0.02em;margin-bottom:4px;">Figma → Origin Graph</div>
<!-- Token rows -->
<div style="display:flex;flex-direction:column;gap:6px;">
<div style="background:#fff;border:1px solid rgba(0,0,0,0.07);border-radius:8px;padding:10px 12px;display:flex;align-items:center;gap:10px;box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<div style="width:22px;height:22px;border-radius:5px;background:#0066FF;flex-shrink:0;"></div>
<div style="flex:1;"><div style="font-size:0.6875rem;font-weight:600;color:#0A0A0A;">color/brand/primary</div><div style="font-family:monospace;font-size:0.5625rem;color:#A1A1AA;">#0066FF</div></div>
<div style="font-family:monospace;font-size:0.5rem;color:#10B981;background:rgba(16,185,129,0.08);border:1px solid rgba(16,185,129,0.15);padding:2px 6px;border-radius:99px;">synced</div>
</div>
<div style="background:#fff;border:1px solid rgba(0,0,0,0.07);border-radius:8px;padding:10px 12px;display:flex;align-items:center;gap:10px;box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<div style="width:22px;height:22px;border-radius:5px;background:#F4F4F5;border:1px solid rgba(0,0,0,0.07);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:0.6875rem;">T</div>
<div style="flex:1;"><div style="font-size:0.6875rem;font-weight:600;color:#0A0A0A;">typography/heading/xl</div><div style="font-family:monospace;font-size:0.5625rem;color:#A1A1AA;">900 / 4.5rem / -0.045em</div></div>
<div style="font-family:monospace;font-size:0.5rem;color:#10B981;background:rgba(16,185,129,0.08);border:1px solid rgba(16,185,129,0.15);padding:2px 6px;border-radius:99px;">synced</div>
</div>
<div style="background:#fff;border:1px solid rgba(0,0,0,0.07);border-radius:8px;padding:10px 12px;display:flex;align-items:center;gap:10px;box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<div style="width:22px;height:22px;border-radius:5px;background:#F4F4F5;border:1px solid rgba(0,0,0,0.07);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:0.5rem;">sp</div>
<div style="flex:1;"><div style="font-size:0.6875rem;font-weight:600;color:#0A0A0A;">spacing/lg</div><div style="font-family:monospace;font-size:0.5625rem;color:#A1A1AA;">32px</div></div>
<div style="font-family:monospace;font-size:0.5rem;color:#F59E0B;background:rgba(245,158,11,0.08);border:1px solid rgba(245,158,11,0.2);padding:2px 6px;border-radius:99px;">updating</div>
</div>
</div>
<!-- Component library -->
<div style="margin-top:4px;background:#fff;border:1px solid rgba(0,0,0,0.07);border-radius:8px;padding:12px;box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<div style="font-size:0.6875rem;font-weight:700;color:#0A0A0A;margin-bottom:8px;">Component library — 48 components</div>
<div style="display:grid;grid-template-columns:repeat(4,1fr);gap:6px;">
<div style="background:#F4F4F5;border-radius:6px;height:28px;display:flex;align-items:center;justify-content:center;font-size:0.5rem;color:#52525B;font-weight:600;">Button</div>
<div style="background:#F4F4F5;border-radius:6px;height:28px;display:flex;align-items:center;justify-content:center;font-size:0.5rem;color:#52525B;font-weight:600;">Card</div>
<div style="background:#F4F4F5;border-radius:6px;height:28px;display:flex;align-items:center;justify-content:center;font-size:0.5rem;color:#52525B;font-weight:600;">Input</div>
<div style="background:rgba(0,102,255,0.07);border:1px solid rgba(0,102,255,0.15);border-radius:6px;height:28px;display:flex;align-items:center;justify-content:center;font-size:0.5rem;color:#0066FF;font-weight:600;">Badge ↑</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- SETUP IN MINUTES: TECH SECTION -->
<section class="section">
<div class="wrap">
<div class="section-head reveal">
<span class="label">Setup in minutes</span>
<h2 class="d2">Built on secure, open standards.</h2>
<p class="subtitle">Every integration uses platform-native authentication and cryptographic verification. No credentials stored in plaintext, no polling — only push-based, event-driven architecture.</p>
</div>
<div class="tech-grid stagger">
<div class="tech-card">
<div class="tech-icon">🔐</div>
<h3>HMAC verification</h3>
<p>Every incoming webhook is verified with HMAC-SHA256 before processing. The shared secret is stored encrypted in Originmain's key vault — never in environment variables or config files.</p>
<span class="tech-tag">Security</span>
</div>
<div class="tech-card">
<div class="tech-icon">✍️</div>
<h3>Webhook signatures</h3>
<p>Each platform has its own signature header — <code style="font-family:var(--mono);font-size:0.8em;background:var(--bg-muted);padding:1px 4px;border-radius:3px;">x-hub-signature-256</code> for GitHub, <code style="font-family:var(--mono);font-size:0.8em;background:var(--bg-muted);padding:1px 4px;border-radius:3px;">x-figma-signature</code> for Figma. Originmain verifies each using the platform's prescribed algorithm.</p>
<span class="tech-tag">Protocol</span>
</div>
<div class="tech-card">
<div class="tech-icon">📨</div>
<h3>Event types</h3>
<p>Subscribe only to the events you need. Originmain exposes a per-integration event filter — receive <code style="font-family:var(--mono);font-size:0.8em;background:var(--bg-muted);padding:1px 4px;border-radius:3px;">pull_request.opened</code> and <code style="font-family:var(--mono);font-size:0.8em;background:var(--bg-muted);padding:1px 4px;border-radius:3px;">push</code> from GitHub, or <code style="font-family:var(--mono);font-size:0.8em;background:var(--bg-muted);padding:1px 4px;border-radius:3px;">FILE_UPDATE</code> from Figma.</p>
<span class="tech-tag">Granularity</span>
</div>
<div class="tech-card">
<div class="tech-icon">🔑</div>
<h3>OAuth flows</h3>
<p>GitHub, Figma, Linear, and Slack all use standard OAuth 2.0 with PKCE. Tokens are refreshed automatically — you authorize once and Originmain handles the rest without user intervention.</p>
<span class="tech-tag">Authentication</span>
</div>
<div class="tech-card">
<div class="tech-icon"></div>
<h3>API rate limits</h3>
<p>Originmain's integration layer respects every platform's rate limit with adaptive back-off and request queuing. High-volume repos with hundreds of daily PRs process without dropped events.</p>
<span class="tech-tag">Reliability</span>
</div>
<div class="tech-card">
<div class="tech-icon">📋</div>
<h3>Audit logs</h3>
<p>Every event received, every diff triggered, every notification sent is recorded with a timestamp and payload hash. Full audit trail available to workspace admins via the Originmain dashboard.</p>
<span class="tech-tag">Compliance</span>
</div>
</div>
</div>
</section>
<!-- INTEGRATION STATUS GRID -->
<section class="section section-muted">
<div class="wrap">
<div class="section-head reveal">
<span class="label">Integration status</span>
<h2 class="d2">All integrations, all live.</h2>
<p class="subtitle">Every integration ships fully operational on day one. Connect GitHub and Figma in under two minutes, then add Linear, Slack, and your editor tools from the dashboard.</p>
</div>
<div class="status-grid stagger">
<div class="status-card">
<div class="status-logo-wrap" style="background:#21262D;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="rgba(255,255,255,.85)"><path d="M12 2C6.477 2 2 6.477 2 12c0 4.418 2.865 8.168 6.839 9.49.5.092.682-.217.682-.482 0-.237-.009-.866-.013-1.7-2.782.604-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.31.678.921.678 1.856 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12c0-5.523-4.477-10-10-10z"/></svg>
</div>
<div class="status-info">
<h3>GitHub</h3>
<p>PR diffs &amp; branch sync</p>
<span class="status-badge"><span class="status-badge-dot"></span>Operational</span>
</div>
</div>
<div class="status-card">
<div class="status-logo-wrap" style="background:#1E1E2E;">
<svg viewBox="0 0 24 24" width="20" height="20" fill="none"><path d="M8 2h4v6H8a3 3 0 010-6z" fill="#F24E1E"/><path d="M12 2h4a3 3 0 010 6h-4V2z" fill="#FF7262"/><path d="M8 8h4v6H8a3 3 0 010-6z" fill="#A259FF"/><path d="M12 11a3 3 0 116 0 3 3 0 01-6 0z" fill="#1ABCFE"/><path d="M8 14h4v4a3 3 0 11-4-4z" fill="#0ACF83"/></svg>
</div>
<div class="status-info">
<h3>Figma</h3>
<p>Token &amp; component sync</p>
<span class="status-badge"><span class="status-badge-dot"></span>Operational</span>
</div>
</div>
<div class="status-card">
<div class="status-logo-wrap" style="background:#0D0D1A;">
<svg viewBox="0 0 24 24" width="20" height="20" fill="#5e6ad2"><path d="M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z"/></svg>
</div>
<div class="status-info">
<h3>Linear</h3>
<p>Issue &amp; milestone sync</p>
<span class="status-badge"><span class="status-badge-dot"></span>Operational</span>
</div>
</div>
<div class="status-card">
<div class="status-logo-wrap" style="background:#1A1A2E;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M5.042 15.165a2.528 2.528 0 01-2.52 2.52 2.528 2.528 0 01-2.521-2.52 2.528 2.528 0 012.52-2.52h2.521v2.52z" fill="#E01E5A"/><path d="M6.313 15.165a2.528 2.528 0 012.521-2.52 2.528 2.528 0 012.52 2.52v6.313A2.528 2.528 0 018.834 24a2.528 2.528 0 01-2.521-2.522v-6.313z" fill="#E01E5A"/><path d="M8.834 5.042a2.528 2.528 0 01-2.521-2.52A2.528 2.528 0 018.834 0a2.528 2.528 0 012.52 2.522v2.52H8.834z" fill="#36C5F0"/><path d="M8.834 6.313a2.528 2.528 0 012.52 2.521 2.528 2.528 0 01-2.52 2.52H2.522A2.528 2.528 0 010 8.834a2.528 2.528 0 012.522-2.521h6.312z" fill="#36C5F0"/><path d="M18.956 8.834a2.528 2.528 0 012.522-2.521A2.528 2.528 0 0124 8.834a2.528 2.528 0 01-2.522 2.52h-2.522V8.834z" fill="#2EB67D"/><path d="M17.688 8.834a2.528 2.528 0 01-2.522 2.52 2.528 2.528 0 01-2.521-2.52V2.522A2.528 2.528 0 0115.166 0a2.528 2.528 0 012.522 2.522v6.312z" fill="#2EB67D"/><path d="M15.166 18.956a2.528 2.528 0 012.522 2.522A2.528 2.528 0 0115.166 24a2.528 2.528 0 01-2.521-2.522v-2.522h2.521z" fill="#ECB22E"/><path d="M15.166 17.688a2.528 2.528 0 01-2.521-2.522 2.528 2.528 0 012.521-2.521h6.313A2.528 2.528 0 0124 15.166a2.528 2.528 0 01-2.521 2.522h-6.313z" fill="#ECB22E"/></svg>
</div>
<div class="status-info">
<h3>Slack</h3>
<p>Alerts &amp; diff summaries</p>
<span class="status-badge"><span class="status-badge-dot"></span>Operational</span>
</div>
</div>
<div class="status-card">
<div class="status-logo-wrap" style="background:#0D1117;">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M23.15 2.587L18.21.21a1.494 1.494 0 00-1.705.29l-9.46 8.63-4.12-3.128a.999.999 0 00-1.276.057L.327 7.261A1 1 0 00.326 8.74L3.899 12 .326 15.26a1 1 0 00.001 1.479L1.65 17.94a.999.999 0 001.276.057l4.12-3.128 9.46 8.63a1.492 1.492 0 001.704.29l4.942-2.377A1.5 1.5 0 0024 19.923V4.077a1.5 1.5 0 00-.85-1.49zm-5.146 14.861L10.826 12l7.178-5.448v10.896z" fill="#007ACC"/></svg>
</div>
<div class="status-info">
<h3>VS Code</h3>
<p>Inline diff annotations</p>
<span class="status-badge"><span class="status-badge-dot"></span>Operational</span>
</div>
</div>
<div class="status-card">
<div class="status-logo-wrap" style="background:#111118;border:1px solid rgba(255,255,255,0.08);">
<svg viewBox="0 0 24 24" width="20" height="20" fill="rgba(255,255,255,.88)"><path d="M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23"/></svg>
</div>
<div class="status-info">
<h3>Cursor</h3>
<p>Agent Bridge suggestions</p>
<span class="status-badge"><span class="status-badge-dot"></span>Operational</span>
</div>
</div>
<div class="status-card">
<div class="status-logo-wrap" style="background:#3178c6;">
<svg viewBox="0 0 18 18" width="18" height="18"><rect x="0.5" y="4.5" width="8.5" height="1.8" rx="0.5" fill="white"/><rect x="3.75" y="4.5" width="1.9" height="9.2" rx="0.5" fill="white"/><path d="M15.8 7.2c-.5-.9-1.4-1.4-2.5-1.4-1.4 0-2.3.7-2.3 1.9 0 1 .9 1.6 2.1 2 1.3.4 2.3 1.1 2.3 2.3 0 1.3-1.1 2.1-2.6 2.1-1.1 0-2-.4-2.6-1.3" stroke="white" stroke-width="1.7" stroke-linecap="round" fill="none"/></svg>
</div>
<div class="status-info">
<h3>TypeScript</h3>
<p>Type-safe prop contracts</p>
<span class="status-badge"><span class="status-badge-dot"></span>Operational</span>
</div>
</div>
<div class="status-card">
<div class="status-logo-wrap" style="background:#0D1A1A;">
<svg viewBox="0 0 24 24" width="22" height="22" fill="none"><ellipse cx="12" cy="12" rx="10" ry="4" stroke="#61dafb" stroke-width="1.3"/><ellipse cx="12" cy="12" rx="10" ry="4" stroke="#61dafb" stroke-width="1.3" transform="rotate(60 12 12)"/><ellipse cx="12" cy="12" rx="10" ry="4" stroke="#61dafb" stroke-width="1.3" transform="rotate(120 12 12)"/><circle cx="12" cy="12" r="2" fill="#61dafb"/></svg>
</div>
<div class="status-info">
<h3>React</h3>
<p>Full Fiber tree mapping</p>
<span class="status-badge"><span class="status-badge-dot"></span>Operational</span>
</div>
</div>
</div>
</div>
</section>
<!-- RELATED FEATURES -->
<section class="section">
<div class="wrap">
<div class="section-head reveal">
<span class="label">Goes deeper with</span>
<h2 class="d2">Integrations power every feature.</h2>
<p class="subtitle">The integration layer is the connective tissue of the whole platform — every feature benefits from a connected workflow.</p>
</div>
<div class="related-grid stagger">
<a class="related-card" href="/features/agent-bridge.html">
<div class="related-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"><path d="M1.5 5h11M9.5 2.5l3 2.5-3 2.5"/><path d="M12.5 9h-11M4.5 6.5L1.5 9l3 2.5"/></svg></div>
<h3>Agent Bridge</h3>
<p>Cursor and Claude Code receive Origin diffs directly through the Agent Bridge MCP channel. Integrations are what keep the bridge fed with up-to-date component context.</p>
<span class="related-link">Explore Agent Bridge →</span>
</a>
<a class="related-card" href="/features/intent-diff.html">
<div class="related-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1.5" y="4" width="6.5" height="7.5" rx="1.3" stroke="currentColor" stroke-width="1.3"/><rect x="6" y="2.5" width="6.5" height="7.5" rx="1.3" stroke="currentColor" stroke-width="1.3"/></svg></div>
<h3>Intent Diff</h3>
<p>GitHub pushes, Figma changes, and Linear milestones all trigger Intent Diff computations. Every integration event has a diff attached — automatically, with no manual review step.</p>
<span class="related-link">Explore Intent Diff →</span>
</a>
<a class="related-card" href="/features/origin-graph.html">
<div class="related-icon"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="2.5" r="1.5" fill="currentColor"/><circle cx="2.5" cy="11" r="1.5" fill="currentColor"/><circle cx="11.5" cy="11" r="1.5" fill="currentColor"/><path d="M6.2 3.8L3.2 9.6M7.8 3.8l3 5.8M3.8 11h6.4" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/></svg></div>
<h3>Origin Graph</h3>
<p>Figma tokens, TypeScript types, and React Fiber data all flow into the Origin Graph through the integration layer, keeping your component index complete and current at all times.</p>
<span class="related-link">Explore Origin Graph →</span>
</a>
</div>
</div>
</section>
<!-- CTA -->
<section id="cta-bottom">
<div class="cta-inner">
<h2 class="cta-headline">Your whole stack,<br>finally connected.</h2>
<p class="cta-sub">Connect GitHub and Figma in under two minutes. Every other integration is one click from the dashboard.</p>
<div class="cta-actions">
<a href="/sign-up" class="btn btn-white btn-lg">Get Started Free</a>
<a href="/" class="btn btn-outline-white btn-lg">Back to overview</a>
</div>
</div>
</section>
<!-- FOOTER -->
<footer>
<div class="ft-inner">
<div class="ft-top">
<div>
<div class="ft-brand-logo">Origin<span>main</span></div>
<p class="ft-brand-tag">Where design intent becomes production code.</p>
</div>
<div class="ft-col">
<h4>Product</h4>
<ul>
<li><a href="/features/live-artboard.html">Live Artboard</a></li>
<li><a href="/features/origin-graph.html">Origin Graph</a></li>
<li><a href="/features/intent-diff.html">Intent Diff</a></li>
<li><a href="/features/completion-zone.html">Completion Zone</a></li>
<li><a href="/features/agent-bridge.html">Agent Bridge</a></li>
</ul>
</div>
<div class="ft-col">
<h4>Integrations</h4>
<ul>
<li><a href="/features/integrations.html">All integrations</a></li>
<li><a href="#">GitHub</a></li>
<li><a href="#">Linear</a></li>
<li><a href="#">Slack</a></li>
</ul>
</div>
<div class="ft-col">
<h4>Developers</h4>
<ul>
<li><a href="#">Docs</a></li>
<li><a href="#">API Reference</a></li>
<li><a href="#">MCP Protocol</a></li>
<li><a href="#">Changelog</a></li>
</ul>
</div>
<div class="ft-col">
<h4>Company</h4>
<ul>
<li><a href="#">About</a></li>
<li><a href="/#pricing">Pricing</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
<div class="ft-bottom">
<span class="ft-copy">© 2025 Originmain. All rights reserved.</span>
</div>
</div>
</footer>
<script>
// Nav scroll
const nav=document.getElementById('nav');
window.addEventListener('scroll',()=>{nav.classList.toggle('scrolled',window.scrollY>20);});
// Dropdown: delay-based hover (desktop) + click (mobile/touch)
document.querySelectorAll('.nav-dropdown').forEach(dd=>{const menu=dd.querySelector('.nav-dropdown-menu');let t;const open=()=>{clearTimeout(t);dd.classList.add('open');menu.classList.add('open');};const close=()=>{t=setTimeout(()=>{dd.classList.remove('open');menu.classList.remove('open');},150);};dd.addEventListener('mouseenter',open);dd.addEventListener('mouseleave',close);menu.addEventListener('mouseenter',open);menu.addEventListener('mouseleave',close);dd.querySelector('a').addEventListener('click',e=>{if(window.matchMedia('(hover:none)').matches||window.innerWidth<=1024){e.preventDefault();const o=menu.classList.toggle('open');dd.classList.toggle('open',o);}});});
// Mobile product sub-accordion
const mpt=document.getElementById('mob-product-toggle'),mns=document.getElementById('nav-mobile-sub'),mdc=document.getElementById('mob-dd-caret');if(mpt&&mns){mpt.addEventListener('click',e=>{e.preventDefault();const o=mns.classList.toggle('open');if(mdc)mdc.style.transform=o?'rotate(180deg)':'';});}
// Burger
const burger=document.getElementById('nav-burger'),mob=document.getElementById('nav-mobile');
burger.addEventListener('click',()=>{const o=mob.classList.toggle('open');burger.classList.toggle('open',o);burger.setAttribute('aria-expanded',o);});
// Reveal
const io=new IntersectionObserver(entries=>{entries.forEach(e=>{if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:0.12});
document.querySelectorAll('.reveal,.stagger').forEach(el=>io.observe(el));
</script>
</body>
</html>