BrowserFrame
Browser-chrome mockup frame with traffic-light dots and a URL pill. Wraps arbitrary content for marketing and landing surfaces.
Preview
Product screenshot or content here
Clickable URL Pill
Pass href to make the URL pill a real anchor link with a focus ring. The link opens in a new tab (target="_blank") with rel="noopener noreferrer".
Artist EPK content — URL pill is a real link
Elevation
BrowserFrame is elevation-free by design. Compose with .lit, .lit-soft, or .lit-strong utility classes from @loworbitstudio/visor-core/utilities to add depth independently.
import { BrowserFrame } from '@/components/visual/browser-frame/browser-frame';
<BrowserFrame url="myproduct.example.com" className="lit">
<img src="/screenshot.png" alt="Product screenshot" />
</BrowserFrame>Custom Focus Color
The URL pill focus ring color is driven by --browser-frame-focus-color, defaulting to var(--accent, currentColor). Override it per-instance to bind a themed or keyed accent (e.g. a per-artist color in Blacklight):
<BrowserFrame
url="sharlese.epk.pro"
href="https://sharlese.epk.pro"
style={{ '--browser-frame-focus-color': '#c8ff00' } as React.CSSProperties}
>
<img src="/screenshot.png" alt="Product screenshot" />
</BrowserFrame>Installation
npx visor add browser-frameUsage
import { BrowserFrame } from '@/components/visual/browser-frame/browser-frame';
{/* Static display-only */}
<BrowserFrame url="myproduct.example.com">
<img src="/screenshot.png" alt="Product screenshot" />
</BrowserFrame>
{/* Clickable URL pill */}
<BrowserFrame url="sharlese.epk.pro" href="https://sharlese.epk.pro">
<div style={{ padding: '24px' }}>Artist EPK content</div>
</BrowserFrame>API Reference
BrowserFrameProps
No props data available for “browser-frame”.
Accessibility
- The traffic-light dots are
aria-hidden="true"— they are purely decorative. - When
hrefis set, the URL pill renders as an<a>with anaria-labelof"Open {url} (opens in new tab)"so screen readers convey both the destination and the new-tab behavior. - Focus ring uses
--focus-ring-widthand--focus-ring-offsettokens, consistent with all other Visor interactive elements. - The frame itself conveys no information — ensure the content inside is accessible independently.
When to Use
- Showing a product screenshot or live embed inside a browser mockup on a marketing or landing page
- EPK-style artist or product demos where the "in-browser" framing provides context
- Any dark surface that needs a browser-chrome visual metaphor without hand-rolling the chrome bar
When Not to Use
- Real browser chrome or app shells — this is a decorative mockup, not a functional navigation component
- Light-mode surfaces without overriding
--browser-frame-bg(the default deep-dark background will clash) - Nested inside another
BrowserFrame(a browser inside a browser is confusing)