-- https://www.phpmyadmin.net/
--

START TRANSACTION;



--
-- Database: `fashion_magazine_engine_v1`
--

-- --------------------------------------------------------

--
-- Table structure for table `comments`
--

CREATE TABLE `comments` (
  `id` int UNSIGNED NOT NULL,
  `user_id` int UNSIGNED NOT NULL,
  `user_issue_id` int UNSIGNED NOT NULL,
  `user_issue_page_id` int UNSIGNED DEFAULT NULL,
  `comment_text` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `comment_type` enum('stylist_feedback','general') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'stylist_feedback',
  `created_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `generation_jobs`
--

CREATE TABLE `generation_jobs` (
  `id` int UNSIGNED NOT NULL,
  `user_issue_id` int UNSIGNED NOT NULL,
  `issue_page_id` int UNSIGNED DEFAULT NULL,
  `job_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `status` enum('queued','running','completed','failed') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'queued',
  `input_json` longtext COLLATE utf8mb4_unicode_ci,
  `output_json` longtext COLLATE utf8mb4_unicode_ci,
  `error_text` text COLLATE utf8mb4_unicode_ci,
  `started_at` datetime DEFAULT NULL,
  `completed_at` datetime DEFAULT NULL,
  `created_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `issues`
--

CREATE TABLE `issues` (
  `id` int UNSIGNED NOT NULL,
  `issue_number` int UNSIGNED NOT NULL,
  `slug` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL,
  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `subtitle` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `season` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `issue_year` smallint UNSIGNED DEFAULT NULL,
  `theme_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `status` enum('draft','editorial_review','published','archived') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'draft',
  `cover_title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `cover_subtitle` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `intro_text` text COLLATE utf8mb4_unicode_ci,
  `theme_key` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `theme_settings_json` longtext COLLATE utf8mb4_unicode_ci,
  `page_count` int UNSIGNED NOT NULL DEFAULT '32',
  `published_at` datetime DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `issues`
--

INSERT INTO `issues` (`id`, `issue_number`, `slug`, `title`, `subtitle`, `season`, `issue_year`, `theme_name`, `status`, `cover_title`, `cover_subtitle`, `intro_text`, `theme_key`, `theme_settings_json`, `page_count`, `published_at`, `created_at`, `updated_at`) VALUES
(3, 1, 'new-york-autumn-2026', 'NEW YORK / AUTUMN 2026', 'ISSUE 01', 'autumn', 2026, 'NEW YORK / AUTUMN 2026', 'editorial_review', 'AUTUMN', 'PERSONAL EDIT', 'The Autumn issue is now the active editorial build. Shared stories first; personalized arrivals are generated after the issue structure is approved.', 'autumn-2026', '{}', 32, NULL, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(4, 2, 'winter-2026-27', 'WINTER', 'Next issue — early planning', 'Winter', 2026, 'WINTER 2026/27', 'draft', 'WINTER', 'PERSONAL EDIT', 'The Winter issue is the next seasonal shell. Keep it untouched until the Autumn editorial direction is established.', 'winter-2026', '{}', 32, NULL, '2026-08-12 14:00:38', '2026-08-12 14:00:38');

-- --------------------------------------------------------

--
-- Table structure for table `issue_chapters`
--

CREATE TABLE `issue_chapters` (
  `id` int UNSIGNED NOT NULL,
  `issue_id` int UNSIGNED NOT NULL,
  `chapter_number` int UNSIGNED NOT NULL,
  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `category` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `place_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `time_label` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `accent_key` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `accent_value` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `graphic_key` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `scene_dna_json` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `sort_order` int UNSIGNED NOT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `issue_chapters`
--

INSERT INTO `issue_chapters` (`id`, `issue_id`, `chapter_number`, `title`, `category`, `place_name`, `time_label`, `accent_key`, `accent_value`, `graphic_key`, `scene_dna_json`, `sort_order`, `created_at`, `updated_at`) VALUES
(13, 3, 1, 'BETWEEN SHOWS', 'FASHION', 'Lower Manhattan', '4:35 PM', 'fashion', '#E5532F', 'issue01-chapter-01', NULL, 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(14, 3, 2, 'ONE MORE AISLE', 'ART', 'Javits Center', '5:50 PM', 'art', '#B44332', 'issue01-chapter-02', NULL, 2, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(15, 3, 3, 'UNDER THE K', 'MUSIC', 'Under the K Bridge, Brooklyn', '6:20 PM', 'music', '#B42621', 'issue01-chapter-03', NULL, 3, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(16, 3, 4, 'DINNER BECOMES NIGHT', 'FOOD + NIGHT', 'Pier 17', '7:15 PM', 'night', '#222222', 'issue01-chapter-04', NULL, 4, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(17, 3, 5, 'RUN NEW YORK', 'ACTIVE', 'Staten Island', '8:37 AM', 'active', '#D55A2A', 'issue01-chapter-05', NULL, 5, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(18, 3, 6, 'OPENING NIGHT', 'CULTURE + DRESS UP', 'Lincoln Center', '6:45 PM', 'culture', '#7A2933', 'issue01-chapter-06', NULL, 6, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(19, 4, 1, 'CHAPTER 01 / MOMENT 01', 'CHAPTER 01', 'MOMENT 01', 'TBD', 'chapter-1', '#596c86', 'line-1', NULL, 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(20, 4, 2, 'CHAPTER 02 / MOMENT 02', 'CHAPTER 02', 'MOMENT 02', 'TBD', 'chapter-2', '#8a5b44', 'line-2', NULL, 2, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(21, 4, 3, 'CHAPTER 03 / MOMENT 03', 'CHAPTER 03', 'MOMENT 03', 'TBD', 'chapter-3', '#65765f', 'line-3', NULL, 3, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(22, 4, 4, 'CHAPTER 04 / MOMENT 04', 'CHAPTER 04', 'MOMENT 04', 'TBD', 'chapter-4', '#8b5a62', 'line-4', NULL, 4, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(23, 4, 5, 'CHAPTER 05 / MOMENT 05', 'CHAPTER 05', 'MOMENT 05', 'TBD', 'chapter-5', '#655a7c', 'line-5', NULL, 5, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(24, 4, 6, 'CHAPTER 06 / MOMENT 06', 'CHAPTER 06', 'MOMENT 06', 'TBD', 'chapter-6', '#6d6b51', 'line-6', NULL, 6, '2026-08-12 14:00:38', '2026-08-12 14:00:38');

-- --------------------------------------------------------

--
-- Table structure for table `issue_pages`
--

CREATE TABLE `issue_pages` (
  `id` int UNSIGNED NOT NULL,
  `issue_id` int UNSIGNED NOT NULL,
  `chapter_id` int UNSIGNED DEFAULT NULL,
  `page_number` int UNSIGNED NOT NULL,
  `sort_order` int UNSIGNED NOT NULL,
  `page_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `layout_key` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
  `personalization_mode` enum('shared','personalized','hybrid') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'shared',
  `title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `subtitle` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `eyebrow` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `body_html` longtext COLLATE utf8mb4_unicode_ci,
  `excerpt` text COLLATE utf8mb4_unicode_ci,
  `image_asset` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `data_json` longtext COLLATE utf8mb4_unicode_ci,
  `is_published` tinyint(1) NOT NULL DEFAULT '1',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `issue_pages`
--

INSERT INTO `issue_pages` (`id`, `issue_id`, `chapter_id`, `page_number`, `sort_order`, `page_type`, `layout_key`, `personalization_mode`, `title`, `subtitle`, `eyebrow`, `body_html`, `excerpt`, `image_asset`, `data_json`, `is_published`, `created_at`, `updated_at`) VALUES
(65, 3, NULL, 1, 1, 'cover', 'cover-personalized-01', 'personalized', 'Page 1', NULL, NULL, '<p>Shared cover furniture:</p>\n<p><strong>THIS YOU</strong></p>\n<p><strong>NEW YORK / AUTUMN 2026</strong></p>\n<p><strong>ISSUE 01</strong></p>\n<p>Cover lines:</p>\n<p><strong>BETWEEN SHOWS</strong></p>\n<p>New York Fashion Week moves outside.</p>\n<p><strong>UNDER THE K</strong></p>\n<p>Punk finds another room.</p>\n<p><strong>RUN NEW YORK</strong></p>\n<p>Five boroughs. 42.195 km.</p>\n<p><strong>OPENING NIGHT</strong></p>\n<p>An excuse to dress a little more.</p>\n<p>Optional small line:</p>\n<blockquote><p><strong>Same city. Different you.</strong></p></blockquote>\n<hr>', 'Shared cover furniture: THIS YOU NEW YORK / AUTUMN 2026 ISSUE 01 Cover lines: BETWEEN SHOWS New York Fashion Week moves outside. UNDER THE K Punk finds another room. RUN NEW YORK Five boroughs. 42.195 km. OPENING NIGHT An excuse to dress a little more. Optional small line: Same …', NULL, '{\"personalized_image_slot\":\"page-01-cover-hero\",\"issue01_import_package_version\":1,\"package_layout_key\":\"cover-personalized-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(66, 3, NULL, 2, 2, 'concept', 'concept-three-readers-01', 'shared', 'ONE MOMENT. THREE READERS.', 'SAME ISSUE. SAME CITY. SAME MOMENT. DIFFERENT YOU.', NULL, '<h2>ONE MOMENT. THREE READERS.</h2>\n<h3>SAME ISSUE. SAME CITY. SAME MOMENT. DIFFERENT YOU.</h3>\n<p>THIS YOU is a fashion and culture magazine built around one shared world.</p>\n<p>Everyone reads the same stories.</p>\n<p>Everyone goes to the same places.</p>\n<p>Everyone receives the same invitation.</p>\n<p>Then the magazine reaches a Moment, and <strong>you enter it</strong>.</p>\n<p>The event stays the same. The styling does not.</p>\n<p>One reader might arrive at an art fair in soft tailoring and worn-in leather. Another in color, volume and sneakers. A third almost entirely in black.</p>\n<p>This is not the same outfit with a different face.</p>\n<p>It is a different question:</p>\n<blockquote><p><strong>How would you arrive here?</strong></p></blockquote>\n<p>Your clothing, products and styling direction are selected around your taste, proportions, preferences and budget.</p>\n<p>The magazine creates the world.</p>\n<p>Your edition decides how you enter it.</p>\n<p><strong>Human-edited. AI-assisted. Individually reviewed.</strong></p>\n<h3>ONE INVITATION. EVERYONE ARRIVES DIFFERENTLY.</h3>', 'ONE MOMENT. THREE READERS. SAME ISSUE. SAME CITY. SAME MOMENT. DIFFERENT YOU. THIS YOU is a fashion and culture magazine built around one shared world. Everyone reads the same stories. Everyone goes to the same places. Everyone receives the same invitation. Then the magazine rea…', NULL, '{\"shared_demo_required\":true,\"demo_reader_count\":3,\"qr_label\":\"OPEN YOUR DIGITAL EDITION\",\"issue01_import_package_version\":1,\"package_layout_key\":\"concept-three-readers-01\",\"links\":[],\"needs_qr\":true,\"qr_purpose\":\"digital_entry\",\"qr_target_mode\":\"issue_root\",\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(67, 3, NULL, 3, 3, 'editor_letter', 'editor-letter-01', 'shared', 'NEW YORK, WHEN THE AIR CHANGES', NULL, NULL, '<h2>NEW YORK, WHEN THE AIR CHANGES</h2>\n<p>New York does not enter autumn quietly.</p>\n<p>September begins with fashion moving through doors, sidewalks and back seats. Galleries fill again. Film season starts. Music stays outdoors while it still can. A few weeks later, dinner needs a jacket. Then, on one Sunday in November, tens of thousands of runners turn all five boroughs into one course.</p>\n<p>This issue begins there — not with a list of places to visit, but with <strong>six situations that ask something different of what you wear</strong>.</p>\n<p>The street outside a fashion show becomes part of the show. An art fair asks for hours on your feet and one good decision. A punk festival runs past sunset under a bridge. Dinner turns into a party without formally announcing it. Technical clothing has to carry you for 42.195 kilometres. Opening night gives you permission to dress a little more than usual.</p>\n<p>Those are fashion questions, but they are also questions about context.</p>\n<p>Clothes become interesting when they have something to do.</p>\n<p>That is the idea behind THIS YOU. We build the city, the stories and the situations. Your edition answers the final question differently from everyone else\'s.</p>\n<p>For Issue 01, the city is New York.</p>\n<p>The season is autumn.</p>\n<p>There are six invitations.</p>\n<p>See how you arrive.</p>', 'NEW YORK, WHEN THE AIR CHANGES New York does not enter autumn quietly. September begins with fashion moving through doors, sidewalks and back seats. Galleries fill again. Film season starts. Music stays outdoors while it still can. A few weeks later, dinner needs a jacket. Then,…', NULL, '{\"issue01_import_package_version\":1,\"package_layout_key\":\"editor-letter-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(68, 3, NULL, 4, 4, 'contents', 'contents-city-map-01', 'shared', 'SIX MOMENTS / NEW YORK', '01 / FASHION', NULL, '<h1>SIX MOMENTS / NEW YORK</h1>\n<h3>01 / FASHION</h3>\n<h2>BETWEEN SHOWS</h2>\n<p><strong>05–08</strong></p>\n<p>The runway ends. The next address is forty-seven minutes away.</p>\n<hr>\n<h3>02 / ART</h3>\n<h2>ONE MORE AISLE</h2>\n<p><strong>09–12</strong></p>\n<p>At the Armory Show, looking is only half the activity.</p>\n<hr>\n<h3>03 / MUSIC</h3>\n<h2>UNDER THE K</h2>\n<p><strong>13–16</strong></p>\n<p>New York punk leaves the old room and keeps the noise.</p>\n<hr>\n<h3>04 / FOOD + NIGHT</h3>\n<h2>DINNER BECOMES NIGHT</h2>\n<p><strong>17–20</strong></p>\n<p>A rooftop dinner changes shape after sunset.</p>\n<hr>\n<h3>05 / ACTIVE</h3>\n<h2>RUN NEW YORK</h2>\n<p><strong>21–24</strong></p>\n<p>Five boroughs become one 42.195-kilometre line.</p>\n<hr>\n<h3>06 / CULTURE</h3>\n<h2>OPENING NIGHT</h2>\n<p><strong>25–28</strong></p>\n<p>Film season offers a useful excuse: dress a little more.</p>\n<hr>\n<h3>AFTER</h3>\n<p><strong>29 — YOUR AUTUMN</strong></p>\n<p>What this issue learned about you.</p>\n<p><strong>30 — SPONSORED / PERSONALIZED</strong></p>\n<p>One product. Your version.</p>\n<p><strong>31 — NEXT / WINTER</strong></p>\n<p><strong>32 — ABSURD.WEBSITE</strong></p>\n<hr>', 'SIX MOMENTS / NEW YORK 01 / FASHION BETWEEN SHOWS 05–08 The runway ends. The next address is forty-seven minutes away. 02 / ART ONE MORE AISLE 09–12 At the Armory Show, looking is only half the activity. 03 / MUSIC UNDER THE K 13–16 New York punk leaves the old room and ke…', NULL, '{\"city_map_required\":true,\"moment_count\":6,\"issue01_import_package_version\":1,\"package_layout_key\":\"contents-city-map-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(69, 3, 13, 5, 5, 'story', 'story-editorial-01', 'shared', 'FASHION / NEW YORK / SEPTEMBER', 'THE SHOW OUTSIDE THE SHOW', NULL, '<h3>FASHION / NEW YORK / SEPTEMBER</h3>\n<h1>THE SHOW OUTSIDE THE SHOW</h1>\n<p>New York Fashion Week is scheduled in rooms, but experienced in transit.</p>\n<p>A runway may last fifteen minutes. The time around it stretches much further: a car that does not arrive, an elevator that takes too long, a coffee bought because twenty-three free minutes suddenly appear, a six-block walk that becomes twelve.</p>\n<p>This is where Fashion Week becomes distinctly New York.</p>\n<p>The official schedule provides designers, presentations and addresses. The city supplies everything between them. Guests leave one room and immediately become part of another kind of spectacle. Photographers wait outside. The next address is checked before the previous collection has been fully processed. Someone is changing shoes in the back of a car. Someone else is walking faster than their outfit was designed to allow.</p>\n<p>The best between-show look has to perform several jobs at once: enough intention to survive an unexpected camera, enough reality to survive the city.</p>\n<p>It may need to work in sunlight, air-conditioning, a taxi, a café, a crowded doorway and twelve blocks of pavement.</p>\n<p>Fashion is often presented as an image with everything inconvenient removed. New York puts the logistics back in.</p>\n<p>A coat has to open. A bag has to carry something. Shoes have to move. The outfit has to remain convincing after the first photograph.</p>\n<p>The runway asks what comes next.</p>\n<p>The street asks whether you can get there.</p>\n<h3>ISSUE NOTE</h3>\n<p><strong>NYFW / SEPTEMBER 10–15, 2026</strong></p>', 'FASHION / NEW YORK / SEPTEMBER THE SHOW OUTSIDE THE SHOW New York Fashion Week is scheduled in rooms, but experienced in transit. A runway may last fifteen minutes. The time around it stretches much further: a car that does not arrive, an elevator that takes too long, a coffee b…', 'issues/new-york-autumn-2026/assets/story/page-05-story-nyfw-following-nyc-pexels-master.jpg', '{\"image_brief\":\"NYFW between-shows / street ecosystem\",\"issue01_import_package_version\":1,\"story_visual\":{\"asset\":\"story/page-05-story-nyfw-following-nyc-pexels-master.jpg\",\"credit\":\"Photo: Following NYC / Pexels\",\"rights\":\"Pexels source / free-use terms; archive source and license evidence\",\"source_url\":\"https://www.pexels.com/photo/friends-crossing-the-street-together-12107683/\"},\"package_layout_key\":\"story-editorial-01\",\"links\":[{\"type\":\"official_event\",\"label\":\"OFFICIAL NYFW SCHEDULE\",\"url\":\"https://cfda.com/news/view-the-preliminary-september-2026-official-nyfw-schedule/\"}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":\"Photo: Following NYC / Pexels\",\"image_rights_status\":\"Pexels source / free-use terms; archive source and license evidence\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(70, 3, 13, 6, 6, 'scene', 'scene-objects-01', 'shared', 'SCENE 01', '47 MINUTES BETWEEN SHOWS', NULL, '<h3>SCENE 01</h3>\n<h1>47 MINUTES BETWEEN SHOWS</h1>\n<blockquote><p>**The show lasts fifteen minutes. Getting to the next one takes forty-seven.**</p></blockquote>\n<h3>01 — THE INVITATION</h3>\n<p>Heavy paper. Tiny type. An address you have already checked three times.</p>\n<h3>02 — THE ESPRESSO</h3>\n<p>Not a break. A transfer point.</p>\n<h3>03 — THE PHONE</h3>\n<p><strong>19%</strong></p>\n<p>Enough for the next address, three messages and one unnecessary photograph.</p>\n<h3>04 — THE SUNGLASSES</h3>\n<p>Outside: essential.</p>\n<p>Inside: suddenly an object you have to carry.</p>\n<h3>05 — THE BAG</h3>\n<p>It looked small when you left home.</p>\n<p>It now contains:</p>\n<ul>\n<li>charger</li>\n<li>invitation</li>\n<li>lip balm</li>\n<li>receipts</li>\n<li>water</li>\n<li>another invitation</li>\n<li>something you promised to return</li>\n</ul>\n<h3>06 — THE SHOES</h3>\n<p>The only item in the entire outfit with access to the real schedule.</p>\n<h3>PLAY</h3>\n<p><strong>The Strokes — 12:51</strong></p>\n<h3>LAST CHECK</h3>\n<p>Next address: downtown.</p>\n<p>Coffee finished.</p>\n<p>Forty minutes left.</p>\n<hr>', 'SCENE 01 47 MINUTES BETWEEN SHOWS **The show lasts fifteen minutes. Getting to the next one takes forty-seven.** 01 — THE INVITATION Heavy paper. Tiny type. An address you have already checked three times. 02 — THE ESPRESSO Not a break. A transfer point. 03 — THE PHONE 19%…', NULL, '{\"image_brief\":\"NYFW objects / logistics still life\",\"issue01_import_package_version\":1,\"scene_system\":\"text-led-modular-grid-v3\",\"scene_design_status\":\"live_issue_layout\",\"scene_assets\":[\"scenes/page-06/coffee-cup.png\",\"scenes/page-06/phone-19-battery.png\",\"scenes/page-06/sunglasses.png\",\"scenes/page-06/charger-cable.png\",\"scenes/page-06/receipt-fragment.png\"],\"scene_character\":\"clean\",\"scene_density\":\"medium\",\"scene_module_count\":7,\"scene_title_locked\":\"47 MINUTES BETWEEN SHOWS\",\"production_rule\":\"Live HTML/CSS typography + independent scene object assets. Flattened preview is not a runtime asset.\",\"scene_source_html\":\"scene-source/page-06/index.html\",\"package_layout_key\":\"scene-objects-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":\"pending\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(71, 3, 13, 7, 7, 'moment', 'moment-arrival-01', 'hybrid', 'THE MOMENT', 'BETWEEN SHOWS', NULL, '<h3>THE MOMENT</h3>\n<h1>BETWEEN SHOWS</h1>\n<h2>LOWER MANHATTAN / 4:35 PM</h2>\n<p>One show has just finished. The next begins in an hour.</p>\n<p>There is enough time for coffee and several blocks on foot, but not enough time to go anywhere that feels like a real break. People are still standing outside the previous venue, phones out, cameras moving between faces and clothes.</p>\n<p>You are not dressing for a runway.</p>\n<p>You are dressing for everything between two of them.</p>\n<h3>YOUR ARRIVAL</h3>\n<p>**FASHION ENOUGH TO BE NOTICED.</p>\n<p>COMFORTABLE ENOUGH TO KEEP MOVING.**</p>\n<p><strong>[PERSONALIZED HERO IMAGE]</strong></p>\n<hr>', 'THE MOMENT BETWEEN SHOWS LOWER MANHATTAN / 4:35 PM One show has just finished. The next begins in an hour. There is enough time for coffee and several blocks on foot, but not enough time to go anywhere that feels like a real break. People are still standing outside the previous …', NULL, '{\"moment_place\":\"Lower Manhattan\",\"moment_time\":\"4:35 PM\",\"style_problem\":\"Fashion enough to be noticed. Comfortable enough to keep moving.\",\"personalized_image_slot\":\"page-07-arrival-hero\",\"issue01_import_package_version\":1,\"package_layout_key\":\"moment-arrival-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(72, 3, 13, 8, 8, 'style', 'style-products-01', 'personalized', 'YOUR STYLE', 'SELECTED PIECES', NULL, '<p>Shared labels only:</p>\n<h3>YOUR STYLE</h3>\n<h3>SELECTED PIECES</h3>\n<h3>WHY IT WORKS</h3>\n<h3>STYLE NOTES</h3>\n<h3>YOUR REACTION</h3>\n<p><strong>[PERSONALIZED CONTENT]</strong></p>\n<hr>', 'Shared labels only: YOUR STYLE SELECTED PIECES WHY IT WORKS STYLE NOTES YOUR REACTION [PERSONALIZED CONTENT]', NULL, '{\"reuse_previous_arrival_image\":true,\"personalized_fields\":[\"selected_pieces\",\"why_it_works\",\"style_notes\",\"reactions\"],\"qr_label\":\"OPEN THIS LOOK\",\"digital_continuation\":[\"product_links\",\"whole_look_reactions\",\"product_reactions\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"style-products-01\",\"links\":[],\"needs_qr\":true,\"qr_purpose\":\"style\",\"qr_target_mode\":\"same_page\",\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(73, 3, 14, 9, 9, 'story', 'story-editorial-01', 'shared', 'ART / JAVITS CENTER / SEPTEMBER', 'LOOKING, AND BEING LOOKED AT', NULL, '<h3>ART / JAVITS CENTER / SEPTEMBER</h3>\n<h1>LOOKING, AND BEING LOOKED AT</h1>\n<p>An art fair creates an unusual social condition: almost everyone is there to look, which means almost everyone becomes visible.</p>\n<p>At the Armory Show, galleries compress years of work, travel, selling, collecting and curating into a few days inside the Javits Center. In 2026 the fair brings roughly 230 galleries from more than 30 countries, with expanded Solo and Presents sections and a curatorial focus following histories and contemporary movements across the Caribbean and its diasporas.</p>\n<p>That is the official scale.</p>\n<p>The human scale is smaller: the first work that makes you stop; the gallery card folded into a pocket; the artist\'s name typed into Notes; the conversation you overhear without knowing whether two people are discussing an artwork, its price, or dinner.</p>\n<p>Art fairs produce their own uniform without announcing one.</p>\n<p>Comfort matters because looking takes time. So does confidence, because the room is full of people trained to notice details. There is tailoring, workwear, severe black, excellent shoes, impractical glasses, useful totes and the occasional person dressed as if the artwork has escaped the booth.</p>\n<p>The best approach is not to compete.</p>\n<p>One strange proportion. A good coat. A beautiful shoe. A color that appears once.</p>\n<p>You do not need to look like you own the work.</p>\n<p>You only need to look as though you noticed it.</p>\n<h3>ISSUE NOTE</h3>\n<p><strong>THE ARMORY SHOW / SEPTEMBER 24–27, 2026 / JAVITS CENTER</strong></p>', 'ART / JAVITS CENTER / SEPTEMBER LOOKING, AND BEING LOOKED AT An art fair creates an unusual social condition: almost everyone is there to look, which means almost everyone becomes visible. At the Armory Show, galleries compress years of work, travel, selling, collecting and cura…', 'issues/new-york-autumn-2026/assets/story/page-09-story-armory-vincent-tullo-master.jpg', '{\"image_brief\":\"Armory fair architecture / visitor movement\",\"issue01_import_package_version\":1,\"story_visual\":{\"asset\":\"story/page-09-story-armory-vincent-tullo-master.jpg\",\"credit\":\"Photo: Vincent Tullo, courtesy The Armory Show\",\"rights\":\"Official The Armory Show press image; preserve press-use evidence\",\"source_url\":\"https://www.thearmoryshow.com/press-room/2024-press-images\"},\"package_layout_key\":\"story-editorial-01\",\"links\":[{\"type\":\"official_event\",\"label\":\"OFFICIAL EVENT\",\"url\":\"https://www.thearmoryshow.com/\"}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":\"Photo: Vincent Tullo, courtesy The Armory Show\",\"image_rights_status\":\"Official The Armory Show press image; preserve press-use evidence\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(74, 3, 14, 10, 10, 'scene', 'scene-editorial-01', 'shared', 'SCENE 02', 'AFTER FOUR HOURS OF LOOKING', NULL, '<h3>SCENE 02</h3>\n<h1>AFTER FOUR HOURS OF LOOKING</h1>\n<p>The fair changes as the afternoon goes on.</p>\n<h3>FIRST</h3>\n<p>You look at the walls.</p>\n<h3>THEN</h3>\n<p>You start looking at how people look at the walls.</p>\n<h3>LATER</h3>\n<p>A folded floor plan becomes soft at the edges.</p>\n<p>A gallery card appears in your pocket.</p>\n<p>A name is typed into Notes with one letter missing.</p>\n<h3>BY 5 PM</h3>\n<p>The tote has become a minor archive.</p>\n<p>The water bottle is suddenly the most valuable object in the building.</p>\n<p>And one image — not necessarily the largest, newest or most expensive — keeps returning after everything around it has started to blur.</p>\n<h3>AFTER</h3>\n<p>One more aisle.</p>\n<p>Then somewhere with a chair.</p>', 'SCENE 02 AFTER FOUR HOURS OF LOOKING The fair changes as the afternoon goes on. FIRST You look at the walls. THEN You start looking at how people look at the walls. LATER A folded floor plan becomes soft at the edges. A gallery card appears in your pocket. A name is typed into N…', NULL, '{\"image_brief\":\"Armory fair residue / perception\",\"issue01_import_package_version\":1,\"scene_system\":\"text-led-modular-grid-v3\",\"scene_design_status\":\"live_issue_layout\",\"scene_assets\":[\"scenes/page-10/folded-fair-map.png\",\"scenes/page-10/half-empty-water-bottle.png\",\"scenes/page-10/notebook-red-dot-fragment.png\"],\"scene_character\":\"spacious\",\"scene_density\":\"low\",\"scene_module_count\":6,\"scene_title_locked\":\"AFTER FOUR HOURS OF LOOKING\",\"production_rule\":\"Live HTML/CSS typography + independent scene object assets. Flattened preview is not a runtime asset.\",\"package_layout_key\":\"scene-editorial-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":\"pending\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(75, 3, 14, 11, 11, 'moment', 'moment-arrival-01', 'hybrid', 'THE MOMENT', 'ONE MORE AISLE', NULL, '<h3>THE MOMENT</h3>\n<h1>ONE MORE AISLE</h1>\n<h2>JAVITS CENTER / 5:50 PM</h2>\n<p>You have already been inside for hours.</p>\n<p>Most of the fair has become a blur of walls, names, objects and conversations, but there is one section you still want to see before leaving. Your feet know exactly how long you have been here.</p>\n<p>Afterwards, you are going downtown for a drink.</p>\n<h3>YOUR ARRIVAL</h3>\n<p>**COMFORTABLE ENOUGH TO LOOK FOR HOURS.</p>\n<p>INTERESTING ENOUGH TO BE LOOKED AT.**</p>\n<p><strong>[PERSONALIZED HERO IMAGE]</strong></p>\n<hr>', 'THE MOMENT ONE MORE AISLE JAVITS CENTER / 5:50 PM You have already been inside for hours. Most of the fair has become a blur of walls, names, objects and conversations, but there is one section you still want to see before leaving. Your feet know exactly how long you have been h…', NULL, '{\"moment_place\":\"Javits Center\",\"moment_time\":\"5:50 PM\",\"style_problem\":\"Comfortable enough to look for hours. Interesting enough to be looked at.\",\"personalized_image_slot\":\"page-11-arrival-hero\",\"issue01_import_package_version\":1,\"package_layout_key\":\"moment-arrival-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(76, 3, 14, 12, 12, 'style', 'style-products-01', 'personalized', 'YOUR STYLE', 'SELECTED PIECES', NULL, '<h3>YOUR STYLE</h3>\n<h3>SELECTED PIECES</h3>\n<h3>WHY IT WORKS</h3>\n<h3>STYLE NOTES</h3>\n<h3>YOUR REACTION</h3>\n<p><strong>[PERSONALIZED CONTENT]</strong></p>\n<hr>', 'YOUR STYLE SELECTED PIECES WHY IT WORKS STYLE NOTES YOUR REACTION [PERSONALIZED CONTENT]', NULL, '{\"reuse_previous_arrival_image\":true,\"personalized_fields\":[\"selected_pieces\",\"why_it_works\",\"style_notes\",\"reactions\"],\"qr_label\":\"OPEN THIS LOOK\",\"digital_continuation\":[\"product_links\",\"whole_look_reactions\",\"product_reactions\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"style-products-01\",\"links\":[],\"needs_qr\":true,\"qr_purpose\":\"style\",\"qr_target_mode\":\"same_page\",\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(77, 3, 15, 13, 13, 'story', 'story-editorial-01', 'shared', 'MUSIC / BROOKLYN / SEPTEMBER', 'THE ROOM IS GONE. THE NOISE ISN\'T.', NULL, '<h3>MUSIC / BROOKLYN / SEPTEMBER</h3>\n<h1>THE ROOM IS GONE. THE NOISE ISN\'T.</h1>\n<p>CBGB closed in 2006, which should have made the story simple.</p>\n<p>A legendary club existed at 315 Bowery. Patti Smith played there. The Ramones played there. Blondie, Talking Heads, Television and generations of punk, hardcore and alternative bands passed through. The room closed. New York moved on.</p>\n<p>Culture rarely agrees to end that neatly.</p>\n<p>The CBGB Festival returns in 2026 under the K Bridge in Brooklyn, stretching deliberately across generations: Patti Smith, Interpol, Sex Pistols with Frank Carter, Bikini Kill, Mannequin Pussy, Circle Jerks, Buzzcocks, Agnostic Front and newer bands carrying the same appetite for volume into a different city.</p>\n<p>The location matters.</p>\n<p>Under the K is not a reconstruction of the old club. It is open air, concrete and infrastructure overhead — a large industrial space in a city where the original punk myth was built in a very small room.</p>\n<p>That distance is more interesting than nostalgia.</p>\n<p>What survives when a culture loses its architecture?</p>\n<p>Songs survive. Stories get exaggerated. Clothes detach from the people who first wore them and return on people born decades later. A battered leather jacket becomes fashion, then cliché, then fashion again.</p>\n<p>Punk has always had a complicated relationship with style because anti-fashion becomes fashion almost immediately.</p>\n<p>Maybe the only useful rule left is this:</p>\n<p>Wear something you are prepared to live in.</p>\n<p>The floor is concrete.</p>\n<p>The night is long.</p>\n<p>The music is the point.</p>\n<h3>ISSUE NOTE</h3>\n<p><strong>CBGB FEST / SEPTEMBER 26, 2026 / UNDER THE K BRIDGE PARK</strong></p>', 'MUSIC / BROOKLYN / SEPTEMBER THE ROOM IS GONE. THE NOISE ISN\'T. CBGB closed in 2006, which should have made the story simple. A legendary club existed at 315 Bowery. Patti Smith played there. The Ramones played there. Blondie, Talking Heads, Television and generations of punk, h…', 'issues/new-york-autumn-2026/assets/story/page-13-story-cbgb-crowd-master.png', '{\"image_brief\":\"Industrial Brooklyn / punk context; no fake documentary event image\",\"issue01_import_package_version\":1,\"story_visual\":{\"asset\":\"story/page-13-story-cbgb-crowd-master.png\",\"credit\":\"PENDING FINAL FILE ↔ PHOTOGRAPHER MATCH (working: Jessica Licata / CBGB Festival)\",\"rights\":\"Official Shore Fire / CBGB Festival press gallery; editorial-use-only notice. Final credit check required before print.\",\"source_url\":\"https://shorefire.com/roster/cbgb-festival\",\"production_flag\":\"CBGB high-resolution master + exact photographer credit still required\"},\"package_layout_key\":\"story-editorial-01\",\"links\":[{\"type\":\"official_event\",\"label\":\"OFFICIAL EVENT\",\"url\":\"https://www.cbgb.com/blogs/news/cbgb-festival-returns\"}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":\"PENDING FINAL FILE ↔ PHOTOGRAPHER MATCH (working: Jessica Licata / CBGB Festival)\",\"image_rights_status\":\"Official Shore Fire / CBGB Festival press gallery; editorial-use-only notice. Final credit check required before print.\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(78, 3, 15, 14, 14, 'scene', 'scene-music-01', 'shared', 'SCENE 03', 'PLAY THIS LOUD', NULL, '<h3>SCENE 03</h3>\n<h1>PLAY THIS LOUD</h1>\n<h2>PATTI SMITH — GLORIA</h2>\n<p>A song that begins with a declaration and never really reduces its volume.</p>\n<h3>THEN</h3>\n<p><strong>Television — Marquee Moon</strong></p>\n<p>A guitar line long enough to become architecture.</p>\n<h3>LATER</h3>\n<p><strong>Interpol — Obstacle 1</strong></p>\n<p>New York changed.</p>\n<p>The black jacket stayed.</p>\n<h3>NOW</h3>\n<p><strong>Mannequin Pussy — I Got Heaven</strong></p>\n<p>The useful thing about a lineage is that someone eventually refuses to behave inside it.</p>\n<hr>\n<h3>UNDER THE K</h3>\n<p>CONCRETE</p>\n<p>STEEL</p>\n<p>WRISTBANDS</p>\n<p>FOOD TRUCK LIGHT</p>\n<p>A JACKET TIED AROUND SOMEONE\'S WAIST</p>\n<p>A SHIRT BOUGHT THREE HOURS AGO</p>\n<p>A SHIRT BOUGHT TWENTY YEARS AGO</p>\n<blockquote><p>**The old room is gone. The city found somewhere else to be loud.**</p></blockquote>\n<hr>', 'SCENE 03 PLAY THIS LOUD PATTI SMITH — GLORIA A song that begins with a declaration and never really reduces its volume. THEN Television — Marquee Moon A guitar line long enough to become architecture. LATER Interpol — Obstacle 1 New York changed. The black jacket stayed. N…', NULL, '{\"image_brief\":\"Music / typography / industrial texture\",\"issue01_import_package_version\":1,\"scene_system\":\"text-led-modular-grid-v3\",\"scene_design_status\":\"live_issue_layout\",\"scene_assets\":[\"scenes/page-14/xerox-setlist-flyer.png\",\"scenes/page-14/earplugs.png\",\"scenes/page-14/crushed-cup-wristband.png\",\"scenes/page-14/boot-chain-smoke.png\"],\"scene_character\":\"chaotic\",\"scene_density\":\"high\",\"scene_module_count\":8,\"scene_title_locked\":\"PLAY THIS LOUD\",\"production_rule\":\"Live HTML/CSS typography + independent scene object assets. Flattened preview is not a runtime asset.\",\"package_layout_key\":\"scene-music-01\",\"links\":[{\"type\":\"music\",\"label\":\"PLAYLIST / TRACK LINKS\",\"url\":null}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":\"pending\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(79, 3, 15, 15, 15, 'moment', 'moment-arrival-01', 'hybrid', 'THE MOMENT', 'STILL THREE BANDS TO GO', NULL, '<h3>THE MOMENT</h3>\n<h1>STILL THREE BANDS TO GO</h1>\n<h2>UNDER THE K / BROOKLYN / 6:20 PM</h2>\n<p>You have been outside since daylight.</p>\n<p>The concrete is holding the noise, the light is changing and the temperature is beginning to drop. Three bands you want to see are still ahead, which means several more hours standing, moving, waiting and getting closer to people than your outfit may have planned for.</p>\n<p>Nothing you are wearing should need protection from the evening.</p>\n<h3>YOUR ARRIVAL</h3>\n<p>**NOTHING PRECIOUS.</p>\n<p>NOTHING ACCIDENTAL.**</p>\n<p><strong>[PERSONALIZED HERO IMAGE]</strong></p>\n<hr>', 'THE MOMENT STILL THREE BANDS TO GO UNDER THE K / BROOKLYN / 6:20 PM You have been outside since daylight. The concrete is holding the noise, the light is changing and the temperature is beginning to drop. Three bands you want to see are still ahead, which means several more hour…', NULL, '{\"moment_place\":\"Under the K Bridge, Brooklyn\",\"moment_time\":\"6:20 PM\",\"style_problem\":\"Nothing precious. Nothing accidental.\",\"personalized_image_slot\":\"page-15-arrival-hero\",\"issue01_import_package_version\":1,\"package_layout_key\":\"moment-arrival-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(80, 3, 15, 16, 16, 'style', 'style-products-01', 'personalized', 'YOUR STYLE', 'SELECTED PIECES', NULL, '<h3>YOUR STYLE</h3>\n<h3>SELECTED PIECES</h3>\n<h3>WHY IT WORKS</h3>\n<h3>STYLE NOTES</h3>\n<h3>YOUR REACTION</h3>\n<p><strong>[PERSONALIZED CONTENT]</strong></p>\n<hr>', 'YOUR STYLE SELECTED PIECES WHY IT WORKS STYLE NOTES YOUR REACTION [PERSONALIZED CONTENT]', NULL, '{\"reuse_previous_arrival_image\":true,\"personalized_fields\":[\"selected_pieces\",\"why_it_works\",\"style_notes\",\"reactions\"],\"qr_label\":\"OPEN THIS LOOK\",\"digital_continuation\":[\"product_links\",\"whole_look_reactions\",\"product_reactions\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"style-products-01\",\"links\":[],\"needs_qr\":true,\"qr_purpose\":\"style\",\"qr_target_mode\":\"same_page\",\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(81, 3, 16, 17, 17, 'story', 'story-editorial-01', 'shared', 'FOOD / SEAPORT / OCTOBER', 'WHEN DOES DINNER BECOME NIGHT?', NULL, '<h3>FOOD / SEAPORT / OCTOBER</h3>\n<h1>WHEN DOES DINNER BECOME NIGHT?</h1>\n<p>There is a point in a good New York evening when the original plan stops being useful.</p>\n<p>Dinner was at seven. Someone else arrives at eight-thirty. The table becomes a bar, the bar becomes another address, and the jacket you almost left at home becomes the smartest decision you made all day.</p>\n<p>New York After Dark, part of the 2026 New York City Wine &amp; Food Festival, is an unusually literal version of this transition.</p>\n<p>Kwame Onwuachi hosts the rooftop event at Pier 17 around the food, neighbourhoods and cultural influences behind his forthcoming cookbook <em>All Hours</em>. Restaurants and chefs feed a moving crowd rather than a room seated politely at tables. The sun goes down. The skyline lights up. Then Questlove takes over the musical part of the evening.</p>\n<p>The event changes without changing location.</p>\n<p>Food and nightlife are often treated as separate categories, but in New York the boundary is mostly a matter of time. The same room can be restaurant, meeting place, performance and party depending on when you look at it.</p>\n<p>Clothing has to understand that transition early.</p>\n<p>A look built only for dinner can feel too finished later. A look built only for nightlife can feel ridiculous while you are still trying to eat from a small plate without dropping it.</p>\n<p>The better answer contains both possibilities:</p>\n<p>polished enough for the first hour, relaxed enough for the third, with one layer for the roof and one detail that only fully makes sense after sunset.</p>\n<h3>ISSUE NOTE</h3>\n<p><strong>NEW YORK AFTER DARK / OCTOBER 17, 2026 / THE ROOFTOP AT PIER 17</strong></p>', 'FOOD / SEAPORT / OCTOBER WHEN DOES DINNER BECOME NIGHT? There is a point in a good New York evening when the original plan stops being useful. Dinner was at seven. Someone else arrives at eight-thirty. The table becomes a bar, the bar becomes another address, and the jacket you …', 'issues/new-york-autumn-2026/assets/story/page-17-story-nycwff-photogallery76-master.jpg', '{\"image_brief\":\"Pier 17 / Seaport / food-social atmosphere\",\"issue01_import_package_version\":1,\"story_visual\":{\"asset\":\"story/page-17-story-nycwff-photogallery76-master.jpg\",\"credit\":\"Photo courtesy of Food Network New York City Wine & Food Festival\",\"rights\":\"Official NYCWFF press/gallery asset; preserve source/usage evidence\",\"source_url\":\"official NYCWFF 2026 photo gallery / supplied asset\"},\"package_layout_key\":\"story-editorial-01\",\"links\":[{\"type\":\"official_event\",\"label\":\"OFFICIAL EVENT\",\"url\":\"https://nycwff.org/ny_afterdark/\"}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":\"Photo courtesy of Food Network New York City Wine & Food Festival\",\"image_rights_status\":\"Official NYCWFF press/gallery asset; preserve source/usage evidence\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(82, 3, 16, 18, 18, 'scene', 'scene-sensory-01', 'shared', 'SCENE 04', '7:03 PM / BLUE HOUR', NULL, '<h3>SCENE 04</h3>\n<h1>7:03 PM / BLUE HOUR</h1>\n<blockquote><p>**Dinner hasn\'t ended. Night has already started.**</p></blockquote>\n<h3>DRINK</h3>\n<p>Something cold enough to collect water on the outside of the glass.</p>\n<h3>BITE</h3>\n<p>One plate.</p>\n<p>Two forks.</p>\n<p>No chair.</p>\n<h3>VIEW</h3>\n<p>Brooklyn Bridge.</p>\n<p>East River.</p>\n<p>The first windows beginning to light up.</p>\n<h3>PLAY</h3>\n<p><strong>The Roots — The Seed (2.0)</strong></p>\n<h3>TEMPERATURE</h3>\n<p>Fine when you arrived.</p>\n<p>A question twenty minutes from now.</p>\n<h3>THE USEFUL OBJECT</h3>\n<p>The layer you almost did not bring.</p>\n<hr>', 'SCENE 04 7:03 PM / BLUE HOUR **Dinner hasn\'t ended. Night has already started.** DRINK Something cold enough to collect water on the outside of the glass. BITE One plate. Two forks. No chair. VIEW Brooklyn Bridge. East River. The first windows beginning to light up. PLAY The Roo…', NULL, '{\"image_brief\":\"Blue-hour rooftop / skyline / food-night\",\"issue01_import_package_version\":1,\"scene_system\":\"text-led-modular-grid-v3\",\"scene_design_status\":\"live_issue_layout\",\"scene_assets\":[\"scenes/page-18/amber-cocktail.png\",\"scenes/page-18/plate-napkin-lipstick-trace.png\",\"scenes/page-18/city-reflection-night-lights.png\"],\"scene_character\":\"atmospheric\",\"scene_density\":\"medium\",\"scene_module_count\":7,\"scene_title_locked\":\"7:03 PM / BLUE HOUR\",\"production_rule\":\"Live HTML/CSS typography + independent scene object assets. Flattened preview is not a runtime asset.\",\"package_layout_key\":\"scene-sensory-01\",\"links\":[{\"type\":\"music\",\"label\":\"PLAY\",\"url\":null}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":\"pending\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(83, 3, 16, 19, 19, 'moment', 'moment-arrival-01', 'hybrid', 'THE MOMENT', 'DINNER BECOMES NIGHT', NULL, '<h3>THE MOMENT</h3>\n<h1>DINNER BECOMES NIGHT</h1>\n<h2>PIER 17 / 7:15 PM</h2>\n<p>The first part of the evening still resembles dinner, except most people are standing.</p>\n<p>There is food in one direction, the skyline in another and no real reason to remain in the place where you started. As the light disappears, the event gradually stops behaving like a food event and becomes a rooftop party.</p>\n<p>You are dressing for both versions of the night.</p>\n<h3>YOUR ARRIVAL</h3>\n<p>**GOOD AT DINNER.</p>\n<p>BETTER AFTER DARK.**</p>\n<p><strong>[PERSONALIZED HERO IMAGE]</strong></p>\n<hr>', 'THE MOMENT DINNER BECOMES NIGHT PIER 17 / 7:15 PM The first part of the evening still resembles dinner, except most people are standing. There is food in one direction, the skyline in another and no real reason to remain in the place where you started. As the light disappears, t…', NULL, '{\"moment_place\":\"Pier 17\",\"moment_time\":\"7:15 PM\",\"style_problem\":\"Good at dinner. Better after dark.\",\"personalized_image_slot\":\"page-19-arrival-hero\",\"issue01_import_package_version\":1,\"package_layout_key\":\"moment-arrival-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(84, 3, 16, 20, 20, 'style', 'style-products-01', 'personalized', 'YOUR STYLE', 'SELECTED PIECES', NULL, '<h3>YOUR STYLE</h3>\n<h3>SELECTED PIECES</h3>\n<h3>WHY IT WORKS</h3>\n<h3>STYLE NOTES</h3>\n<h3>YOUR REACTION</h3>\n<p><strong>[PERSONALIZED CONTENT]</strong></p>\n<hr>', 'YOUR STYLE SELECTED PIECES WHY IT WORKS STYLE NOTES YOUR REACTION [PERSONALIZED CONTENT]', NULL, '{\"reuse_previous_arrival_image\":true,\"personalized_fields\":[\"selected_pieces\",\"why_it_works\",\"style_notes\",\"reactions\"],\"qr_label\":\"OPEN THIS LOOK\",\"digital_continuation\":[\"product_links\",\"whole_look_reactions\",\"product_reactions\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"style-products-01\",\"links\":[],\"needs_qr\":true,\"qr_purpose\":\"style\",\"qr_target_mode\":\"same_page\",\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(85, 3, 17, 21, 21, 'story', 'story-editorial-01', 'shared', 'ACTIVE / FIVE BOROUGHS / NOVEMBER', 'ONE LINE THROUGH THE CITY', NULL, '<h3>ACTIVE / FIVE BOROUGHS / NOVEMBER</h3>\n<h1>ONE LINE THROUGH THE CITY</h1>\n<p>The first New York City Marathon in 1970 was four laps of Central Park.</p>\n<p>Six years later, the course left the park and crossed all five boroughs for the first time. In 2026, New York marks fifty years of that route.</p>\n<p>It is difficult to imagine the city without the race now because the course does something unusually ambitious: it turns New York itself into the venue.</p>\n<p>Staten Island is the start. Brooklyn occupies a large part of the middle. Queens arrives. Manhattan appears, gives way briefly to the Bronx, then returns for the finish in Central Park.</p>\n<p>Normally these places are separated by bridges, tunnels, train lines, neighbourhood identities and the private logic of everyone\'s day.</p>\n<p>On marathon Sunday they become consecutive.</p>\n<p>One line.</p>\n<p>42.195 kilometres.</p>\n<p>For the runner, clothing changes completely.</p>\n<p>Here usefulness wins immediately. Fabric has to work. Shoes matter for reasons far beyond silhouette. Pockets become engineering. Weather becomes strategy. A layer may exist only to be discarded before the start.</p>\n<p>And yet style does not disappear.</p>\n<p>Runners still choose color, proportion, socks, eyewear, caps and the small details that make standardized performance clothing feel like a person. Some disappear into black. Others become visible from three blocks away.</p>\n<p>That is why this Moment belongs in a fashion magazine.</p>\n<p>Personal style is easy to claim when nothing is required of it.</p>\n<p>The more interesting question is what remains when almost everything has a job.</p>\n<h3>ISSUE NOTE</h3>\n<p><strong>TCS NEW YORK CITY MARATHON / NOVEMBER 1, 2026</strong></p>\n<p><strong>50 YEARS OF THE FIVE-BOROUGH COURSE</strong></p>', 'ACTIVE / FIVE BOROUGHS / NOVEMBER ONE LINE THROUGH THE CITY The first New York City Marathon in 1970 was four laps of Central Park. Six years later, the course left the park and crossed all five boroughs for the first time. In 2026, New York marks fifty years of that route. It i…', 'issues/new-york-autumn-2026/assets/story/page-21-story-marathon-tong-su-unsplash-master.jpg', '{\"image_brief\":\"Marathon bridge / crowd / city scale\",\"issue01_import_package_version\":1,\"story_visual\":{\"asset\":\"story/page-21-story-marathon-tong-su-unsplash-master.jpg\",\"credit\":\"Photo: Tong Su / Unsplash\",\"rights\":\"Unsplash License\",\"source_url\":\"https://unsplash.com/photos/a-group-of-people-running-Z-GDQeDaSB4\",\"caption\":\"New York City marathon runners in Central Park, 2022.\"},\"package_layout_key\":\"story-editorial-01\",\"links\":[{\"type\":\"official_event\",\"label\":\"OFFICIAL EVENT\",\"url\":\"https://www.nyrr.org/tcsnycmarathon\"}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":\"Photo: Tong Su / Unsplash\",\"image_rights_status\":\"Unsplash License\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(86, 3, 17, 22, 22, 'scene', 'scene-artcodinglab-01', 'shared', 'SCENE 05', '42.195 KM', NULL, '<h3>SCENE 05</h3>\n<h1>42.195 KM</h1>\n<h2>FIVE BOROUGHS. ONE LINE.</h2>\n<p><strong>STATEN ISLAND</strong></p>\n<p>0 KM</p>\n<p>↓</p>\n<p><strong>BROOKLYN</strong></p>\n<p>↓</p>\n<p><strong>QUEENS</strong></p>\n<p>↓</p>\n<p><strong>MANHATTAN</strong></p>\n<p>↓</p>\n<p><strong>THE BRONX</strong></p>\n<p>↓</p>\n<p><strong>MANHATTAN</strong></p>\n<p>↓</p>\n<p><strong>CENTRAL PARK</strong></p>\n<p>42.195 KM</p>\n<h3>PRINT</h3>\n<p>A still from a generative visualization built around the marathon route.</p>\n<h3>DIGITAL</h3>\n<p>The line moves.</p>\n<p>Distance accumulates.</p>\n<p>The boroughs shift.</p>\n<p>The route becomes a pulse through the city.</p>\n<p><strong>By ArtCodingLab</strong></p>\n<p>Small caption:</p>\n<blockquote><p><strong>A city usually experienced as separate places becomes one continuous gesture.</strong></p></blockquote>\n<hr>', 'SCENE 05 42.195 KM FIVE BOROUGHS. ONE LINE. STATEN ISLAND 0 KM ↓ BROOKLYN ↓ QUEENS ↓ MANHATTAN ↓ THE BRONX ↓ MANHATTAN ↓ CENTRAL PARK 42.195 KM PRINT A still from a generative visualization built around the marathon route. DIGITAL The line moves. Distance accumulates…', NULL, '{\"image_brief\":\"Generative marathon-route artwork still; motion digital\",\"digital_motion\":true,\"credit\":\"By ArtCodingLab\",\"qr_label\":\"VIEW IT IN MOTION\",\"issue01_import_package_version\":1,\"scene_system\":\"text-led-modular-grid-v3\",\"scene_design_status\":\"live_issue_layout\",\"scene_assets\":[\"scenes/page-22/route-line-five-boroughs.png\",\"scenes/page-22/shoe-sole-bib-fragment.png\",\"scenes/page-22/gel-safety-pins-asphalt.png\"],\"scene_character\":\"graphic\",\"scene_density\":\"medium\",\"scene_module_count\":7,\"scene_title_locked\":\"42.195 KM / FIVE BOROUGHS. ONE LINE.\",\"production_rule\":\"Live HTML/CSS typography + independent scene object assets. Flattened preview is not a runtime asset.\",\"package_layout_key\":\"scene-artcodinglab-01\",\"links\":[{\"type\":\"artwork\",\"label\":\"VIEW MOVING ARTWORK\",\"url\":null}],\"needs_qr\":true,\"qr_purpose\":\"motion\",\"qr_target_mode\":\"same_page\",\"image_credit\":null,\"image_rights_status\":\"owned\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(87, 3, 17, 23, 23, 'moment', 'moment-arrival-01', 'hybrid', 'THE MOMENT', 'BEFORE THE START', NULL, '<h3>THE MOMENT</h3>\n<h1>BEFORE THE START</h1>\n<h2>STATEN ISLAND / 8:37 AM</h2>\n<p>You have been awake since before sunrise.</p>\n<p>Around you, people are warming up, finishing coffee, adjusting bibs, checking watches and removing the old layers they brought only to stay warm before the race. The Verrazzano-Narrows Bridge is still ahead.</p>\n<p>So are 42.195 kilometres.</p>\n<p>This is not a running-inspired outfit.</p>\n<p>You are running New York.</p>\n<h3>YOUR ARRIVAL</h3>\n<p>**PERFORMANCE FIRST.</p>\n<p>IDENTITY STILL VISIBLE.**</p>\n<p><strong>[PERSONALIZED HERO IMAGE]</strong></p>\n<hr>', 'THE MOMENT BEFORE THE START STATEN ISLAND / 8:37 AM You have been awake since before sunrise. Around you, people are warming up, finishing coffee, adjusting bibs, checking watches and removing the old layers they brought only to stay warm before the race. The Verrazzano-Narrows …', NULL, '{\"moment_place\":\"Staten Island\",\"moment_time\":\"8:37 AM\",\"style_problem\":\"Performance first. Identity still visible.\",\"personalized_image_slot\":\"page-23-arrival-hero\",\"issue01_import_package_version\":1,\"package_layout_key\":\"moment-arrival-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(88, 3, 17, 24, 24, 'style', 'style-products-performance-01', 'personalized', 'YOUR STYLE', 'SELECTED PIECES', NULL, '<h3>YOUR STYLE</h3>\n<h3>SELECTED PIECES</h3>\n<h3>WHY IT WORKS</h3>\n<h3>PERFORMANCE NOTES</h3>\n<h3>YOUR REACTION</h3>\n<p><strong>[PERSONALIZED CONTENT]</strong></p>\n<hr>', 'YOUR STYLE SELECTED PIECES WHY IT WORKS PERFORMANCE NOTES YOUR REACTION [PERSONALIZED CONTENT]', NULL, '{\"reuse_previous_arrival_image\":true,\"personalized_fields\":[\"selected_pieces\",\"why_it_works\",\"style_notes\",\"reactions\"],\"qr_label\":\"OPEN THIS LOOK\",\"digital_continuation\":[\"product_links\",\"whole_look_reactions\",\"product_reactions\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"style-products-performance-01\",\"links\":[],\"needs_qr\":true,\"qr_purpose\":\"style\",\"qr_target_mode\":\"same_page\",\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11');
INSERT INTO `issue_pages` (`id`, `issue_id`, `chapter_id`, `page_number`, `sort_order`, `page_type`, `layout_key`, `personalization_mode`, `title`, `subtitle`, `eyebrow`, `body_html`, `excerpt`, `image_asset`, `data_json`, `is_published`, `created_at`, `updated_at`) VALUES
(89, 3, 18, 25, 25, 'story', 'story-editorial-01', 'shared', 'FILM / LINCOLN CENTER / SEPTEMBER', 'AN EXCUSE TO DRESS A LITTLE MORE', NULL, '<h3>FILM / LINCOLN CENTER / SEPTEMBER</h3>\n<h1>AN EXCUSE TO DRESS A LITTLE MORE</h1>\n<p>Not every invitation deserves a new outfit.</p>\n<p>Opening night does not necessarily require one either, but it gives you permission.</p>\n<p>The 64th New York Film Festival opens on September 25 with James Gray\'s <em>Paper Tiger</em>, a New York crime drama set in 1986 Queens and Brooklyn. It begins a Main Slate that brings international cinema into Lincoln Center and venues across the city for more than two weeks.</p>\n<p>For this chapter, the interesting subject is what happens just before the screen goes dark.</p>\n<p>A film premiere occupies a useful place on the scale of New York formality.</p>\n<p>It is not a wedding. It is not a gala. Most of the audience is not walking a red carpet. No rule says ordinary clothes are forbidden.</p>\n<p>And still, people make an effort.</p>\n<p>That small rise in stakes is where personal style becomes visible.</p>\n<p>Formal dress codes can flatten people because everyone answers the same instruction. Opening night leaves more room. A black suit with no tie. A long coat over something almost casual. A dress that would be excessive at dinner and completely right here.</p>\n<p>The goal is not to impersonate the person being photographed.</p>\n<p>It is simply to acknowledge that the evening is different from Tuesday.</p>\n<p>Autumn helps. The coat returns. Leather makes sense again. Darker fabrics stop feeling theoretical. A look can be layered because what works at 6:45 does not need to be exactly what works at 10:30.</p>\n<p>The question is simple:</p>\n<p>What does <strong>your</strong> version of dressed up look like?</p>\n<h3>ISSUE NOTE</h3>\n<p><strong>64TH NEW YORK FILM FESTIVAL / SEPTEMBER 25–OCTOBER 12, 2026</strong></p>\n<p><strong>OPENING NIGHT: JAMES GRAY\'S <em>PAPER TIGER</strong></em></p>', 'FILM / LINCOLN CENTER / SEPTEMBER AN EXCUSE TO DRESS A LITTLE MORE Not every invitation deserves a new outfit. Opening night does not necessarily require one either, but it gives you permission. The 64th New York Film Festival opens on September 25 with James Gray\'s Paper Tiger,…', 'issues/new-york-autumn-2026/assets/story/page-25-story-nyff-audience-alev-takil-unsplash-master.jpg', '{\"image_brief\":\"NYFF / Lincoln Center context\",\"issue01_import_package_version\":1,\"story_visual\":{\"asset\":\"story/page-25-story-nyff-audience-alev-takil-unsplash-master.jpg\",\"credit\":\"Photo: Alev Takil / Unsplash\",\"rights\":\"Unsplash License\",\"source_url\":\"https://unsplash.com/photos/a-large-auditorium-filled-with-lots-of-people-ZeNciLLPQas\",\"caption\":\"Lincoln Center, New York.\",\"production_flag\":\"Secondary Paper Tiger press inset still needs exact FLC Press usage/credit instruction\"},\"story_visuals\":[{\"role\":\"primary_context\",\"asset\":\"story/page-25-story-nyff-audience-alev-takil-unsplash-master.jpg\",\"credit\":\"Photo: Alev Takil / Unsplash\",\"rights\":\"Unsplash License\",\"source_url\":\"https://unsplash.com/photos/a-large-auditorium-filled-with-lots-of-people-ZeNciLLPQas\",\"caption\":\"Lincoln Center, New York.\",\"production_flag\":\"Secondary Paper Tiger press inset still needs exact FLC Press usage/credit instruction\"},{\"role\":\"secondary_press_inset\",\"asset\":\"story/page-25-story-nyff-paper-tiger-opening-night-press-master.png\",\"credit\":\"Film at Lincoln Center / NYFF64 Press Materials — exact asset credit pending\",\"rights\":\"Official FLC Press material; exact usage/credit instruction must be archived before print\",\"source_url\":\"https://app.box.com/s/mxm9kklymhvri5rjlfimfyptac9r9qro/file/2351177372459\"}],\"package_layout_key\":\"story-editorial-01\",\"links\":[{\"type\":\"official_festival\",\"label\":\"OFFICIAL FESTIVAL\",\"url\":\"https://www.filmlinc.org/lineup/\"}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":\"Photo: Alev Takil / Unsplash\",\"image_rights_status\":\"Unsplash License\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(90, 3, 18, 26, 26, 'scene', 'scene-cinematic-01', 'shared', 'SCENE 06', 'OPENING NIGHT', NULL, '<h3>SCENE 06</h3>\n<h1>OPENING NIGHT</h1>\n<h3>6:18 PM</h3>\n<p>Still outside.</p>\n<p>The light has not disappeared yet.</p>\n<p>The plaza is blue at the edges.</p>\n<p>Inside, everything is warmer.</p>\n<h3>IN YOUR HAND</h3>\n<p>A ticket checked twice even though it has not moved.</p>\n<p>A program you will read before the film and keep afterwards.</p>\n<h3>ON YOUR ARM</h3>\n<p>The first coat this autumn that feels necessary rather than optimistic.</p>\n<h3>AFTER</h3>\n<p>One glass.</p>\n<p>Another address, maybe.</p>\n<h3>PLAY</h3>\n<p><strong>Philip Glass — Opening</strong></p>\n<blockquote><p>**You do not need a red carpet. You only need somewhere worth going.**</p></blockquote>', 'SCENE 06 OPENING NIGHT 6:18 PM Still outside. The light has not disappeared yet. The plaza is blue at the edges. Inside, everything is warmer. IN YOUR HAND A ticket checked twice even though it has not moved. A program you will read before the film and keep afterwards. ON YOUR A…', NULL, '{\"image_brief\":\"Cinematic opening-night objects / dusk\",\"issue01_import_package_version\":1,\"scene_system\":\"text-led-modular-grid-v3\",\"scene_design_status\":\"live_issue_layout\",\"scene_assets\":[\"scenes/page-26/program-ticket-fragment.png\",\"scenes/page-26/tailoring-champagne.png\",\"scenes/page-26/architecture-projector-light.png\"],\"scene_character\":\"elegant\",\"scene_density\":\"low\",\"scene_module_count\":6,\"scene_title_locked\":\"OPENING NIGHT\",\"production_rule\":\"Live HTML/CSS typography + independent scene object assets. Flattened preview is not a runtime asset.\",\"package_layout_key\":\"scene-cinematic-01\",\"links\":[{\"type\":\"music\",\"label\":\"PLAY\",\"url\":null}],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":\"pending\"}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(91, 3, 18, 27, 27, 'moment', 'moment-arrival-01', 'hybrid', 'THE MOMENT', 'OPENING NIGHT', NULL, '<h3>THE MOMENT</h3>\n<h1>OPENING NIGHT</h1>\n<h2>LINCOLN CENTER / 6:45 PM</h2>\n<p>You are going to an opening-night screening.</p>\n<p>There is no need to look like the person whose photograph will appear tomorrow, but tonight deserves more intention than an ordinary film. Afterwards there will be a drink, perhaps a late dinner, and when you come back outside the temperature will have dropped.</p>\n<p>Dress up.</p>\n<p>Do not become someone else.</p>\n<h3>YOUR ARRIVAL</h3>\n<p>**DRESSIER THAN USUAL.</p>\n<p>STILL YOURSELF.**</p>\n<p><strong>[PERSONALIZED HERO IMAGE]</strong></p>\n<hr>', 'THE MOMENT OPENING NIGHT LINCOLN CENTER / 6:45 PM You are going to an opening-night screening. There is no need to look like the person whose photograph will appear tomorrow, but tonight deserves more intention than an ordinary film. Afterwards there will be a drink, perhaps a l…', NULL, '{\"moment_place\":\"Lincoln Center\",\"moment_time\":\"6:45 PM\",\"style_problem\":\"Dressier than usual. Still yourself.\",\"personalized_image_slot\":\"page-27-arrival-hero\",\"issue01_import_package_version\":1,\"package_layout_key\":\"moment-arrival-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(92, 3, 18, 28, 28, 'style', 'style-products-01', 'personalized', 'YOUR STYLE', 'SELECTED PIECES', NULL, '<h3>YOUR STYLE</h3>\n<h3>SELECTED PIECES</h3>\n<h3>WHY IT WORKS</h3>\n<h3>STYLE NOTES</h3>\n<h3>YOUR REACTION</h3>\n<p><strong>[PERSONALIZED CONTENT]</strong></p>\n<hr>', 'YOUR STYLE SELECTED PIECES WHY IT WORKS STYLE NOTES YOUR REACTION [PERSONALIZED CONTENT]', NULL, '{\"reuse_previous_arrival_image\":true,\"personalized_fields\":[\"selected_pieces\",\"why_it_works\",\"style_notes\",\"reactions\"],\"qr_label\":\"OPEN THIS LOOK\",\"digital_continuation\":[\"product_links\",\"whole_look_reactions\",\"product_reactions\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"style-products-01\",\"links\":[],\"needs_qr\":true,\"qr_purpose\":\"style\",\"qr_target_mode\":\"same_page\",\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(93, 3, NULL, 29, 29, 'style_summary', 'style-summary-01', 'personalized', 'YOUR AUTUMN', 'WHAT WE LEARNED', NULL, '<p>Shared structure:</p>\n<h1>YOUR AUTUMN</h1>\n<p>Six situations.</p>\n<p>Six versions of you.</p>\n<h3>WHAT WE LEARNED</h3>\n<p><strong>[PERSONALIZED STYLE SUMMARY]</strong></p>\n<h3>KEEP</h3>\n<p><strong>[PERSONALIZED]</strong></p>\n<h3>PUSH FURTHER</h3>\n<p><strong>[PERSONALIZED]</strong></p>\n<h3>LEAVE BEHIND</h3>\n<p><strong>[PERSONALIZED]</strong></p>\n<p>Small shared closing line:</p>\n<blockquote><p><strong>The next issue starts from here.</strong></p></blockquote>\n<hr>', 'Shared structure: YOUR AUTUMN Six situations. Six versions of you. WHAT WE LEARNED [PERSONALIZED STYLE SUMMARY] KEEP [PERSONALIZED] PUSH FURTHER [PERSONALIZED] LEAVE BEHIND [PERSONALIZED] Small shared closing line: The next issue starts from here.', NULL, '{\"personalized_fields\":[\"what_we_learned\",\"keep\",\"push_further\",\"leave_behind\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"style-summary-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(94, 3, NULL, 30, 30, 'sponsored_ad', 'sponsored-personalized-ad-01', 'hybrid', 'ISSUE 01 SPONSOR: EGRETTA GARZETTA', 'SPONSORED', NULL, '<h2>ISSUE 01 SPONSOR: EGRETTA GARZETTA</h2>\n<p>Disclosure:</p>\n<h3>SPONSORED</h3>\n<p>Brand:</p>\n<h1>EGRETTA GARZETTA</h1>\n<p>Shared campaign headline:</p>\n<h2>ONE SHAWL. YOUR WAY.</h2>\n<p>Shared campaign copy:</p>\n<p>Soft enough to become part of the person wearing it.</p>\n<p>Egretta Garzetta makes pieces with room for interpretation: wrapped close, left long, layered over a coat, carried into evening.</p>\n<p>For this issue, one shawl enters every edition.</p>\n<p>The product stays the same.</p>\n<p>The person does not.</p>\n<h3>MADE TO BE WORN, NOT MATCHED.</h3>\n<p><strong>[PERSONALIZED SPONSOR HERO IMAGE]</strong></p>\n<p>CTA:</p>\n<h3>DISCOVER EGRETTA GARZETTA ↗</h3>\n<p>Small disclosure / production line:</p>\n<blockquote><p>Personalized advertising image created for this reader. Product appearance may vary slightly from the visualization.</p></blockquote>\n<hr>', 'ISSUE 01 SPONSOR: EGRETTA GARZETTA Disclosure: SPONSORED Brand: EGRETTA GARZETTA Shared campaign headline: ONE SHAWL. YOUR WAY. Shared campaign copy: Soft enough to become part of the person wearing it. Egretta Garzetta makes pieces with room for interpretation: wrapped close, l…', NULL, '{\"ad_type\":\"personalized_sponsor\",\"disclosure_label\":\"SPONSORED\",\"sponsor_name\":\"Egretta Garzetta\",\"campaign_name\":\"Issue 01 personalized shawl\",\"product_name\":\"TBD — selected Egretta Garzetta shawl\",\"product_id\":null,\"product_url\":null,\"cta_label\":\"DISCOVER EGRETTA GARZETTA\",\"brand_logo_asset\":null,\"product_reference_assets\":[],\"shared_headline\":\"ONE SHAWL. YOUR WAY.\",\"personalized_image_slot\":\"page-30-sponsor-personal-hero\",\"reader_feedback_enabled\":false,\"review_required\":true,\"qr_label\":\"DISCOVER\",\"creative_lock\":\"editable_until_production\",\"locked_structure\":[\"page_type\",\"layout_key\",\"personalization_mode\",\"sponsored_disclosure\",\"personalized_hero_slot\"],\"editable_campaign_fields\":[\"sponsor_name\",\"product\",\"headline\",\"body_copy\",\"cta_label\",\"cta_url\",\"brand_logo\",\"product_reference_assets\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"sponsored-personalized-ad-01\",\"links\":[{\"type\":\"sponsor\",\"label\":\"DISCOVER EGRETTA GARZETTA\",\"url\":null}],\"needs_qr\":true,\"qr_purpose\":\"sponsor\",\"qr_target_mode\":\"same_page\",\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(95, 3, NULL, 31, 31, 'next_credits', 'next-credits-01', 'shared', 'NEXT / WINTER', 'THIS YOU / ISSUE 02', NULL, '<h1>NEXT / WINTER</h1>\n<p>The city changes.</p>\n<p>So does the question.</p>\n<p>Cold makes clothing less theoretical. Layers accumulate. Shoes become practical. Interiors become more important. Night arrives earlier.</p>\n<p>Six new Moments.</p>\n<p>One new city.</p>\n<p>Different you.</p>\n<h2>THIS YOU / ISSUE 02</h2>\n<h3>WINTER 2026–27</h3>\n<p><strong>CITY TO BE ANNOUNCED</strong></p>\n<hr>\n<h2>THIS YOU</h2>\n<p><strong>Issue 01 — New York / Autumn 2026</strong></p>\n<p>Editorial concept: THIS YOU</p>\n<p>Creative direction: THIS YOU</p>\n<p>Personalized styling: THIS YOU</p>\n<p>Human-edited. AI-assisted. Individually reviewed.</p>\n<p>Original digital artwork on Page 22:</p>\n<p><strong>ArtCodingLab</strong></p>\n<p>Published independently.</p>\n<hr>', 'NEXT / WINTER The city changes. So does the question. Cold makes clothing less theoretical. Layers accumulate. Shoes become practical. Interiors become more important. Night arrives earlier. Six new Moments. One new city. Different you. THIS YOU / ISSUE 02 WINTER 2026–27 CITY …', NULL, '{\"next_issue_city\":\"TBD\",\"next_issue_season\":\"winter\",\"next_issue_year\":\"2026-27\",\"issue01_import_package_version\":1,\"package_layout_key\":\"next-credits-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(96, 3, NULL, 32, 32, 'back_cover', 'back-absurd-01', 'shared', 'ABSURD.WEBSITE', 'WHAT IF THE IDEA IS STRANGE  ', NULL, '<h1>ABSURD.WEBSITE</h1>\n<h2>WHAT IF THE IDEA IS STRANGE</h2>\n<h2>BUT THE PRODUCT WORKS?</h2>\n<p>Internet experiments.</p>\n<p>Artworks.</p>\n<p>Tools.</p>\n<p>Games.</p>\n<p>Objects.</p>\n<p>Systems that probably did not need to exist until they did.</p>\n<h3>ABSURD.WEBSITE</h3>\n<p>Small footer:</p>\n<blockquote><p><strong>Independent experiments for people, machines and whatever comes next.</strong></p></blockquote>\n<hr>', 'ABSURD.WEBSITE WHAT IF THE IDEA IS STRANGE BUT THE PRODUCT WORKS? Internet experiments. Artworks. Tools. Games. Objects. Systems that probably did not need to exist until they did. ABSURD.WEBSITE Small footer: Independent experiments for people, machines and whatever comes next.', NULL, '{\"publisher_ad\":\"absurd.website\",\"mode\":\"practice_or_project\",\"project_name\":null,\"url\":\"https://absurd.website/\",\"creative_lock\":\"editable_until_production\",\"publisher_inventory_role\":\"absurd.website\",\"locked_structure\":[\"page_type\",\"layout_key\",\"personalization_mode\",\"publisher_inventory_role\"],\"editable_campaign_fields\":[\"practice_or_project\",\"headline\",\"body_copy\",\"url\",\"image_asset\"],\"issue01_import_package_version\":1,\"package_layout_key\":\"back-absurd-01\",\"links\":[],\"needs_qr\":false,\"qr_purpose\":null,\"qr_target_mode\":null,\"image_credit\":null,\"image_rights_status\":null}', 1, '2026-08-12 14:00:38', '2026-08-13 19:43:11'),
(97, 4, NULL, 1, 1, 'cover', 'cover-01', 'personalized', 'WINTER', 'PERSONAL EDIT', 'ISSUE 02', '', '', '', '{\"copy\":\"A shared fashion and culture issue with personalized arrivals.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(98, 4, NULL, 2, 2, 'concept', 'concept-01', 'shared', 'ONE MOMENT. THREE READERS.', '', 'HOW THIS MAGAZINE WORKS', '', '', '', '{\"quote\":\"Same invitation. Everyone arrives differently.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(99, 4, NULL, 3, 3, 'story', 'story-editorial-02', 'shared', 'EDITOR\'S LETTER', '', 'ISSUE INTRO', '<p>Write the editor letter / issue introduction here. This page is shared by every reader.</p>', '', '', '{\"lead\":\"Set the editorial point of view for this issue.\",\"pull\":\"The event belongs to the magazine. The outfit belongs to the reader.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 15:27:50'),
(100, 4, NULL, 4, 4, 'contents', 'contents-map-01', 'shared', 'CONTENTS', '', 'ISSUE MAP', '', '', '', '{\"intro\":\"A map of the shared stories, scenes and moments inside this issue.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 15:27:50'),
(101, 4, 19, 5, 5, 'story', 'story-editorial-01', 'shared', 'CHAPTER 01 STORY', '', 'THE SHARED STORY', '<p>Write the editorial article for this chapter here. It should create a real reason for the personalized moment that follows.</p>', '', '', '{\"lead\":\"Shared editorial lead goes here.\",\"pull\":\"A strong pull quote can live here.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(102, 4, 19, 6, 6, 'scene', 'scene-grid-01', 'shared', 'MOMENT 01 / THE SCENE', '', 'SCENE', '<p>This page builds the atmosphere: image, mood, objects, music, quote or a small visual essay.</p>', '', '', '{\"lead\":\"Set the scene before the reader arrives.\",\"mood\":\"PLACE / LIGHT / SOUND / PACE\",\"blocks\":[]}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(103, 4, 19, 7, 7, 'moment', 'moment-arrival-01', 'hybrid', 'MOMENT 01', '', 'THE MOMENT', '', '', '', '{\"moment_time\":\"TBD\",\"moment_desc\":\"Describe the concrete situation in 2–4 sentences: place, time, social context, weather or environment, and what happens next.\",\"arrival_title\":\"YOUR ARRIVAL\",\"arrival_subtitle\":\"Personal styling for this moment.\",\"style_hint\":\"chapter 01 / moment 01\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(104, 4, 19, 8, 8, 'style', 'style-products-01', 'personalized', 'MOMENT 01 / YOUR EDIT', '', 'THE STYLE', '', '', '', '{\"generation_instructions\":\"Use the reader profile, prior feedback and this chapter moment.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(105, 4, 20, 9, 9, 'story', 'story-editorial-01', 'shared', 'CHAPTER 02 STORY', '', 'THE SHARED STORY', '<p>Write the editorial article for this chapter here. It should create a real reason for the personalized moment that follows.</p>', '', '', '{\"lead\":\"Shared editorial lead goes here.\",\"pull\":\"A strong pull quote can live here.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(106, 4, 20, 10, 10, 'scene', 'scene-grid-01', 'shared', 'MOMENT 02 / THE SCENE', '', 'SCENE', '<p>This page builds the atmosphere: image, mood, objects, music, quote or a small visual essay.</p>', '', '', '{\"lead\":\"Set the scene before the reader arrives.\",\"mood\":\"PLACE / LIGHT / SOUND / PACE\",\"blocks\":[]}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(107, 4, 20, 11, 11, 'moment', 'moment-arrival-01', 'hybrid', 'MOMENT 02', '', 'THE MOMENT', '', '', '', '{\"moment_time\":\"TBD\",\"moment_desc\":\"Describe the concrete situation in 2–4 sentences: place, time, social context, weather or environment, and what happens next.\",\"arrival_title\":\"YOUR ARRIVAL\",\"arrival_subtitle\":\"Personal styling for this moment.\",\"style_hint\":\"chapter 02 / moment 02\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(108, 4, 20, 12, 12, 'style', 'style-products-01', 'personalized', 'MOMENT 02 / YOUR EDIT', '', 'THE STYLE', '', '', '', '{\"generation_instructions\":\"Use the reader profile, prior feedback and this chapter moment.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(109, 4, 21, 13, 13, 'story', 'story-editorial-01', 'shared', 'CHAPTER 03 STORY', '', 'THE SHARED STORY', '<p>Write the editorial article for this chapter here. It should create a real reason for the personalized moment that follows.</p>', '', '', '{\"lead\":\"Shared editorial lead goes here.\",\"pull\":\"A strong pull quote can live here.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(110, 4, 21, 14, 14, 'scene', 'scene-grid-01', 'shared', 'MOMENT 03 / THE SCENE', '', 'SCENE', '<p>This page builds the atmosphere: image, mood, objects, music, quote or a small visual essay.</p>', '', '', '{\"lead\":\"Set the scene before the reader arrives.\",\"mood\":\"PLACE / LIGHT / SOUND / PACE\",\"blocks\":[]}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(111, 4, 21, 15, 15, 'moment', 'moment-arrival-01', 'hybrid', 'MOMENT 03', '', 'THE MOMENT', '', '', '', '{\"moment_time\":\"TBD\",\"moment_desc\":\"Describe the concrete situation in 2–4 sentences: place, time, social context, weather or environment, and what happens next.\",\"arrival_title\":\"YOUR ARRIVAL\",\"arrival_subtitle\":\"Personal styling for this moment.\",\"style_hint\":\"chapter 03 / moment 03\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(112, 4, 21, 16, 16, 'style', 'style-products-01', 'personalized', 'MOMENT 03 / YOUR EDIT', '', 'THE STYLE', '', '', '', '{\"generation_instructions\":\"Use the reader profile, prior feedback and this chapter moment.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(113, 4, 22, 17, 17, 'story', 'story-editorial-01', 'shared', 'CHAPTER 04 STORY', '', 'THE SHARED STORY', '<p>Write the editorial article for this chapter here. It should create a real reason for the personalized moment that follows.</p>', '', '', '{\"lead\":\"Shared editorial lead goes here.\",\"pull\":\"A strong pull quote can live here.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(114, 4, 22, 18, 18, 'scene', 'scene-grid-01', 'shared', 'MOMENT 04 / THE SCENE', '', 'SCENE', '<p>This page builds the atmosphere: image, mood, objects, music, quote or a small visual essay.</p>', '', '', '{\"lead\":\"Set the scene before the reader arrives.\",\"mood\":\"PLACE / LIGHT / SOUND / PACE\",\"blocks\":[]}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(115, 4, 22, 19, 19, 'moment', 'moment-arrival-01', 'hybrid', 'MOMENT 04', '', 'THE MOMENT', '', '', '', '{\"moment_time\":\"TBD\",\"moment_desc\":\"Describe the concrete situation in 2–4 sentences: place, time, social context, weather or environment, and what happens next.\",\"arrival_title\":\"YOUR ARRIVAL\",\"arrival_subtitle\":\"Personal styling for this moment.\",\"style_hint\":\"chapter 04 / moment 04\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(116, 4, 22, 20, 20, 'style', 'style-products-01', 'personalized', 'MOMENT 04 / YOUR EDIT', '', 'THE STYLE', '', '', '', '{\"generation_instructions\":\"Use the reader profile, prior feedback and this chapter moment.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(117, 4, 23, 21, 21, 'story', 'story-editorial-01', 'shared', 'CHAPTER 05 STORY', '', 'THE SHARED STORY', '<p>Write the editorial article for this chapter here. It should create a real reason for the personalized moment that follows.</p>', '', '', '{\"lead\":\"Shared editorial lead goes here.\",\"pull\":\"A strong pull quote can live here.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(118, 4, 23, 22, 22, 'scene', 'scene-grid-01', 'shared', 'MOMENT 05 / THE SCENE', '', 'SCENE', '<p>This page builds the atmosphere: image, mood, objects, music, quote or a small visual essay.</p>', '', '', '{\"lead\":\"Set the scene before the reader arrives.\",\"mood\":\"PLACE / LIGHT / SOUND / PACE\",\"blocks\":[]}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(119, 4, 23, 23, 23, 'moment', 'moment-arrival-01', 'hybrid', 'MOMENT 05', '', 'THE MOMENT', '', '', '', '{\"moment_time\":\"TBD\",\"moment_desc\":\"Describe the concrete situation in 2–4 sentences: place, time, social context, weather or environment, and what happens next.\",\"arrival_title\":\"YOUR ARRIVAL\",\"arrival_subtitle\":\"Personal styling for this moment.\",\"style_hint\":\"chapter 05 / moment 05\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(120, 4, 23, 24, 24, 'style', 'style-products-01', 'personalized', 'MOMENT 05 / YOUR EDIT', '', 'THE STYLE', '', '', '', '{\"generation_instructions\":\"Use the reader profile, prior feedback and this chapter moment.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(121, 4, 24, 25, 25, 'story', 'story-editorial-01', 'shared', 'CHAPTER 06 STORY', '', 'THE SHARED STORY', '<p>Write the editorial article for this chapter here. It should create a real reason for the personalized moment that follows.</p>', '', '', '{\"lead\":\"Shared editorial lead goes here.\",\"pull\":\"A strong pull quote can live here.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(122, 4, 24, 26, 26, 'scene', 'scene-grid-01', 'shared', 'MOMENT 06 / THE SCENE', '', 'SCENE', '<p>This page builds the atmosphere: image, mood, objects, music, quote or a small visual essay.</p>', '', '', '{\"lead\":\"Set the scene before the reader arrives.\",\"mood\":\"PLACE / LIGHT / SOUND / PACE\",\"blocks\":[]}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(123, 4, 24, 27, 27, 'moment', 'moment-arrival-01', 'hybrid', 'MOMENT 06', '', 'THE MOMENT', '', '', '', '{\"moment_time\":\"TBD\",\"moment_desc\":\"Describe the concrete situation in 2–4 sentences: place, time, social context, weather or environment, and what happens next.\",\"arrival_title\":\"YOUR ARRIVAL\",\"arrival_subtitle\":\"Personal styling for this moment.\",\"style_hint\":\"chapter 06 / moment 06\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(124, 4, 24, 28, 28, 'style', 'style-products-01', 'personalized', 'MOMENT 06 / YOUR EDIT', '', 'THE STYLE', '', '', '', '{\"generation_instructions\":\"Use the reader profile, prior feedback and this chapter moment.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(125, 4, NULL, 29, 29, 'style_summary', 'style-summary-01', 'personalized', 'YOUR EDIT', '', 'WHAT THIS ISSUE LEARNED', '', '', '', '{\"lead\":\"A style profile is a hypothesis that gets better when you disagree with it.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(126, 4, NULL, 30, 30, 'sponsored_ad', 'sponsored-personalized-ad-01', 'hybrid', 'PERSONALIZED PARTNER FEATURE', '', 'SPONSORED', '', '', '', '{\"ad_type\":\"personalized_sponsor\",\"disclosure_label\":\"SPONSORED\",\"sponsor_name\":\"\",\"brand_logo_asset\":\"\",\"campaign_name\":\"\",\"product_id\":null,\"product_name\":\"\",\"product_url\":\"\",\"cta_label\":\"DISCOVER\",\"price\":null,\"currency\":\"EUR\",\"product_reference_assets\":[],\"shared_headline\":\"ONE PIECE. YOUR WAY.\",\"shared_copy\":\"Define the sponsor campaign for this issue. The reader-specific creative is generated later and human-reviewed.\",\"creative_direction\":\"\",\"generation_constraints\":{\"product_must_be_visible\":true,\"preserve_product_identity\":true,\"reader_identity_required\":true}}', 1, '2026-08-12 14:00:38', '2026-08-12 15:27:50'),
(127, 4, NULL, 31, 31, 'credits', 'next-credits-01', 'shared', 'NEXT ISSUE', '', 'CREDITS', '', '', '', '{\"next\":\"NEXT / ...\",\"copy\":\"Shared stories remain shared. Your arrivals keep evolving.\"}', 1, '2026-08-12 14:00:38', '2026-08-12 14:00:38'),
(128, 4, NULL, 32, 32, 'back_cover', 'back-absurd-01', 'shared', 'ABSURD.WEBSITE', '', 'BY ABSURD.WEBSITE', '', '', '', '{\"publisher_ad\":\"absurd.website\",\"mode\":\"practice\",\"project_name\":null,\"headline\":\"ABSURD.WEBSITE\",\"copy\":\"Independent experiments across art, technology and culture.\",\"url\":\"https://absurd.website/\",\"image_asset\":\"\"}', 1, '2026-08-12 14:00:38', '2026-08-12 15:27:50');

-- --------------------------------------------------------

--
-- Table structure for table `products`
--

CREATE TABLE `products` (
  `id` int UNSIGNED NOT NULL,
  `brand` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `product_name` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
  `category` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  `currency` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `product_url` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL,
  `affiliate_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `source_image_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `metadata_json` longtext COLLATE utf8mb4_unicode_ci,
  `status` enum('active','unavailable','archived') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'active',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `products`
--

INSERT INTO `products` (`id`, `brand`, `product_name`, `category`, `price`, `currency`, `product_url`, `affiliate_url`, `source_image_url`, `metadata_json`, `status`, `created_at`, `updated_at`) VALUES
(1, 'ZARA', 'Printed camp-collar shirt', 'top', 49.90, 'EUR', 'https://www.zara.com/', NULL, NULL, '{\"tags\":[\"colour\",\"summer\",\"relaxed\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(2, 'UNIQLO', 'AIRism Cotton Oversized Crew Neck T-Shirt', 'top', 19.90, 'EUR', 'https://www.uniqlo.com/', NULL, NULL, '{\"tags\":[\"minimal\",\"sporty\",\"oversized\",\"breathable\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(3, 'ZARA', 'Relaxed-fit shorts', 'shorts', 39.90, 'EUR', 'https://www.zara.com/', NULL, NULL, '{\"tags\":[\"summer\",\"relaxed\",\"wide\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(4, 'ADIDAS ORIGINALS', 'Campus 00s', 'shoes', 110.00, 'EUR', 'https://www.adidas.com/', NULL, NULL, '{\"tags\":[\"sporty\",\"retro\",\"street\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(5, 'ARKET', 'Canvas tote bag', 'bag', 59.00, 'EUR', 'https://www.arket.com/', NULL, NULL, '{\"tags\":[\"minimal\",\"utility\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(6, 'COS', 'Technical short trench jacket', 'outerwear', 199.00, 'EUR', 'https://www.cos.com/', NULL, NULL, '{\"tags\":[\"minimal\",\"technical\",\"architectural\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(7, 'UNIQLO', 'AIRism Cotton Oversized Mock Neck T-Shirt', 'top', 19.90, 'EUR', 'https://www.uniqlo.com/', NULL, NULL, '{\"tags\":[\"minimal\",\"oversized\",\"clean\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(8, 'COS', 'Relaxed wide-leg trousers', 'trousers', 110.00, 'EUR', 'https://www.cos.com/', NULL, NULL, '{\"tags\":[\"minimal\",\"wide\",\"tailored\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(9, 'COS', 'Leather slip-on shoes', 'shoes', 119.00, 'EUR', 'https://www.cos.com/', NULL, NULL, '{\"tags\":[\"minimal\",\"tailored\",\"leather\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(10, 'ARKET', 'Leather tote', 'bag', 179.00, 'EUR', 'https://www.arket.com/', NULL, NULL, '{\"tags\":[\"minimal\",\"structured\",\"leather\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(11, 'UNIQLO', 'AIRism Oversized Black Tee', 'top', 19.90, 'EUR', 'https://www.uniqlo.com/', NULL, NULL, '{\"tags\":[\"black\",\"minimal\",\"oversized\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(12, 'ZARA', 'Washed wide cargo trousers', 'trousers', 59.95, 'EUR', 'https://www.zara.com/', NULL, NULL, '{\"tags\":[\"wide\",\"dark\",\"utility\",\"street\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(13, 'SALOMON', 'Black trail sneaker', 'shoes', 145.00, 'EUR', 'https://www.salomon.com/', NULL, NULL, '{\"tags\":[\"technical\",\"sporty\",\"trail\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(14, 'ARKET', 'Light technical overshirt', 'outerwear', 99.00, 'EUR', 'https://www.arket.com/', NULL, NULL, '{\"tags\":[\"technical\",\"minimal\",\"layer\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(15, 'ZARA', 'Small crossbody utility bag', 'bag', 35.95, 'EUR', 'https://www.zara.com/', NULL, NULL, '{\"tags\":[\"utility\",\"street\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(16, 'ZARA', 'Stone overshirt', 'outerwear', 39.95, 'EUR', 'https://www.zara.com/', NULL, NULL, '{\"tags\":[\"neutral\",\"relaxed\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(17, 'UNIQLO', 'Heavyweight white tee', 'top', 19.90, 'EUR', 'https://www.uniqlo.com/', NULL, NULL, '{\"tags\":[\"white\",\"minimal\",\"clean\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(18, 'UNIQLO', 'Pleated wide trousers', 'trousers', 49.90, 'EUR', 'https://www.uniqlo.com/', NULL, NULL, '{\"tags\":[\"wide\",\"minimal\",\"scandinavian\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(19, 'NEW BALANCE', 'Grey running-inspired sneakers', 'shoes', 120.00, 'EUR', 'https://www.newbalance.com/', NULL, NULL, '{\"tags\":[\"sporty\",\"grey\",\"scandinavian\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(20, 'ARKET', 'Relaxed sweatshirt, dark green', 'top', 69.00, 'EUR', 'https://www.arket.com/', NULL, NULL, '{\"tags\":[\"green\",\"relaxed\",\"scandinavian\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(21, 'UNIQLO', 'Wide straight trousers', 'trousers', 49.90, 'EUR', 'https://www.uniqlo.com/', NULL, NULL, '{\"tags\":[\"wide\",\"clean\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(22, 'ZARA', 'Nylon tote bag', 'bag', 29.95, 'EUR', 'https://www.zara.com/', NULL, NULL, '{\"tags\":[\"utility\",\"sporty\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(23, 'SALOMON', 'XT-inspired trail sneaker', 'shoes', 140.00, 'EUR', 'https://www.salomon.com/', NULL, NULL, '{\"tags\":[\"technical\",\"sporty\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(24, 'COS', 'Black soft-shoulder blazer', 'outerwear', 189.00, 'EUR', 'https://www.cos.com/', NULL, NULL, '{\"tags\":[\"black\",\"soft\",\"tailoring\",\"minimal\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(25, 'COS', 'Black wide-leg trousers', 'trousers', 95.00, 'EUR', 'https://www.cos.com/', NULL, NULL, '{\"tags\":[\"black\",\"wide\",\"minimal\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(26, 'COS', 'Black cropped jacket', 'outerwear', 175.00, 'EUR', 'https://www.cos.com/', NULL, NULL, '{\"tags\":[\"black\",\"cropped\",\"editorial\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23'),
(27, 'NEW BALANCE', 'Dark grey sneaker', 'shoes', 130.00, 'EUR', 'https://www.newbalance.com/', NULL, NULL, '{\"tags\":[\"grey\",\"sporty\",\"night\"],\"demo_link\":true}', 'active', '2026-08-12 10:36:23', '2026-08-12 10:36:23');

-- --------------------------------------------------------

--
-- Table structure for table `reader_profile_events`
--

CREATE TABLE `reader_profile_events` (
  `id` int UNSIGNED NOT NULL,
  `user_id` int UNSIGNED NOT NULL,
  `event_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `metadata_json` longtext COLLATE utf8mb4_unicode_ci,
  `created_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

-- Table structure for table `reactions`
--

CREATE TABLE `reactions` (
  `id` int UNSIGNED NOT NULL,
  `user_id` int UNSIGNED NOT NULL,
  `user_issue_id` int UNSIGNED NOT NULL,
  `user_issue_page_id` int UNSIGNED DEFAULT NULL,
  `user_issue_product_id` int UNSIGNED DEFAULT NULL,
  `reaction` enum('love','not_me','too_expensive','more_like_this') COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `review_log`
--

CREATE TABLE `review_log` (
  `id` int UNSIGNED NOT NULL,
  `user_issue_page_id` int UNSIGNED DEFAULT NULL,
  `user_issue_id` int UNSIGNED NOT NULL,
  `action` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `reviewer` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `notes` text COLLATE utf8mb4_unicode_ci,
  `created_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `schema_migrations`
--

CREATE TABLE `schema_migrations` (
  `version` int UNSIGNED NOT NULL,
  `name` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL,
  `applied_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `schema_migrations`
--

INSERT INTO `schema_migrations` (`version`, `name`, `applied_at`) VALUES
(1, 'initial_multi_issue_engine', '2026-08-12 10:36:21'),
(2, 'product_first_personalization', '2026-08-16 07:35:30'),
(3, 'scene_variants_and_style_exploration', '2026-08-16 10:50:00'),
(4, 'fresh_regular_price_verification', '2026-08-16 11:00:00'),
(5, 'preferred_budget_product_metadata', '2026-08-16 11:30:00');

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE `users` (
  `id` int UNSIGNED NOT NULL,
  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `first_name` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `last_name` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `status` enum('active','inactive') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'active',
  `is_demo` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `email`, `first_name`, `last_name`, `status`, `is_demo`, `created_at`, `updated_at`) VALUES
(4, 'janis@example.test', 'Jānis', 'Kauss', 'active', 1, '2026-08-12 14:00:38', '2026-08-13 21:18:15');

-- --------------------------------------------------------

--
-- Table structure for table `user_issue_pages`
--

CREATE TABLE `user_issue_pages` (
  `id` int UNSIGNED NOT NULL,
  `user_issue_id` int UNSIGNED NOT NULL,
  `issue_page_id` int UNSIGNED NOT NULL,
  `hero_image` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `personal_title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `personal_subtitle` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `personal_intro` text COLLATE utf8mb4_unicode_ci,
  `why_it_works` text COLLATE utf8mb4_unicode_ci,
  `style_notes` text COLLATE utf8mb4_unicode_ci,
  `stylist_note` text COLLATE utf8mb4_unicode_ci,
  `generation_prompt` longtext COLLATE utf8mb4_unicode_ci,
  `generation_data_json` longtext COLLATE utf8mb4_unicode_ci,
  `review_status` enum('not_generated','generated','needs_review','approved','rejected') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'not_generated',
  `reviewed_by` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `reviewed_at` datetime DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `user_issue_pages`
--

INSERT INTO `user_issue_pages` (`id`, `user_issue_id`, `issue_page_id`, `hero_image`, `personal_title`, `personal_subtitle`, `personal_intro`, `why_it_works`, `style_notes`, `stylist_note`, `generation_prompt`, `generation_data_json`, `review_status`, `reviewed_by`, `reviewed_at`, `created_at`, `updated_at`) VALUES
(49, 5, 71, 'assets/uploads/generated/issue-01/user-4/chapter-01/20260813-215516-f6e17cc6.png', 'BETWEEN SHOWS, YOUR WAY', 'Quiet colour. More volume. Nothing precious.', 'Your usual minimal uniform gets one deliberate push: softer volume, sharper contrast, and enough ease to cross downtown on foot.', NULL, NULL, NULL, 'THIS YOU — MANUAL GPT BRIEF\nIssue: 01 / NEW YORK / AUTUMN 2026 / autumn 2026\nReader: Jānis Kauss\nReader profile: height 185.00 cm; clothing size S; shoe size 42; fit oversized.\nStyle: minimal, sporty, Scandinavian. Favorite brands/reference points: Zara, Uniqlo. Use cases: everyday, city, travel. Budget: mostly under €100 per item.\nUse the same four reader reference photos: portrait, full body, three-quarter, everyday reference. Preserve identity and believable body proportions.\nPage 07 / moment / THE MOMENT / BETWEEN SHOWS\nMoment: Lower Manhattan / 4:35 PM.\nStyling problem: Fashion enough to be noticed. Comfortable enough to keep moving.\nTASK: Create ONE realistic fashion-editorial arrival image of this reader inside the shared moment. The reader is not posing on a runway; they are living the situation. Keep the styling aligned with the profile while making it editorial enough for THIS YOU.\nIMAGE RULES: believable face and body; natural clothing construction; seasonally plausible; no fake event logos; no fake documentary claims; no text embedded in image; no random accessories that contradict the scene.\nShared moment context (do not rewrite the event): THE MOMENT BETWEEN SHOWS LOWER MANHATTAN / 4:35 PM One show has just finished. The next begins in an hour. There is enough time for coffee and several blocks on foot, but not enough time to go anywhere that feels like a real break. People are still standing outside the previous venue, phones out, cameras moving between faces and clothes. You are not dressing for a runway. You are dressing for everything between two of them. YOUR ARRIVAL **FASHION ENOUGH TO BE NOTICED. COMFORTABLE ENOUGH TO KEEP MOVING.** [PERSONALIZED HERO IMAGE]\nAlso return short editable copy: PERSONAL TITLE, PERSONAL SUBTITLE (1–2 lines), and a one-sentence PERSONAL INTRO.\nHuman review is mandatory. Nothing is auto-approved.', '{\"provider\":\"manual_gpt_json\",\"schema\":\"this_you.personalization_result.v1\",\"chapter_number\":1,\"imported_at\":\"2026-08-13 21:55:16\",\"single_image_shared_by_moment_and_style\":true,\"result_snapshot\":{\"schema\":\"this_you.personalization_result.v1\",\"issue_slug\":\"new-york-autumn-2026\",\"reader_id\":4,\"chapter_number\":1,\"moment\":{\"page_number\":7,\"personal_title\":\"BETWEEN SHOWS, YOUR WAY\",\"personal_subtitle\":\"Quiet colour. More volume. Nothing precious.\",\"personal_intro\":\"Your usual minimal uniform gets one deliberate push: softer volume, sharper contrast, and enough ease to cross downtown on foot.\"},\"style\":{\"page_number\":8,\"look_title\":\"SOFT STRUCTURE, BUILT TO MOVE\",\"why_it_works\":\"At 185 cm, you can carry relaxed volume without disappearing inside it. The grey outer layer gives the shoulders presence, the white shirt cuts a clean vertical line through the middle, and the wide black trousers keep the silhouette long rather than bulky. It feels recognisably minimal and Scandinavian, but one degree more intentional for Fashion Week.\",\"style_notes\":[\"Keep the white shirt oversized in your usual S; do not size up again.\",\"Let the black trousers fall long and straight with a soft break over the shoe.\",\"Use the grey outer layer for shoulder presence, not extra bulk.\",\"Keep footwear and frames black so the palette reads as one continuous base.\",\"Skip extra statement accessories; the proportion is the statement.\"],\"stylist_note\":\"Your normal vocabulary, turned up one notch for Fashion Week.\",\"products\":[{\"slot_name\":\"outerwear\",\"brand\":\"UNIQLO\",\"product_name\":\"Zip-Up Blouson — Dark Grey\",\"price\":59.9,\"currency\":\"EUR\",\"product_url\":\"https://www.uniqlo.com/eu-lv/en/products/E475681-000/00\",\"verification_note\":\"Official UNIQLO Latvia product page lists DARK GREY as a colour option and describes a modern relaxed silhouette; current Latvia outerwear listing shows the Zip-Up Blouson at €59.90.\"},{\"slot_name\":\"shirt\",\"brand\":\"UNIQLO\",\"product_name\":\"Oversized Oxford Shirt — White\",\"price\":null,\"currency\":\"EUR\",\"product_url\":\"https://www.uniqlo.com/eu-lv/en/products/E476240-000/00\",\"verification_note\":\"Official UNIQLO Latvia product page verified: WHITE, size S available in the size list, oversized fit. Current exact product price was not reliably exposed in the fetched product page, so price is intentionally left null for human verification.\"},{\"slot_name\":\"trousers\",\"brand\":\"UNIQLO\",\"product_name\":\"Pleated Wide Trousers — Black\",\"price\":49.9,\"currency\":\"EUR\",\"product_url\":\"https://www.uniqlo.com/eu-lv/en/products/E462197-000/01\",\"verification_note\":\"Official UNIQLO Latvia product page verifies the wide straight silhouette and BLACK as a product colour; current Latvia trouser listing shows Pleated Wide Trousers at €49.90.\"},{\"slot_name\":\"shoes\",\"brand\":\"UNIQLO\",\"product_name\":\"Suede Combination Trainers — Black\",\"price\":null,\"currency\":\"EUR\",\"product_url\":\"https://www.uniqlo.com/eu-lv/en/products/E471720-000/00\",\"verification_note\":\"Official UNIQLO Latvia product page verifies BLACK as a colour option and size 42 in the size list. Exact current price was not reliably exposed in the fetched product page, so price is intentionally left null for human verification.\"}]},\"human_review_required\":true}}', 'needs_review', NULL, NULL, '2026-08-13 21:26:25', '2026-08-13 21:55:16'),
(50, 5, 72, 'assets/uploads/generated/issue-01/user-4/chapter-01/20260813-215516-f6e17cc6.png', 'SOFT STRUCTURE, BUILT TO MOVE', NULL, NULL, 'At 185 cm, you can carry relaxed volume without disappearing inside it. The grey outer layer gives the shoulders presence, the white shirt cuts a clean vertical line through the middle, and the wide black trousers keep the silhouette long rather than bulky. It feels recognisably minimal and Scandinavian, but one degree more intentional for Fashion Week.', 'Keep the white shirt oversized in your usual S; do not size up again.\nLet the black trousers fall long and straight with a soft break over the shoe.\nUse the grey outer layer for shoulder presence, not extra bulk.\nKeep footwear and frames black so the palette reads as one continuous base.\nSkip extra statement accessories; the proportion is the statement.', 'Your normal vocabulary, turned up one notch for Fashion Week.', 'THIS YOU — MANUAL GPT BRIEF\nIssue: 01 / NEW YORK / AUTUMN 2026 / autumn 2026\nReader: Jānis Kauss\nReader profile: height 185.00 cm; clothing size S; shoe size 42; fit oversized.\nStyle: minimal, sporty, Scandinavian. Favorite brands/reference points: Zara, Uniqlo. Use cases: everyday, city, travel. Budget: mostly under €100 per item.\nUse the same four reader reference photos: portrait, full body, three-quarter, everyday reference. Preserve identity and believable body proportions.\nPage 08 / style / YOUR STYLE / SELECTED PIECES\nThis STYLE page explains the same look used on previous MOMENT page 07.\nOriginal styling problem: Fashion enough to be noticed. Comfortable enough to keep moving.\nTASK: Write the personalized STYLE editorial for the look. Return: WHY IT WORKS (one concise paragraph), STYLE NOTES (3–5 short lines), and optional STYLIST NOTE.\nPRODUCT RULE: do not invent product URLs, current prices or availability. Product selection will be verified separately. You may suggest product categories / brand directions, but mark unverified retail facts clearly.\nHuman review is mandatory. Nothing is auto-approved.', '{\"provider\":\"manual_gpt_json\",\"schema\":\"this_you.personalization_result.v1\",\"chapter_number\":1,\"imported_at\":\"2026-08-13 21:55:16\",\"single_image_shared_by_moment_and_style\":true,\"result_snapshot\":{\"schema\":\"this_you.personalization_result.v1\",\"issue_slug\":\"new-york-autumn-2026\",\"reader_id\":4,\"chapter_number\":1,\"moment\":{\"page_number\":7,\"personal_title\":\"BETWEEN SHOWS, YOUR WAY\",\"personal_subtitle\":\"Quiet colour. More volume. Nothing precious.\",\"personal_intro\":\"Your usual minimal uniform gets one deliberate push: softer volume, sharper contrast, and enough ease to cross downtown on foot.\"},\"style\":{\"page_number\":8,\"look_title\":\"SOFT STRUCTURE, BUILT TO MOVE\",\"why_it_works\":\"At 185 cm, you can carry relaxed volume without disappearing inside it. The grey outer layer gives the shoulders presence, the white shirt cuts a clean vertical line through the middle, and the wide black trousers keep the silhouette long rather than bulky. It feels recognisably minimal and Scandinavian, but one degree more intentional for Fashion Week.\",\"style_notes\":[\"Keep the white shirt oversized in your usual S; do not size up again.\",\"Let the black trousers fall long and straight with a soft break over the shoe.\",\"Use the grey outer layer for shoulder presence, not extra bulk.\",\"Keep footwear and frames black so the palette reads as one continuous base.\",\"Skip extra statement accessories; the proportion is the statement.\"],\"stylist_note\":\"Your normal vocabulary, turned up one notch for Fashion Week.\",\"products\":[{\"slot_name\":\"outerwear\",\"brand\":\"UNIQLO\",\"product_name\":\"Zip-Up Blouson — Dark Grey\",\"price\":59.9,\"currency\":\"EUR\",\"product_url\":\"https://www.uniqlo.com/eu-lv/en/products/E475681-000/00\",\"verification_note\":\"Official UNIQLO Latvia product page lists DARK GREY as a colour option and describes a modern relaxed silhouette; current Latvia outerwear listing shows the Zip-Up Blouson at €59.90.\"},{\"slot_name\":\"shirt\",\"brand\":\"UNIQLO\",\"product_name\":\"Oversized Oxford Shirt — White\",\"price\":null,\"currency\":\"EUR\",\"product_url\":\"https://www.uniqlo.com/eu-lv/en/products/E476240-000/00\",\"verification_note\":\"Official UNIQLO Latvia product page verified: WHITE, size S available in the size list, oversized fit. Current exact product price was not reliably exposed in the fetched product page, so price is intentionally left null for human verification.\"},{\"slot_name\":\"trousers\",\"brand\":\"UNIQLO\",\"product_name\":\"Pleated Wide Trousers — Black\",\"price\":49.9,\"currency\":\"EUR\",\"product_url\":\"https://www.uniqlo.com/eu-lv/en/products/E462197-000/01\",\"verification_note\":\"Official UNIQLO Latvia product page verifies the wide straight silhouette and BLACK as a product colour; current Latvia trouser listing shows Pleated Wide Trousers at €49.90.\"},{\"slot_name\":\"shoes\",\"brand\":\"UNIQLO\",\"product_name\":\"Suede Combination Trainers — Black\",\"price\":null,\"currency\":\"EUR\",\"product_url\":\"https://www.uniqlo.com/eu-lv/en/products/E471720-000/00\",\"verification_note\":\"Official UNIQLO Latvia product page verifies BLACK as a colour option and size 42 in the size list. Exact current price was not reliably exposed in the fetched product page, so price is intentionally left null for human verification.\"}]},\"human_review_required\":true}}', 'needs_review', NULL, NULL, '2026-08-13 21:26:25', '2026-08-13 21:55:16');

-- --------------------------------------------------------

--
-- Table structure for table `user_issue_products`
--

CREATE TABLE `user_issue_products` (
  `id` int UNSIGNED NOT NULL,
  `user_issue_page_id` int UNSIGNED NOT NULL,
  `product_id` int UNSIGNED DEFAULT NULL,
  `brand` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `product_name` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  `currency` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `product_url` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL,
  `slot_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `color_name` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `match_level` enum('exact','close_match','style_alternative') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'exact',
  `sort_order` int UNSIGNED NOT NULL DEFAULT '0',
  `verification_status` enum('unverified','verified','unavailable') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'unverified',
  `verification_note` text COLLATE utf8mb4_unicode_ci,
  `price_verification_status` enum('not_checked','verified_regular','failed') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'not_checked',
  `price_verified_at` datetime DEFAULT NULL,
  `price_verification_note` text COLLATE utf8mb4_unicode_ci,
  `price_verification_meta` longtext COLLATE utf8mb4_unicode_ci,
  `price_verification_fingerprint` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `budget_fit` enum('within_preference','editorial_exception') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'within_preference',
  `budget_exception_note` text COLLATE utf8mb4_unicode_ci,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `user_issue_products`
--

INSERT INTO `user_issue_products` (`id`, `user_issue_page_id`, `product_id`, `brand`, `product_name`, `price`, `currency`, `product_url`, `slot_name`, `color_name`, `match_level`, `sort_order`, `verification_status`, `verification_note`, `price_verification_status`, `price_verified_at`, `price_verification_note`, `price_verification_meta`, `price_verification_fingerprint`, `created_at`, `updated_at`) VALUES
(103, 50, NULL, 'UNIQLO', 'Zip-Up Blouson — Dark Grey', 59.90, 'EUR', 'https://www.uniqlo.com/eu-lv/en/products/E475681-000/00', 'outerwear', NULL, 'exact', 1, 'unverified', NULL, 'not_checked', NULL, NULL, NULL, NULL, '2026-08-13 21:55:16', '2026-08-13 21:55:16'),
(104, 50, NULL, 'UNIQLO', 'Oversized Oxford Shirt — White', NULL, 'EUR', 'https://www.uniqlo.com/eu-lv/en/products/E476240-000/00', 'shirt', NULL, 'exact', 2, 'unverified', NULL, 'not_checked', NULL, NULL, NULL, NULL, '2026-08-13 21:55:16', '2026-08-13 21:55:16'),
(105, 50, NULL, 'UNIQLO', 'Pleated Wide Trousers — Black', 49.90, 'EUR', 'https://www.uniqlo.com/eu-lv/en/products/E462197-000/01', 'trousers', NULL, 'exact', 3, 'unverified', NULL, 'not_checked', NULL, NULL, NULL, NULL, '2026-08-13 21:55:16', '2026-08-13 21:55:16'),
(106, 50, NULL, 'UNIQLO', 'Suede Combination Trainers — Black', NULL, 'EUR', 'https://www.uniqlo.com/eu-lv/en/products/E471720-000/00', 'shoes', NULL, 'exact', 4, 'unverified', NULL, 'not_checked', NULL, NULL, NULL, NULL, '2026-08-13 21:55:16', '2026-08-13 21:55:16');

-- --------------------------------------------------------

--
-- Table structure for table `user_photos`
--

CREATE TABLE `user_photos` (
  `id` int UNSIGNED NOT NULL,
  `user_id` int UNSIGNED NOT NULL,
  `file_path` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
  `photo_type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `is_primary` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `user_photos`
--

INSERT INTO `user_photos` (`id`, `user_id`, `file_path`, `photo_type`, `is_primary`, `created_at`) VALUES
(6, 4, 'assets/uploads/readers/user-4/20260813-211815-64f40304.jpg', 'full_body', 1, '2026-08-13 21:18:15'),
(7, 4, 'assets/uploads/readers/user-4/20260813-211815-67b98de5.jpg', 'three_quarter', 0, '2026-08-13 21:18:15'),
(8, 4, 'assets/uploads/readers/user-4/20260813-211815-872f3160.jpg', 'portrait', 0, '2026-08-13 21:18:15'),
(9, 4, 'assets/uploads/readers/user-4/20260813-211815-34fc7f08.jpg', 'everyday_reference', 0, '2026-08-13 21:18:15');

-- --------------------------------------------------------

--
-- Table structure for table `user_profiles`
--

CREATE TABLE `user_profiles` (
  `user_id` int UNSIGNED NOT NULL,
  `height_cm` decimal(5,2) DEFAULT NULL,
  `clothing_size` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `shoe_size` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `gender` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fit_preference` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `favorite_brands` text COLLATE utf8mb4_unicode_ci,
  `style_vibes` text COLLATE utf8mb4_unicode_ci,
  `style_exploration_mode` enum('stay_close','elevate','surprise') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'elevate',
  `use_cases` text COLLATE utf8mb4_unicode_ci,
  `budget_notes` text COLLATE utf8mb4_unicode_ci,
  `budget_max_item` decimal(10,2) DEFAULT NULL,
  `style_profile_json` longtext COLLATE utf8mb4_unicode_ci,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `user_profiles`
--

INSERT INTO `user_profiles` (`user_id`, `height_cm`, `clothing_size`, `shoe_size`, `gender`, `fit_preference`, `favorite_brands`, `style_vibes`, `style_exploration_mode`, `use_cases`, `budget_notes`, `budget_max_item`, `style_profile_json`, `created_at`, `updated_at`) VALUES
(4, 185.00, 'S', '42', NULL, 'oversized', 'Zara, Uniqlo', 'minimal, sporty, Scandinavian', 'elevate', 'everyday, city, travel', 'mostly under €100 per item', 100.00, '{}', '2026-08-12 14:00:38', '2026-08-13 21:18:15');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `comments`
--
ALTER TABLE `comments`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_comment_user` (`user_id`),
  ADD KEY `idx_comment_issue` (`user_issue_id`),
  ADD KEY `idx_comment_page` (`user_issue_page_id`);

--
-- Indexes for table `generation_jobs`
--
ALTER TABLE `generation_jobs`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_job_user_issue` (`user_issue_id`),
  ADD KEY `idx_job_page` (`issue_page_id`);

--
-- Indexes for table `issues`
--
ALTER TABLE `issues`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `slug` (`slug`),
  ADD UNIQUE KEY `uniq_issue_number` (`issue_number`);

--
-- Indexes for table `issue_chapters`
--
ALTER TABLE `issue_chapters`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uniq_issue_chapter_number` (`issue_id`,`chapter_number`),
  ADD KEY `idx_chapter_issue` (`issue_id`);

--
-- Indexes for table `issue_pages`
--
ALTER TABLE `issue_pages`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uniq_issue_page_number` (`issue_id`,`page_number`),
  ADD KEY `idx_page_issue` (`issue_id`),
  ADD KEY `idx_page_chapter` (`chapter_id`);

--
-- Indexes for table `products`
--
ALTER TABLE `products`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_product_brand` (`brand`),
  ADD KEY `idx_product_category` (`category`),
  ADD KEY `idx_product_status` (`status`);

--
-- Indexes for table `reader_profile_events`
--
ALTER TABLE `reader_profile_events`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_profile_event_user` (`user_id`),
  ADD KEY `idx_profile_event_type` (`event_type`);

--
-- Indexes for table `reactions`
--
ALTER TABLE `reactions`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_reaction_user` (`user_id`),
  ADD KEY `idx_reaction_issue` (`user_issue_id`),
  ADD KEY `idx_reaction_page` (`user_issue_page_id`),
  ADD KEY `idx_reaction_product` (`user_issue_product_id`);

--
-- Indexes for table `review_log`
--
ALTER TABLE `review_log`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_review_user_issue` (`user_issue_id`),
  ADD KEY `idx_review_page` (`user_issue_page_id`);

--
-- Indexes for table `schema_migrations`
--
ALTER TABLE `schema_migrations`
  ADD PRIMARY KEY (`version`);

--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `email` (`email`);

--
-- Indexes for table `user_issue_pages`
--
ALTER TABLE `user_issue_pages`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uniq_user_issue_page` (`user_issue_id`,`issue_page_id`),
  ADD KEY `idx_uip_user_issue` (`user_issue_id`),
  ADD KEY `idx_uip_issue_page` (`issue_page_id`);

--
-- Indexes for table `user_issue_products`
--
ALTER TABLE `user_issue_products`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_uiprod_page` (`user_issue_page_id`),
  ADD KEY `idx_uiprod_product` (`product_id`);

--
-- Indexes for table `user_photos`
--
ALTER TABLE `user_photos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_photo_user` (`user_id`);

--
-- Indexes for table `user_profiles`
--
ALTER TABLE `user_profiles`
  ADD PRIMARY KEY (`user_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `comments`
--
ALTER TABLE `comments`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `generation_jobs`
--
ALTER TABLE `generation_jobs`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=33;

--
-- AUTO_INCREMENT for table `issues`
--
ALTER TABLE `issues`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT for table `issue_chapters`
--
ALTER TABLE `issue_chapters`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=25;

--
-- AUTO_INCREMENT for table `issue_pages`
--
ALTER TABLE `issue_pages`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=129;

--
-- AUTO_INCREMENT for table `products`
--
ALTER TABLE `products`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=28;

--
-- AUTO_INCREMENT for table `reader_profile_events`
--
ALTER TABLE `reader_profile_events`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `reactions`
--
ALTER TABLE `reactions`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT for table `review_log`
--
ALTER TABLE `review_log`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=33;

--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT for table `user_issue_pages`
--
ALTER TABLE `user_issue_pages`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=51;

--
-- AUTO_INCREMENT for table `user_issue_products`
--
ALTER TABLE `user_issue_products`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=107;

--
-- AUTO_INCREMENT for table `user_photos`
--
ALTER TABLE `user_photos`
  MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `comments`
--
ALTER TABLE `comments`
  ADD CONSTRAINT `fk_comment_issue` FOREIGN KEY (`user_issue_id`) REFERENCES `user_issues` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_comment_page` FOREIGN KEY (`user_issue_page_id`) REFERENCES `user_issue_pages` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_comment_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `generation_jobs`
--
ALTER TABLE `generation_jobs`
  ADD CONSTRAINT `fk_job_page` FOREIGN KEY (`issue_page_id`) REFERENCES `issue_pages` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_job_user_issue` FOREIGN KEY (`user_issue_id`) REFERENCES `user_issues` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `issue_chapters`
--
ALTER TABLE `issue_chapters`
  ADD CONSTRAINT `fk_chapter_issue` FOREIGN KEY (`issue_id`) REFERENCES `issues` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `issue_pages`
--
ALTER TABLE `issue_pages`
  ADD CONSTRAINT `fk_page_chapter` FOREIGN KEY (`chapter_id`) REFERENCES `issue_chapters` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_page_issue` FOREIGN KEY (`issue_id`) REFERENCES `issues` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `reader_profile_events`
--
ALTER TABLE `reader_profile_events`
  ADD CONSTRAINT `fk_profile_event_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `reactions`
--
ALTER TABLE `reactions`
  ADD CONSTRAINT `fk_reaction_issue` FOREIGN KEY (`user_issue_id`) REFERENCES `user_issues` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_reaction_page` FOREIGN KEY (`user_issue_page_id`) REFERENCES `user_issue_pages` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_reaction_product` FOREIGN KEY (`user_issue_product_id`) REFERENCES `user_issue_products` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_reaction_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `review_log`
--
ALTER TABLE `review_log`
  ADD CONSTRAINT `fk_review_page` FOREIGN KEY (`user_issue_page_id`) REFERENCES `user_issue_pages` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_review_user_issue` FOREIGN KEY (`user_issue_id`) REFERENCES `user_issues` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `user_issue_pages`
--
ALTER TABLE `user_issue_pages`
  ADD CONSTRAINT `fk_uip_issue_page` FOREIGN KEY (`issue_page_id`) REFERENCES `issue_pages` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_uip_user_issue` FOREIGN KEY (`user_issue_id`) REFERENCES `user_issues` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `user_issue_products`
--
ALTER TABLE `user_issue_products`
  ADD CONSTRAINT `fk_uiprod_page` FOREIGN KEY (`user_issue_page_id`) REFERENCES `user_issue_pages` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_uiprod_product` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE SET NULL;

--
-- Constraints for table `user_photos`
--
ALTER TABLE `user_photos`
  ADD CONSTRAINT `fk_photo_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

--
-- Constraints for table `user_profiles`
--
ALTER TABLE `user_profiles`
  ADD CONSTRAINT `fk_profile_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
COMMIT;

