{
  "id": "violet-hour-feature",
  "name": "Feature Piece",
  "theme": "violet-hour",
  "category": "Editorial",
  "description": "A music feature where pull quotes are hard-shadowed blocks that interrupt the column rather than italic asides that get skipped.",
  "layout": "A 60ch reading column with full-width pull-quote blocks breaking the measure, and a coral chip timeline of the night running down the left margin.",
  "modules": [
    {
      "key": "head",
      "name": "Feature head",
      "html": "\n<header class=\"fh\"><span class=\"k\">Interview</span><h1>Six Hours<br>In The Dark</h1><p class=\"dk\">Nkechi Balogun has played this room eleven times. She has never once looked at the crowd.</p><p class=\"by\">Words by Amara Sunday · Photographs by Jo Ferrier · 18 minutes</p><img src=\"{{ART crowd}}\" alt=\"{{ARTALT crowd}}\"></header>"
    },
    {
      "key": "body",
      "name": "Feature body",
      "html": "\n<article class=\"fb\">\n<p>The booth at the Late Room faces a wall. This is not an accident of architecture; the wall was built in 2019, at the request of three residents, and Balogun was one of them.</p>\n<p>\"You can't read a room and play to it at the same time,\" she says. \"One of those is a job for a promoter.\" She has been making this argument for a decade, and it has not become more popular.</p>\n<blockquote class=\"pq\">If I can see them, I start giving them what they already want. That is the opposite of the job.</blockquote>\n<p>What she plays instead is a set built almost entirely in advance — not a fixed sequence, but a set of routes through about four hundred records, decided in the week before and rehearsed in a garage in Govan.</p>\n<p>The rehearsals are the part nobody believes. Six hours, alone, standing up, in a room with the same rig she will use on the night, playing to nobody.</p>\n<blockquote class=\"pq\">People think improvisation means unprepared. It means the preparation was of a different kind.</blockquote>\n<p>The eleven appearances here are not a residency. She has turned down a residency twice, on the grounds that a monthly booking would force her to make a set out of whatever she had that month.</p>\n</article>"
    },
    {
      "key": "timeline",
      "name": "Night timeline",
      "html": "\n<aside class=\"nt\"><span class=\"k\">That night</span>\n<ol><li><span class=\"tc\">21:30</span><p>Opens on a 1994 dub plate nobody in the room recognises.</p></li>\n<li><span class=\"tc\">22:40</span><p>First recognisable record of the night. It is not one of hers.</p></li>\n<li><span class=\"tc\">00:15</span><p>Twenty-two minutes on a single loop. Nobody leaves.</p></li>\n<li><span class=\"tc\">02:50</span><p>Ends without a last record, on a filter, mid-bar.</p></li></ol></aside>"
    }
  ],
  "moduleCount": 3,
  "reorderable": false,
  "meta": {
    "id": "violet-hour-feature",
    "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-feature.json",
  "structure": "A 60ch reading column with full-width pull-quote blocks breaking the measure, and a coral chip timeline of the night running down the left margin.",
  "html": "<div class=\"dz dz-violet-hour-feature\" data-design=\"violet-hour-feature\" data-theme=\"violet-hour\">\n<section class=\"dz-mod\" data-mod=\"head\" aria-label=\"Feature head\">\n<header class=\"fh\"><span class=\"k\">Interview</span><h1>Six Hours<br>In The Dark</h1><p class=\"dk\">Nkechi Balogun has played this room eleven times. She has never once looked at the crowd.</p><p class=\"by\">Words by Amara Sunday · Photographs by Jo Ferrier · 18 minutes</p><img src=\"https://designlookbook.dev/assets/img/violet-hour-crowd.webp\" alt=\"Silhouetted hands raised against violet stage light\"></header></section><div class=\"cols\"><section class=\"dz-mod\" data-mod=\"timeline\" aria-label=\"Night timeline\">\n<aside class=\"nt\"><span class=\"k\">That night</span>\n<ol><li><span class=\"tc\">21:30</span><p>Opens on a 1994 dub plate nobody in the room recognises.</p></li>\n<li><span class=\"tc\">22:40</span><p>First recognisable record of the night. It is not one of hers.</p></li>\n<li><span class=\"tc\">00:15</span><p>Twenty-two minutes on a single loop. Nobody leaves.</p></li>\n<li><span class=\"tc\">02:50</span><p>Ends without a last record, on a filter, mid-bar.</p></li></ol></aside></section><section class=\"dz-mod\" data-mod=\"body\" aria-label=\"Feature body\">\n<article class=\"fb\">\n<p>The booth at the Late Room faces a wall. This is not an accident of architecture; the wall was built in 2019, at the request of three residents, and Balogun was one of them.</p>\n<p>\"You can't read a room and play to it at the same time,\" she says. \"One of those is a job for a promoter.\" She has been making this argument for a decade, and it has not become more popular.</p>\n<blockquote class=\"pq\">If I can see them, I start giving them what they already want. That is the opposite of the job.</blockquote>\n<p>What she plays instead is a set built almost entirely in advance — not a fixed sequence, but a set of routes through about four hundred records, decided in the week before and rehearsed in a garage in Govan.</p>\n<p>The rehearsals are the part nobody believes. Six hours, alone, standing up, in a room with the same rig she will use on the night, playing to nobody.</p>\n<blockquote class=\"pq\">People think improvisation means unprepared. It means the preparation was of a different kind.</blockquote>\n<p>The eleven appearances here are not a residency. She has turned down a residency twice, on the grounds that a monthly booking would force her to make a set out of whatever she had that month.</p>\n</article></section></div>\n</div>",
  "css": "\n.dz-violet-hour-feature { background: var(--background); color: var(--foreground); font-family: var(--pv-body); padding: 28px; max-width: 1080px; margin: 0 auto; }\n.dz-violet-hour-feature .k { text-transform: uppercase; letter-spacing: .14em; font-size: 11px; font-weight: 700; color: var(--muted-foreground); }\n.dz-violet-hour-feature h1 { font-family: var(--pv-display); text-transform: uppercase; font-weight: 700; letter-spacing: -.02em; font-size: 70px; line-height: .98; margin: 10px 0 14px; }\n.dz-violet-hour-feature .dk { font-size: 19px; line-height: 1.5; margin: 0 0 10px; max-width: 44ch; }\n.dz-violet-hour-feature .by { text-transform: uppercase; letter-spacing: .14em; font-size: 11px; font-weight: 700; font-size: 10px; color: var(--muted-foreground); margin: 0 0 22px; }\n.dz-violet-hour-feature .fh img { width: 100%; height: 340px; object-fit: cover; display: block; filter: var(--img-filter); border-radius: var(--pv-radius-lg); border: 2px solid var(--foreground); box-shadow: 5px 5px 0 var(--foreground); }\n.dz-violet-hour-feature .cols { display: grid; grid-template-columns: 200px 1fr; gap: 40px; margin-top: 34px; align-items: start; }\n.dz-violet-hour-feature .fb p { margin: 0 0 18px; font-size: 16.5px; line-height: 1.62; max-width: 56ch; }\n.dz-violet-hour-feature .pq { font-family: var(--pv-display); text-transform: uppercase; font-weight: 700; letter-spacing: -.02em; font-size: 26px; line-height: 1.14; margin: 26px 0; padding: 22px 24px; background: var(--primary); color: var(--primary-foreground); border-radius: var(--pv-radius-lg); border: 2px solid var(--foreground); box-shadow: 5px 5px 0 var(--foreground); }\n.dz-violet-hour-feature .nt ol { list-style: none; margin: 12px 0 0; padding: 0; }\n.dz-violet-hour-feature .nt li { padding: 12px 0; border-top: 2px solid var(--border); display: grid; gap: 7px; justify-items: start; }\n.dz-violet-hour-feature .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); }\n.dz-violet-hour-feature .nt p { margin: 0; font-size: 13px; line-height: 1.5; }\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"
}