{
  "version": 9,
  "purpose": "Seven prototype LEGO Office image-loading scenes. Not production Hugo configuration.",
  "common": "# Reusable LEGO Office loading-scene prompt\n\n## Required inputs\n\n- Scene ID: `{SCENE_ID}`\n- Scene description: `{SCENE_DESCRIPTION}`\n- Static elements: `{STATIC_ELEMENTS}`\n- Moving elements: `{MOVING_ELEMENTS}`\n- Moving-layer anchor positions: `{LAYER_ANCHORS}`\n- Master canvas: `{CANVAS_WIDTH} × {CANVAS_HEIGHT}` pixels\n- Asset role for this generation: `{BASE_OR_NAMED_MOTION_LAYER}`\n\n## Prompt\n\nUse case: illustration-story.\nAsset type: one layer of a small image-loading scene for an engineering blog.\nSubject: LEGO Ideas The Office 21336 minifigures and LEGO office props.\nScene: {SCENE_DESCRIPTION}\nStyle: monochrome graphite pencil sketch, fine gray pencil strokes, restrained crosshatching, no colored areas, no paper rectangle, no vignette, no glow, genuinely transparent empty areas. Do not bake loading copy, captions or UI into the artwork. Authentic prop markings required for identity, such as LIEBERTHAL 7, are permitted. The site supplies its accessible loading status separately.\n\nKeep normal positive tonal values in both site themes: dark pencil outlines and shadows, light faces and paper, dark hair. Never invert the whole illustration for dark mode. If the sketch needs contrast against a dark page, place it on a soft light paper surface or prepare a separately art-directed positive-tone variant. No photographic-negative treatment.\n\nTransparent empty areas must contain no detached scraps, cropped neighboring frames, stray triangles, noise specks, white fringes or gray halos. Inspect the exported layer on both a light and a dark background, including all corners outside the scene.\n\n### MANDATORY: ONE STATIC MASTER, SEPARATE MOVING LAYERS\n\nCreate ONE stationary base/master scene. Do not create a sprite atlas or a set of independently redrawn whole-scene animation frames.\n\nStatic elements: {STATIC_ELEMENTS}. Their geometry, scale, camera, perspective, coordinates, proportions and outlines are locked. The desk, character body and all non-moving desk props must remain in exactly the same place. Do not add camera shake, zoom, panning, parallax of the whole scene or incidental movement of the desk.\n\nMoving elements: {MOVING_ELEMENTS}. Supply them as separate transparent layers. The runtime will animate only these existing layers, for example vapor rising from a pot, a paper tile sliding along a printer tray, a phone light blinking, visual ringing waves expanding, a rotor spinning about its axle, or a toy moving on its visible hinge/spring. Do not redraw the entire scene to depict these motions.\n\nUse the exact same master canvas width, height, aspect ratio and coordinate system for all registered scene layers. Keep the camera and viewpoint identical. Never stretch layers independently. Every moving layer must retain its specified anchor: {LAYER_ANCHORS}. The build pipeline may export a cropped transparent layer together with its fixed anchor metadata; this must not change its scale or placement relative to the master.\n\nIn this generation output only: {BASE_OR_NAMED_MOTION_LAYER}. If producing the base, leave moving effects such as vapor or ringing waves out of it. If producing a motion layer, do not include the desk, character or other static scenery again. Do not bake a moving effect into both the static base and the moving layer.\n\n### MANDATORY: ACTUAL LEGO ANATOMY AND CONNECTIONS\n\nA standard LEGO minifigure arm is ONE rigid molded part with a constant factory shape. It does NOT have an articulated elbow. Never bend, stretch, soften, lengthen or morph the arm or forearm between states.\n\nThe only permitted arm movements are rotation about the shoulder axle and rotation of the entire rigid hand about its wrist stem. The default pose for these loaders keeps the main figures' arms still.\n\nEach hand is the SPECIFIC FACTORY-MOLDED LEGO MINIFIGURE HAND in the supplied approved reference, not a generic object shaped like a letter C. There are NO individual fingers, NO thumb, NO knuckles, NO fingertips and NO human pinching or typing gestures. Preserve the identity and dimensions of that actual molded part in every view.\n\nBefore generation, load `references/lego-hand-983-user.png` and `references/lego-hand-983-3d-side.png` as mandatory geometry references. The actual part is BrickLink 983 / LEGO 3820. Also load `references/rejected-coaxial-wrists.png` as a NEGATIVE angle example and `references/rejected-rounded-hooks.png` as a NEGATIVE shape example. Exact physical part identity takes precedence over a verbal letter-shape description.\n\nPOSITIVE EXAMPLE — a SHORT SLOTTED HOLLOW CYLINDER with a straight cylindrical wall, flat annular end faces and two FLAT-CUT jaw ends. The thin wrist peg enters the SIDE WALL of this cylinder. Its axis is PERPENDICULAR (90 degrees) to the gripping bore axis: a side-entry T-junction, never a coaxial open robot cuff. At the desk, the forearm points approximately forward while the bore points UP. From the elevated camera show the oval TOP opening and short solid FRONT barrel wall. The hand rotates as one factory part around the wrist peg; the rigid arm and molded elbow do not deform. The mug hand clips its actual handle while the mug base remains on the table. Reproduce the precise silhouette and proportions in the supplied 3D reference.\n\nNEGATIVE EXAMPLES — do not draw a torus/donut ring, rounded pirate hook, broad flat horseshoe/U, long curved prongs, robot tube continuing straight along the forearm, exposed fingers/thumbs or oversized cuffs. A geometrically cylindrical clip is STILL WRONG if its hole points straight forward along the forearm. Compare BOTH shape AND orientation to the reference. Keep the original sleeve and arm pose when correcting only a hand.\n\nA standard minifigure head turns about its vertical stud axis; it does not bend or tilt at a human neck. A desk bobblehead may move only about its actual short neck connection; this is a separate mechanism, not a flexible minifigure neck. The Lieberthal collectible has a short concealed attachment, not a tall exposed spring.\n\nEvery prop must be visibly supported by the desktop, floor, tray or a physically valid LEGO connection. A mug either rests with its base touching the table or has its handle visibly connected to the C-shaped hand. Never draw a hovering mug, floating paper tile, detached spoon, unsupported machine or impossible grip. The current Michael scene keeps its mug on the tabletop at all times.\n\nPhysical props must share the SAME camera, scale, lighting, pencil texture and surface perspective as the scene. A fan or toy foot lies flush in the tabletop plane, with a clear support/contact point. Integrate stationary stands, cases, cages and feet into the master illustration; do not paste an entire unrelated generic prop or CSS icon into the scene. Isolate only the component that actually moves. A fan rotor's exported canvas must be registered to its axle, not to the asymmetric outer bounds of the three blades, so spinning does not wobble.\n\n### MANDATORY: RELATIVE SCALE, SUPPORT AND OCCLUSION\n\nJudge a prop inside the COMPOSED scene, never only in its isolated source image. Match its dimensions to the minifigure, nearby mug, monitor and tabletop. A desktop trinket must read as a small object, not a second full-size minifigure or an oversized pedestal. Set the relative scale in the scene recipe before generation; do not enlarge an isolated layer merely to make its motion more obvious.\n\nDraw the stationary foot or plinth DIRECTLY into the same master as the table. Its underside touches the tabletop with no air gap; its top and side edges follow that surface's perspective and its contact shadow lies immediately on the supporting surface. A prop must fit within the available tabletop area. Never conceal an incorrect support by overlapping an unrelated paper stack. Use consistent foreground/background occlusion: do not paint a rear object over a foreground hand, tray, monitor or desk edge. Do not use an unrelated generic raster or CSS silhouette as a substitute for the integrated stationary drawing.\n\nCURRENT DWIGHT-TOY REQUIREMENT: use the actual Mike Lieberthal Scranton Red Barons baseball bobblehead from The Office, based on `references/lieberthal-series-frame.png`. No generic smiley LEGO head on a tall spring. Show the small baseball collectible in rear/three-quarter rear view: backwards baseball cap, pinstripe jersey marked LIEBERTHAL and 7, dark undersleeves/belt, low oval base, short concealed neck attachment. The collectible is a miniature of the actual prop, not a second full-size LEGO character. Its base and body are drawn directly into the desktop master with consistent camera, pencil texture, contact shadow and supported footprint. Only its separate registered head/cap sways slightly about the neck pivot. The base, body, desk and Dwight remain fixed; no floating head, duplicate head, long exposed spring or uniform scaling to exaggerate motion. The clock scene keeps the same identifiable collectible fully assembled and stationary.\n\nFor EVERY motion layer record its fixed canvas anchor, intended dimensions, physical pivot and whether it goes behind or in front of each nearby object. Inspect both motion extremes and the resting state. Exporting, cropping or trimming transparency must preserve that registration. Keep all props at the same scale throughout playback; the animation may not change the camera, aspect ratio or scene bounds.\n\nThe printer's “paper” is a rigid light LEGO tile with visible thickness, matching the current scene's pencil-drawn reference and exact tray perspective. Keep hard straight edges and molded plastic material. It slides along the supported output tray; it does not curl, flap, bend or float. Supply the drawn tile as its own layer; do not replace it with a generic flat CSS paper rectangle or add simulated writing lines.\n\nUse each named minifigure once within a scene. Use only the named characters and props; no invented extra limbs, duplicated figures or unrelated sets.\n\nFaces must look like real factory pad-printed LEGO faces: simple solid black printed eyes, restrained eyebrow lines and a small printed mouth; printed glasses when the character needs them. No anime pupil highlights, cute rounded cheeks, blush, fleshy facial anatomy or exaggerated cartoon expressions. Do not turn the character into a new cartoon mascot.\n\nCURRENT RAIN-SCENE REQUIREMENT: Phyllis remains COMPLETELY STILL, including her head. Do not split out, turn, tilt, stretch or animate any part of her. No reaction to lightning. Use one complete fixed minifigure in the master. Only rain and a natural lightning layer animate behind the window. Lightning is a slender irregular branching electrical channel with its full lower tail and endpoint visible, like the supplied photographic reference; never substitute a geometric zap icon. Keep the entire discharge within the unobstructed window area without clipping its lower tip or side branches. Rain must visibly move across the dark glass. Lightning uses sparse single flashes, never rapid strobing. Reduced-motion mode disables flashes and movement. This requirement supersedes the earlier experimental head-reaction prototype.\n\n### Interaction and loading semantics\n\nThe scene contains a real ongoing action even without cursor movement. Cursor, touch or keyboard input can add a reaction to the moving prop; a head following the mouse is not the scene's sole animation.\n\n### MANDATORY: PHYSICAL DIRECTION AND CONTINUOUS MOTION\n\nRain always travels DOWN the window, never upward. Steam always rises OUT OF the pot, never descends or gets sucked back into it. A working clock advances CLOCKWISE, never rewinds. Cursor/touch reaction may change only a bounded positive playback speed or a slight lateral drift; it must never reverse physical direction, jump the motion phase or reset a visible effect halfway through its travel. Do not bind cursor position to animation timeline/currentTime, use negative playback rates, change animation-direction, or change a running CSS animation-duration in a way that reinterprets elapsed time and causes apparent backward motion. Keep the timeline continuous when changing speed, for example with a strictly positive Web Animations updatePlaybackRate. Reset looping particles only while invisible at emission/exit boundaries. Check direction while sweeping the cursor rapidly left/right and while leaving the scene, including restoration to normal speed. Cursor motion must cause a clearly visible response even near the center of the scene: use a bounded positive speed increase, a stronger but plausible upper-toy lean, or a noticeable lateral steam/rain drift. Never compensate for an imperceptible response by moving the entire figure, desk or stationary prop support. Check the visible difference at actual phone/desktop display size, not only at full source resolution.\n\n### MANDATORY: INTEGRATED CLOCK AND COUPLED HANDS\n\nThe clock housing, dial, hour ticks, upright, low brick foot and contact shadow belong in the SAME graphite master as the desk. Replace the rejected clean generic CSS/vector clock; do not paste a separate shiny circular icon above a paper stack. Its low foot rests directly on the desktop in that surface's perspective. Preserve normal accessory scale and the scene's exact pencil texture, light and occlusion. Use `references/rejected-pasted-clock.png` as a NEGATIVE example of the earlier floating unrelated object. Leave the dial without baked-in hands; only the two moving needles are separate runtime elements registered to the generated dial's exact center.\n\nBOTH hour and minute hands move continuously CLOCKWISE from ONE shared monotonically increasing simulated time. Their angular-speed ratio is exactly 12:1: when the minute hand makes one full 360-degree revolution, the hour hand advances 30 degrees. On initialization and each demo restart, read the user's LOCAL system time with new Date(). Set m = (hours % 12)*60 + minutes + seconds/60 + milliseconds/60000. Use minute angle = 6*m; hour angle = 0.5*m. Both start at the real system time. The prototype subsequently accelerates shared simulated time; production defaults to real clock speed. Thus 60 simulated minutes produce 360 degrees of minute-hand travel and 30 degrees of hour-hand travel. The short hour hand must never be stationary while the minute hand moves. Cursor acceleration changes their single shared time rate and preserves their phase and 12:1 relationship; never drive them with unrelated timers, mismatched pivots or independent speed changes. Both needles share the same center/pivot and stop together for reduced motion, hidden state and completion. Check both hands at rest, in normal motion and after cursor acceleration, and verify an observed pair of angle changes has ratio 12:1.\n\nDo NOT show a loading caption below the picture or reserve a caption row. This explicit user correction supersedes the previous visible-status requirement. Retain only a visually hidden, accessible status and aria-busy; the scene and subtle indeterminate track inside the reserved image area communicate activity. No invented percentages. Reduced motion keeps the static illustration and accessible status. Stop scene motion when the image is ready or inactive. Offer six transition prototypes separately; do not prescribe a chosen transition yet. Never add an artificial production delay.\n\n## Reject and regenerate if\n\n- any finger, thumb, flexible elbow or deformed arm appears;\n- a visible hand matches the rejected flat-U example rather than the approved molded-part reference, even if the generator calls it a C-shaped LEGO hand;\n- a prop has no support or a valid connection;\n- a desk ornament is oversized relative to the minifigure or its base floats, intersects a paper stack, has the wrong tabletop perspective, or lacks convincing surface contact;\n- an independently pasted prop has a different pencil texture, camera, lighting, outline weight or scale from its surrounding scene;\n- a fixed stand/plinth/cage moves with the animated component, or a moving part detaches from its support at any point;\n- an animation pivot follows a cropped asset's bounding box instead of the actual physical joint/axle;\n- desk/camera/body/scale changes between states;\n- a moving effect is baked into the stationary base;\n- rain rises, steam enters the pot, a clock rewinds, or a cursor-speed change jumps a visible object backward even though the nominal playback rate is positive;\n- a clock housing/foot looks pasted in, floats above its support, or only one hand moves; the hands lose their shared center, clockwise direction or exact 12:1 speed relationship;\n- output is a whole-scene flipbook instead of independently animated layers;\n- registered layers use different canvas ratios or shift the scene during playback;\n- a dark theme reverses faces, hair and paper into a photographic negative;\n- a detached artifact, stray crop, fringe or halo appears outside the intended scene;\n- a visible loading caption appears below the picture, a blank caption row remains, or the accessible status is missing.\n\n## REQUIRED COMPOSED-PREVIEW CHECK BEFORE DELIVERY\n\nCheck the actual assembled prototype, not just the generated PNG. Review it in BOTH light and dark themes, at desktop size and at a narrow phone width. Run the animation through a full cycle and inspect its resting position and both extremes. Verify the table, character, prop foot and camera remain fixed; relative size and contact shadows are credible; overlays respect occlusion; the moving part stays attached; no borders, scraps, halos, negative tones or clipped lightning tips appear. Confirm that rain/steam/telephone/toy motion is visible without moving the pointer, with no visible caption below the picture and a working visually hidden accessible status. Confirm reduced motion retains the illustration and status, and completion/hidden state stops the animation. Do not call an asset finished if only its standalone generation looks correct.\n\n## Prototype selection policy (runtime, not painted artwork)\n\nKeep the existing image slot's dimensions and aspect ratio reserved from the start, so image appearance does not shift the article while scrolling. The actual image becoming ready ends the loader; prototype demo timers must never become artificial production delays. Choose ONE scene per article page and reuse it for all images. The planned default is daily rotation in a configured time zone, with explicit global fixed-scene and article overrides; never draw that choice or a fake progress percentage into the asset. Daily rotation and Hugo integration remain separate work until explicitly implemented.\n\nRecorded from the user's explicit requirements on 2026-10-21; integrated-clock and coupled-hand correction added on 2026-10-22.\n",
  "scenes": [
    {
      "id": "jim-cursor",
      "label": "Вентилятор Джима",
      "interaction": "fan",
      "prompt": "Jim sits still with an authentic simple factory-printed LEGO face. The fan foot, stem and cage are drawn directly into the master on the far right rear corner of the desktop, replacing the pen holder. The flat foot lies flush in the tabletop plane with matching perspective and contact shadow. Empty cage gaps are transparent; a separately drawn three-blade rotor spins behind the fixed grille. Never paste a complete generic fan over the scene.",
      "static_elements": "Jim including head, rigid arms/hands, desk, monitor, mug, plant, tape dispenser, integrated fan foot/stem/cage",
      "moving_elements": "registered rotor behind the transparent grille gaps",
      "anchors_percent_left_top_width_height": {
        "rotor": [
          79.45,
          35.6,
          14,
          14
        ]
      },
      "rotor_source_hub_pixels": [
        632,
        733
      ],
      "rotor_export_crop_pixels": [
        32,
        133,
        1232,
        1333
      ]
    },
    {
      "id": "pam-printer",
      "label": "Принтер Пем",
      "interaction": "printer",
      "prompt": "Pam stands beside a compact LEGO office printer on a cabinet. Small authentic molded C-shaped hands match references/correct-lego-hand.png, no broad flat horseshoe clamps. The completely regenerated printer has an empty wide slot and supported rigid tray. A separate regenerated light LEGO tile with visible thickness slides along the exact oblique tray perspective. No CSS replacement sheet, fake writing or full-scene frame switching.",
      "static_elements": "Pam, rigid C-shaped hands, printer body, desk and output tray",
      "moving_elements": "approved rigid LEGO paper tile sliding along the tray; printer indicator",
      "anchors_percent_left_top_width_height": {
        "paper_channel": [
          48.5,
          48.1,
          25,
          10.5
        ]
      }
    },
    {
      "id": "dwight-papers",
      "label": "Боблхед Двайта",
      "interaction": "toy",
      "prompt": "CURRENT DWIGHT-TOY REQUIREMENT: use the actual Mike Lieberthal Scranton Red Barons baseball bobblehead from The Office, based on `references/lieberthal-series-frame.png`. No generic smiley LEGO head on a tall spring. Show the small baseball collectible in rear/three-quarter rear view: backwards baseball cap, pinstripe jersey marked LIEBERTHAL and 7, dark undersleeves/belt, low oval base, short concealed neck attachment. The collectible is a miniature of the actual prop, not a second full-size LEGO character. Its base and body are drawn directly into the desktop master with consistent camera, pencil texture, contact shadow and supported footprint. Only its separate registered head/cap sways slightly about the neck pivot. The base, body, desk and Dwight remain fixed; no floating head, duplicate head, long exposed spring or uniform scaling to exaggerate motion. The clock scene keeps the same identifiable collectible fully assembled and stationary.",
      "static_elements": "Dwight and his rigid arms, upright authentic 983 hands, all furniture, low oval baseball collectible base/body, LIEBERTHAL 7 jersey, contact shadow and neck pivot",
      "moving_elements": "only registered graphite backwards-cap bobblehead head on short concealed neck connection",
      "anchors_percent_left_top_width_height": {
        "toy_head": [
          81.6,
          39.2,
          8,
          9.5
        ]
      },
      "relative_scale": "small actual Lieberthal baseball collectible, neck/pivot at 85.6% x 47.1%, base/body fixed",
      "support_and_layer_policy": "oval base/body and neck integrated into master, only backwards-cap head moving, short concealed joint",
      "head_pivot_percent": [
        50,
        94
      ]
    },
    {
      "id": "michael-coffee",
      "label": "Телефон Майкла",
      "interaction": "phone",
      "prompt": "Michael sits motionless; his mug base touches the desk at all times. Keep the telephone and handset fixed. Animate only a blinking telephone light and visual ringing waves above the handset. No actual audio. Hands match part 983 with bore UP and side-entry wrist peg, not front-facing coaxial cuffs. Preserve supported mug handle grip.",
      "static_elements": "Michael, desk, hands, mug resting on the desk, telephone and handset",
      "moving_elements": "phone indicator and visual ringing waves",
      "anchors_percent_left_top_width_height": {
        "phone_indicator": [
          88,
          55,
          1.3,
          1.3
        ],
        "ring_origin": [
          84,
          44,
          9,
          10
        ]
      }
    },
    {
      "id": "kevin-chili",
      "label": "Пара над чилі",
      "interaction": "steam",
      "prompt": "Kevin, his rigid C-shaped hands, supported pot, spoon and table stay motionless. The base contains no vapor. Separate graphite steam wisps rise continuously from the pot, with fixed emission anchor.",
      "static_elements": "Kevin, rigid arms and C hands, table, pot and spoon supported by the rim",
      "moving_elements": "two separate wisps of steam",
      "anchors_percent_left_top_width_height": {
        "steam_a": [
          31,
          22,
          14,
          31
        ],
        "steam_b": [
          41,
          21,
          11,
          29
        ]
      }
    },
    {
      "id": "jim-dwight",
      "label": "Офісний годинник",
      "interaction": "clock",
      "prompt": "Jim and Dwight remain still at adjacent desks. Replace the left paper stack beside Jim's monitor with a small supported analogue LEGO tabletop clock drawn DIRECTLY into the same graphite master: low brick foot flush on the desktop, matching perspective, texture and contact shadow. No generic CSS/vector clock, floating foot or paper-stack perch. The master contains housing, foot, light dial, twelve hour ticks and center registration dot, with NO baked-in hands. Animate both needles about that exact center from one continuous simulated time, clockwise, with minute/hour angular speed ratio exactly 12:1; cursor changes their shared rate without changing phase. Read LOCAL user system time on every initialization/restart; use one absolute minute value m with angles 6*m and 0.5*m. Baseball prop on Dwight desk is actual Lieberthal 7 bobblehead, fixed.",
      "static_elements": "Jim, Dwight, both desks, rigid molded hands, props, integrated clock foot/upright/housing/dial/ticks and contact shadow",
      "moving_elements": "both clock hands, sharing one physical pivot and one monotonically increasing simulated time",
      "anchors_percent_left_top_width_height": {
        "clock_dial": [
          7.35,
          46.9,
          6.5,
          6.5
        ]
      },
      "kinematics": {
        "initial_time": "local system Date at initialization and demo restart",
        "minute_angle": "6*m",
        "hour_angle": "0.5*m",
        "speed_ratio": 12,
        "direction": "clockwise",
        "demo_minute_revolution_ms": 8000,
        "production_default": "real time"
      },
      "clock_mechanics": {
        "initial_time": "local system Date at initialization and demo restart",
        "minute_angle": "6*m",
        "hour_angle": "0.5*m",
        "speed_ratio": 12,
        "direction": "clockwise",
        "demo_minute_revolution_ms": 8000,
        "production_default": "real time"
      }
    },
    {
      "id": "phyllis-rain",
      "label": "Дощ за вікном",
      "interaction": "rain",
      "prompt": "Completely still Phyllis at a desk on the left, one large unobstructed LEGO window with dark storm sky on the right. The entire minifigure including head stays in the one stationary master. No head reaction or separate head layer. Only rain and a natural branching lightning raster animate. Preserve the whole main channel, branches and lower endpoint inside the glass with no clipping; never use a geometric zap icon.",
      "static_elements": "the entire Phyllis minifigure including head, rigid arms/hands, desk, mug, computer, full window frame and dark storm sky",
      "moving_elements": "rain streaks and the complete natural branching lightning layer only",
      "anchors_percent_left_top_width_height": {
        "glass": [
          56.6,
          17.5,
          31.9,
          49.4
        ],
        "lightning": [
          59.5,
          18.6,
          28,
          48.4
        ]
      }
    }
  ],
  "master_template": "scene-prompt-template.md",
  "animation_contract": {
    "architecture": "one static master plus separate motion layers; no whole-scene frame switching",
    "canvas": "one fixed width, height, aspect ratio and coordinate system per scene",
    "locked": [
      "desk",
      "camera",
      "character body",
      "non-moving props",
      "scale",
      "perspective"
    ],
    "lego_anatomy": "one rigid molded arm; shoulder axle and wrist stem rotation only; no elbow joint; one C-shaped clip hand without fingers or thumb",
    "status": "No visible caption/row; sr-only status and aria-busy only",
    "theme": "Normal graphite tones in both themes; never invert the whole illustration.",
    "export_check": "No detached scraps, neighboring-frame fragments, fringes or halos. Inspect light and dark backgrounds.",
    "faces": "Authentic simple black pad-printed LEGO eyes and mouth, no anime highlights, cute cheeks or fleshy facial expressions.",
    "rain_scene": "Phyllis is completely stationary. Natural branching lightning with its complete visible lower tip replaces the old icon. No head layer/reaction.",
    "physical_props": "Stationary feet/cases/cages share the master illustration camera and tabletop plane. Animate only isolated actual moving parts."
  },
  "canvas": {
    "width": 384,
    "height": 384
  },
  "hand_reference": "references/lego-hand-983-user.png",
  "selection_policy": "selection.json",
  "printer_tile_export": {
    "source": "prop-sources.json:printer-paper",
    "crop_pixels": [
      174,
      341,
      1457,
      852
    ],
    "native_clip_polygon_percent": [
      [
        0.23,
        56.75
      ],
      [
        33.9,
        0.8
      ],
      [
        99.77,
        20.7
      ],
      [
        99.85,
        36.6
      ],
      [
        71.86,
        99.2
      ],
      [
        0.16,
        74
      ]
    ]
  },
  "required_hand_references": {
    "positive": [
      "references/lego-hand-983-user.png",
      "references/lego-hand-983-3d-side.png"
    ],
    "negative": [
      "references/rejected-coaxial-wrists.png",
      "references/rejected-rounded-hooks.png"
    ],
    "guide": "hand-reference-guide.uk.md"
  },
  "direction_policy": {
    "rain": "down only",
    "steam": "up and out of pot only",
    "clock": "clockwise only",
    "interaction": "strictly positive phase-preserving playback rate; bounded lateral drift; no CSS duration changes"
  },
  "interaction_policy": {
    "speed_range": [
      1,
      5
    ],
    "cursor_motion_min_rate": 2.8,
    "max_lateral_drift_css_px": 36,
    "max_upper_toy_lean_degrees": 10,
    "fixed_support": true,
    "phase_continuity": true
  },
  "runtime": {
    "status": "No visible caption/row; sr-only status and aria-busy only"
  },
  "hand_geometry": {
    "part": "BrickLink 983 / LEGO 3820",
    "shape": "short slotted hollow cylinder, flat cut jaw tips",
    "wrist_to_bore_degrees": 90,
    "desk_orientation": "bore upright, peg enters side perpendicular to forearm",
    "references": [
      "references/lego-hand-983-user.png",
      "references/lego-hand-983-3d-side.png"
    ],
    "negative_references": [
      "references/rejected-coaxial-wrists.png",
      "references/rejected-rounded-hooks.png"
    ]
  }
}
