{
  "id": "violet-hour-passes",
  "name": "Pass Tiers",
  "theme": "violet-hour",
  "category": "Pricing",
  "description": "Three passes where the differences are stated as what you can physically do, not as feature ticks, and the fee is inside the headline price.",
  "layout": "Three hard-shadowed columns of equal weight with the price as a mono numeral, over a plain what-is-not-included block.",
  "modules": [
    {
      "key": "head",
      "name": "Pass head",
      "html": "\n<header class=\"ph\"><span class=\"k\">Season passes</span><h1>Get In<br>More Often</h1><p>Every price below is the price. The booking fee is inside it and there is nothing added at checkout.</p></header>"
    },
    {
      "key": "tiers",
      "name": "Pass columns",
      "html": "\n<section class=\"tr\">\n  <article class=\"card\"><h2>Ten Nights</h2><b class=\"pr\">£96</b><span class=\"tc\">£9.60 a night</span><ul><li>Ten entries, any night, any room</li><li>Transferable — hand it to someone at the door</li><li>Expires eighteen months after purchase</li></ul><button type=\"button\" class=\"sec\">Buy ten</button></article>\n  <article class=\"card mid\"><span class=\"fl\">Most used</span><h2>Year Pass</h2><b class=\"pr\">£240</b><span class=\"tc\">unlimited</span><ul><li>Every night we open, including sold-out ones</li><li>Skip the queue before 23:00</li><li>Two guest entries a month</li><li>Not transferable — photo taken at first use</li></ul><button type=\"button\" class=\"pri\">Buy year</button></article>\n  <article class=\"card\"><h2>Basement Only</h2><b class=\"pr\">£72</b><span class=\"tc\">live nights</span><ul><li>Every live night in the Basement, about forty a year</li><li>No access to Main or Back Bar</li><li>Transferable</li></ul><button type=\"button\" class=\"sec\">Buy basement</button></article>\n</section>"
    },
    {
      "key": "not",
      "name": "Not included",
      "html": "\n<section class=\"ni\"><h2>What a pass does not do</h2>\n<ul><li>It does not get you in after last entry. Nothing gets you in after last entry.</li><li>It does not cover ticketed one-off events, of which there are about six a year, all announced in advance.</li><li>It does not include the cloakroom, which is £2 and always will be.</li><li>It does not guarantee entry when the room is at capacity. Passes queue like everyone else after 23:00.</li></ul></section>"
    }
  ],
  "moduleCount": 3,
  "reorderable": true,
  "meta": {
    "id": "violet-hour-passes",
    "model": "Claude Opus 5",
    "author": "Claude Code",
    "createdAt": "2026-09-01T23:48:49+09:00",
    "updatedAt": "2026-09-01T23:48:49+09:00",
    "version": "1.0.0",
    "isNew": false
  },
  "link": "/api/v1/designs/violet-hour-passes.json",
  "structure": "Three hard-shadowed columns of equal weight with the price as a mono numeral, over a plain what-is-not-included block.",
  "html": "<div class=\"dz dz-violet-hour-passes\" data-design=\"violet-hour-passes\" data-theme=\"violet-hour\">\n<section class=\"dz-mod\" data-mod=\"head\" aria-label=\"Pass head\">\n<header class=\"ph\"><span class=\"k\">Season passes</span><h1>Get In<br>More Often</h1><p>Every price below is the price. The booking fee is inside it and there is nothing added at checkout.</p></header></section>\n<section class=\"dz-mod\" data-mod=\"tiers\" aria-label=\"Pass columns\">\n<section class=\"tr\">\n  <article class=\"card\"><h2>Ten Nights</h2><b class=\"pr\">£96</b><span class=\"tc\">£9.60 a night</span><ul><li>Ten entries, any night, any room</li><li>Transferable — hand it to someone at the door</li><li>Expires eighteen months after purchase</li></ul><button type=\"button\" class=\"sec\">Buy ten</button></article>\n  <article class=\"card mid\"><span class=\"fl\">Most used</span><h2>Year Pass</h2><b class=\"pr\">£240</b><span class=\"tc\">unlimited</span><ul><li>Every night we open, including sold-out ones</li><li>Skip the queue before 23:00</li><li>Two guest entries a month</li><li>Not transferable — photo taken at first use</li></ul><button type=\"button\" class=\"pri\">Buy year</button></article>\n  <article class=\"card\"><h2>Basement Only</h2><b class=\"pr\">£72</b><span class=\"tc\">live nights</span><ul><li>Every live night in the Basement, about forty a year</li><li>No access to Main or Back Bar</li><li>Transferable</li></ul><button type=\"button\" class=\"sec\">Buy basement</button></article>\n</section></section>\n<section class=\"dz-mod\" data-mod=\"not\" aria-label=\"Not included\">\n<section class=\"ni\"><h2>What a pass does not do</h2>\n<ul><li>It does not get you in after last entry. Nothing gets you in after last entry.</li><li>It does not cover ticketed one-off events, of which there are about six a year, all announced in advance.</li><li>It does not include the cloakroom, which is £2 and always will be.</li><li>It does not guarantee entry when the room is at capacity. Passes queue like everyone else after 23:00.</li></ul></section></section>\n</div>",
  "css": "\n.dz-violet-hour-passes { background: var(--background); color: var(--foreground); font-family: var(--pv-body); padding: 30px 28px; max-width: 1160px; margin: 0 auto; }\n.dz-violet-hour-passes .k { text-transform: uppercase; letter-spacing: .14em; font-size: 11px; font-weight: 700; color: var(--muted-foreground); }\n.dz-violet-hour-passes .ph { margin-bottom: 30px; }\n.dz-violet-hour-passes h1 { font-family: var(--pv-display); text-transform: uppercase; font-weight: 700; letter-spacing: -.02em; font-size: 70px; line-height: .98; margin: 10px 0 12px; }\n.dz-violet-hour-passes .ph p { margin: 0; font-size: 16px; max-width: 48ch; line-height: 1.55; }\n.dz-violet-hour-passes .tr { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px; align-items: start; }\n.dz-violet-hour-passes .card { background: var(--card); border-radius: var(--pv-radius-lg); padding: 24px; border: 2px solid var(--foreground); box-shadow: 5px 5px 0 var(--foreground); position: relative; }\n.dz-violet-hour-passes .mid { background: var(--secondary); }\n.dz-violet-hour-passes .fl { position: absolute; top: -13px; left: 22px; font-family: var(--pv-mono); font-size: 12.5px; background: var(--accent); color: var(--accent-foreground); padding: 4px 10px; border-radius: var(--pv-radius-sm); }\n.dz-violet-hour-passes h2 { font-family: var(--pv-display); text-transform: uppercase; font-weight: 700; letter-spacing: -.02em; font-size: 24px; margin: 0 0 10px; }\n.dz-violet-hour-passes .pr { display: block; font-family: var(--pv-mono); font-size: 56px; font-weight: 700; line-height: 1; margin-bottom: 8px; }\n.dz-violet-hour-passes .tc { font-family: var(--pv-mono); font-size: 12.5px; background: var(--accent); color: var(--accent-foreground); padding: 4px 10px; border-radius: var(--pv-radius-sm); display: inline-block; margin-bottom: 18px; }\n.dz-violet-hour-passes .card ul { list-style: none; margin: 0 0 20px; padding: 0; }\n.dz-violet-hour-passes .card li { padding: 10px 0; border-bottom: 2px solid var(--border); font-size: 14px; line-height: 1.45; }\n.dz-violet-hour-passes button { width: 100%; font-family: var(--pv-display); text-transform: uppercase; font-weight: 700; letter-spacing: -.02em; font-size: 15px; padding: 15px; border-radius: var(--pv-radius-md); cursor: pointer; }\n.dz-violet-hour-passes .pri { background: var(--primary); color: var(--primary-foreground); border: 2px solid var(--foreground); }\n.dz-violet-hour-passes .sec { background: transparent; color: var(--foreground); border: 2px solid var(--foreground); }\n.dz-violet-hour-passes .ni { margin-top: 32px; padding-top: 22px; border-top: 2px solid var(--border); }\n.dz-violet-hour-passes .ni h2 { margin-bottom: 12px; }\n.dz-violet-hour-passes .ni ul { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 10px 30px; }\n.dz-violet-hour-passes .ni li { font-size: 14.5px; line-height: 1.5; padding-left: 18px; position: relative; }\n.dz-violet-hour-passes .ni li::before { content: \"—\"; position: absolute; left: 0; color: var(--accent); }\n",
  "requiredTheme": "/api/v1/themes/violet-hour.json",
  "googleFontsHref": "https://fonts.googleapis.com/css2?family=Unbounded:wght@400;500;600;700&family=Hanken+Grotesk:wght@400;500;600;700&family=Red+Hat+Mono:wght@400;500;600;700&display=swap"
}