diff --git a/dashboard/app/apple-touch-icon.png b/dashboard/app/apple-touch-icon.png new file mode 100644 index 0000000..cc7ac93 Binary files /dev/null and b/dashboard/app/apple-touch-icon.png differ diff --git a/dashboard/app/favicon.ico b/dashboard/app/favicon.ico new file mode 100644 index 0000000..bfa83cf Binary files /dev/null and b/dashboard/app/favicon.ico differ diff --git a/dashboard/app/icon.png b/dashboard/app/icon.png new file mode 100644 index 0000000..b662db9 Binary files /dev/null and b/dashboard/app/icon.png differ diff --git a/dashboard/app/layout.tsx b/dashboard/app/layout.tsx index fa333a9..df472f4 100644 --- a/dashboard/app/layout.tsx +++ b/dashboard/app/layout.tsx @@ -7,9 +7,6 @@ import { Nav } from '../components/nav'; import { Footer } from '../components/footer'; import './globals.css'; -// Self-hosted Geist (no network fetch) for UI + tabular numbers; Space Grotesk -// (display) only for large headings, to give the site a real type pairing -// instead of a single-font, system-ui look. const display = Space_Grotesk({ subsets: ['latin'], weight: ['500', '600', '700'], @@ -24,22 +21,23 @@ export const metadata: Metadata = { }, description: 'Continuous, on-chain-derived safety scores for Stellar/Soroban DeFi protocols. Audits are a snapshot; Stenion tracks risk as it moves.', + icons: { + icon: '/icon.png', + shortcut: '/favicon.ico', + apple: '/apple-touch-icon.png', + }, + twitter: { + card: 'summary_large_image', + title: 'Stenion — live risk intelligence for Stellar DeFi', + description: + 'Continuous, on-chain-derived safety scores for Stellar/Soroban DeFi protocols. Audits are a snapshot; Stenion tracks risk as it moves.', + }, }; -// Resolve the theme BEFORE first paint. This is a blocking inline script in -//
, deliberately not a useEffect — an effect runs after hydration, which -// is precisely when the wrong-theme flash happens. -// -// It only writes `data-theme` for an EXPLICIT light/dark choice. "System" is -// the absence of the attribute, which lets the `prefers-color-scheme` block in -// globals.css apply on its own — so system mode needs no JS at all, keeps -// following the OS live, and still paints correctly if this script fails. const THEME_INIT = `(function(){try{var c=localStorage.getItem('stenion-theme');var d=document.documentElement;if(c==='light'||c==='dark'){d.setAttribute('data-theme',c)}else{d.removeAttribute('data-theme')}}catch(e){}})()`; export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - // suppressHydrationWarning: the script above mutates `data-theme` before - // React hydrates, so the server HTML and the live DOM differ by design. - {/* FIRST child of , and deliberately NOT inside a element. - Inside this is part of the React tree Next may stream: on a - route that calls notFound() the head is already flushed, so the tag - arrived only in the RSC payload as serialised JSON and never - executed — /protocol/