{
  "site": "Burn Studio, Spain",
  "slug": "burnstudio",
  "urls": [
    "https://burnstudio.co/",
    "https://burnstudio.co/work",
    "https://burnstudio.co/work/antropico"
  ],
  "stack": {
    "framework": "None: hand-written jQuery 3.6.0 scripts (helpers, observerprojects, clock, main, ajax, player), no bundler; jQuery UI 1.14.1 for draggable only",
    "cms": "Kirby (PHP 8.1.34 on Apache), custom AJAX routes /ajax/<lang>/<id>/<slug> returning JSON",
    "animation": [
      "CSS transitions only (300 ms ease token, 1 s ease for the menu glide)",
      "jQuery UI draggable",
      "Marquee3000 1.1.1 (credit ticker)",
      "Swiper 11.2.10 as served on 2026-10-22 (homepage vertical slideshows, 800 ms slides on a desktop, loop: true with a too-few-slides warning)"
    ],
    "scroll": "Native; scroll bars hidden with ::-webkit-scrollbar { display: none }; no smooth-scroll library",
    "three_d": "None",
    "fonts": [
      "Camera Plain regular and medium (ABC Camera Plain, files named -Trial; the Medium file is declared as font-weight bold)",
      "Politics book (labels, captions, clock)"
    ],
    "evidence": [
      "data-kirby-url attributes on menu items; media under /media/pages/<page>/<hash>-<timestamp>/ with Kirby thumb names (-300x.jpg, -640x.webp to -1920x.webp)",
      "response headers: server Apache, x-powered-by PHP/8.1.34, no CDN headers; NS ns17/ns18.domaincontrol.com; A 92.205.148.223 (no PTR); RIPE: Host Europe GmbH (GoDaddy), netname DE-GODADDY-20071017, route 92.205.144.0/21, AS21499",
      "scripts: code.jquery.com/jquery-3.6.0.min.js, code.jquery.com/ui/1.14.1/jquery-ui.min.js (SRI on this tag only), cdn.jsdelivr.net/npm/swiper@11, cdn.jsdelivr.net/npm/marquee3000@1.1.1, burnstudio.co/assets/js/*.js",
      "probe globals: jQuery, $; no canvas, no SVG filters, no custom cursors, 17 backdrop-filter elements",
      "CSS (14 @import partials): 23 style rules with a transition in the live CSSOM (a source grep counted 28 lines), 0 @keyframes, 0 prefers-reduced-motion",
      "gtag G-QE723JP8VM (Google Analytics 4)",
      "commons/fonts.css: ABCCameraPlain-Regular-Trial.woff2, ABCCameraPlain-Medium-Trial.woff2, Politics-Book.woff2",
      "verifier 2026-10-22: runtime $.fn.jquery 3.6.0, $.ui.version 1.14.1, #header draggable {handle #menu-drag, containment window, scroll true}; HEAD /work: server Apache, x-powered-by PHP/8.1.34, no CDN headers; swiper@11 banner 'Swiper 11.2.10'; CSSOM walk: 14 imports, 0 keyframes, 0 reduced-motion, one ::-webkit-scrollbar rule in commons/globals.css; history.state set on first load (getInitialState) and no /ajax/ request on Back"
    ]
  },
  "components": [
    {
      "name": "Landing: BURN spelled in eleven blocks",
      "owner_words": "Burn Studios are great. Exercise in minimal design. I like how they use the grid on the home page to write their company name. Burn. And it's minimal until you hover or act on it. Perhaps something to borrow from or consider here.",
      "selectors": [
        "#landing-container",
        "#logo-landing",
        "#logo-landing .logo",
        "#logo-landing .logo-block[data-index]",
        ".logo-block.logo-text .logo-tm",
        "#background-container .pattern-script",
        "html.hide-landing"
      ],
      "mechanism": "White fixed layer (z 110) over the rendered homepage. An 8 x 3 CSS grid of --gap cells (58.25 px at 1440) with 1 px gaps, so its pitch equals the cross pitch (59.25); blocks placed by data-index into the letters b-u-r-n (counters are the gaps and one empty cell); fill #afafaf80, radius 5 px; each block holds a 300 px still at opacity 0. main.js startRandomHighlight(): setInterval 2000 ms moves .active to a random other block (300 ms opacity cross-fade); the first mouseenter clears the interval for good; :hover shows the hovered block's still; a click on any block adds html.hide-landing (no link, the block's project is not opened). The cross SVG is 901 pitches + 4 px tall and flex-centred so crosses land 0.5 px from every block edge.",
      "libraries": [],
      "states": [
        "rest: no block lit, then one random block lit every 2 s",
        "hover: only the hovered block lit, idle cycle stopped",
        "dismissed: html.hide-landing, layer faded out, homepage revealed",
        "dark mode: layer stays white, blocks and crosses darker",
        "phone: no landing (display none at 820 px and narrower)"
      ],
      "timings": "idle tick 2000 ms; block reveal opacity 300 ms ease (cross-fade); dismiss opacity 1 to 0 and translateY 0 to 5 px over 300 ms ease",
      "shots": [
        "shots/landing-rest-sheet.png",
        "shots/landing-rest-logo-strip.png",
        "shots/landing-hover-block6.png",
        "shots/landing-hover-block1.png",
        "shots/landing-click-sheet.png",
        "shots/landing-after-click.png",
        "shots/landing-dark.png"
      ],
      "rebuild": "CSS grid of cells sized to the stage pitch (pitch - 1 px tracks, 1 px gap); the word as data {row, col, rowSpan, colSpan, item} where item is a speaker, session or theme; each cell a <button> with an accessible name holding the sketch or photo at opacity 0; a 2 s idle timer moving an is-lit class, stopped on first pointerenter or focus, paused when hidden, off under prefers-reduced-motion; 300 ms ease reveal; click opens the cell's drawer. No library needed.",
      "confidence": "high"
    },
    {
      "name": "Grid system on /work",
      "owner_words": "They stick to that grid where every element is laid out according to the grid even if of various sizes and in random spots on the grid but adheres to the grid …",
      "selectors": [
        ".projects-grid",
        ".projects-grid > .project.work-project",
        ".projects-grid .media.landscape",
        ".projects-grid .media.portrait",
        ".projects-grid .media:not(.landscape):not(.portrait)",
        ".project-code-container",
        "#background-container .pattern-script",
        "body (--gap)"
      ],
      "mechanism": "helpers.js grid() on load and resize: pitch = ((W - 4(d+1) - 14) / d) + 4 = (W - 18) / d with d = 24 at 820 px and wider, 8 below; the SVG cross tile is set to the pitch and --gap = pitch - 1 on body. The projects grid is 8 equal columns with 2 px gutters (column pitch = 3 cross pitches), row gap --gap + 3 px, align-items center, 10 px insets. Every thumbnail is one column wide; heights are 2, 4 or 6 pitches minus 2 px (landscape still, video, portrait still), so centring keeps shorter items on the grid. Holes come from sparse auto-placement plus a 23-item cycle of column pins: nth-child(23n+1) and (23n+13) col 2, (23n+5) col 7, (23n+8) col 3, (23n+12) col 8, (23n+15) and (23n+22) col 6. Captions are one cell tall (--gap - 1) and start 1 px under the image, inside the row gap. Phone: one column, landscape 5 pitches minus 2 px tall.",
      "libraries": [],
      "states": [
        "desktop 1440: pitch 59.25, --gap 58.25, columns 175.75 px, landscape 116.5, video 235, portrait 353.5, row gap 61.25",
        "phone 390: pitch 46.5, --gap 45.5, landscape 370 x 230.5, portrait 276 x 414.5, video 370 x 184",
        "filtered: hidden items sorted to the end so the pins re-flow over the visible set"
      ],
      "timings": "No animation; recomputed on every resize",
      "shots": [
        "shots/work-rest.png",
        "shots/work-full.png",
        "shots/m-work-00-top.png"
      ],
      "rebuild": "--pitch: calc((100vw - 18px) / var(--cells)) with --cells 24 (8 under 820 px) once scroll bars are hidden, or computed from clientWidth; cross marks as an SVG pattern or a background-image tiled at the pitch, offset 7 px; blocks declare sizes in pitches with heights calc(var(--pitch) * k - 2px), k even, in an 8-track grid with 2 px gaps; the model chooses order and size, the layout chooses the column from a pin cycle or seeded random. No library needed.",
      "confidence": "high"
    },
    {
      "name": "Hover extends the menu with a title pill",
      "owner_words": "… the hover extends the menu and reveals more about what you're hovering over. I like that localized minimalism where information is in one section of the screen … while you hover on stuff that's on the main canvas",
      "selectors": [
        "#nav-title-container.nav-container-animate",
        "#project-name-container",
        "#nav-project-code",
        "#nav-project-name",
        "header.show-title",
        ".project-hover[data-code][data-title]",
        ".hover-preview-container video"
      ],
      "mechanism": "Delegated mouseenter on .project-hover copies data-code and data-title into the pill, measures the absolutely positioned #project-name-container, writes its width (and its height as max-height) inline on #nav-title-container (CSS width transition), adds header.show-title (text opacity 0 to 1) and plays the card's muted looping preview; mouseleave sets width 0, removes show-title and pauses. Pills 31.4 px tall, radius 3 px, #7c7c7c fill, #afafaf text; the pill grew to 441.7 px for '06. C Ban Assault Weapons | Brady | Greg Hardes & Aaron Chapman'. The pill re-targets to any card the pointer crosses.",
      "libraries": [
        "jQuery 3.6.0"
      ],
      "states": [
        "rest: pill width 0 right of List",
        "hover: pill open with code and title, preview video playing",
        "leaving across other cards: pill re-targets, then closes",
        "after an AJAX page swap: pill stuck open (no mouseleave)"
      ],
      "timings": "width and text opacity 300 ms ease (cubic-bezier(.25,.1,.25,1)) together, no delay; measured 0 to 294.5 px between 69 and 394 ms (74 % at 134 ms in); close identical; preview container opacity instant; backdrop-filter 1 s after .3 s (invisible behind the opaque fill)",
      "shots": [
        "shots/work-hover.png",
        "shots/work-hover-pill-header-strip.png",
        "shots/work-hover-pill-sheet.png",
        "shots/work-unhover-pill-header-strip.png",
        "shots/work-unhover-pill-sheet.png",
        "shots/pt-02-back-settled.png"
      ],
      "rebuild": "A detail slot in the bar; pointerenter and focus on a stage block write its label and open the slot; pointerleave and blur close it after about 80 ms of grace; width and opacity together over 300 ms ease via interpolate-size: allow-keywords (Chromium), a 0fr to 1fr grid track, or JS measuring as Burn does; aria-live polite; clear on every route change. Motion layout or GSAP Flip if wanted.",
      "confidence": "high"
    },
    {
      "name": "Draggable menu",
      "owner_words": "a little drag icon that appears next to the menu that lets you move the menu anywhere you want on the screen. That is really cool.",
      "selectors": [
        "#header",
        "#menu-drag",
        ".ui-draggable",
        ".ui-draggable-dragging",
        "#header:not(.ui-draggable-dragging)"
      ],
      "mechanism": "jQuery UI draggable on the fixed #header with handle #menu-drag (12.5 px four-arrow SVG, 6 px left of the pills, cursor grab) and containment window (defaults scroll true, scrollSensitivity 20, scrollSpeed 20). jQuery UI writes top and left inline; the 1 s top/left transition is suspended while .ui-draggable-dragging is on, so the menu follows the pointer 1:1 and stays where dropped. Nothing is stored: the position lasts until reload; AJAX page swaps keep it; only the project route moves it (to the bottom centre).",
      "libraries": [
        "jQuery UI 1.14.1 (draggable)"
      ],
      "states": [
        "rest at (10, 126.5) on /work",
        "held: follows the pointer, cursor grabbing",
        "dropped: stays at the drop point",
        "after reload: back at (10, 126.5)",
        "phone: handle hidden, header pinned to the bottom"
      ],
      "timings": "No animation during or after the drag; 1 s ease glide only when a script sets the position",
      "shots": [
        "shots/drag-sheet.png",
        "shots/drag-01-handle-hover.png",
        "shots/drag-02-mid-held.png",
        "shots/drag-03-mid-held-2.png",
        "shots/drag-04-released.png",
        "shots/drag-05-moved-menu-hover-pill.png",
        "shots/drag-06-contained-corner.png",
        "shots/drag-07-after-reload.png"
      ],
      "rebuild": "Pointer events on a <button> handle with setPointerCapture; move with transform translate3d; clamp to the viewport on every move from the current size and again when the bar's width changes or the window resizes; remember the position in sessionStorage; snap back to the dock on double-click or a drop near the bottom centre with a 300 ms ease glide; arrow keys move by one pitch, Escape docks. Motion drag (dragConstraints, dragMomentum false, dragSnapToOrigin), GSAP Draggable (bounds window), interact.js or @use-gesture.",
      "confidence": "high"
    },
    {
      "name": "Phone foot bar naming the centred project",
      "owner_words": "Not named in his words; row 14's description adds it. It is the phone form of the 'localized minimalism' he quotes.",
      "selectors": [
        "#mobile-title-container",
        "#mobile-project-title-home",
        "#mobile-project-code-home",
        "#mobile-project-name-home",
        ".projects-grid .project.active"
      ],
      "mechanism": "observerprojects.js activateCenteredProject('.projects-grid .project', 'active', changeMobileProject) binds window scroll and resize; each event measures every card, keeps those on screen, picks the one whose centre is nearest innerHeight / 2, moves .active to it and writes its data-code and data-title into the fixed bar (370 x 31.4 px, #7c7c7c, radius 3 px, 10 px from the edges). Instant text swap, no throttle. The phone home drives the same bar from Swiper's slideChangeTransitionEnd.",
      "libraries": [
        "jQuery 3.6.0",
        "Swiper 11 (phone home only)"
      ],
      "states": [
        "top: 24. C Ball Was Out | Yony | Coming of Age",
        "scrollY 1500: 55. C Bluff Bounce | Bluff Bounce | Matheo Fernandes",
        "scrollY 4200: 45. C Ciel Azur | Jaymie | Caraz",
        "menu open: bar stays"
      ],
      "timings": "Instant on every scroll event",
      "shots": [
        "shots/m-work-00-top.png",
        "shots/m-work-01-scroll-1500.png",
        "shots/m-work-02-scroll-4200.png",
        "shots/m-work-03-menu-open.png",
        "shots/m-home.png",
        "shots/phone-sheet.png"
      ],
      "rebuild": "IntersectionObserver with rootMargin '-50% 0px -50% 0px' (a zero-height line across the middle) writing the current block's label into the same bar slot as the desktop hover; 150 to 200 ms text cross-fade; tap the bar to open that block's drawer; aria-live polite, rate-limited. GSAP ScrollTrigger onToggle at center center if already in use.",
      "confidence": "high"
    },
    {
      "name": "Light and dark mode switch",
      "owner_words": "Not named in his words; bar-stage-drawers.md (its notes on rows 13 and 14) calls the mode switch and the live clock 'the only other furniture'.",
      "selectors": [
        ".color-mode[data-mode='light']",
        ".color-mode[data-mode='dark']",
        "html.light",
        "html.dark"
      ],
      "mechanism": "Two text buttons after 'MODE:' (Politics 9 px uppercase), the active one underlined; applyMode() swaps html.light and html.dark and writes the cookie color-mode for 30 days; the cookie is applied in the window load handler, so a dark visitor sees light first. Dark: page #070707, text #FFFFFF80, pills #5b5b5b, crosses #505050; the landing layer stays white.",
      "libraries": [
        "jQuery 3.6.0"
      ],
      "states": [
        "light",
        "dark"
      ],
      "timings": "page colours 300 ms ease",
      "shots": [
        "shots/work-dark.png",
        "shots/mode-dark-sheet.png",
        "shots/list-open-dark.png",
        "shots/landing-dark.png",
        "shots/home-behind-landing-dark.png"
      ],
      "rebuild": "Set the class from the cookie in an inline head script before first paint; tokens on :root redefined under html.dark; 300 ms ease on background and colour.",
      "confidence": "high"
    },
    {
      "name": "Live clock",
      "owner_words": "Not named in his words; bar-stage-drawers.md (its notes on rows 13 and 14) calls the mode switch and the live clock 'the only other furniture'.",
      "selectors": [
        "#time-nav",
        "#controls-nav"
      ],
      "mechanism": "clock.js every second: Intl.DateTimeFormat('en-GB', {timeZone: 'Europe/Berlin', 24 h with seconds}) printed as 'GMT+1 ' + time into #time-nav (50 px wide, Politics 9 px). The label is static: measured 'GMT+1 05:07:47' at 03:07:48 UTC, which is CEST (UTC+2), so the label is wrong from late March to late October.",
      "libraries": [],
      "states": [
        "ticking every second"
      ],
      "timings": "1000 ms interval, instant text swap",
      "shots": [
        "shots/work-rest.png",
        "shots/work-hover-pill-header-strip.png"
      ],
      "rebuild": "Derive the label with timeZoneName: 'short'; for ETS27 use Austin time or a countdown to 2027-05-03 in the bar's quiet line.",
      "confidence": "high"
    },
    {
      "name": "List view toggle",
      "owner_words": "Not named in his words.",
      "selectors": [
        "#list-trigger",
        "#list-trigger-container svg.selector",
        "html.show-list",
        ".projects-list",
        ".projects-list .list-header",
        ".projects-list a.list-project"
      ],
      "mechanism": "#list-trigger toggles html.show-list; .projects-list is a fixed full-viewport sheet, rgba(255,255,255,.95) (dark rgba(0,0,0,.95)), z 10 under the menu, a four-column grid (1fr 1fr 2fr 6fr: number, type, director, name) of Politics uppercase rows 5 px apart, each a data-ajax link. html overflow hidden while open and overflow visible on the sheet (not a scroll container); the sheet holds 204 rows (the 68 projects three times, numbered 01 to 204, 3,088 px), so rows 58 to 204 cannot be scrolled into view.",
      "libraries": [
        "jQuery 3.6.0"
      ],
      "states": [
        "closed",
        "open light",
        "open dark"
      ],
      "timings": "opacity 0 to 1 and translateY 5 px to 0 over 300 ms ease",
      "shots": [
        "shots/list-open-light.png",
        "shots/list-open-sheet.png",
        "shots/list-open-dark.png"
      ],
      "rebuild": "Same sheet for an agenda list with overflow auto and the bar above it.",
      "confidence": "high"
    },
    {
      "name": "Project page and player bar",
      "owner_words": "Not named in his words; the brief asked for the project page transition.",
      "selectors": [
        "body[data-page='project']",
        ".player-container",
        ".player-video",
        "#marquee-project",
        "#player-nav-container .player-nav",
        ".back-trigger",
        ".player-play",
        ".player-progress-bar",
        ".player-fullscreen",
        ".player-mute"
      ],
      "mechanism": "The video box fitted to the viewport (10 px insets, 8 px corners; the poster draws letterboxed inside it at about 1376 x 880, the playing film fills 1420 x 861) with a Marquee3000 credit ticker (N, director, producer, running time) across the middle until play; the header turns into the player bar (Back, code and title, Play with progress and time, fullscreen, Mute) at the bottom centre. Via AJAX the bar's text comes from the hovered card and Play is clicked after 2 s; on a direct visit the bar sits 20 px off the bottom, shows the template placeholder '23.CS' and waits for a click. Phone: two-row bar at the foot.",
      "libraries": [
        "Marquee3000 1.1.1",
        "jQuery 3.6.0"
      ],
      "states": [
        "poster with ticker",
        "playing (ticker hidden)",
        "direct visit (no autoplay)",
        "phone"
      ],
      "timings": "ticker fade 300 ms ease on play; progress line width 300 ms linear",
      "shots": [
        "shots/pt-01-project-settled.png",
        "shots/pt-in-01.png",
        "shots/pt-in-02.png",
        "shots/project-direct.png",
        "shots/project-direct-later.png",
        "shots/m-project.png"
      ],
      "rebuild": "A drawer or stage mode where the bar changes job (player controls) instead of a new page; keep the bar outside the swapped region.",
      "confidence": "high"
    }
  ],
  "transitions": [
    {
      "name": "Landing idle highlight",
      "from": "landing, block A lit",
      "to": "landing, block B lit",
      "layers": [
        "block A figure opacity 1 to 0 (300 ms ease)",
        "block B figure opacity 0 to 1 (300 ms ease), same frame"
      ],
      "duration_ms": 300,
      "shots": [
        "shots/landing-rest-logo-strip.png",
        "shots/landing-rest-sheet.png"
      ]
    },
    {
      "name": "Landing dismiss",
      "from": "landing",
      "to": "homepage",
      "layers": [
        "#landing-container opacity 1 to 0 and translateY 0 to 5 px (300 ms ease)",
        "homepage already rendered underneath, no movement"
      ],
      "duration_ms": 300,
      "shots": [
        "shots/landing-click-sheet.png",
        "shots/landing-after-click.png"
      ]
    },
    {
      "name": "Hover title pill",
      "from": "menu at rest",
      "to": "menu with title pill",
      "layers": [
        "#nav-title-container width 0 to measured px (300 ms ease)",
        "#project-name-container opacity 0 to 1 (300 ms ease)",
        "card preview video opacity 0 to 1 (instant) and play()"
      ],
      "duration_ms": 300,
      "shots": [
        "shots/work-hover-pill-header-strip.png",
        "shots/work-unhover-pill-header-strip.png"
      ]
    },
    {
      "name": "Grid to project (AJAX)",
      "from": "/work",
      "to": "/work/antropico",
      "layers": [
        "body.loading wait cursor until the JSON arrives",
        "main opacity 1 to 0 (300 ms ease)",
        "main HTML swapped, scroll 0, pushState",
        "main opacity 0 to 1 (300 ms ease)",
        "menu pills collapse and player bar opens (width and max-height 300 ms ease)",
        "header top/left glide to the bottom centre (1000 ms ease, starts 400 ms after the swap)",
        "Play clicked 2000 ms after the swap; ticker opacity 1 to 0 (300 ms ease)"
      ],
      "duration_ms": 1700,
      "shots": [
        "shots/pt-in-sheet.png",
        "shots/pt-00-work.png",
        "shots/pt-in-01.png",
        "shots/pt-in-02.png",
        "shots/pt-01-project-settled.png"
      ]
    },
    {
      "name": "Project back to grid",
      "from": "/work/antropico",
      "to": "/work",
      "layers": [
        "history.back() and popstate render the stored main HTML (no network)",
        "main opacity 1 to 0 then 0 to 1 (300 ms ease each)",
        "scroll reset to 0",
        "header keeps the player bar's top and left (now ending at the viewport's bottom edge, about 48 px left of centre); stale title pill stays open"
      ],
      "duration_ms": 600,
      "shots": [
        "shots/pt-back-sheet.png",
        "shots/pt-02-back-settled.png"
      ]
    },
    {
      "name": "List sheet",
      "from": "/work grid",
      "to": "/work list",
      "layers": [
        ".projects-list opacity 0 to 1 and translateY 5 px to 0 (300 ms ease)",
        "list selector dot opacity 0 to 1 (300 ms ease)"
      ],
      "duration_ms": 300,
      "shots": [
        "shots/list-open-sheet.png",
        "shots/list-open-light.png"
      ]
    },
    {
      "name": "Mode switch",
      "from": "light",
      "to": "dark",
      "layers": [
        "html background and colour (300 ms ease)",
        "pills background (300 ms ease)"
      ],
      "duration_ms": 300,
      "shots": [
        "shots/mode-dark-sheet.png",
        "shots/work-dark.png"
      ]
    },
    {
      "name": "Phone menu",
      "from": "phone page",
      "to": "phone menu open",
      "layers": [
        "#mobile-menu-elements opacity 0 to 1 and translateY 5 px to 0 (300 ms ease)",
        "Menu label becomes Close"
      ],
      "duration_ms": 300,
      "shots": [
        "shots/m-work-03-menu-open.png"
      ]
    }
  ],
  "not_confirmed": [
    "Hosting product: the IP is in GoDaddy's Host Europe network (AS21499, Germany); shared hosting or a dedicated server is not knowable from outside (verifier)",
    "Kirby version and the server half of the /ajax/ routes; only the client half is visible",
    "Video pixels on /work: the five C.S video cards and the hover previews reported playing (video-playing, paused false, readyState 4) but painted nothing in headless Chromium while the project film painted; verifier: the thumbnails' currentTime advances while videoWidth stays 0 and no frame decodes, and this Chromium answers canPlayType 'probably' for avc1 and '' for hvc1, so the video track is missing or in a codec it cannot decode, and HEVC fits; the codec is still unconfirmed, and a browser that decodes HEVC (Safari, Chrome on macOS) would show them",
    "The 300 ms fades were not resolved frame by frame: fsit2 was loaded and burst frames landed 220 to 1,070 ms apart; durations come from the CSS and the pill's from an in-page rAF sampler; an idle host or a CDP screencast would resolve them",
    "The list's rows 58 to 204: the computed styles say they cannot be scrolled into view; a real wheel or touch scroll was not tried (verifier)",
    "The Politics font's foundry, and whether the Camera Plain trial files are licensed",
    "Swiper's version over time: 11.2.10 on 2026-10-22, but the URL floats on swiper@11; which slider triggers the loop warning was not isolated (verifier)",
    "Not examined: the Talent page, the About and Contact overlays, the filters' re-flow in pictures, the Shop link, the homepage slideshows' wheel behaviour in pictures (source: wheel on at 820 px and wider, sensitivity .05 and .15, 800 ms slides, the two sliders driven in opposite directions)"
  ]
}