<!-- @dsCard group="Components / Layout" viewport="700x360" name="Frame" subtitle="A recessed tray whose header and footer sit on the muted surround while the content sits on a raised panel." -->
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Frame</title>
<link rel="stylesheet" href="../../styles.css"><link rel="stylesheet" href="../_card/card.css">
<script src="https://unpkg.com/react@18.3.1/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
<script src="https://unpkg.com/lucide@0.544.0/dist/umd/lucide.min.js"></script>
<script src="../../_ds_bundle.js"></script>
<script src="../_card/card.js"></script>
</head><body>
<header class="ch"><h1>Frame</h1><p>A recessed tray whose header and footer sit on the muted surround while the content sits on a raised panel.</p></header>
<div id="root"></div>
<ul class="notes">
<li>Frame is for showing a thing inside a context — a preview, an example, a rendered output. Card is for owning content.</li>
<li>The panel is the raised surface; the header and footer stay on the recessed surround.</li>
<li>Do not nest a Frame in a Frame. One level of recession per surface.</li>
</ul>
<script type="text/babel">
const {Frame, FrameHeader, FrameTitle, FrameDescription, FramePanel, Button} = window.OriginDesignSystem_7c998b;
const {Ic, mount} = window.OriginCard;
function Demo(){return (<>
  <Frame>
    <FrameHeader><FrameTitle>Preview</FrameTitle><FrameDescription>How attendees see this booking page.</FrameDescription></FrameHeader>
    <FramePanel><div style={{display:"flex",flexDirection:"column",alignItems:"center",gap:8,padding:"24px 16px"}}><div style={{fontWeight:500}}>30 min meeting</div><div className="o-muted" style={{fontSize:12}}>Tue 12 Aug · 14:00 CET</div><Button size="sm">Confirm booking</Button></div></FramePanel>
  </Frame>
</>)}
mount(<Demo />);
</script>
</body></html>