Commit Graph
951 Commits
Author SHA1 Message Date
Vance IngallsandClaude Opus 4.6 cd7cc648d6 feat(skills): 5 more hand-crafted design.html templates
Add bespoke designs for coral, sakura-chroma, monochrome,
peoples-platform, grove. Palette tokenized. Total hand-crafted: 13.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 13:33:39 -07:00
Vance IngallsandClaude Opus 4.6 1ee518eda9 feat(skills): 6 hand-crafted design.html templates with tokenized palettes
Replace generated designs for vellum, 8-bit-orbit, daisy-days, studio,
soft-editorial, and pink-script with hand-crafted bespoke designs.
Palette hex values tokenized to __PRIMARY__/__SECONDARY__/__TERTIARY__/__ACCENT__
for picker substitution. Each design matches its template's visual character.

Total hand-crafted: 8 (block-frame, broadside, + these 6)
Generated: 26 remaining

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 13:19:37 -07:00
Vance IngallsandClaude Opus 4.6 ce6c1a86d9 fix(skills): wire shader GLSL + renderer into design.html iframe preview
renderDesignIframe() now fills __SHADER_VERTEX__, __SHADER_FRAGMENT__,
and __SHADER_SCRIPT__ with actual GLSL and Three.js renderer from
_sgShaders. Background preset changes in sidebar re-render the design
page with live animated shader + halftone grain + preview canvas.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 12:48:16 -07:00
Vance IngallsandClaude Opus 4.6 47ed0a7053 feat(skills): design.html live preview in original picker sidebar
Add design.html iframe to the right panel of the existing picker.
When a template is selected, renderPreview() now renders the
template's design.html with live token replacement instead of the
old showcase panel. All sidebar controls (palette, type, corners,
density, depth, motion, background) update the design.html in
real-time via doc.write() to the iframe.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 12:45:38 -07:00
Vance IngallsandClaude Opus 4.6 e71e685599 feat(skills): v2 picker with sidebar controls + iframe preview
Replace click-to-cycle with persistent sidebar: palette swatches,
typography pairs, easing presets, corners, density, depth, shader
background — all as clickable options. Design page renders in an
iframe via doc.write() for clean CSS/script isolation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 12:40:18 -07:00
Vance IngallsandClaude Opus 4.6 959d5f7a88 docs: add v2 design picker handoff document
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 12:36:43 -07:00
Vance IngallsandClaude Opus 4.6 9015007bea feat(skills): v2 design picker — page IS the design document
Scaffold for the new picker architecture where the picker page itself
renders as the design.html template. Template selection loads the
template's design.html with live token replacement. Sections are
clickable to cycle palettes, easings, and shader presets.

- Template grid overlay for selection
- Dynamic design.html loading with full token replacement
- Click-to-cycle on palette, motion, and background sections
- Export button downloads the resolved HTML
- Nav rail gets Template + Export buttons on load

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 12:35:50 -07:00
Vance IngallsandClaude Opus 4.6 28de14d7aa feat(skills): mechanical design.html generation for all 34 templates
- Add build-design-templates.py: reads template CSS tokens and generates
  a design.html page styled in that template's visual language
- Classifies each template by scheme (dark/light), border style
  (heavy/hairline/subtle), corner radius, and font families
- Dark templates get dark canvas, accent cover, hairline borders, lowercase
- Heavy border templates get 4px solid, hard shadows, uppercase, tilted cards
- Template fonts flow through to page design (Playfair, Bricolage, etc.)
- Skips hand-crafted designs (block-frame, broadside)
- All 34 templates now produce bespoke DESIGN.html via showOutput()

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 12:23:08 -07:00
Vance IngallsandClaude Opus 4.6 f56d232acd feat(skills): live shader preview in DESIGN.html background section
- Replace CSS gradient mock with canvas that mirrors the full-page shader
- drawImage copies main WebGL canvas to preview canvas each frame
- Add preserveDrawingBuffer to main renderer for cross-browser drawImage
- Replace .bg-preview .mock with canvas#bg-preview-canvas in both templates

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 11:59:13 -07:00
Vance IngallsandClaude Opus 4.6 1d8ace27f0 feat(skills): per-template DESIGN.html with token replacement
- Add design.html templates for block-frame (neo-brutalist) and broadside
  (dark editorial) with __TOKEN__ sentinels for user-configurable values
