diff --git a/apps/website/src/app/global.css b/apps/website/src/app/global.css index efe57991a..417bc6d4a 100644 --- a/apps/website/src/app/global.css +++ b/apps/website/src/app/global.css @@ -1,6 +1,20 @@ @import "tailwindcss"; @import "@threadplane/design-tokens/theme.css"; +/* + * Scope files for the inline-style migration. These MUST sit with the other + * @imports at the top: @import after any rule is invalid CSS — the production + * pipeline (Lightning CSS) forgives it by hoisting, but turbopack dev can + * silently DROP the imported files, unstyling everything they cover. Found + * the hard way in Batch 2. + */ +@import "../styles/ui.css"; +@import "../styles/chrome.css"; +@import "../styles/docs.css"; +@import "../styles/landing.css"; +@import "../styles/marketing.css"; +@import "../styles/pages.css"; + /* * Local, non-token constants. * @@ -30,12 +44,6 @@ --docs-accent-tint-line: color-mix(in srgb, var(--color-accent) 10%, transparent); } -@import "../styles/ui.css"; -@import "../styles/chrome.css"; -@import "../styles/docs.css"; -@import "../styles/landing.css"; -@import "../styles/marketing.css"; -@import "../styles/pages.css"; * { box-sizing: border-box; diff --git a/apps/website/src/components/shared/AnnouncementToast.tsx b/apps/website/src/components/shared/AnnouncementToast.tsx index 01acbd8e9..b51411dbd 100644 --- a/apps/website/src/components/shared/AnnouncementToast.tsx +++ b/apps/website/src/components/shared/AnnouncementToast.tsx @@ -1,6 +1,5 @@ 'use client'; import { useState, useEffect } from 'react'; -import { tokens } from '@threadplane/design-tokens'; import { analyticsEvents } from '../../lib/analytics/events'; import { track, trackWhitepaperDownloadClick } from '../../lib/analytics/client'; import { Button } from '../ui/Button'; @@ -83,97 +82,43 @@ export function AnnouncementToast() { setTimeout(dismiss, 4000); }; - const inputStyle: React.CSSProperties = { - width: '100%', - background: tokens.surfaces.surface, - border: `1px solid ${tokens.surfaces.border}`, - borderRadius: tokens.radius.md, - padding: '8px 12px', - fontSize: '0.82rem', - color: tokens.colors.textPrimary, - fontFamily: 'Inter, sans-serif', - outline: 'none', - }; - if (!visible) return null; return (
{/* Dismiss button */} {/* Eyebrow */} -

+

Free Guide

{/* Title */} -

+

From Prototype to Production

{step === 'cta' && ( <> -

+

Six production-readiness dimensions for Angular agents. Get the guide.

-
+
@@ -208,7 +144,7 @@ export function AnnouncementToast() { )} {step === 'form' && ( -
+ (e.currentTarget.style.borderColor = tokens.colors.accent)} - onBlur={e => (e.currentTarget.style.borderColor = tokens.surfaces.border)} + className="toast-input" /> -
+
{open && ( -
+
{DEMOS.map((demo) => ( { setOpen(false); trackExternalLinkClick(demo.href, { surface: 'nav', cta_id: `nav_demo_${demoCtaSuffix(demo.key)}`, cta_text: demo.label }); }} - className="text-sm font-mono" - style={{ display: 'block', padding: '10px 14px', color: tokens.colors.textSecondary, textDecoration: 'none' }} - onMouseEnter={(e) => (e.currentTarget.style.color = tokens.colors.accent)} - onMouseLeave={(e) => (e.currentTarget.style.color = tokens.colors.textSecondary)}> + className="text-sm font-mono nav-demo-item"> {demo.label} ))} @@ -117,25 +111,6 @@ export function Nav() { }); }; - const tabStyle = (active: boolean): React.CSSProperties => ({ - flex: 1, textAlign: 'center', padding: '10px 0', - fontSize: 15, fontWeight: 500, fontFamily: 'Inter, sans-serif', - background: active ? tokens.colors.accentSurface : 'transparent', - color: active ? tokens.colors.accent : tokens.colors.textMuted, - border: 'none', borderRadius: 8, cursor: 'pointer', - minHeight: 44, - }); - - const subTabStyle = (active: boolean): React.CSSProperties => ({ - flex: 1, textAlign: 'center', padding: '8px 0', - fontFamily: 'var(--font-mono,"JetBrains Mono",monospace)', - fontSize: '0.75rem', fontWeight: 600, - background: active ? tokens.colors.accentSurface : 'transparent', - color: active ? tokens.colors.accent : tokens.colors.textMuted, - border: 'none', borderRadius: 6, cursor: 'pointer', - minHeight: 36, - }); - const currentLib = docsConfig.find(lib => lib.id === mobileLibrary); const trackNavLink = (label: string, href: string, external: boolean, surface: 'nav' | 'mobile_nav') => { const slug = label.toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_|_$/g, ''); @@ -150,17 +125,10 @@ export function Nav() { return ( <> -