// wire-shared.jsx — common low-fi primitives for all wireframe variants // Sketchy paper aesthetic: monochrome ink, pink CTA accent only, gold for authority. const ink = '#1a1a1a'; const dim = '#6b6b6b'; const fade = '#bdbdbd'; const paper = '#faf8f3'; const pink = '#e6196b'; const gold = '#b8923f'; // Wobble: slight rotation for hand-drawn feel const wob = (n = 0) => ({ transform: `rotate(${n}deg)` }); // Section label (top-left of each section) function SectionTag({ n, title, wall }) { return (
S{n} {title} {wall && {wall}の壁}
); } // Photo placeholder — diagonal stripes with cross + monospace caption function Photo({ w = '100%', h = 200, label = 'photo', tilt = 0, ratio, dark }) { const bg = dark ? '#222' : '#ece8df'; const stroke = dark ? '#444' : '#cfc9b8'; const fg = dark ? '#e8e3d4' : '#3a3a3a'; const style = { width: w, height: ratio ? undefined : h, aspectRatio: ratio, background: bg, backgroundImage: `repeating-linear-gradient(135deg, ${stroke} 0 1px, transparent 1px 14px)`, border: `1.5px solid ${dark ? '#2a2a2a' : ink}`, position: 'relative', display: 'flex', alignItems: 'center', justifyContent: 'center', ...wob(tilt), }; return (
{label}
); } // Text-line placeholder — for body copy mock function Lines({ count = 3, width = '100%', last = '70%', gap = 9, c }) { const col = c || dim; return (
{Array.from({ length: count }).map((_, i) => (
))}
); } // Heading placeholder — real text in handwritten font (so wireframe reads) function H({ children, size = 28, c, weight = 700, lh = 1.4, tilt, font }) { return (
{children}
); } // Small caption (handwritten English / Roman) function Cap({ children, c, size = 13 }) { return (
{children}
); } // CTA button — pink, the only saturated color used in wireframes function CTA({ label = '予約・問い合わせはLINEから', size = 'lg', tilt = 0, variant }) { const big = size === 'lg'; const isGhost = variant === 'ghost'; return (
{label}
); } // Authority badge — gold thin frame function Authority({ children, tilt = 0 }) { return (
{children}
); } // Sticky annotation note — visible when annotations are on function Note({ children, side = 'right', top, bottom, tilt = -1.5, w = 200 }) { const pos = side === 'right' ? { right: -w - 16, top: top ?? 12 } : { left: -w - 16, top: top ?? 12 }; return (
note
{children}
); } // Section wrapper — provides a tag, spacing, optional notes function Section({ tag, children, pad = 56, bg, dashed, note }) { return (
{tag} {children} {note}
); } // Connector arrow (down) function ArrowDown({ tilt = 0 }) { return (
); } // Horizontal scribble divider function Scribble({ w = 60, c }) { return ( ); } // Frame — phone frame for SP variant function Frame({ children, kind = 'desktop' }) { if (kind === 'mobile') { return (
{children}
); } return (
{/* Browser chrome */}
[サイトURL]
{children}
); } // Cushion (S0) — now a SEPARATE PAGE (18+ Cushion.html). // In the wireframe doc this renders as a reference card pointing to the separate file. function Cushion({ tilt = -0.4 }) { return (
{/* mini thumbnail */}
FOR ADULTS
→ 別ページ参照 18歳以上 確認ページ
・LP本体とは独立した1ページ
・「はい」→ Top Page (このLP)へ遷移
・「いいえ」→ ブラウザバック (history.back)
); } Object.assign(window, { // tokens WF: { ink, dim, fade, paper, pink, gold }, // primitives SectionTag, Photo, Lines, H, Cap, CTA, Authority, Note, Section, ArrowDown, Scribble, Frame, Cushion, });