- showOutput() fetches design.html if available, substitutes palette,
  shader config/GLSL, motion, surface, guidelines, and slide cards
- Falls back to generated output for templates without custom designs
- HTML-escape GLSL before insertion into <pre> tags (< was parsed as HTML)
- Slide cards built from summary.html skeletons, scoped under .ds-slide-frame
- Shader script reads GLSL from stable #vtx-src/#frg-src element IDs
- Animated shader with requestAnimationFrame loop, reads colors from CSS vars

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 11:47:15 -07:00
Vance IngallsandClaude Opus 4.6 8666e5302e feat(skills): template summaries and DESIGN.html output as rendered design system
- Add build-summaries.py: generates compact summary.html per template
  (CSS tokens + unique slide skeletons with {{placeholders}})
- Handle external CSS files (pin-and-paper styles.css)
- Universal slide extraction across all template patterns
  (section.slide, div.slide, deck-stage, s-cover, etc.)
- Scope template CSS under .ds-slide-frame to prevent cascade leaks
- DESIGN.html output renders visually: palette swatches, typography specimen,
  surface card, motion config, shader (live canvas + GLSL in details),
  guidelines, and template slide gallery with scaled thumbnails
- Slide backgrounds use explicit palette colors for reliable rendering
- Strip theme variant overrides but keep base .slide.dark/.slide.orange rules
- Fix duplicate :root extraction (color hex matched as ID selector)
- Fix slide-body falsely extracted as slide type

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 11:25:16 -07:00
Vance IngallsandClaude Opus 4.6 f8c7d69b75 fix(skills): shader bg stability and palette/shader interaction
- Fix shader disappearing on palette change: skip --tp-secondary
  override in finetune CSS when shader is active
- Separate bg mode key from palette key: only rebuild renderer when
  shader preset changes, update colors via uniforms on palette change
- Hero-only shader canvas (remove .specimen-cell from container query)
- Guard against WebGL context loss in render loop
- Add _sgUpdateColors for lightweight palette-to-uniform sync

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 00:20:27 -07:00
Vance IngallsandClaude Opus 4.6 e74792538f fix(skills): guard against webgl context loss in shader renderer
- Check isContextLost() before rendering each frame
- Properly dispose EffectComposer render targets on cleanup
- Prevents cascade errors when too many WebGL contexts exist

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 00:06:12 -07:00
Vance IngallsandClaude Opus 4.6 f5751c716c feat(skills): shader grain, rendering controls, design.html output updates
- Add HalftonePass post-processing for film grain effect
- Grain toggle checkbox with configurable size/scatter/blend
- Add brightness/contrast/saturation rendering controls
- Collapsible Configure panel for shader settings
- Section labels: Colors, Grain, Animation, Camera, Rendering
- design.html output includes rendering + grain config in spec
- design.html Three.js module uses EffectComposer + HalftonePass
- Shader transparency uses CSS var override instead of JS iteration
- Fix background shorthand override (background vs background-color)
- Known issue: too many WebGL contexts from template iframes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-17 00:02:19 -07:00
Vance IngallsandClaude Opus 4.6 92ce483f78 feat(skills): add halftone grain post-processing + third-party attribution
- Add Three.js HalftonePass post-processing to shader backgrounds
  (same technique as shadergradient: dot pattern, RGB channel offset,
  scatter, linear blending)
- Remove in-shader grain in favor of proper post-processing pass
- Add THIRD-PARTY-LICENSES.md attributing beautiful-html-templates
  (MIT, Zara Zhang) and shadergradient (MIT, ruucm/stone-skipper)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 23:00:46 -07:00
Vance IngallsandClaude Opus 4.6 16853a2da8 fix(skills): update modal title and subtitle text
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 13:17:01 -07:00
Vance IngallsandClaude Opus 4.6 a457f35c7b fix(skills): clean design.html output — fetch original template via XHR
- Embed template source from file, not serialized iframe DOM
- Eliminates picker state pollution: no data-tp-orig-* attributes,
  no GSAP inline styles, no font-family !important on every element,
  no density/shader/finetune override styles
- Template HTML is the clean original with --tp-* tokens

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 13:15:35 -07:00
Vance IngallsandClaude Opus 4.6 713d466da6 feat(skills): design.html output with template structure + ui refinements
- Add extract-template-structure.py: extracts slide archetypes,
  component inventory, decoratives, and chrome from templates
