/* Design tokens cloned from frontend/src/styles/global.scss so mockups feel native without the full Vue app shell. */ :root { --text-xs: 11px; --text-sm: 13px; --text-base: 15px; --text-md: 17px; --text-lg: 20px; --text-xl: 24px; --text-2xl: 28px; --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; --space-5: 20px; --space-6: 24px; --space-8: 32px; --radius-sm: 6px; --radius-md: 12px; --radius-lg: 20px; --radius-full: 9999px; --color-bg: #fdf6ee; --color-surface: #fff9f2; --color-surface-2: #f5ead8; --color-border: #e8d9c4; --color-text: #3a2e22; --color-text-muted: #8a7060; --color-primary: #c97c3a; --color-primary-fg: #ffffff; --color-secondary: #e8d9c4; --color-destructive: #c0392b; --color-lock: #c49a20; --shadow-card: 0 2px 4px rgba(58, 46, 34, 0.06); } * { box-sizing: border-box; } body { margin: 0; padding: 0; background: var(--color-bg); color: var(--color-text); font-family: -apple-system, BlinkMacSystemFont, system-ui, sans-serif; font-size: var(--text-base); } button { font-family: inherit; cursor: pointer; } /* Mac-friendly viewport — show the mobile width centered on a wide screen */ .frame { max-width: 420px; margin: 0 auto; min-height: 100dvh; background: var(--color-bg); border-left: 1px solid var(--color-border); border-right: 1px solid var(--color-border); position: relative; } /* Topbar */ .topbar { position: sticky; top: 0; z-index: 5; background: var(--color-surface); border-bottom: 1px solid var(--color-border); padding: var(--space-4) var(--space-4) var(--space-2); } .topbar h1 { font-size: var(--text-xl); margin: 0; font-weight: 700; } .topbar__tabs { display: flex; gap: var(--space-2); margin-top: var(--space-3); } .topbar__tab { background: transparent; border: 0; padding: var(--space-2) var(--space-3); font-size: var(--text-sm); font-weight: 600; color: var(--color-text-muted); border-radius: var(--radius-sm); } .topbar__tab--active { color: var(--color-text); background: var(--color-surface-2); } /* Generic chip / button */ .chip { display: inline-flex; align-items: center; gap: 4px; padding: 5px 10px; border-radius: var(--radius-full); background: var(--color-surface-2); border: 1px solid var(--color-border); font-size: var(--text-xs); font-weight: 600; color: var(--color-text-muted); } .chip--on { background: var(--color-primary); color: var(--color-primary-fg); border-color: var(--color-primary); } .chip--lock { background: #fff4d1; border-color: var(--color-lock); color: #6b5210; } .chip--lock-on { background: var(--color-lock); color: white; border-color: var(--color-lock); } .chip--device { padding: 3px 8px; font-size: var(--text-xs); } /* Photo placeholder — colored gradient so each one is visually distinct */ .photo { display: block; width: 100%; aspect-ratio: 1/1; border-radius: var(--radius-sm); background: linear-gradient(135deg, #d4a37e, #8c5a3a); position: relative; overflow: hidden; } .photo--p1 { background: linear-gradient(135deg, #c97c3a, #6b3e1e); } .photo--p2 { background: linear-gradient(135deg, #3a8a6e, #1f4d3d); } .photo--p3 { background: linear-gradient(135deg, #8c6fc1, #4c3a82); } .photo--p4 { background: linear-gradient(135deg, #e0a85c, #a5602c); } .photo--p5 { background: linear-gradient(135deg, #5e9bb0, #2f5f72); } .photo--p6 { background: linear-gradient(135deg, #d4a37e, #8c5a3a); } .photo--p7 { background: linear-gradient(135deg, #6f8c5e, #3e5630); } .photo--p8 { background: linear-gradient(135deg, #c1715a, #6e3a2d); } .photo--p9 { background: linear-gradient(135deg, #a08fb1, #62506f); } .photo--p10{ background: linear-gradient(135deg, #d3a87b, #84583a); } /* Portrait-aspect variant for the photo simulating a portrait crop */ .photo--portrait { aspect-ratio: 3/4; } /* Footer nav (decorative, just to look like the real PWA) */ .bottomnav { position: sticky; bottom: 0; background: var(--color-surface); border-top: 1px solid var(--color-border); padding: var(--space-3); display: flex; gap: var(--space-4); justify-content: space-around; font-size: var(--text-xs); color: var(--color-text-muted); } .bottomnav__item { display: flex; flex-direction: column; align-items: center; gap: 2px; } .bottomnav__item--active { color: var(--color-primary); } /* Mockup note panel */ .note { background: #fff5dc; border: 1px dashed var(--color-lock); border-radius: var(--radius-sm); padding: var(--space-3); margin: var(--space-3) var(--space-4); font-size: var(--text-sm); color: #6b5210; } .note b { color: #3a2e22; }