- Integrate structure extraction into build-template-picker.py
- design.html spec now includes: template slug, 4-role palette
  (primary/secondary/tertiary/accent), template structure with
  slide types and component atoms
- CSS output includes --tp-* tokens alongside legacy --bg/--fg vars
- Add custom palette option with 4 color pickers
- Add fog shader (volumetric 3D FBM noise on sphere)
- Rename all shader presets (Aurora, Tide, Nebula, Drift, Ember,
  Silk, Prism, Fog, Blob)
- Blob zoom capped at 8, fog zoom 20-40 with default 25
- Create design.html button moved to header bar
- Living Background section label

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 13:00:33 -07:00
Vance IngallsandClaude Opus 4.6 2efc789d83 fix(skills): shader bg, density, animation, typography, and slide fixes
- Shader bg: JS-based transparency matching computed backgroundColor
  against --tp-secondary, only replaces backgrounds not text color
- Deck-stage containers forced to display:block, 1920x1080 explicit
- Slide override uses .active class (template native) with display:none
- Animation runs from parent GSAP, no allow-scripts on iframes
- Animation targets deck-stage > section.active for deck templates
- Density/corners/depth store originals in data attributes, only run
  when picks change, restore cleanly when set to default
- Typography section: vertical layout, no overlap
- Custom bezier initialized to new curve, canvas redraws on phase switch
- Iframe resize handler for hero + specimens
- Remove element count cap on animation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 12:19:09 -07:00
Vance IngallsandClaude Opus 4.6 dc821452eb fix(skills): slide switching, animation, and template overrides
- Use .active class (template native) instead of .tp-active for slides
- Add deck/container reset (width:100%, transform:none) to prevent
  template JS from setting 1200vw widths
- Run GSAP animation from parent page, not inside iframe — no
  allow-scripts needed, template JS can't interfere
- Offscreen-right entrance animation with per-element stagger
- Clean style removal (removeProperty) on animation complete
- Tertiary color: tokenizer now prefers colors near accent hue
- Studio template: wire --c-bg-light to --tp-accent, --c-fg to --tp-accent
- Template default palette reads --tp-* from iframe on load
- Template default typography reads fonts from Google Fonts links
- Font override via JS inline styles on all iframe elements

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 10:29:41 -07:00
Vance IngallsandClaude Opus 4.6 34d8b3d0e4 feat(skills): fine-tune UI improvements and template-aware defaults
- Remove Theme and Structure sections from left panel
- Background options: 2-column grid layout with equal-width cards
- Color palette options: 2-column grid layout
- Template Default palette reads --tp-* vars from selected template iframe
- Template Default typography reads fonts from template's Google Fonts links
- Font override: JS-based inline style on every element (>=32px headline,
  rest body), restores cleanly when switching back to default
- Animation only triggers on easing change or first load, not palette/corner
- Fix bezier-editor deselection, goToTune theme/arch direct assignment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 09:35:07 -07:00
Vance IngallsandClaude Opus 4.6 22523fcfce fix(skills): correct palette swatch ordering to primary/secondary/tertiary/accent
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 01:36:05 -07:00
Vance IngallsandClaude Opus 4.6 a547c7eefb feat(skills): live motion preview with GSAP in template iframes
- Inject GSAP + CustomEase into hero iframe on load
- Selecting an easing animates slide elements from offscreen right
  with staggered entrance using the selected curve
- Custom bezier ease creates CustomEase in iframe context
- Click specimen slide to swap hero and replay animation
- Fix bezier-editor not deselecting when picking preset easing
- Shader background only rebuilds when preset/palette changes,
  not on every easing click (eliminates flash)
- Element reset uses direct set instead of clearProps to avoid flash

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 01:34:18 -07:00
Vance IngallsandClaude Opus 4.6 0a85dbd94c feat(skills): wire fine-tune controls to template iframes
- Palette switching injects --tp-primary/secondary/tertiary/accent into
  all template iframes (hero + specimens) via CSS override
- Corners/density/depth overrides inject border-radius, padding/gap,
  and box-shadow into iframe elements matching card/panel/button classes
- Shader backgrounds render Three.js canvas behind hero and specimen
  iframes, template backgrounds go transparent when shader active
- Specimen grid shows all slides in 5 columns, slide 1 highlighted
- Click any specimen to swap the hero view to that slide
- Migrate all palette refs from background/foreground/muted to
  primary/secondary/tertiary 4-role model
- Add --tp-radius/padding/gap/shadow surface tokens to tokenizer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 01:14:18 -07:00
Vance IngallsandClaude Opus 4.6 985eacc9e0 chore(skills): add vendored deck-stage.js for deck-stage templates
Third-party files from beautiful-html-templates — excluded from
lint/format via lefthook and oxlintrc.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 00:43:08 -07:00
Vance IngallsandClaude Opus 4.6 d121361f71 feat(skills): embed template picker, restore originals with tp tokens
- Remove iframe wrapper from Phase 1 — template grid renders inline
- Per-card iframes load actual template.html for faithful previews
- Restore 34 templates to upstream originals with tp token injection
- Add inject-tp-tokens.py: maps primary/secondary/tertiary/accent to
  --tp-* CSS vars with original values as fallbacks
- Universal slide override (.tp-active) handles all template structures
- 4-role palette model with live switching via iframe CSS injection
- Fine-tune Phase 2 loads template iframe + specimen slide grid
- Exclude vendored deck-stage.js from lint/format checks

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-16 00:42:43 -07:00
Vance IngallsandClaude Opus 4.6 b902f6fe53 docs: add template picker status and handoff document
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 17:32:12 -07:00
Vance IngallsandClaude Opus 4.6 0cf785963e fix(skills): change .phase overflow from hidden to auto for scrolling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 17:27:51 -07:00
Vance IngallsandClaude Opus 4.6 c84dc5b379 fix(skills): make template picker iframe fill phase container and scroll internally
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 17:18:41 -07:00
Vance IngallsandClaude Opus 4.6 cc69c98226 fix(skills): remove manual escape that double-escaped preview_html
json.dumps handles escaping. Manual replace was double-escaping
quotes causing \\\" in SVG attributes. Also strip <script>
tags from extracted preview HTML.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 17:16:56 -07:00
Vance IngallsandClaude Opus 4.6 1afe6a84c9 feat(skills): inline template rendering, tokenized presentations
34 templates copied and tokenized with --tp-* CSS variable contract.
Templates render inline in DOM (no iframes) so shader backgrounds
work behind them and CSS variables cascade naturally.
Removed deck-stage.js files (not needed for inline preview).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 17:12:10 -07:00
Vance IngallsandClaude Opus 4.6 3ad5495fbf feat(skills): inline template rendering replaces iframes
Templates render directly in the DOM via extracted preview_html.
Build script extracts first slide CSS + HTML, scopes with tp-{slug}
class prefix. No more iframes — shader canvases render behind
transparent template content, --tp-* variables cascade naturally.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 17:08:58 -07:00
Vance IngallsandClaude Opus 4.6 0293876ee3 feat(skills): inline template rendering replaces iframes
Templates render directly in the DOM via extracted preview_html.
Build script extracts first slide CSS + HTML, scopes with tp-{slug}
class prefix. No more iframes — shader canvases render behind
transparent template content, --tp-* variables cascade naturally.

Fine-tune overrides set --tp-* directly on the inline container
element instead of injecting styles into an iframe document.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 17:08:27 -07:00
Vance IngallsandClaude Opus 4.6 88162af702 feat(skills): tokenized presentation templates with --tp-* variable contract
Copied 34 templates from beautiful-html-templates into repo.
tokenize-templates.py converts all hardcoded colors and fonts to
reference --tp-bg, --tp-fg, --tp-ac, --tp-mt, --tp-hf, --tp-bf tokens.
1240 color replacements across 34 templates.

Override functions simplified: just set --tp-* tokens, everything
cascades. No more luminance mapping or name heuristics needed.
--tp-bg-layer added for shader background swap support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 17:00:32 -07:00
Vance IngallsandClaude Opus 4.6 cf950155ec feat(skills): name-aware CSS variable mapping for palette overrides
Variables named sun/ember/coral/accent/brand map to accent color.
Variables named paper/canvas/bg/cream map to background.
Variables named ink/text/fg/dark map to foreground.
Variables named mute/gray/line/border map to muted.
Fallback to luminance for unrecognized names.

Fixes biennale-yellow's bright yellow accent being mapped to bg.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:49:12 -07:00
Vance IngallsandClaude Opus 4.6 5d59539873 feat(skills): add Template Default palette that clears all overrides
Selecting palette index 0 clears the finetune-override style in the
template iframe, reverting to the template's native colors/fonts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:46:59 -07:00
Vance IngallsandClaude Opus 4.6 74cf395d17 fix(skills): remove broken specimen grid, keep hero card only for now
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:41:59 -07:00
Vance IngallsandClaude Opus 4.6 946c82a975 fix(skills): restore corners, elevation, and motion preview sections
These were hidden in a display:none div during the component view
restructuring. Restored as visible showcase sections with their
eyebrow labels. Palette and type lead text remain hidden (unused).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:36:39 -07:00
Vance IngallsandClaude Opus 4.6 bb0a6cf379 feat(skills): react template picker with all configuration options
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:29:58 -07:00
Vance IngallsandClaude Opus 4.6 52c840cd92 fix(skills): stable template overrides — cache by slug, filter override style, fix font matching
Clear override CSS before reading originals to prevent drift.
Cache by template slug so all iframes for the same template share
original values. Font var matching tightened to --f-* prefix only.
Removed border-radius override that was breaking template layouts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:13:44 -07:00
Vance IngallsandClaude Opus 4.6 5efe9e1c4a fix(skills): stable template overrides with original-value caching
Cache each iframe's original CSS variable values on first capture,
then always remap from originals to prevent luminance drift on
repeated option changes. Apply overrides to ALL template iframes
(hero + specimen grid). Helper functions extracted for reuse.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:09:21 -07:00
Vance IngallsandClaude Opus 4.6 6553f1a2b3 fix(skills): clear transition overlay when navigating back to template picker
Remove .active from trans-overlay and .selected-exit from cards
in the embedded picker iframe when the back button is clicked.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:06:13 -07:00
Vance IngallsandClaude Opus 4.6 71d24b7415 feat(skills): specimen grid shows template's own slides as component view
Replace generic component cards with the template's actual slides
rendered as small preview thumbnails below the hero card. Each slide
loads in its own iframe, navigated to the correct slide index,
with contextual text injected. Shows up to 6 slides per template.
Removed slide cycling nav from hero card — first slide only.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 16:03:21 -07:00
Vance IngallsandClaude Opus 4.6 a754d71778 feat(skills): show only first slide per template, remove cycling arrows
Phase 1 shows a static first-slide preview for each template.
No arrows, no slide counter, no navigation. Cleaner grid, fewer
bugs from slide system differences. Full slide cycling available
in Phase 2 after selecting a template.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 15:56:55 -07:00
Vance IngallsandClaude Opus 4.6 6852f72e7b fix(skills): use translateY on container for scroll-mode slide navigation
overflow:hidden clips scrollHeight so scrollTop can't reach later
slides. Instead, clip the container to 1080px height and use
transform:translateY to shift the slide stack. No scrolling needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 15:56:16 -07:00
Vance IngallsandClaude Opus 4.6 13d6b22417 fix(skills): split slide navigation into scroll vs visibility modes
Deck-stage (absolute positioned) uses visibility toggling.
All other templates (vertical stacks, flex scrolls) use scrollTop
positioning — slides stay visible, container scrolls to target.
Detect mode by checking if slides have position:absolute.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 15:54:32 -07:00
Vance IngallsandClaude Opus 4.6 39aad53510 fix(skills): use scrollTop/scrollLeft instead of scrollIntoView
scrollIntoView bubbles and scrolls the parent page when cycling
slides inside template iframes. Replace with direct scrollTop/
scrollLeft assignment on the container, body, and documentElement.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 15:52:33 -07:00
Vance IngallsandClaude Opus 4.6 a3948bc066 fix(skills): target all deck-stage sections, not just section.slide
Many deck-stage templates use section classes like s-cover, s-manifesto
instead of .slide. Target deck-stage>section directly and use .active
class for visibility toggling. Clear all active classes before setting
the first one on load.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 15:51:31 -07:00
Vance IngallsandClaude Opus 4.6 d1a279f54b feat(skills): wire all fine-tune options to template iframe
Apply palette (colors by luminance mapping), typography (font family
overrides for display/body CSS vars), corners (border-radius), and
background color to the template iframe on every option change.
Collects all CSS custom properties from template stylesheets and
remaps them based on the selected theme+palette+type+corners.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 15:43:49 -07:00
Vance IngallsandClaude Opus 4.6 6daa1215a3 feat(skills): apply palette changes to template iframe in fine-tune
When a palette is selected in Phase 2, inject CSS variable overrides
into the template iframe using luminance-based color mapping. Same
approach as the template picker's applyPal function.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-15 15:41:00 -07:00