Anchor App Design
Summary
Session focused on the new Anchor app (omega-app): fixed the engine's filter_mode rendering so high-resolution UI and pixel-art game views can coexist in one frame, scaffolded Anchor2/app/, committed the visual identity via a brief and six HTML mockups, and updated the build plan accordingly.
Omega app orientation:
- Read
OMEGA_APP_PLAN.mdplusAnchor2/.claude/CLAUDE.mdandarena/main.luaas the canonical v2 coding reference. - The app replaces a scattered toolchain (Notepad, Explorer, editors, DAW, browser) with one Anchor-engine-rendered workspace; triple-use with a327ex.com (via WASM) and artistic artifacts.
- Flagged architectural open questions before any code: element-as-entity vs lighter widgets, canvas/edit vs vim normal/insert/visual mode hierarchy, testing approach, Track B engine timing.
Filter mode research in anchor.c:
- Global
static int filter_mode = FILTER_ROUGHat line 921, binary smooth/rough toggle. - Mapped three places filter_mode is used: font atlas rasterization (1-bit mono vs 8-bit grayscale at line 1065-1114), font atlas GL filter GL_NEAREST/GL_LINEAR at line 1155, and shape SDF shader uniform
u_aa_width(1.0 smooth / 0.0 rough) set once per frame at lines 9907-9910 and 10319-10321. - Identified three bugs breaking smooth mode: (1) Layer FBO textures hardcoded to
GL_NEARESTat lines 1704-1705 and 1751-1752 so smooth AA inside the FBO is destroyed on upscale; (2) sprite/glyph fragment shader branch at lines 9258-9260 force-snaps UVs to texel centers regardless of filter_mode, defeating linear sampling on glyphs; (3)texture_loadhardcodesGL_NEARESTat lines 828-829. - Also noted: no MSAA (only
SDL_GL_DOUBLEBUFFER), noSDL_WINDOW_ALLOW_HIGHDPI, game size fixed at init, and that the binary global filter mode prevented mixing pixel-art game views inside a smooth UI canvas.
Engine fixes — per-layer and per-font filter_mode:
- User escalated the mixed-mode concern to a blocker: "Let's actually fix this at the source."
- Added
int filter_modefield to theLayerstruct; changedlayer_create(w, h, filter)to set FBO color texture + effect ping-pong buffer filters accordingly. - Added
layer_get_or_create(name, filter); updatedl_layer_createLua binding to accept optional'smooth' | 'rough'argument, defaulting to current global. - Added per-layer
u_aa_widthuniform upload inlayer_renderso smooth and rough layers coexist in the same frame. - Fixed the sprite/glyph shader UV snap: gated
sampleUV = floor(vUV * texSize) + 0.5) / texSizeonu_aa_width == 0.0. In smooth mode glyphs now sample linearly, making sub-pixel text positioning and rotation look right. - Changed
font_load(name, path, size, filter)to take an explicit filter param (previously read the global); updatedl_font_loadto accept optional fourth string arg. - Framework updates:
layer_new(name, filter)andfont_register(name, path, size, filter)pass filter through. Default remained rough for arena back-compat. - Built engine cleanly (cl.exe, Visual Studio 2022), copied anchor.exe to
Anchor2/app/andAnchor2/arena/, verified both with--headless --verifyruns. Arena still renders identically.
Anchor2/app/ scaffolding:
- Created
Anchor2/app/withanchor/framework copy,assets/(copied Quicksand-Regular.ttf, RobotoMono-Regular.ttf, LanaPixel.ttf from existing locations),anchor.exe,run.bat, andmain.lua. main.luademo: 1440×900 smooth vs rough side-by-side — both halves draw identical content (circles, rounded rects, rotated shapes, outlines, star polygon, thin lines at sub-pixel angles, sub-pixel positioned text) to visually prove the fix. User confirmed: "It works beautifully and perfectly."
Visual identity brief creation (Anchor2/app/docs/visual_identity.md):
- User requested a document summarizing what the app will have + pointers for an image-gen model, with explicit preference for "functional but pretty" not "minimalist with huge spacing".
- Answered 5 design questions: mix of cool-neutral + warm-dark palette; mix of bloomberg-extreme + mid-dense density; fonts — "I think my website uses Inter, check yourself" (it uses IBM Plex Sans per live CSS fetch) + NeoVim uses Cascadia Code h11 + Catppuccin Macchiato theme; "themeless but pleasant" as the mood; no brand motif.
- Gathered concrete data: fetched
a327ex.comlive CSS (bg#272727, text#dadada, IBM Plex Sans + Source Code Pro); readC:/Users/adn/AppData/Local/nvim/init.lua(Catppuccin Macchiato + Cascadia Code h11, custom diff highlight colors#424f71/#4b5c55/#604355). - Committed palette: backgrounds bg_deep #1c1e2d / bg_base #24273a / bg_panel #2a2d42 / bg_inset #1f2030 / bg_hover #2f334a / bg_selected #363a54; text primary #dadada / secondary #a5adcb / muted #7f849c / faint #6e738d / heading #e4e6f3; accents from Catppuccin Macchiato (blue #8aadf4, lavender, peach, green, red, yellow, pink, mauve, teal); borders faint #353a50, subtle #3f4358, active = blue.
- Typography: IBM Plex Sans UI, IBM Plex Serif long-form, Cascadia Code mono. Size scale from 10px labels to 32px display.
- Chrome rules: 0-2px radius, 1px borders, no shadows (depth via bg-color only), hover 80ms ease-out.
- Per-agent accent mapping: Oracle mauve, Editor pink, Architect blue, Composer teal, Librarian yellow, Cartographer lavender.
- Recommended image-gen tools as of early 2026: OpenAI gpt-image-1 (best at UI typography), Midjourney v7 (mood boards), Flux 1.1 Pro (local control); noted Claude itself for interactive HTML mockups.
Mockup 1 — main canvas (mockup.html):
- Full app view at 1440×900: 260px left tree-style file browser, canvas with 5 freely-positioned text elements (2nd selected with 1px blue border + 8 handles), 340px Oracle agent panel right, 22px status bar, command palette open with "op" query filtered and yellow-highlighted match chars.
- User feedback: "This looks.............. REALLY GOOD!!!!!!!!!!!!!!"
Tag-based filesystem decision and Mockup 2 (mockup_book_and_game.html):
- User clarified: "the app will have its own filesystem... I explicitly don't want the notion of folders and want instead to have everything tag-based."
- Also flagged: inline tags ("OMEGA plan, re-read" element's tag chips) looked really good, keep that pattern.
- Updated brief's §3 Phase 3 from "Tree view of directories" to "no folders, tags only" with flat file list + active filter chips + two-column tag overview + inline tag chips on file rows.
- Mockup 2 built: book element with inline game view at native 480×270, standalone game view at 520×380 (aspect 1.368, narrower than 16:9 so horizontal letterbox bars visible), identical SVG arena scene in both (player mid-fire, 4 enemies, 2 projectiles, hit impact with particles, score popup, HUD), small "↙ same instance, resized" annotation between them, right sidebar removed, new tag-based left sidebar with
writing ∩ seven-storiesfilter showing 7 matches. - Brief also updated: §7 resolved game-view-border question (corner peach badge only, no full border); added per-element AI candidates (popover / strip / hybrid) as enumerated options.
Mockups 3-6 — agent UX, write mode, code editor, piano roll:
- Four more mockups built in sequence.
mockup_agent_ux_study.html: design-study page with 3-column comparison of variants A (floating popover below selected element), B (inline strip inside element chrome), C (hybrid: global panel + per-element quick-ask via ⌘;). Each column has mini-canvas + description + pros/cons + open question. Footer has reading/recommendation paragraph.mockup_write_mode.html: distraction-free prose, no sidebars, 720px centered column, Plex Serif 16.5px line-height 1.72, real essay "Notes toward a room of one's own", current paragraph has blue left rail + inline ghost suggestion continuing sentence in text_faint with blinking peach caret + [Tab] hint, paragraph-level Editor proposal block with pink left-edge and accept/dismiss/nuke keybinds, whisper topbar + status bar.mockup_code_editor.html: Phase 4 editor showing real Anchor2/app/main.lua syntax-highlighted (mauve keywords, green strings, peach numbers, blue functions, muted comments), file outline in left sidebar, right sidebar Architect panel in blue with plausible exchange about font_register refactor, inline diff hunk showing 8 lines → 4 loop-based replacement with accept/reject keybinds — note: hunk-head alignment is visually broken (acknowledged, fixable at implementation time).mockup_music_piano_roll.html: 2-octave piano roll, chord progression lane at top (Cmaj9 · Am7 · Fmaj7 · G7sus4 with functional labels Iᴹ9/vi⁷/IVᴹ7/V⁷ˢᵘˢ), peach notes, one selected with blue dotted ghost suggestion (voice-leading fix A4), bass voice in peach-yellow, velocity lane below, transport strip with play/stop/record/metronome/BPM/key/loop chips, Composer panel in teal with theory-literate exchange citing user's Zettai Zetsumei analysis.
Design feedback and lock-in:
- User: "I think it's safer for us to the normal agent UX with a screen on the side for now" — committed to variant C (right-side panel) for v1; variants A/B deferred.
- Praised: accept/reject block in write mode ("the cleanest"), tag-based left sidebar, consistent top/bottom status bars, general UI feel, book+game logic, agent UX study's A/B/C presentation format.
- "The writer mode is the most polished... I rarely write focused like that, I need lots of tabs open and so on, but the general UX... looks really nice."
- Piano roll NOT the direction: "I prefer programs like Guitar Pro where they give you the actual sheet music thing, or something like Strudel where it's code based, or a mix of both somehow."
- "Target resolution actually isn't 1920x1080, because I have two monitors, and I'll definitely want the app to take over multiple monitors most of the time."
- "I think there's no need to iterate on these that much more. You have a really good handle on how the UI feels."
Final consolidation:
visual_identity.mdupdated: §2 added "Target hardware" subsection for single-1440×900-now / multi-monitor-eventual; §3 Phase 8 rewrote around sheet-music + code-based composition primary / piano roll fallback; §7 resolved agent UX open question and added multi-monitor + code-editor-diff-bug items; new §8 "Design status (committed)" with locked decisions + explicit non-goals; new §9 "Reference mockups" table indexing all 6 files with descriptions; new §10 "Reusable patterns" documenting accept/reject block + inline element strip + design-study page layout as cross-mode templates.project_anchor_app.mdmemory rewritten: corrected the stale "single 1920×1080, no multi-monitor" claim; added authoritative-references reading order; listed all locked facts; flagged music-not-piano-roll preference; pointed future sessions atdocs/visual_identity.md§8 and the mockup files.MEMORY.mdindex updated: one-liner now reads "visual identity locked, ready for Phase 1 implementation."
Plan file update and relocation:
OMEGA_APP_PLAN.mdwas pre-lock; surgically updated rather than regenerated to preserve original voice.- Added new "Current Status (2026-04-17)" section between Vision and Architecture: lists reading order (plan → visual_identity.md → mockup files → CLAUDE.md), what's done, what's next, and four locked decisions that supersede older text.
- Split Track B into "Done" (per-layer + per-font filter_mode) and "Pending" (HTTP, directory listing, file watching, async).
- Added Implementation notes to Phase 1 milestone with 8-step recommended build order + reference to mockup.html + elements-as-v2-entities note.
- Rewrote Phase 3 around explicit "the app has no folders" statement; removed "drag files between folders"; added reference to mockup_book_and_game.html.
- Rewrote Phase 8 around sheet-music / code-based composition primary; piano roll demoted to fallback; kept piano-roll mockup as layout-grammar reference only.
- File moved:
E:/a327ex/OMEGA_APP_PLAN.md→E:/a327ex/Anchor2/app/plan.md; updated the two remaining references invisual_identity.mdline 172 andproject_anchor_app.md.
Let's start work on the Anchor App. We'll place it in Anchor2/app, and you can read the high-level design in OMEGA_APP_PLAN.md I think. Read it and any other files you think are useful and get acquainted with the idea.
Glob (**/OMEGA_APP_PLAN.md)
OMEGA_APP_PLAN.md
Read (E:\a327ex\OMEGA_APP_PLAN.md)
1 # Anchor — The Omega App
2
3 ## Vision
4
5 The omega app is the next evolution of Anchor: a single application for all creative work, built entirely with the Anchor engine. It replaces the scattered collection of tools (Notepad, NeoVim, Claude Code, Explorer, DAW, browser) with one unified environment owned completely by the user.
6
7 The core insight comes from 4 months of using Claude Code daily: AI is good enough that you stop reading code. Once you stop reading code, you lose ownership of the codebase. Once you lose ownership, you realize what you actually needed to own wasn't the code — it was the *environment*. The code is replaceable. The environment shapes everything.
8
9 ### The Ownership Thesis
10
11 Claude Code's terminal UX nudges you away from ownership. You see only the snippets the AI chose to focus on. There's no physicality, no sense of place in the codebase. The file is never yours. Tools like Cursor have an inherent advantage because the feeling of physicality and place turns out to be important.
12
13 The solution: build your own space. Not just an editor — a complete workspace where every feature exists because it's needed, where AI integration works exactly right, where ownership is absolute because you built everything yourself.
14
15 ### The Felt Sense of Place
16
17 One framing that emerged was the app as a personal MMO — a 2D world where the "city" is the workspace. Different districts for different work, NPCs as AI agents, files as inventory items, quests as commitments. This isn't the practical implementation, but it surfaced something real: **the felt sense of place matters**. The reason code ownership was lost isn't just that code stopped being read — it's that there was never a *place* in it. The code existed nowhere. It was a stream of diffs.
18
19 The practical version keeps the ideas with genuine functional benefit — spatial canvases, persistent AI agents, modes, filesystem-as-database — and drops the fantasy elements. Closer to a meticulously customized Emacs or a Bloomberg Terminal than to Stardew Valley. Dense, keyboard-first, information-rich, every pixel earning its place. But retaining warmth through considered visual design and the fact that it's a place built for oneself.
20
21 ### Triple Use
22
23 Everything built for this app has potentially triple use:
24 1. The development environment (daily work tool)
25 2. The website (a327ex.com rendered by the engine via WASM)
26 3. Artistic artifacts (games, interactive books, music)
27
28 The engine already compiles to WebAssembly. The website becomes an Anchor app. Blog posts are rendered by the engine, not HTML. Interactive elements are trivial because they're already game objects. The text layout system built for the app becomes the text layout system for the website. Everything compounds. Nothing is throwaway.
29
30 This also serves the seven stories project — books merged with games where interactive elements live inline with narrative. Displaying a website and displaying a game are the same thing: putting pixels on the screen in the exact way you want.
... [405 more lines]
Bash (ls E:/a327ex/)
a327ex.com-blog
Anchor
anchor.blot.im
Anchor2
Anchor-lua
Anchor-YueScript
cute_action.mp3
cute_action.wav
Danpenzero
emoji-ball-battles
emoji-ball-battles-generated
interview.md
it-follows
lane-battle
meal_prep.md
music-theory
notes
Null
OMEGA_APP_PLAN.md
Orblike
private
ref1.png
ref2.png
reference
RTFX
server.md
SNKRX
Bash (ls E:/a327ex/Anchor2/)
arena
docs
engine
framework
reference
scripts
Bash (ls E:/a327ex/Anchor2/docs/ E:/a327ex/Anchor2/framework/ E:/a327ex/Anchor2/engine...)
E:/a327ex/Anchor2/docs/:
ENGINE_API.md
ENGINE_API_QUICK.md
FRAMEWORK_API.md
FRAMEWORK_API_QUICK.md
E:/a327ex/Anchor2/engine/:
anchor.obj
build
build.bat
build-web.sh
gl.obj
include
lib
run.bat
run-web.bat
shell.html
src
E:/a327ex/Anchor2/framework/:
anchor
run.bat
run-web.bat
Bash (ls E:/a327ex/Anchor2/framework/anchor/ E:/a327ex/Anchor2/arena/)
E:/a327ex/Anchor2/arena/:
anchor
anchor.exe
ARENA_PROGRESS.md
assets
main.lua
run.bat
E:/a327ex/Anchor2/framework/anchor/:
animation.lua
array.lua
camera.lua
class.lua
collider.lua
color.lua
font.lua
helpers.lua
image.lua
init.lua
input.lua
layer.lua
math.lua
object.lua
physics.lua
shake.lua
spring.lua
spritesheet.lua
timer.lua
Read (E:\a327ex\Anchor2\docs\ENGINE_API_QUICK.md)
1 # Engine API Quick Reference
2
3 Function signatures for all C-to-Lua bindings. See `ENGINE_API.md` for detailed documentation with examples.
4
5 ## Layer & Texture
6
7 ```
8 layer_create(name) -> layer
9 layer_rectangle(layer, x, y, w, h, color)
10 layer_rectangle_line(layer, x, y, w, h, color, line_width?)
11 layer_rectangle_gradient_h(layer, x, y, w, h, color1, color2)
12 layer_rectangle_gradient_v(layer, x, y, w, h, color1, color2)
13 layer_circle(layer, x, y, radius, color)
14 layer_circle_line(layer, x, y, radius, color, line_width?)
15 layer_line(layer, x1, y1, x2, y2, width, color)
16 layer_capsule(layer, x1, y1, x2, y2, radius, color)
17 layer_capsule_line(layer, x1, y1, x2, y2, radius, color, line_width?)
18 layer_triangle(layer, x1, y1, x2, y2, x3, y3, color)
19 layer_triangle_line(layer, x1, y1, x2, y2, x3, y3, color, line_width?)
20 layer_polygon(layer, vertices, color)
21 layer_polygon_line(layer, vertices, color, line_width?)
22 layer_rounded_rectangle(layer, x, y, w, h, radius, color)
23 layer_rounded_rectangle_line(layer, x, y, w, h, radius, color, line_width?)
24 layer_push(layer, x?, y?, r?, sx?, sy?)
25 layer_pop(layer)
26 layer_draw_texture(layer, texture, x, y, color?, flash?)
27 layer_set_blend_mode(layer, mode)
28 layer_stencil_mask(layer)
29 layer_stencil_test(layer)
30 layer_stencil_test_inverse(layer)
... [321 more lines]
Now let me look at the canonical v2 code and framework init to understand the conventions precisely.
Read (E:\a327ex\Anchor2\framework\anchor\init.lua)
1 --[[
2 Anchor 2 — framework initialization.
3
4 Loads all framework modules in dependency order, then returns a function
5 that takes config and initializes the engine + global state. The game's
6 main.lua is expected to define `update(dt)` and `draw()` as globals; the
7 C engine calls these directly each frame.
8
9 Usage (from a game's main.lua):
10 require('anchor')({
11 width = 480,
12 height = 270,
13 title = "My Game",
14 scale = 3,
15 vsync = true,
16 filter = "rough",
17 })
18
19 function update(dt)
20 sync_engine_globals() -- refresh time/frame/etc. mirrors
21 -- your game update (physics is stepped by the engine automatically
22 -- before update() is called; you just consume collision events here)
23 process_destroy_queue() -- drain deferred destruction
24 end
25
26 function draw()
27 -- ... your game draw
28 end
29
30 Framework modules are loaded in this order (dependency-driven):
... [134 more lines]
Read (E:\a327ex\Anchor2\arena\main.lua)
1 --[[
2 arena — Anchor 2 test game.
3
4 Enemies: Orblike seeker (~9203–9514); `physics_enable_collision('enemy','enemy')`.
5
6 Projectiles: Orblike default box 10×4 sensor (~7822), speed 190, spawn spring + flash;
7 hit FX: impact point (~12597–12603), `hit_circle` + `hit_particle` null_arrow-style (~8305–8308).
8
9 Player contact: `hit_circle` + particles at contact (~12577–12584), spring 0.2 + flash (~7310–7319).
10
11 Camera fixed (no follow).
12 ]]
13
14 require('anchor')({
15 width = 480,
16 height = 270,
17 title = "Anchor 2 arena",
18 scale = 3,
19 filter = "rough",
20 })
21
22 print('arena: framework loaded OK')
23
24 -- Palette (cool-dark, high contrast foreground)
25 bg_color = color(16, 16, 24)
26 fg_color = color(235, 235, 235)
27 player_color = color(100, 150, 255)
28 enemy_color = color(220, 80, 80)
29 bullet_color = color(255, 220, 100)
30
... [698 more lines]
I've read the OMEGA_APP_PLAN.md and the Anchor2 CLAUDE.md + arena/main.lua (canonical v2 style). Here's what I've absorbed and where I'd push back / ask before we start writing code.
What I get
- The app is a spatial canvas editor at its core. Documents are canvases of positioned elements (text, image, code, game view). No Markdown, no source/rendered duality — the document is its visual form.
- Two modes: canvas mode (select/move/resize elements) and text-edit mode (inside a text element).
- Triple-use: daily workspace, website renderer via WASM, artistic artifact runtime. Everything compounds.
- AI agents (Oracle → Editor/Architect/Composer/Librarian/Cartographer) sit on top of the whole system, with persistent memory.
- Phase 1 = walking skeleton: hit testing + focus + canvas+elements + text layout + text editing + actions/keybindings + command palette + undo + persistence + hot reload.
- Track B (C engine): HTTP, directory listing, async/callbacks — the long-lead work that unblocks AI.
What I noticed / want to raise before we start
1. Phase 1 is huge. "Walking skeleton" as written contains ~8 substantial subsystems. Any real path through it is going to be incremental — hit testing before text layout, text layout before text editing, etc. Before I propose an ordering I want to know which piece you want to see first. My instinct: start with canvas+element+hit testing (you can see it immediately, and it anchors everything), then text layout inside elements, then text editing, then actions/keybindings, then undo, then persistence. But that's one ordering among several.
2. Element = entity? Arena's style is class() + make_entity(self) for game objects. The app has "elements" (text block, image, code block) with positions, selection state, resize handles. Are these meant to be v2 entities with IDs in the entities map, or a lighter UI-side construct? I'd lean toward entities — the ID discipline carries over cleanly and you get _dead/process_destroy_queue for free. But the app also has widgets (buttons, panels, scroll containers) that probably shouldn't be entities. Want to think about the boundary.
3. Canvas mode vs text mode is a real state machine. It interacts with vim modes (normal/insert/visual) which live inside text-edit mode. There's also app-level modes (Write, Code, Browse). Three layers of mode. Worth being explicit about the hierarchy before we start or it'll get knotted.
4. Tooling/tests. Arena doesn't really have tests — it's a visual game. The app has more logic-heavy surface (text layout, undo/redo operation log, document format round-trip) that's testable in headless mode. Worth deciding upfront whether we write focused headless tests as we go, or just visual-check everything.
5. Track B timing. HTTP + directory listing live in C. Nothing in Phase 1 strictly needs them, but directory listing becomes blocking by Phase 2/3. Do you want me to scope those alongside Phase 1 work, or defer until the UI is usable?
Proposal
Scaffold Anchor2/app/ with the standard layout (copy of framework, main.lua, assets/, its own run.bat like arena has), then do the very first visible thing: an empty canvas that renders, and a single text block element you can click to select (shows selection handles) and drag. That's maybe 150–200 lines and it grounds every later decision in something on screen.
But before I touch anything — which of the above would you like to settle first? Happy to go wherever you want to start.
The most important thing is that, unlike most games we make, we want this app to be high-resolution. I think the engine right now is mostly set to work on "rough" mode, with "smooth" made (anti-aliased) isn't working properly. Do some research through Anchor's C code to see what the state of things is like here.
Let me research the engine's filter modes and rendering setup.
Bash (ls E:/a327ex/Anchor2/engine/src/)
anchor.c
Bash (wc -l E:/a327ex/Anchor2/engine/src/anchor.c)
10482 E:/a327ex/Anchor2/engine/src/anchor.c
Grep (filter_mode|FILTER_MODE|rough|smooth|GL_LINEAR|GL_NEAREST|antialias|anti_alias|MSAA|multisample)
102:// filter_mode is defined later in the font section
346: COMMAND_APPLY_SHADER, // Post-process layer through a shader
828: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
829: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
855: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
856: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
915:// Global filter mode (smooth = anti-aliased, rough = hard pixel edges)
921:static int filter_mode = FILTER_ROUGH; // Default to pixel-perfect
991:// Uses global filter_mode: FILTER_ROUGH = 1-bit mono, FILTER_SMOOTH = 8-bit grayscale AA
1044: font->filter = filter_mode; // Store filter mode font was loaded with
1065: if (filter_mode == FILTER_ROUGH) {
1106: if (filter_mode == FILTER_ROUGH) {
1155: GLint tex_filter = (filter_mode == FILTER_ROUGH) ? GL_NEAREST : GL_LINEAR;
1172: filter_mode == FILTER_ROUGH ? "rough" : "smooth",
1704: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1705: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1751: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1752: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
4837:static int l_set_filter_mode(lua_State* L) {
4839: if (strcmp(mode, "smooth") == 0) {
4840: filter_mode = FILTER_SMOOTH;
4841: } else if (strcmp(mode, "rough") == 0) {
4842: filter_mode = FILTER_ROUGH;
4844: return luaL_error(L, "Invalid filter mode: %s (use 'smooth' or 'rough')", mode);
4849:static int l_get_filter_mode(lua_State* L) {
4850: lua_pushstring(L, filter_mode == FILTER_ROUGH ? "rough" : "smooth");
5510:// Optional shader parameter - if 0/nil, uses passthrough
5528: // Use shader or passthrough
7944: // Iterate through the table by index (array order matters)
8274: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
... [12 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
900 int rows = tex->height / cell_height;
901 sheet->total_frames = sheet->frames_per_row * rows;
902
903 printf("Loaded spritesheet: %s (%dx%d frames, %d total)\n",
904 path, sheet->frames_per_row, rows, sheet->total_frames);
905 return sheet;
906 }
907
908 static void spritesheet_destroy(Spritesheet* sheet) {
909 if (!sheet) return;
910 texture_destroy(sheet->texture);
911 free(sheet);
912 }
913
914 // Font - TTF font with baked glyph atlas
915 // Global filter mode (smooth = anti-aliased, rough = hard pixel edges)
916 // Affects shapes and fonts - must be declared before font code
917 enum {
918 FILTER_SMOOTH = 0,
919 FILTER_ROUGH,
920 };
921 static int filter_mode = FILTER_ROUGH; // Default to pixel-perfect
922
923 #define MAX_FONT_NAME 64
924 #define FONT_ATLAS_SIZE 512
925 #define FONT_FIRST_CHAR 32
926 #define FONT_NUM_CHARS 96
927
928 typedef struct {
929 float x0, y0, x1, y1; // Bounding box in pixels (relative to baseline)
... [170 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
1100
1101 // Copy glyph bitmap to atlas
1102 for (int y = 0; y < glyph_h; y++) {
1103 for (int x = 0; x < glyph_w; x++) {
1104 unsigned char alpha;
1105
1106 if (filter_mode == FILTER_ROUGH) {
1107 // Monochrome: 1-bit packed format
1108 int byte_idx = y * bmp->pitch + (x >> 3);
1109 int bit_idx = 7 - (x & 7);
1110 unsigned char pixel = (bmp->buffer[byte_idx] >> bit_idx) & 1;
1111 alpha = pixel ? 255 : 0;
1112 } else {
1113 // Grayscale: 8-bit per pixel
1114 alpha = bmp->buffer[y * bmp->pitch + x];
1115 }
1116
1117 int atlas_x = pen_x + x;
1118 int atlas_y = pen_y + y;
1119 int atlas_idx = (atlas_y * FONT_ATLAS_SIZE + atlas_x) * 4;
1120
1121 rgba_bitmap[atlas_idx + 0] = 255; // R = white
1122 rgba_bitmap[atlas_idx + 1] = 255; // G = white
1123 rgba_bitmap[atlas_idx + 2] = 255; // B = white
1124 rgba_bitmap[atlas_idx + 3] = alpha; // A = coverage
1125 }
1126 }
1127
1128 // Store glyph info
1129 GlyphInfo* g = &font->glyphs[i];
... [170 more lines]
Now let me look at the shape shaders and AA uniforms.
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
9180 "}\n"
9181 "\n"
9182 "// SDF for line segment / capsule (with round caps)\n"
9183 "float sdf_capsule(vec2 p, vec2 a, vec2 b, float radius) {\n"
9184 " vec2 pa = p - a, ba = b - a;\n"
9185 " float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);\n"
9186 " return length(pa - ba * h) - radius;\n"
9187 "}\n"
9188 "\n"
9189 "// SDF for triangle\n"
9190 "float sdf_triangle(vec2 p, vec2 p0, vec2 p1, vec2 p2) {\n"
9191 " vec2 e0 = p1 - p0, e1 = p2 - p1, e2 = p0 - p2;\n"
9192 " vec2 v0 = p - p0, v1 = p - p1, v2 = p - p2;\n"
9193 " vec2 pq0 = v0 - e0 * clamp(dot(v0, e0) / dot(e0, e0), 0.0, 1.0);\n"
9194 " vec2 pq1 = v1 - e1 * clamp(dot(v1, e1) / dot(e1, e1), 0.0, 1.0);\n"
9195 " vec2 pq2 = v2 - e2 * clamp(dot(v2, e2) / dot(e2, e2), 0.0, 1.0);\n"
9196 " float s = sign(e0.x * e2.y - e0.y * e2.x);\n"
9197 " vec2 d = min(min(vec2(dot(pq0, pq0), s * (v0.x * e0.y - v0.y * e0.x)),\n"
9198 " vec2(dot(pq1, pq1), s * (v1.x * e1.y - v1.y * e1.x))),\n"
9199 " vec2(dot(pq2, pq2), s * (v2.x * e2.y - v2.y * e2.x)));\n"
9200 " return -sqrt(d.x) * sign(d.y);\n"
9201 "}\n"
9202 "\n"
9203 "// SDF for convex polygon (up to 8 vertices)\n"
9204 "float sdf_polygon(vec2 p, vec2 v[8], int n) {\n"
9205 " float d = dot(p - v[0], p - v[0]);\n"
9206 " float s = 1.0;\n"
9207 " for (int i = 0, j = n - 1; i < n; j = i, i++) {\n"
9208 " vec2 e = v[j] - v[i];\n"
9209 " vec2 w = p - v[i];\n"
... [170 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
9870
9871 step++;
9872 game_time += PHYSICS_RATE;
9873 physics_lag -= PHYSICS_RATE;
9874
9875 // Copy current input state to previous for next frame's edge detection
9876 input_post_update();
9877 chords_post_update();
9878 }
9879
9880 // Render at 60Hz (for chunky pixel movement on high-refresh monitors)
9881 if (render_lag >= RENDER_RATE) {
9882 render_lag -= RENDER_RATE;
9883 frame++;
9884 draw_calls = 0; // Reset draw call counter for this frame
9885
9886 // Calculate FPS from dt_history average
9887 if (dt_history_filled) {
9888 double avg_dt = 0;
9889 for (int i = 0; i < DT_HISTORY_COUNT; i++) avg_dt += dt_history[i];
9890 avg_dt /= DT_HISTORY_COUNT;
9891 fps = (avg_dt > 0) ? 1.0 / avg_dt : 0;
9892 }
9893
9894 // Set up orthographic projection (game coordinates)
9895 // Maps (0,0) at top-left to (width, height) at bottom-right
9896 float projection[16] = {
9897 2.0f / game_width, 0.0f, 0.0f, 0.0f,
9898 0.0f, -2.0f / game_height, 0.0f, 0.0f,
9899 0.0f, 0.0f, -1.0f, 0.0f,
... [90 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
10280 physics_process_events();
10281 }
10282
10283 // Call Lua update(dt)
10284 lua_getglobal(L, "update");
10285 if (lua_isfunction(L, -1)) {
10286 lua_pushnumber(L, PHYSICS_RATE);
10287 if (lua_pcall(L, 1, 0, err_handler) != LUA_OK) {
10288 snprintf(error_message, sizeof(error_message), "%s", lua_tostring(L, -1));
10289 fprintf(stderr, "ERROR: %s\n", error_message);
10290 lua_pop(L, 1);
10291 error_state = true;
10292 }
10293 } else {
10294 lua_pop(L, 1);
10295 }
10296
10297 step++;
10298 game_time += PHYSICS_RATE;
10299 input_post_update();
10300 }
10301
10302 if (!running || error_state) break;
10303
10304 // Increment frame before draw so an.frame is correct
10305 frame++;
10306 draw_calls = 0;
10307
10308 // Set up orthographic projection
10309 float projection[16] = {
... [50 more lines]
Let me check layer FBO texture filters and how the layer upscale to screen works.
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
1690 return NULL;
1691 }
1692 layer->command_count = 0;
1693 layer->command_capacity = MAX_COMMAND_CAPACITY;
1694 layer->current_blend = BLEND_ALPHA;
1695
1696 // Create FBO
1697 glGenFramebuffers(1, &layer->fbo);
1698 glBindFramebuffer(GL_FRAMEBUFFER, layer->fbo);
1699
1700 // Create color texture
1701 glGenTextures(1, &layer->color_texture);
1702 glBindTexture(GL_TEXTURE_2D, layer->color_texture);
1703 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
1704 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1705 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1706 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
1707 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
1708
1709 // Attach color texture to FBO
1710 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, layer->color_texture, 0);
1711
1712 // Create stencil renderbuffer (using depth-stencil for wider compatibility)
1713 glGenRenderbuffers(1, &layer->stencil_rbo);
1714 glBindRenderbuffer(GL_RENDERBUFFER, layer->stencil_rbo);
1715 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
1716 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, layer->stencil_rbo);
1717
1718 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
1719 fprintf(stderr, "Layer FBO not complete\n");
... [50 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
810 if (!tex) {
811 stbi_image_free(data);
812 return NULL;
813 }
814
815 tex->width = width;
816 tex->height = height;
817
818 if (headless_mode) {
819 // Headless: keep dimensions but skip GL texture upload
820 tex->id = 0;
821 stbi_image_free(data);
822 return tex;
823 }
824
825 glGenTextures(1, &tex->id);
826 glBindTexture(GL_TEXTURE_2D, tex->id);
827 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
828 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
829 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
830 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
831 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
832 glBindTexture(GL_TEXTURE_2D, 0);
833
834 stbi_image_free(data);
835 printf("Loaded texture: %s (%dx%d)\n", path, width, height);
836 return tex;
837 }
838
839 // Create a texture from raw RGBA pixel data (4 bytes per pixel)
... [50 more lines]
Grep (engine_set_scale|game_width|game_height|window_width|window_height|SDL_CreateWindow)
79:static int game_width = 480;
80:static int game_height = 270;
2737: float scale_x = (float)window_w / game_width;
2738: float scale_y = (float)window_h / game_height;
2743: int scaled_w = (int)(game_width * scale);
2744: int scaled_h = (int)(game_height * scale);
2756: return (gx >= 0 && gx < game_width && gy >= 0 && gy < game_height);
4565: Layer* layer = layer_create(game_width, game_height);
7814: float scale_x = (float)window_w / game_width;
7815: float scale_y = (float)window_h / game_height;
8130: lua_pushinteger(L, game_width);
8135: lua_pushinteger(L, game_height);
8150: float scale_x = (float)window_w / game_width;
8151: float scale_y = (float)window_h / game_height;
8198: game_width = luaL_checkinteger(L, 1);
8199: game_height = luaL_checkinteger(L, 2);
8214:static int l_engine_set_scale(lua_State* L) {
8216: return luaL_error(L, "engine_set_scale must be called before engine_init");
8273: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, game_width, game_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
8288: capture_buffer = (unsigned char*)malloc(game_width * game_height * 4);
8293: printf("Render capture setup: %dx%d -> %s\n", game_width, game_height, capture_output_dir);
8304: glViewport(0, 0, game_width, game_height);
8318: float ndc_x = (cmd->x / game_width) * 2.0f;
8319: float ndc_y = -(cmd->y / game_height) * 2.0f;
8346: glReadPixels(0, 0, game_width, game_height, GL_RGBA, GL_UNSIGNED_BYTE, capture_buffer);
8350: int row_bytes = game_width * 4;
8352: for (int y = 0; y < game_height / 2; y++) {
8354: unsigned char* bot = capture_buffer + (game_height - 1 - y) * row_bytes;
8364: stbi_write_png(filename, game_width, game_height, 4, capture_buffer, game_width * 4);
8380: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, game_width, game_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
... [38 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
8190 // ============================================================================
8191
8192 static bool engine_initialized = false;
8193
8194 static int l_engine_set_game_size(lua_State* L) {
8195 if (engine_initialized) {
8196 return luaL_error(L, "engine_set_game_size must be called before engine_init");
8197 }
8198 game_width = luaL_checkinteger(L, 1);
8199 game_height = luaL_checkinteger(L, 2);
8200 return 0;
8201 }
8202
8203 static int l_engine_set_title(lua_State* L) {
8204 const char* title = luaL_checkstring(L, 1);
8205 strncpy(window_title, title, sizeof(window_title) - 1);
8206 window_title[sizeof(window_title) - 1] = '\0';
8207 // If window already exists, update title immediately
8208 if (window) {
8209 SDL_SetWindowTitle(window, window_title);
8210 }
8211 return 0;
8212 }
8213
8214 static int l_engine_set_scale(lua_State* L) {
8215 if (engine_initialized) {
8216 return luaL_error(L, "engine_set_scale must be called before engine_init");
8217 }
8218 initial_scale = (float)luaL_checknumber(L, 1);
8219 return 0;
... [20 more lines]
Grep (SDL_GL_SetAttribute|SDL_GL_MULTISAMPLE|MSAA|GL_MULTISAMPLE|glEnable.*MULTISAMPLE)
10099: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
10100: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
10101: SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
10104: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
10105: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
10106: SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
10108: SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
10109: SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0);
Grep (draw_text|glyph|GlyphInfo|draw_glyph)
338: COMMAND_GLYPH, // Font glyph with custom UVs (uses flash_color for packed UVs)
914:// Font - TTF font with baked glyph atlas
932:} GlyphInfo;
943: GlyphInfo glyphs[FONT_NUM_CHARS]; // ASCII 32-127
1070: // Pack glyphs into atlas
1076: FT_UInt glyph_index = FT_Get_Char_Index(face, FONT_FIRST_CHAR + i);
1078: if (FT_Load_Glyph(face, glyph_index, load_flags)) {
1079: continue; // Skip failed glyphs
1082: FT_GlyphSlot slot = face->glyph;
1085: int glyph_w = bmp->width;
1086: int glyph_h = bmp->rows;
1089: if (pen_x + glyph_w + 1 >= FONT_ATLAS_SIZE) {
1096: if (pen_y + glyph_h + 1 >= FONT_ATLAS_SIZE) {
1097: fprintf(stderr, "Warning: Font atlas full, some glyphs skipped\n");
1101: // Copy glyph bitmap to atlas
1102: for (int y = 0; y < glyph_h; y++) {
1103: for (int x = 0; x < glyph_w; x++) {
1128: // Store glyph info
1129: GlyphInfo* g = &font->glyphs[i];
1132: g->x1 = g->x0 + glyph_w;
1133: g->y1 = g->y0 + glyph_h;
1136: g->u1 = (float)(pen_x + glyph_w) / FONT_ATLAS_SIZE;
1137: g->v1 = (float)(pen_y + glyph_h) / FONT_ATLAS_SIZE;
1141: pen_x += glyph_w + 1;
1142: if (glyph_h > row_height) row_height = glyph_h;
1149: // Headless: glyph metrics are loaded, skip GL atlas upload
1219: width += font->glyphs[codepoint - FONT_FIRST_CHAR].advance;
1229: return font->glyphs[codepoint - FONT_FIRST_CHAR].advance;
1971:// Record a glyph command (top-left positioned, with custom UVs from font atlas)
1972:// x, y is top-left corner of glyph; w, h is glyph size; UVs are atlas coordinates
... [36 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
4234 // Process a glyph command (font atlas with custom UVs)
4235 // Glyph is positioned at top-left (x, y)
4236 static void process_glyph(const DrawCommand* cmd) {
4237 float x = cmd->params[0];
4238 float y = cmd->params[1];
4239 float w = cmd->params[2];
4240 float h = cmd->params[3];
4241
4242 // Flush batch if texture changes
4243 if (current_batch_texture != cmd->texture_id && batch_vertex_count > 0) {
4244 batch_flush();
4245 }
4246 current_batch_texture = cmd->texture_id;
4247
4248 // Glyph is positioned at top-left (x, y)
4249 float lx0 = x, ly0 = y;
4250 float lx1 = x + w, ly1 = y;
4251 float lx2 = x + w, ly2 = y + h;
4252 float lx3 = x, ly3 = y + h;
4253
4254 // Transform to world coordinates
4255 float wx0, wy0, wx1, wy1, wx2, wy2, wx3, wy3;
4256 transform_point(cmd->transform, lx0, ly0, &wx0, &wy0);
4257 transform_point(cmd->transform, lx1, ly1, &wx1, &wy1);
4258 transform_point(cmd->transform, lx2, ly2, &wx2, &wy2);
4259 transform_point(cmd->transform, lx3, ly3, &wx3, &wy3);
4260
4261 // Unpack color (used for tinting)
4262 float r, g, b, a;
4263 unpack_color(cmd->color, &r, &g, &b, &a);
... [25 more lines]
Read all the filter-mode-related code. Here's what I found.
How filter_mode actually works
It's a single global (static int filter_mode, default FILTER_ROUGH at line 921) that influences exactly three things:
1. Font atlas rasterization (line 1064-1067, 1106-1114) Rough: FreeType bakes 1-bit monochrome glyphs → alpha 0 or 255, no AA ever. Smooth: 8-bit grayscale → proper AA coverage values.
2. Font atlas GL filter (line 1155)
Rough: GL_NEAREST. Smooth: GL_LINEAR. Set once at load time; can't change later without reloading fonts.
3. The shape SDF shader uniform u_aa_width (lines 9907-9910, 10319-10321)
Rough: 0 → alpha = 1.0 - step(0.0, d) (hard edge).
Smooth: 1 → alpha = 1.0 - smoothstep(-aa, aa, d) (1-pixel AA ramp).
Rough also snaps local_p and radius to the pixel grid (lines 9238-9253) so shape edges land on integer pixels.
That's it. Shape SDFs get clean per-fragment AA in smooth mode. Fonts get proper grayscale atlas + linear sampling.
Why smooth mode still looks wrong
Gap 1 — Layer FBO textures are hardcoded to GL_NEAREST. (lines 1704-1705, 1751-1752, also 8274-8275, 8381-8382.) Every layer_new creates an FBO color texture with nearest-neighbor filtering. The layer is rendered at game_width × game_height, then upscaled to window size through screen_shader. With game=480×270, scale=3 you get 3× point-sampling at composite time — so any sub-pixel AA you did inside the FBO gets turned into chunky 3×3 pixel halos. Smooth mode at low game resolution looks worse than rough in practice because you're now seeing fuzzy chunks instead of crisp chunks. This is almost certainly the main "smooth isn't working" symptom.
Gap 2 — the sprite/glyph shader forcibly snaps UVs to texel centers regardless of mode (lines 9258-9260):
glsl
vec2 snappedUV = (floor(vUV * vec2(texSize)) + 0.5) / vec2(texSize);
This is applied to every vType < 2.5 draw — which includes both sprites and glyphs (glyphs share the same sprite branch via custom UVs through process_glyph). So even with a linear-filtered grayscale atlas in smooth mode, every glyph samples at texel centers → you get back to effectively nearest sampling for text. Sub-pixel positioning, rotation, and scaling of glyphs will all jitter in smooth mode. This is a direct bug — the shape branch checks u_aa_width == 0.0 before snapping, the sprite/glyph branch doesn't.
Gap 3 — texture_load hardcodes GL_NEAREST (lines 828-829). Loaded spritesheets/images are always nearest. No filter_mode conditional. Irrelevant for the app if there are no bitmaps, but limits the engine.
Other things worth knowing
- No MSAA. Only
SDL_GL_DOUBLEBUFFERandDEPTH_SIZE=0are set (lines 10099-10109). NoSDL_GL_MULTISAMPLE*. Not strictly needed given SDF-based AA, but that means AA quality caps at what the 1-pixel smoothstep gives you. - No DPI awareness.
SDL_CreateWindowis called withoutSDL_WINDOW_ALLOW_HIGHDPI(line 8509-8512), and the engine usesSDL_GetWindowSize, notSDL_GL_GetDrawableSize. On a high-DPI display the backing store matches logical pixels, so everything looks blurry regardless of filter mode. - Game resolution is fixed at init.
engine_set_game_sizeerrors afterengine_init(line 8195-8197). Layer FBOs are sized fromgame_width × game_heightand aren't recreated on window resize. The composite auto-letterboxes, withif (scale < 1.0f) scale = 1.0f;at line 9944 clamping (so shrinking the window below game size just clips). - Filter mode is one-shot-ish. You can toggle it at runtime, but only the shape shader responds per-frame. Fonts were already baked with the mode at load time. Changing
filter_modeafter the fact and drawing a font loaded under the other mode → mismatch.
What this means for a hi-res app
The cleanest path is to render at native window resolution, which sidesteps Gap 1 entirely (no upscale = FBO filter doesn't matter) and makes smooth mode actually pay off. Concretely:
- App config:
engine_set_game_size(1920, 1080)(or similar),scale = 1,filter = "smooth". On a 1080p monitor: renders at 1:1. On 4K: 2× clean integer scale, still looks fine. - Still need to fix the sprite/glyph UV snap (Gap 2) so text in smooth mode actually gets linear sampling. Small change to the shader.
- Probably want to make layer FBO filter depend on
filter_mode(Gap 1's general fix) so that any in-app camera zoom, effect ping-pong, or post-process shader doesn't re-introduce chunk sampling. Also small. - Optional but large: SDL high-DPI mode (
SDL_WINDOW_ALLOW_HIGHDPI, useSDL_GL_GetDrawableSize, dynamic FBO resize on window resize). Meaningful engine work, but without it the app will look mildly blurry on Windows displays with DPI scaling (which is most modern laptops). Worth deciding whether to do this early — it will be much more painful to retrofit after app code assumes a fixed coordinate system. - Optional: MSAA on layer FBOs if the SDF smoothstep isn't enough. Probably unnecessary at native res.
There's also a deeper question here. The current filter mode is a binary global bake. An app that mixes pixel-art game views (rough) with high-res text canvases (smooth) inside the same frame can't currently do both, because font atlases are baked at one mode and u_aa_width is one uniform per frame. If we want game views as first-class element types in the canvas document, this probably has to become per-layer or per-draw. Worth flagging now.
My recommendation
Do the two shader/filter bug fixes (Gaps 1 and 2, probably under an hour of engine work combined), pick a fixed hi-res game size for the app, defer the DPI + per-layer filter work until we hit the actual pain. Shadow a day of app progress first; revisit rendering when it becomes the limit.
But before any of that: which path do you want?
- A. Fix the bugs + ship the app at fixed hi-res, defer DPI.
- B. Go all the way: hi-DPI window, dynamic FBO resize, per-layer filter mode. Real engine work but unblocks everything.
- C. Something else I'm missing — e.g. you wanted the app to run at pixel-art resolution like the games and I misread "high-resolution" as "crisp on modern monitors"?
There's also a deeper question here. The current filter mode is a binary global bake. An app that mixes pixel-art game views (rough) with high-res text canvases (smooth) inside the same frame can't currently do both, because font atlases are baked at one mode and u_aa_width is one uniform per frame. If we want game views as first-class element types in the canvas document, this probably has to become per-layer or per-draw. Worth flagging now.
This is the most important thing here. Let's actually fix this at the source and make sure that the engine can support this properly. I'm only going to use this app on my own computer, which is a Windows machine with 1920x1080 monitor. I don't need to support arbitrary resolutions other than this, except if I buy new monitors, but I won't for the time being. Just try to fix everything you can regarding this to make the smooth filter mode work, and then draw a bunch of things on the screen using it so I can see how it looks. Download a "normal" font if you can too, because LanaPixel is primarily a pixel font, or maybe search for it in the E:/a327ex, it must have some fonts that are normal and not only pixelated. Any questions?
Let me look at layer_render and the rendering pipeline more carefully to figure out where to inject per-layer filter state.
Grep (layer_render|l_layer_render|process_commands|batch_flush|glUseProgram.*shader_program)
3722:static void batch_flush(void) {
4196: batch_flush();
4244: batch_flush();
4285: batch_flush();
4348:static void layer_render(Layer* layer) {
4365: batch_flush();
4392: glUseProgram(shader_program);
4399: batch_flush();
4413: glUseProgram(shader_program);
4421: batch_flush();
4433: batch_flush();
4441: batch_flush();
4449: batch_flush();
4457: batch_flush();
4465: batch_flush();
4473: batch_flush();
4481: batch_flush();
4489: batch_flush();
4505: batch_flush();
4514: batch_flush();
4522: batch_flush();
4530: batch_flush();
4539: batch_flush();
4544: batch_flush();
5479:static int l_layer_render(lua_State* L) {
5497: layer_render(layer);
5549: glUseProgram(shader_program);
8879: lua_register(L, "layer_render", l_layer_render);
9903: glUseProgram(shader_program);
10315: glUseProgram(shader_program);
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
4348 static void layer_render(Layer* layer) {
4349 batch_vertex_count = 0;
4350 current_batch_texture = 0;
4351 uint8_t current_blend = BLEND_ALPHA; // Start with default
4352 apply_blend_mode(current_blend);
4353
4354 for (int i = 0; i < layer->command_count; i++) {
4355 const DrawCommand* cmd = &layer->commands[i];
4356
4357 // Handle uniform setting commands
4358 // These need to temporarily switch programs, so flush batch first and restore after
4359 if (cmd->type == COMMAND_SET_UNIFORM_FLOAT ||
4360 cmd->type == COMMAND_SET_UNIFORM_VEC2 ||
4361 cmd->type == COMMAND_SET_UNIFORM_VEC4 ||
4362 cmd->type == COMMAND_SET_UNIFORM_INT ||
4363 cmd->type == COMMAND_SET_UNIFORM_TEXTURE) {
4364 // Flush any pending draws before switching programs
4365 batch_flush();
4366 current_batch_texture = 0;
4367
4368 glUseProgram(cmd->shader_id);
4369 switch (cmd->type) {
4370 case COMMAND_SET_UNIFORM_FLOAT:
4371 glUniform1f((GLint)cmd->uniform_location, cmd->params[0]);
4372 break;
4373 case COMMAND_SET_UNIFORM_VEC2:
4374 glUniform2f((GLint)cmd->uniform_location, cmd->params[0], cmd->params[1]);
4375 break;
4376 case COMMAND_SET_UNIFORM_VEC4:
4377 glUniform4f((GLint)cmd->uniform_location, cmd->params[0], cmd->params[1], cmd->params[2], cmd->params[3]);
... [190 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
5479 static int l_layer_render(lua_State* L) {
5480 if (headless_mode) return 0;
5481 Layer* layer = (Layer*)lua_touserdata(L, 1);
5482
5483 // Bind layer's FBO
5484 glBindFramebuffer(GL_FRAMEBUFFER, layer->fbo);
5485 glViewport(0, 0, layer->width, layer->height);
5486
5487 // Clear color and stencil buffers
5488 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
5489 glClearStencil(0);
5490 glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
5491
5492 // Ensure stencil starts disabled
5493 glDisable(GL_STENCIL_TEST);
5494 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
5495
5496 // Process all queued commands
5497 layer_render(layer);
5498
5499 // Ensure stencil is disabled after rendering (in case commands left it enabled)
5500 glDisable(GL_STENCIL_TEST);
5501 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
5502
5503 // Clear command queue for next frame
5504 layer->command_count = 0;
5505
5506 return 0;
5507 }
5508
... [50 more lines]
Grep (l_layer_new|layer_create|typedef.*Layer|} Layer;)
443:} Layer;
1663:static Layer* layer_create(int width, int height) {
4565: Layer* layer = layer_create(game_width, game_height);
4594:static int l_layer_create(lua_State* L) {
8792: lua_register(L, "layer_create", l_layer_create);
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
410 #endif
411
412 // Layer
413 typedef struct {
414 GLuint fbo;
415 GLuint color_texture;
416 GLuint stencil_rbo; // Stencil renderbuffer for masking
417 int width;
418 int height;
419
420 // Effect ping-pong buffers (created on first use)
421 GLuint effect_fbo;
422 GLuint effect_texture;
423 bool textures_swapped; // Which buffer is current result
424
425 // Extra texture bindings for shaders (bound right before apply_shader draws)
426 GLuint extra_texture; // texture to bind to unit 1
427 GLint extra_texture_loc; // uniform location for the sampler
428 bool has_extra_texture;
429
430 // Transform stack (mat3 stored as 9 floats: row-major)
431 // Each mat3: [m00 m01 m02 m10 m11 m12 m20 m21 m22]
432 // Represents 2D affine transform (2x3 used, bottom row is 0,0,1)
433 float transform_stack[MAX_TRANSFORM_DEPTH * 9];
434 int transform_depth;
435
436 // Command queue (deferred rendering)
437 DrawCommand* commands;
438 int command_count;
439 int command_capacity;
... [20 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
1663 static Layer* layer_create(int width, int height) {
1664 Layer* layer = (Layer*)calloc(1, sizeof(Layer));
1665 if (!layer) return NULL;
1666
1667 layer->width = width;
1668 layer->height = height;
1669
1670 // Initialize transform stack with identity matrix at depth 0
1671 layer->transform_depth = 0;
1672 float* m = layer->transform_stack;
1673 m[0] = 1.0f; m[1] = 0.0f; m[2] = 0.0f; // row 0
1674 m[3] = 0.0f; m[4] = 1.0f; m[5] = 0.0f; // row 1
1675 m[6] = 0.0f; m[7] = 0.0f; m[8] = 1.0f; // row 2
1676
1677 if (headless_mode) {
1678 // Headless: no command buffer, no FBO — all draw calls become no-ops
1679 layer->commands = NULL;
1680 layer->command_count = 0;
1681 layer->command_capacity = 0;
1682 layer->current_blend = BLEND_ALPHA;
1683 return layer;
1684 }
1685
1686 // Initialize command queue (fixed size, never grows)
1687 layer->commands = (DrawCommand*)malloc(MAX_COMMAND_CAPACITY * sizeof(DrawCommand));
1688 if (!layer->commands) {
1689 free(layer);
1690 return NULL;
1691 }
1692 layer->command_count = 0;
... [50 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
4550 // Find or create a named layer
4551 static Layer* layer_get_or_create(const char* name) {
4552 // Check if layer already exists
4553 for (int i = 0; i < layer_count; i++) {
4554 if (strcmp(layer_names[i], name) == 0) {
4555 return layer_registry[i];
4556 }
4557 }
4558
4559 // Create new layer
4560 if (layer_count >= MAX_LAYERS) {
4561 fprintf(stderr, "Error: Maximum number of layers (%d) reached\n", MAX_LAYERS);
4562 return NULL;
4563 }
4564
4565 Layer* layer = layer_create(game_width, game_height);
4566 if (!layer) {
4567 fprintf(stderr, "Error: Failed to create layer '%s'\n", name);
4568 return NULL;
4569 }
4570
4571 // Store in registry
4572 layer_registry[layer_count] = layer;
4573 layer_names[layer_count] = strdup(name);
4574 layer_count++;
4575
4576 printf("Created layer: %s\n", name);
4577 return layer;
4578 }
4579
... [30 more lines]
Grep (execute_apply_shader|effect_fbo|effect_texture)
421: GLuint effect_fbo;
422: GLuint effect_texture;
1738: if (layer->effect_texture) glDeleteTextures(1, &layer->effect_texture);
1739: if (layer->effect_fbo) glDeleteFramebuffers(1, &layer->effect_fbo);
1745: if (layer->effect_fbo != 0) return; // Already created
1748: glGenTextures(1, &layer->effect_texture);
1749: glBindTexture(GL_TEXTURE_2D, layer->effect_texture);
1757: glGenFramebuffers(1, &layer->effect_fbo);
1758: glBindFramebuffer(GL_FRAMEBUFFER, layer->effect_fbo);
1759: glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, layer->effect_texture, 0);
1772: return layer->textures_swapped ? layer->effect_texture : layer->color_texture;
3657:static void execute_apply_shader(Layer* layer, GLuint shader) {
3664: src_tex = layer->effect_texture;
3668: dst_fbo = layer->effect_fbo;
4383: // Store for binding during execute_apply_shader
4403: execute_apply_shader(layer, cmd->shader_id);
4406: // (execute_apply_shader toggled textures_swapped, so current is now the destination)
4407: GLuint current_fbo = layer->textures_swapped ? layer->effect_fbo : layer->fbo;
5467: GLuint target_fbo = layer->textures_swapped ? layer->effect_fbo : layer->fbo;
5518: GLuint target_fbo = dst->textures_swapped ? dst->effect_fbo : dst->fbo;
Read (E:\a327ex\Anchor2\framework\anchor\layer.lua)
1 --[[
2 Layer module — procedural API over the engine layer handle.
3
4 Layers are FBOs that accumulate draw commands during the frame. Commands are
5 deferred and processed via layer_render() with GL batching. Composite to the
6 screen with layer_draw().
7
8 Usage:
9 game_layer = layer_new('game')
10 layer_rectangle(game_layer, 100, 100, 50, 30, color)
11 layer_render(game_layer)
12 layer_draw(game_layer)
13
14 State table shape (from layer_new): { name, handle, parallax_x, parallax_y }
15 All layer_* functions below take that table as the first argument `lyr`.
16
17 ---------------------------------------------------------------------------
18 ENGINE NAME CONFLICTS (Lua globals registered by anchor.c)
19
20 The C engine binds the same symbol names to raw engine implementations whose
21 first argument is a C layer pointer (lightuserdata), e.g. layer_rectangle(ptr, ...).
22
23 This file captures those implementations in `eng` at load time, then REPLACES
24 the globals with wrappers whose first argument is a layer state table from
25 layer_new() (field .handle holds the pointer). Wrappers also accept a raw
26 handle for occasional interop.
27
28 After require('anchor.layer'), direct engine-style calls like
29 layer_rectangle(userdata_ptr, x, y, w, h, c) no longer use the C binding
30 unless you passed a lightuserdata: the wrapper treats a non-table first arg
... [241 more lines]
Let me check what fonts are available in the repo and check font_load signature.
Bash (find E:/a327ex -name "*.ttf" 2>/dev/null | head -50)
E:/a327ex/Anchor/framework/assets/LanaPixel.ttf
E:/a327ex/Anchor/reference/love-compare/anchor/assets/LanaPixel.ttf
E:/a327ex/Anchor/reference/love-compare/assets/FatPixelFont.ttf
E:/a327ex/Anchor/reference/love-compare/assets/LanaPixel.ttf
E:/a327ex/Anchor/reference/love-compare/assets/m6x11plus.ttf
E:/a327ex/Anchor/reference/love-compare/assets/Mx437_DOS-V_re_JPN12.ttf
E:/a327ex/Anchor/reference/love-compare/assets/sd_auto_pilot.ttf
E:/a327ex/Anchor/reference/super emoji box/assets/diest64.ttf
E:/a327ex/Anchor/reference/super emoji box/assets/FatPixelFont.ttf
E:/a327ex/Anchor/reference/super emoji box/assets/fusion-pixel-10px-monospaced-latin.ttf
E:/a327ex/Anchor/reference/super emoji box/assets/fusion-pixel-12px-monospaced-latin.ttf
E:/a327ex/Anchor/reference/super emoji box/assets/fusion-pixel-8px-monospaced-latin.ttf
E:/a327ex/Anchor/reference/super emoji box/assets/LanaPixel.ttf
E:/a327ex/Anchor/reference/super emoji box/assets/m6x11plus.ttf
E:/a327ex/Anchor/reference/super emoji box/lun/assets/Quicksand-Regular.ttf
E:/a327ex/Anchor-lua/framework/assets/LanaPixel.ttf
E:/a327ex/Anchor-lua/reference/love-compare/anchor/assets/LanaPixel.ttf
E:/a327ex/Anchor-lua/reference/love-compare/assets/FatPixelFont.ttf
E:/a327ex/Anchor-lua/reference/love-compare/assets/LanaPixel.ttf
E:/a327ex/Anchor-lua/reference/love-compare/assets/m6x11plus.ttf
E:/a327ex/Anchor-lua/reference/love-compare/assets/Mx437_DOS-V_re_JPN12.ttf
E:/a327ex/Anchor-lua/reference/love-compare/assets/sd_auto_pilot.ttf
E:/a327ex/Anchor-lua/reference/super emoji box/assets/diest64.ttf
E:/a327ex/Anchor-lua/reference/super emoji box/assets/FatPixelFont.ttf
E:/a327ex/Anchor-lua/reference/super emoji box/assets/fusion-pixel-10px-monospaced-latin.ttf
E:/a327ex/Anchor-lua/reference/super emoji box/assets/fusion-pixel-12px-monospaced-latin.ttf
E:/a327ex/Anchor-lua/reference/super emoji box/assets/fusion-pixel-8px-monospaced-latin.ttf
E:/a327ex/Anchor-lua/reference/super emoji box/assets/LanaPixel.ttf
E:/a327ex/Anchor-lua/reference/super emoji box/assets/m6x11plus.ttf
E:/a327ex/Anchor-lua/reference/super emoji box/lun/assets/Quicksand-Regular.ttf
... [20 more lines]
Read (E:\a327ex\Anchor2\framework\anchor\font.lua)
1 --[[
2 font — thin wrapper over C font functions.
3
4 Usage:
5 fonts.main = font_register('main', 'assets/LanaPixel.ttf', 11)
6 layer_text(game_layer, "Hello", fonts.main, 100, 50, color)
7
8 A font is a plain table with .name, .size, .height plus query methods.
9 Stays as a simple class/struct pattern for consistent access.
10 ]]
11
12 font = class()
13
14 function font:new(name, path, size)
15 self.name = name
16 self.size = size
17 font_load(name, path, size)
18 self.height = font_get_height(name)
19 end
20
21 function font:text_width(text)
22 return font_get_text_width(self.name, text)
23 end
24
25 function font:char_width(codepoint)
26 return font_get_char_width(self.name, codepoint)
27 end
28
29 function font:glyph_metrics(codepoint)
30 return font_get_glyph_metrics(self.name, codepoint)
... [9 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
3657 static void execute_apply_shader(Layer* layer, GLuint shader) {
3658 // Ensure effect buffer exists
3659 layer_ensure_effect_buffer(layer);
3660
3661 // Determine source and destination based on current state
3662 GLuint src_tex, dst_fbo;
3663 if (layer->textures_swapped) {
3664 src_tex = layer->effect_texture;
3665 dst_fbo = layer->fbo;
3666 } else {
3667 src_tex = layer->color_texture;
3668 dst_fbo = layer->effect_fbo;
3669 }
3670
3671 // Bind destination FBO
3672 glBindFramebuffer(GL_FRAMEBUFFER, dst_fbo);
3673 glViewport(0, 0, layer->width, layer->height);
3674
3675 // Clear destination
3676 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
3677 glClear(GL_COLOR_BUFFER_BIT);
3678
3679 // Disable blending (replace, don't blend)
3680 glDisable(GL_BLEND);
3681
3682 // Use the effect shader
3683 glUseProgram(shader);
3684
3685 // Set standard uniforms
3686 GLint tex_loc = glGetUniformLocation(shader, "u_texture");
... [40 more lines]
Grep (font_load(|l_font_load)
992:static Font* font_load(const char* name, const char* path, float size) {
5010:static int l_font_load(lua_State* L) {
5014: Font* font = font_load(name, path, size);
8828: lua_register(L, "font_load", l_font_load);
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
5005 u0, v0, u1, v1, color, flash);
5006 return 0;
5007 }
5008
5009 // Font Lua bindings
5010 static int l_font_load(lua_State* L) {
5011 const char* name = luaL_checkstring(L, 1);
5012 const char* path = luaL_checkstring(L, 2);
5013 float size = (float)luaL_checknumber(L, 3);
5014 Font* font = font_load(name, path, size);
5015 if (!font) {
5016 return luaL_error(L, "Failed to load font: %s", path);
5017 }
5018 return 0;
5019 }
5020
5021 static int l_font_unload(lua_State* L) {
5022 const char* name = luaL_checkstring(L, 1);
5023 font_unload(name);
5024 return 0;
5025 }
5026
5027 static int l_font_get_height(lua_State* L) {
5028 const char* name = luaL_checkstring(L, 1);
5029 float height = font_get_height(name);
5030 lua_pushnumber(L, height);
5031 return 1;
5032 }
5033
5034 static int l_font_get_text_width(lua_State* L) {
Read (E:\a327ex\Anchor2\engine\build.bat)
1 @echo off
2 setlocal
3
4 cd /d "%~dp0"
5
6 :: Find and run vcvarsall.bat for Visual Studio
7 if exist "C:\Program Files\Microsoft Visual Studio\18\Community\VC\Auxiliary\Build\vcvarsall.bat" (
8 call "C:\Program Files\Microsoft Visual Studio\18\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 >nul 2>&1
9 ) else if exist "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" (
10 call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 >nul 2>&1
11 ) else if exist "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" (
12 call "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64 >nul 2>&1
13 ) else if exist "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" (
14 call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 >nul 2>&1
15 ) else (
16 echo ERROR: Could not find Visual Studio
17 exit /b 1
18 )
19
20 if not exist build mkdir build
21
22 :: Build Lua library if it doesn't exist
23 if not exist lib\lua.lib (
24 echo Building Lua library...
25 if not exist build\lua_obj mkdir build\lua_obj
26 cl.exe /nologo /O2 /W3 /c /I"include/lua" ^
27 include/lua/lapi.c include/lua/lauxlib.c include/lua/lbaselib.c ^
28 include/lua/lcode.c include/lua/lcorolib.c include/lua/lctype.c ^
29 include/lua/ldblib.c include/lua/ldebug.c include/lua/ldo.c ^
30 include/lua/ldump.c include/lua/lfunc.c include/lua/lgc.c ^
... [76 more lines]
Read (E:\a327ex\Anchor2\arena\run.bat)
1 @echo off
2 REM Run arena test game. CWD must be repo root; first arg is the game folder name.
3
4 cd /d "%~dp0.."
5 "%~dp0anchor.exe" arena
6
Here's my concrete plan. Two quick questions before I touch code.
Plan
Engine (anchor.c):
- Add
filter_modefield toLayerstruct — each layer carries its own mode. layer_create(w, h, filter)— FBO color texture usesGL_LINEAR(smooth) orGL_NEAREST(rough). Same for the effect ping-pong buffer.l_layer_createLua binding takes optional'smooth' | 'rough'arg; defaults to the current globalfilter_mode.layer_rendersetsu_aa_widthuniform based on the layer's mode (replaces the current once-per-frame global set). Layers with different modes in the same frame now coexist cleanly.- Fragment shader sprite/glyph branch — the bug fix:
glsl // Current: vec2 snappedUV = (floor(vUV * vec2(texSize)) + 0.5) / vec2(texSize); vec4 texColor = texture(u_texture, snappedUV); // New: vec2 sampleUV = vUV; if (u_aa_width == 0.0) { sampleUV = (floor(vUV * vec2(texSize)) + 0.5) / vec2(texSize); } vec4 texColor = texture(u_texture, sampleUV);In smooth mode, glyphs/sprites sample linearly → actual AA'd text. font_load(name, path, size, filter)— explicit filter per font.Font.filterfield exists already, will actually be honored.l_font_loadaccepts optional fourth arg.
Framework:
layer_new(name, filter)— optional filter string, passed through.font_register(name, path, size, filter)— same.
Out of scope (flagging explicitly):
- Hi-DPI awareness (
SDL_WINDOW_ALLOW_HIGHDPI). 1920×1080 monitor, OS scaling presumably off — don't need it. - MSAA. SDF-edge smoothstep should be enough at 1:1 pixel res.
- Dynamic FBO resize on window resize. Deferred.
Demo app (Anchor2/app/):
- Game size 1440×900, scale=1 (leaves taskbar margin on 1920×1080).
- Side-by-side: left half is a smooth layer with Quicksand + RobotoMono + AA circles / rounded rects / rotated shapes; right half is a rough layer with LanaPixel + pixel-snapped shapes — same content, so you can see the difference directly.
- Uses
Anchor/reference/super emoji box/lun/assets/Quicksand-Regular.ttfandDanpenzero/assets/RobotoMono-Regular.ttf(already on disk — no download needed).
Questions
Default filter mode for new layers — keep the current global
filter_modedefault (= rough unless the app overrides viaset_filter_mode('smooth')before creating layers)? This keeps arena behavior identical without edits. The alternative is defaulting to smooth, which would break arena silently. I'd pick "global-default" unless you object.Game resolution for the demo — 1440×900 with a windowed fit feel, or something else? Happy to go 1600×900 or start fullscreen at 1920×1080.
If both are "go with what you said" I'll just start.
Default to rough yea, and game resolution is fine. Go ahead.
Starting implementation. First the engine changes.
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
8260 }
8261
8262 static int l_engine_render_setup(lua_State* L) {
8263 const char* dir = luaL_checkstring(L, 1);
8264 strncpy(capture_output_dir, dir, sizeof(capture_output_dir) - 1);
8265 capture_output_dir[sizeof(capture_output_dir) - 1] = '\0';
8266 capture_frame_number = 0;
8267
8268 // Create capture FBO at native game resolution
8269 glGenFramebuffers(1, &capture_fbo);
8270 glGenTextures(1, &capture_texture);
8271
8272 glBindTexture(GL_TEXTURE_2D, capture_texture);
8273 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, game_width, game_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
8274 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
8275 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
8276
8277 glBindFramebuffer(GL_FRAMEBUFFER, capture_fbo);
8278 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, capture_texture, 0);
8279
8280 GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
8281 if (status != GL_FRAMEBUFFER_COMPLETE) {
8282 glBindFramebuffer(GL_FRAMEBUFFER, 0);
8283 return luaL_error(L, "Capture FBO incomplete: 0x%x", status);
8284 }
8285 glBindFramebuffer(GL_FRAMEBUFFER, 0);
8286
8287 // Allocate pixel read buffer
8288 capture_buffer = (unsigned char*)malloc(game_width * game_height * 4);
8289 if (!capture_buffer) {
... [5 more lines]
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
3722 static void batch_flush(void) {
3723 if (batch_vertex_count == 0) return;
3724
3725 // Bind texture if we have one (for sprites)
3726 if (current_batch_texture != 0) {
3727 glActiveTexture(GL_TEXTURE0);
3728 glBindTexture(GL_TEXTURE_2D, current_batch_texture);
3729 }
3730
3731 glBindVertexArray(vao);
3732 glBindBuffer(GL_ARRAY_BUFFER, vbo);
3733 glBufferSubData(GL_ARRAY_BUFFER, 0,
3734 batch_vertex_count * VERTEX_FLOATS * sizeof(float),
3735 batch_vertices);
3736 glDrawArrays(GL_TRIANGLES, 0, batch_vertex_count);
3737 glBindVertexArray(0);
3738
3739 batch_vertex_count = 0;
3740 draw_calls++;
3741 }
3742
3743 // Process a rectangle command (SDF-based, UV-space approach)
3744 // The SDF is computed in local quad space using UV coordinates.
3745 // This handles rotation correctly because UV interpolation implicitly
3746 // provides the inverse rotation.
3747 static void process_rectangle(const DrawCommand* cmd) {
3748 float x = cmd->params[0];
3749 float y = cmd->params[1];
3750 float w = cmd->params[2];
3751 float h = cmd->params[3];
... [20 more lines]
Now the edits. Starting with the Layer struct.
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Now layer_create takes a filter mode and honors it on FBO texture creation.
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Now the effect ping-pong buffer.
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
layer_get_or_create needs to carry the filter mode through and use it for the registry lookup too (same-name second-call should match mode).
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
l_layer_create takes an optional filter string.
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Now layer_render sets u_aa_width per layer.
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Now the fragment shader fix — sprite/glyph UV snap is the real bug.
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Now font_load takes an explicit filter param so fonts don't depend on whatever global was last set.
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Now update l_font_load to accept the optional filter string.
Edit (E:\a327ex\Anchor2\engine\src\anchor.c)
The file E:\a327ex\Anchor2\engine\src\anchor.c has been updated successfully. (file state is current in your context — no need to Read it back)
Grep (layer_create(|layer_get_or_create()
1665:static Layer* layer_create(int width, int height, int layer_filter) {
4568:static Layer* layer_get_or_create(const char* name, int layer_filter) {
4582: Layer* layer = layer_create(game_width, game_height, layer_filter);
4612:// layer_create(name [, filter]) — filter is 'smooth' or 'rough'; defaults to global filter_mode.
4613:static int l_layer_create(lua_State* L) {
4628: Layer* layer = layer_get_or_create(name, layer_filter);
Grep (font_load()
994:static Font* font_load(const char* name, const char* path, float size, int font_filter) {
5042:// font_load(name, path, size [, filter]) — filter is 'smooth' or 'rough'; defaults to global filter_mode.
5043:static int l_font_load(lua_State* L) {
5060: Font* font = font_load(name, path, size, font_filter);
Now build the engine.
Bash (cd E:/a327ex/Anchor2/engine && cmd /c build.bat 2>&1 | tail -40)
Microsoft Windows [Version 10.0.26200.8246]
(c) Microsoft Corporation. All rights reserved.
E:\a327ex\Anchor2\engine>
Bash (cd E:/a327ex/Anchor2/engine && ./build.bat 2>&1 | tail -60)
anchor.c
include/stb\stb_image_write.h(776): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(249): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(1044): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(1250): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(2463): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(2457): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
src/anchor.c(2854): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(3132): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(3138): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(3248): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(3257): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(3351): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(3353): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(4590): warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup. See online help for details.
src/anchor.c(5666): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(6551): warning C4244: 'initializing': conversion from 'lua_Number' to 'float', possible loss of data
src/anchor.c(6552): warning C4244: 'initializing': conversion from 'lua_Number' to 'float', possible loss of data
src/anchor.c(8244): warning C4244: '=': conversion from 'lua_Integer' to 'int', possible loss of data
src/anchor.c(8245): warning C4244: '=': conversion from 'lua_Integer' to 'int', possible loss of data
src/anchor.c(8251): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(8310): warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(9564): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(9568): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(9573): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(9577): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(9583): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(9587): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(9593): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
src/anchor.c(9597): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
... [8 more lines]
Engine built cleanly. Now framework updates.
Edit (E:\a327ex\Anchor2\framework\anchor\layer.lua)
The file E:\a327ex\Anchor2\framework\anchor\layer.lua has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\framework\anchor\font.lua)
The file E:\a327ex\Anchor2\framework\anchor\font.lua has been updated successfully. (file state is current in your context — no need to Read it back)
Now set up Anchor2/app/.
Bash (mkdir -p E:/a327ex/Anchor2/app/anchor E:/a327ex/Anchor2/app/assets && cp E:/a327...)
E:/a327ex/Anchor2/app/:
anchor
anchor.exe
assets
E:/a327ex/Anchor2/app/anchor/:
animation.lua
array.lua
camera.lua
class.lua
collider.lua
color.lua
font.lua
helpers.lua
image.lua
init.lua
input.lua
layer.lua
math.lua
object.lua
physics.lua
shake.lua
spring.lua
spritesheet.lua
timer.lua
E:/a327ex/Anchor2/app/assets/:
LanaPixel.ttf
Quicksand-Regular.ttf
RobotoMono-Regular.ttf
Now the run script and the demo main.lua.
Write (E:\a327ex\Anchor2\app\run.bat)
File created successfully at: E:\a327ex\Anchor2\app\run.bat (file state is current in your context — no need to Read it back)
Let me check the color module pattern used in arena.
Read (E:\a327ex\Anchor2\framework\anchor\color.lua)
1 --[[
2 color — mutable RGBA color with HSL conversion helpers.
3
4 Simpler than v1's color class. A color is a plain table {r, g, b, a} with
5 a __call metamethod that returns the packed rgba integer used by drawing
6 functions. No auto-sync between RGB and HSL — HSL is a *conversion*, not a
7 storage format. If you want to modify hue, convert to HSL, modify, convert
8 back.
9
10 Usage:
11 red = color_new(255, 0, 0)
12 red.a = 128 -- set alpha
13 layer_circle(game_layer, x, y, r, red()) -- __call returns packed rgba integer
14
15 -- HSL manipulation:
16 h, s, l = color_to_hsl(red)
17 h = (h + 120) % 360 -- shift hue
18 shifted = color_from_hsl(h, s, l, red.a)
19
20 -- Common operations:
21 copy = color_clone(red)
22 mixed = color_mix(red, blue, 0.5)
23 dark = color_darken(red, 0.5) -- multiply RGB by 0.5
24 light = color_lighten(red, 1.5) -- multiply RGB by 1.5 (clamped)
25 inverted = color_invert(red)
26
27 Design notes:
28 - Colors are plain tables. Modify fields directly: c.r = 100.
29 - Procedural functions (color_mix, color_clone, etc.) return NEW colors,
30 not mutating the input. If you want to mutate, do `c.r = ...` directly.
... [50 more lines]
Now the demo itself.
Write (E:\a327ex\Anchor2\app\main.lua)
File created successfully at: E:\a327ex\Anchor2\app\main.lua (file state is current in your context — no need to Read it back)
Read (E:\a327ex\Anchor2\framework\anchor\color.lua)
80
81 color_mt.__call = function(c)
82 return rgba(
83 math.floor(c.r + 0.5),
84 math.floor(c.g + 0.5),
85 math.floor(c.b + 0.5),
86 math.floor(c.a + 0.5)
87 )
88 end
89
90 --[[
91 color_new(r, g, b, a)
92 Create a new color. Defaults to white (255, 255, 255, 255).
93 ]]
94 function color_new(r, g, b, a)
95 return setmetatable({
96 r = r or 255,
97 g = g or 255,
98 b = b or 255,
99 a = a or 255,
100 }, color_mt)
101 end
102
103 -- Shorter alias — `color(r, g, b, a)` creates a color.
104 -- This makes the v1-style usage `red = color(255, 0, 0)` still work.
105 color = color_new
106
107 --[[
108 color_from_hsl(h, s, l, a)
109 Create a color from HSL values (h: 0-360, s: 0-1, l: 0-1).
... [10 more lines]
Grep (SDL_setenv|chdir|SetCurrentDirectory|argv[1]|engine_args|game_dir)
26:#include <direct.h> // _chdir
29:#include <unistd.h> // chdir
10129: _chdir(game_folder);
10131: chdir(game_folder);
Read (E:\a327ex\Anchor2\engine\src\anchor.c)
10110 int key_len = (int)(eq - arg);
10111 if (key_len >= MAX_CLI_KEY) key_len = MAX_CLI_KEY - 1;
10112 strncpy(cli_args[cli_arg_count].key, arg, key_len);
10113 cli_args[cli_arg_count].key[key_len] = '\0';
10114 strncpy(cli_args[cli_arg_count].value, eq + 1, MAX_CLI_VALUE - 1);
10115 cli_args[cli_arg_count].value[MAX_CLI_VALUE - 1] = '\0';
10116 } else {
10117 strncpy(cli_args[cli_arg_count].key, arg, MAX_CLI_KEY - 1);
10118 cli_args[cli_arg_count].key[MAX_CLI_KEY - 1] = '\0';
10119 // Use "true" as default value for flags without =
10120 strncpy(cli_args[cli_arg_count].value, "true", MAX_CLI_VALUE - 1);
10121 }
10122 cli_arg_count++;
10123 } else if (!game_folder && !zip_initialized) {
10124 game_folder = argv[i];
10125 }
10126 }
10127 if (game_folder) {
10128 #ifdef _WIN32
10129 _chdir(game_folder);
10130 #else
10131 chdir(game_folder);
10132 #endif
10133 printf("Game folder: %s\n", game_folder);
10134 }
10135 }
10136
10137 printf("Loading: main.lua\n");
10138
10139 // Initialize SDL (headless only needs timer, not video/audio/gamepad)
... [10 more lines]
Let me syntax-check the Lua files.
Bash (E:/a327ex/Anchor/reference/love-compare/tools/lua54.exe -e "local f,e=loadfile('...)
main.lua OK
layer.lua OK
font.lua OK
Let me add a --verify path so I can headless-smoke-test.
Edit (E:\a327ex\Anchor2\app\main.lua)
The file E:\a327ex\Anchor2\app\main.lua has been updated successfully. (file state is current in your context — no need to Read it back)
Bash (cd E:/a327ex/Anchor2 && ./app/anchor.exe app --headless --verify 2>&1 | tail -30)
Anchor Engine starting...
Headless mode enabled
Game folder: app
Loading: main.lua
Headless mode: skipping window and graphics initialization
Engine initialized (headless): 1440x900
app: framework loaded OK
Created layer: smooth (smooth)
Created layer: rough (rough)
Created layer: ui (smooth)
Loaded font: heading_smooth (42.0px, smooth) atlas=512x512
Loaded font: body_smooth (16.0px, smooth) atlas=512x512
Loaded font: small_smooth (12.0px, smooth) atlas=512x512
Loaded font: label_smooth (18.0px, smooth) atlas=512x512
Loaded font: heading_rough (22.0px, rough) atlas=512x512
Loaded font: body_rough (13.0px, rough) atlas=512x512
Loaded font: small_rough (11.0px, rough) atlas=512x512
Loaded font: label_rough (13.0px, rough) atlas=512x512
Initialization complete. Press ESC to exit, F11 for fullscreen.
Headless loop starting...
Shutting down...
Headless smoke test passes — every layer and font initializes with its declared filter mode. Let me also refresh the arena's engine copy since the changes are backward-compatible (arena uses no explicit filter → falls back to global = rough).
Bash (cp E:/a327ex/Anchor2/engine/build/anchor.exe E:/a327ex/Anchor2/arena/anchor.exe ...)
Anchor Engine starting...
Headless mode enabled
Game folder: arena
Loading: main.lua
Headless mode: skipping window and graphics initialization
Engine initialized (headless): 480x270
arena: framework loaded OK
Physics initialized (Box2D)
Created layer: game (rough)
Created layer: ui (rough)
Loaded font: main (11.0px, rough) atlas=512x512
Loaded spritesheet: assets/hit1.png (5x1 frames, 5 total)
Initialization complete. Press ESC to exit, F11 for fullscreen.
Headless loop starting...
Shutting down...
Arena still boots cleanly — layers and fonts default to rough (the global), no behavior change.
Summary of changes
Engine (anchor.c):
Layerstruct now carriesfilter_mode.layer_create(w, h, filter)— FBO color texture + effect ping-pong buffer useGL_LINEAR(smooth) /GL_NEAREST(rough).l_layer_create(name, ?filter)— optional'smooth' | 'rough'arg; falls back to global.layer_rendersetsu_aa_widthuniform from the layer's mode so smooth and rough layers render correctly in the same frame.- Fragment shader's sprite/glyph branch now gates UV-center-snap on
u_aa_width == 0.0(the real bug — was nearest-sampling in smooth mode always). font_load(name, path, size, filter)— explicit filter per font (atlas format + sampler);l_font_loadtakes optional 4th arg.
Framework (layer.lua, font.lua):
layer_new(name, filter)andfont_register(name, path, size, filter)pass the filter through.
Demo (Anchor2/app/):
- 1440×900, scale=1, vsync on.
- Side-by-side: left half is a smooth layer, right half a rough layer. Identical draw commands, just different layer/font filter. Circles (radius 3→34), rounded rects (various radii), rotating rounded rect, outlines, rotating triangle, rotating 5-point star, thin lines at sub-pixel angles, sub-pixel-sliding text. Two fonts per side — Quicksand + RobotoMono for smooth, LanaPixel for rough.
Run it with:
E:/a327ex/Anchor2/app/run.bat
When you see it, tell me what looks off and we'll iterate.
It works beautifully and perfectly. What's next?
Glad it looks right. Let me save a project memory so future sessions know the ground we just laid, then propose the next step.
Write (C:\Users\adn.claude\projects\E--a327ex\memory\project_anchor_app.md)
File created successfully at: C:\Users\adn\.claude\projects\E--a327ex\memory\project_anchor_app.md (file state is current in your context — no need to Read it back)
Read (C:\Users\adn.claude\projects\E--a327ex\memory\MEMORY.md)
1 # Memory
2
3 ## Code Style - Emoji Ball Battles (Lua)
4
5 ### Operator spacing convention
6 - `*` and `/`: no spaces (e.g., `a*b`, `x/y`)
7 - `+` and `-`: spaces (e.g., `a + b`, `x - y`)
8
9 Example:
10 ```lua
11 result = a*b + c/d - e
12 velocity = speed*math.cos(angle) + offset
13 ```
14
15 ## Conversion History
16
17 - **Emoji Ball Battles**: Converted from YueScript to Lua (2026-02-24). Archived `.yue` files in `emoji-ball-battles/reference/yue/`. Framework files copied from `Anchor/framework/anchor/`.
18 - **Orblike**: Converted from YueScript to Lua (2026-02-25). Archived `.yue` files in `orblike/reference/yue/`. Framework files copied from `Anchor/framework/anchor/`.
19
20 ## Naming Conventions
21
22 - Always capitalize "Orblike" (capital O) — it's a proper name, not a directory path reference.
23
24 ## Critical Warnings
25 - [Collider divergence](feedback_collider_divergence.md) — Orblike's collider.lua has steering functions not in framework; never overwrite
26
27 ## Workflow
28 - [No permission for ability code](feedback_no_permission_abilities.md) — just implement after showing design, don't ask
29 - [Blog-post interview format](feedback_interview_format.md) — batch ~5 questions per post in interview.md, commit only at end, probe don't debate
30
... [7 more lines]
Edit (C:\Users\adn.claude\projects\E--a327ex\memory\MEMORY.md)
The file C:\Users\adn\.claude\projects\E--a327ex\memory\MEMORY.md has been updated successfully. (file state is current in your context — no need to Read it back)
What I'd do next
We're at Phase 1 Foundation in the plan. It has maybe eight sub-systems; the one I'd pick first is canvas + element + hit testing, because it's the spatial primitive everything else sits inside and it gives you something clickable on day one.
Concrete first slice:
- Full-screen smooth canvas (bg only, no doc yet).
- One hard-coded text element at e.g. (100, 100, 400, 80) with static text rendered inside it.
- Click element → selected: thin border + 4 corner resize handles.
- Drag body → move. Drag handle → resize. Click empty space → deselect.
- No typing, no word wrap, no text editing — just the canvas interaction model.
- ~150 lines of Lua. Exercises: hit testing, focus/selection state, mouse capture during drag, layer-based redraw of UI vs canvas content.
After this lands and you've poked at it, the natural follow-ups are either text layout (word wrap inside the element) or a second element to start testing select/multiselect/layering.
One architecture question I want your input on
Are elements entities? Arena's pattern is class() + make_entity(self) → registered in the entities map, with _dead / process_destroy_queue cleanup. App elements (text block, image, code block, game view) map to that cleanly — IDs become stable handles for selection lists, undo history, cross-references — even though they're less "game-like" (no per-frame physics, mostly idle until mouse touches them). The per-frame update overhead is negligible.
My lean: yes, use the entity pattern. It buys us the id discipline you already established for v2 without any special-casing for UI objects. But it's worth flagging because "UI widgets as entities" is mildly unusual and worth a sanity check before I commit to it in the first file.
Alternatives if you'd rather not start the app proper yet
- Engine Track B (HTTP client, directory listing, file stat, async/callbacks). Long lead time per OMEGA plan; unblocks all AI integration later. Pure C work, no app visible progress.
- Design doc first — write up Phase 1's state machines (canvas/text-mode + selection state + modes hierarchy) before any code. Good if you want to front-load decisions; slower to first pixels.
Which path? And if app-proper: elements-as-entities, yes/no?
I think it's prudent to first generate the visual identity of the app. You can't generate images, right? Could you generate a file that gives a summary of everything the app will have and pointers to what the model I use to generate the images can go from? I want the app to feel functional but pretty enough. It doesn't need to be one of those minimalistic designs that has like 2 buttons and huge spacing everywhere. Ask me questions if you must, because we have actually never discussed what the app should look like in any detail I think. Also, what's the best model currently for generating images and/or HTML previews of such designs?
Right, I can't generate images directly — but I can write HTML/CSS mockups you can open in a browser (via the frontend-design skill), and I can write detailed prompt briefs for image-gen tools. The brief document you're asking for is absolutely the right first move.
Best current tools for this
- Static image mockups / screen mockups with readable UI text: OpenAI's
gpt-image-1(ChatGPT's built-in image gen as of late 2025) — currently the best at rendering typography and UI text legibly. Flux 1.1 Pro is a strong open-weight alternative, especially if you want local control. - Mood boards / aesthetic direction, non-literal: Midjourney v7. Still the aesthetic peak, but weaker at pixel-accurate UI.
- Interactive HTML/CSS previews of actual layouts: me. Highest fidelity for a workspace app because it's actually interactive — you can hover, resize, click around. I'd recommend pairing this with static mood boards from Midjourney.
Order of operations I'd suggest: mood board (Midjourney, 5-10 images) → brief doc consolidating direction → HTML mockup (me) → static screen mockups (gpt-image-1) → final Lua implementation.
Before I write the brief
I need answers on aesthetic direction — we've genuinely never discussed this, and the brief is only as good as the inputs. Five grouped questions:
1. Theme and base palette Dark, light, or both switchable? If dark (most likely given your games), which flavor:
- Cool neutral — grays + blue-gray accents (Zed, Helix default, Linear app)
- Warm dark — deep browns/greens, soft contrast (Gruvbox, Everforest)
- High-contrast dark — near-black bg, saturated accent colors (Dracula, One Dark Pro, Tokyo Night)
- Deep purple/navy with pastel accents (Rose Pine, Catppuccin Mocha)
- Monochrome — near-grayscale, color only for meaning (Solarized-style minimalism)
2. Density target
- Bloomberg-extreme: every pixel loaded, tiny fonts, multi-panel, minimal whitespace
- Mid-dense: Emacs/Sublime default — visible structure, 2-6px padding, compact but comfortable
- Slightly lighter: Zed/Fleet — some chrome, some breathing room, still non-minimalist
Plan document says "dense, keyboard-first, every pixel earning its place" — sounds like option 1 or 2 but I want to confirm whether you want Cogmind-tight or just non-minimalist-comfortable.
3. Typography Demo has Quicksand (rounded humanist sans) + RobotoMono. Placeholders or keep? Worth-considering alternatives:
- UI/body: Inter, IBM Plex Sans, Space Grotesk, Berkeley Mono, something more personal/character-ful like Cartograph CF or Commit Mono
- Code/prose: JetBrains Mono, Berkeley Mono, Iosevka, Commit Mono
- Heading: any serif you want (Garamond, PT Serif, Charter), or just large sans
4. Mood words + reference apps Pick 3-5 words for the feeling from: scholarly, crafted, cozy, tinkering, serious, playful, analog, mechanical, austere, hand-built, retro, technical, warm, precise, dense, cartographic, library-like — or add your own.
And any specific apps/games whose visual identity you'd want to borrow from? Candidates worth considering: Cogmind, Moonring, Disco Elysium UI, Into the Breach HUD, Tinycastle, SNKRX HUD overlays, old Sublime Text, Helix editor, Zed, Fleet, Warp terminal, Raycast, Craft.do, Obsidian, Logseq, Tana, Roam, Noteplan, Arc browser, Readwise, Are.na.
5. The "Anchor" name Does it suggest any motif to you — nautical/rope, the anchor symbol, weight/grounding, underlining? Or is it just a name and we design the look independently? (I'd lean independent, but I want to check — "anchor" is visually suggestive and maybe that's intentional.)
Once you answer these, I'll write Anchor2/app/docs/visual_identity.md — a self-contained brief that covers: what the app is, all the UI surfaces (mapped from the 10 phases), aesthetic direction as decided, specific image-gen prompts for mood board and key screen mockups, and a list of reference images to pull in. That file becomes the durable source of truth for every visual decision going forward.
- Mix of cool neutral and warm dark.
- Mix of bloomberg-extreme and mid-dense.
- I think my own website (a327ex.com) uses Inter, but you may want to check it yourself. You can check the font I use in my NeoVim config for code. Otherwise you can default to reasonable defaults.
- I'm not good at this. If you look at SNKRX and my current websites (a327ex.com, anchor.blot.im), they all have a "themeless" feel to them, it doesn't feel like anything. I'm not sure if that codes as minimalistic or what, but I just like to keep things relatively functional and simple visually, while looking pleasant.
- No, no motifs here.
Let me gather concrete data from your sites and NeoVim config before writing anything.
Bash (find "C:/Users/adn/AppData/Local/nvim" -type f 2>/dev/null | head -20; echo "---...)
C:/Users/adn/AppData/Local/nvim/init.lua
C:/Users/adn/AppData/Local/nvim/lazy-lock.json
---
Read (C:\Users\adn\AppData\Local\nvim\init.lua)
1 -- Start in project root
2 vim.api.nvim_set_current_dir("E:/a327ex")
3
4 -- Neovide settings
5 if vim.g.neovide then
6 vim.g.neovide_cursor_animation_length = 0
7 vim.g.neovide_cursor_trail_size = 0
8 vim.g.neovide_scroll_animation_length = 0
9 vim.o.title = true
10 vim.o.titlestring = "NeoVim"
11 vim.o.guifont = "Cascadia Code:h11" -- adjust size (h11, h10, h9, etc.)
12 end
13
14 -- Bootstrap lazy.nvim
15 local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
16 if not (vim.uv or vim.loop).fs_stat(lazypath) then
17 vim.fn.system({
18 "git", "clone", "--filter=blob:none",
19 "https://github.com/folke/lazy.nvim.git",
20 "--branch=stable", lazypath,
21 })
22 end
23 vim.opt.rtp:prepend(lazypath)
24
25 -- Leader key (must be set before lazy)
26 vim.g.mapleader = ','
27
28 vim.g.loaded_netrw = 1
29 vim.g.loaded_netrwPlugin = 1
30
... [449 more lines]
Got NeoVim data: Cascadia Code h11 for code, Catppuccin Macchiato theme (cool navy base with warm pastel accents). Checking the websites now.
Bash (ls E:/a327ex/a327ex.com-blog/ 2>/dev/null | head -30; echo "---"; ls E:/a327ex/a...)
drafts
images
pages
posts
---
context
files
logs
notes
pages
Bash (find E:/a327ex/a327ex.com-blog -maxdepth 2 -name ".css" -o -name ".html" 2>/de...)
E:/a327ex/a327ex.com-blog/drafts/it_follows.txt.preview.html
E:/a327ex/a327ex.com-blog/drafts/the_haircutter.txt.preview.html
---
Bash (ls E:/a327ex/a327ex.com-blog/pages/ 2>/dev/null; echo "---"; ls E:/a327ex/anchor...)
home.txt
---
home.md
These are Blot blogs (templated by the platform, not custom CSS). Let me fetch the live sites to see what they actually render as.
ToolSearch
[
{
"type": "tool_reference",
"tool_name": "WebFetch"
}
]
WebFetch (https://a327ex.com)
# Visual Design Analysis of a327ex.com
Based on the provided HTML content, I can describe the site's visual approach:
**Color Scheme & Typography:**
The page uses a clean, high-contrast design with what appears to be dark text on a light background (standard web defaults). No explicit CSS color declarations are visible in the provided excerpt, suggesting the site relies on browser defaults or external stylesheets not shown.
**Layout & Spacing:**
The design follows a minimalist aesthetic with generous whitespace. Content is organized hierarchically:
- A simple header with the site name and navigation links
- Key projects/links presented as a concise list
- Footer contact information separated by horizontal rules (`* * *`)
**Visual Elements:**
- Horizontal dividers (represented as `* * *`) create subtle segmentation
- Minimal use of visual accents—primarily text-based navigation
- Link styling appears standard (underlined or colored hyperlinks)
**Overall Mood:**
The site embodies a distinctly **minimalist** and **utilitarian** aesthetic. It prioritizes content clarity and accessibility over decorative elements. The sparse layout suggests a developer's portfolio that values function over form—appropriate for a game developer/writer sharing work and contact information.
This approach is characteristic of many indie developer sites that favor readability and direct navigation.
WebFetch (https://a327ex.com/)
# Visual Design Analysis
Based on the provided content, I cannot perform a detailed visual design analysis because **the source material contains only HTML structure and navigation elements—no CSS declarations are visible**.
The page shows:
- A navigation-heavy layout with extensive link listings
- Minimal styling information (no font-family, color, spacing values, borders, or shadows are disclosed)
- A content section describing the site's purpose as a devlog
## What Can Be Inferred
The site appears to prioritize **content organization and accessibility** over visual flourish. The lengthy navigation suggests a documentation-focused aesthetic rather than a polished marketing presence.
## Limitations
Without access to actual CSS files or visual rendering, I cannot provide:
- Specific color values (background, text)
- Font family declarations
- Spacing metrics
- Shadow or border details
- Comparative analysis to a327ex.com's design
**To complete this analysis**, you would need to share the site's CSS stylesheet or a screenshot showing the rendered appearance.
WebFetch (https://a327ex.com)
I cannot provide the HTML content of the `<head>` tag because it is not included in the web page content you've shared. The material provided only contains the visible body content of the page, which lists navigation links, featured projects, and contact information.
To access the `<head>` section (including stylesheet links and style tags), you would need to either:
- View the page source directly in your browser
- Share the complete HTML document including the head section
Bash (curl -s https://a327ex.com | head -80 2>&1)
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>openresty</center>
</body>
</html>
Bash (curl -s -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https:...)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> - a327ex</title>
<meta name="description" content="It Follows (Dec 2025, STORY) SNKRX (May 2021, Steam, GAME) BYTEPATH (Feb 2018, Steam, GAME) Read my devlog Read my blog Follow me on steam And">
<!-- Begin proprietary meta tags for sharing on social media -->
<meta property="og:title" content=" - a327ex">
<meta property="og:description" content="It Follows (Dec 2025, STORY) SNKRX (May 2021, Steam, GAME) BYTEPATH (Feb 2018, Steam, GAME) Read my devlog Read my blog Follow me on steam And">
<meta property="og:type" content="website">
<meta property="og:url" content="https://a327ex.com/">
<!-- End proprietary meta tags for sharing on social media -->
<link rel="alternate" type="application/rss+xml" title="a327ex" href="https://a327ex.com/feed.rss">
<link rel="icon" href="https://cdn.blot.im/blog_13d6ee76e82c4da8b3e12f8748579ad0/_avatars/4582df12-c96a-43bd-acaf-7cfef8e17f1f.jpg" type="image/x-icon">
<link rel="stylesheet" href="https://cdn.blot.im/template/d5/ee/1ac36782338efe961bc12c315da0/style.css">
</head> <body>
<div class="header alignment-justified position-top">
<a id="logo" href="/">
<!--
<img class="avatar " src="https://cdn.blot.im/blog_13d6ee76e82c4da8b3e12f8748579ad0/_avatars/4582df12-c96a-43bd-acaf-7cfef8e17f1f.jpg" alt="a327ex"/>
-->
a327ex
</a>
<div class="nav">
<a href="/" title=""></a>
... [20 more lines]
Bash (curl -s -A "Mozilla/5.0" "https://cdn.blot.im/template/d5/ee/1ac36782338efe961bc...)
<persisted-output>
Output too large (60.5KB). Full output saved to: C:\Users\adn\.claude\projects\E--a327ex\776d994d-07fd-4a03-a799-680a4b64e07c\tool-results\bcn2d8ptx.txt
Preview (first 2KB):
div,p,section{position:relative;overflow:visible}.image{overflow:visible!important}.wide{overflow:visible!important}.zoom-overlay-open .left,.zoom-overlay-open .right{z-index:auto}img[data-action=zoom]{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in}.zoom-img,.zoom-img-wrap{position:relative;z-index:666;-webkit-transition:all .3s;-o-transition:all .3s;transition:all .3s}img.zoom-img{cursor:pointer;cursor:-webkit-zoom-out;cursor:-moz-zoom-out}.zoom-overlay{z-index:420;background:inherit;position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none;filter:"alpha(opacity=0)";opacity:0;-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}.zoom-overlay-open .zoom-overlay{filter:"alpha(opacity=100)";opacity:1}@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(https://cdn.blot.im/plugins/katex/files/KaTeX_AMS-Regular.woff2) format("woff2"),url(https://cdn.blot.im/plugins/katex/files/KaTeX_AMS-Regular.woff) format("woff"),url(https://cdn.blot.im/plugins/katex/files/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(https://cdn.blot.im/plugins/katex/files/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(https://cdn.blot.im/plugins/katex/files/KaTeX_Caligraphic-Bold.woff) format("woff"),url(https://cdn.blot.im/plugins/katex/files/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(https://cdn.blot.im/plugins/katex/files/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(https://cdn.blot.im/plugins/katex/files/KaTeX_Caligraphic-Regular.woff) format("woff"),url(https://cdn.blot.im/plugins/katex/files/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(https://cdn.blot.im/plugins/katex/files/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(https://cdn.blot.im/plugins/katex/files/KaTeX_Fraktu
...
</persisted-output>
Bash (curl -s -A "Mozilla/5.0" "https://cdn.blot.im/template/d5/ee/1ac36782338efe961bc...)
padding-left:2em;text-align:left}body
display:block;width:500px;padding:0;max-width:100%;box-sizing:border-box;margin:1em 0;border-radius:5px;border:1px solid #e1e8ed;padding:32px 16px 32px;background:#fff;color:#aaa;font:normal 12px/1.33 "Helvetica Neue",sans-serif}blockquote.twitter-tweet p
color:#292f33;font:inherit;margin:36px 0 12px}@font-face
font-family:'Source Sans';font-style:normal;font-weight:200;src:url(https://cdn.blot.im/fonts/source-sans/extra-light.eot?version=62cf54&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/extra-light.eot?version=62cf54&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/extra-light.woff?version=d1e4ab&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/extra-light.ttf?version=b41c25&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/extra-light.otf?version=945bbe&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:italic;font-weight:200;src:url(https://cdn.blot.im/fonts/source-sans/extra-light-italic.eot?version=819d55&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/extra-light-italic.eot?version=819d55&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/extra-light-italic.woff?version=32f94b&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/extra-light-italic.ttf?version=55264f&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/extra-light-italic.otf?version=fd1c0b&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:normal;font-weight:300;src:url(https://cdn.blot.im/fonts/source-sans/light.eot?version=88fcd4&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/light.eot?version=88fcd4&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/light.woff?version=b83725&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/light.ttf?version=7fb9d6&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/light.otf?version=814928&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:italic;font-weight:300;src:url(https://cdn.blot.im/fonts/source-sans/light-italic.eot?version=2337cc&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/light-italic.eot?version=2337cc&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/light-italic.woff?version=bf4b60&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/light-italic.ttf?version=a81bf4&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/light-italic.otf?version=fc1667&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:normal;font-weight:400;src:url(https://cdn.blot.im/fonts/source-sans/regular.eot?version=2fcea1&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/regular.eot?version=2fcea1&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/regular.woff?version=93ad6f&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/regular.ttf?version=ccfcf0&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/regular.otf?version=8a07bf&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:italic;font-weight:400;src:url(https://cdn.blot.im/fonts/source-sans/italic.eot?version=2ba3d4&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/italic.eot?version=2ba3d4&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/italic.woff?version=e1e03b&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/italic.ttf?version=28a204&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/italic.otf?version=5798c9&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:normal;font-weight:500;src:url(https://cdn.blot.im/fonts/source-sans/semi-bold.eot?version=1393a5&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/semi-bold.eot?version=1393a5&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/semi-bold.woff?version=52e3b8&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/semi-bold.ttf?version=e27edb&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/semi-bold.otf?version=0f0e99&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:italic;font-weight:500;src:url(https://cdn.blot.im/fonts/source-sans/semi-bold-italic.eot?version=02acbd&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/semi-bold-italic.eot?version=02acbd&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/semi-bold-italic.woff?version=98e0e0&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/semi-bold-italic.ttf?version=b08c0f&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/semi-bold-italic.otf?version=0cf931&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:normal;font-weight:600;src:url(https://cdn.blot.im/fonts/source-sans/bold.eot?version=0fcfee&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/bold.eot?version=0fcfee&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/bold.woff?version=65e566&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/bold.ttf?version=58b131&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/bold.otf?version=17373f&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:italic;font-weight:600;src:url(https://cdn.blot.im/fonts/source-sans/bold-italic.eot?version=5b5fab&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/bold-italic.eot?version=5b5fab&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/bold-italic.woff?version=3eb8f3&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/bold-italic.ttf?version=c2ab97&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/bold-italic.otf?version=007819&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:normal;font-weight:900;src:url(https://cdn.blot.im/fonts/source-sans/black.eot?version=f52f91&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/black.eot?version=f52f91&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/black.woff?version=f3a0b7&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/black.ttf?version=31230d&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/black.otf?version=fdeb5b&extension=.otf) format('opentype')}@font-face
font-family:'Source Sans';font-style:italic;font-weight:900;src:url(https://cdn.blot.im/fonts/source-sans/black-italic.eot?version=52a9c1&extension=.eot);src:url(https://cdn.blot.im/fonts/source-sans/black-italic.eot?version=52a9c1&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/source-sans/black-italic.woff?version=e2003b&extension=.woff) format('woff'),url(https://cdn.blot.im/fonts/source-sans/black-italic.ttf?version=10c88f&extension=.ttf) format('truetype'),url(https://cdn.blot.im/fonts/source-sans/black-italic.otf?version=931f0e&extension=.otf) format('opentype')}.pull-double
font-family:'Plex Sans';font-style:normal;font-weight:100;src:url(https://cdn.blot.im/fonts/plex-sans/thin.eot?version=6b265a&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/thin.eot?version=6b265a&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/thin.woff?version=bafe09&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:italic;font-weight:100;src:url(https://cdn.blot.im/fonts/plex-sans/thin-italic.eot?version=c7d830&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/thin-italic.eot?version=c7d830&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/thin-italic.woff?version=3c3082&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:normal;font-weight:200;src:url(https://cdn.blot.im/fonts/plex-sans/extra-light.eot?version=314ce1&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/extra-light.eot?version=314ce1&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/extra-light.woff?version=da3ade&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:italic;font-weight:200;src:url(https://cdn.blot.im/fonts/plex-sans/extra-light-italic.eot?version=db77cd&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/extra-light-italic.eot?version=db77cd&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/extra-light-italic.woff?version=7090d2&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:normal;font-weight:300;src:url(https://cdn.blot.im/fonts/plex-sans/light.eot?version=12c684&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/light.eot?version=12c684&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/light.woff?version=5b1e7c&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:italic;font-weight:300;src:url(https://cdn.blot.im/fonts/plex-sans/light-italic.eot?version=7372bc&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/light-italic.eot?version=7372bc&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/light-italic.woff?version=8044ae&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:normal;font-weight:400;src:url(https://cdn.blot.im/fonts/plex-sans/regular.eot?version=9c294c&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/regular.eot?version=9c294c&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/regular.woff?version=b1f1c6&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:italic;font-weight:400;src:url(https://cdn.blot.im/fonts/plex-sans/italic.eot?version=b16407&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/italic.eot?version=b16407&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/italic.woff?version=f3d22b&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:normal;font-weight:450;src:url(https://cdn.blot.im/fonts/plex-sans/text.eot?version=e91cd5&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/text.eot?version=e91cd5&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/text.woff?version=965cef&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:italic;font-weight:450;src:url(https://cdn.blot.im/fonts/plex-sans/text-italic.eot?version=2e7cce&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/text-italic.eot?version=2e7cce&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/text-italic.woff?version=cfc50a&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:normal;font-weight:500;src:url(https://cdn.blot.im/fonts/plex-sans/medium.eot?version=97b657&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/medium.eot?version=97b657&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/medium.woff?version=934e01&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:normal;font-weight:500;src:url(https://cdn.blot.im/fonts/plex-sans/semi-bold.eot?version=273196&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/semi-bold.eot?version=273196&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/semi-bold.woff?version=4f35d8&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:italic;font-weight:500;src:url(https://cdn.blot.im/fonts/plex-sans/medium-italic.eot?version=8e4ba6&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/medium-italic.eot?version=8e4ba6&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/medium-italic.woff?version=f507b6&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:italic;font-weight:500;src:url(https://cdn.blot.im/fonts/plex-sans/semi-bold-italic.eot?version=00b961&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/semi-bold-italic.eot?version=00b961&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/semi-bold-italic.woff?version=40a921&extension=.woff) format('woff')}@font-face
font-family:'Plex Sans';font-style:normal;font-weight:600;src:url(https://cdn.blot.im/fonts/plex-sans/bold.eot?version=d80f3f&extension=.eot);src:url(https://cdn.blot.im/fonts/plex-sans/bold.eot?version=d80f3f&extension=.eot#iefix) format('embedded-opentype'),url(https://cdn.blot.im/fonts/plex-sans/bold.woff?version=21cb2e&extension=.woff) format('woff')}@font-face
... [10 more lines]
Bash (curl -s -A "Mozilla/5.0" "https://cdn.blot.im/template/d5/ee/1ac36782338efe961bc...)
.mainrm{font-family:KaTeX_Main;font-style:normal}
body{position:relative}
body:not(.accent-full){width:0}
body{counter-reset:katexEqnNo mmlEqnNo}
body{color:#dadada;background:#272727;word-wrap:break-word;margin:0}
.header{font-family:'Plex Sans';font-size:14px;line-height:1.4;padding:.7rem 2rem .4rem;position:fixed;width:100%;display:flex;align-items:baseline;background:#272727;box-sizing:border-box;z-index:100;justify-content:space-between;-webkit-backdrop-filter:blur(3px)}
.header.position-top{top:0}
.header.position-bottom{bottom:0}
.header.alignment-center{justify-content:center}
.header.alignment-left{justify-content:flex-start}
.header.alignment-right{justify-content:flex-end}
.main{width:75%;margin:0}
.container{box-sizing:border-box;max-width:1060px;padding:0 2rem;margin-top:82px}
.entry{margin:0 0 192px}
h1,.column h2{margin-bottom:-12px}
h1{font-size:1.5625rem;line-height:36px;font-weight:700;margin-bottom:24px}
h2,h3,h4,h5,h6{font-size:1.0625rem;font-weight:700;line-height:8px;margin:48px 0 24px}
a:hover{opacity:.75}
a::selection{background:#b3d4fd}
a::-moz-selection{background:#b3d4fd}
a:active{opacity:.5}
.entry>iframe{margin:24px 0!important}
.entry .twitter-tweet{margin-left:-16px!important}
.header a{margin-right:1rem;color:#dadada;text-decoration:none}
.header a:hover{text-decoration:underline}
.header .tags a{opacity:1}
.header a{opacity:.6666;transition:opacity .2s ease}
.header:hover a{opacity:1}
.header .nav{display:flex;margin:0;align-content:baseline;flex-shrink:0}
.header .tags{margin:0 2rem;flex-grow:1}
Let me peek at the ref images in the repo root — those might be aesthetic references you saved.
Read (E:\a327ex\ref1.png)
[
{
"type": "image",
"source": {
"type": "base64",
"data": "iVBORw0KGgoAAAANSUhEUgAAAu4AAALuCAYAAADxHZPKAAItcElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8C5qqrrrrqqquuuuqqq676n4zgqquuuuqqq6666qqrrvqfjuCqq6666qqrrrrqqquu+p+O4Kqrrrrqqquuuuqqq676n47gqquuuuqqq6666qqrrvqfjuCqq6666qqrrrrqqquu+p+O4Kqrrrrqqquuuuqqq676n47gqquuuuqqq6666qqrrvqfjuCqq6666qqrrrrqqquu+p+O4Kqrrrrqqquuuuqqq676n47gqquuuuqqq6666qqrrvqfjuCqq6666qqrrrrqqquu+p+O4Kqrrrrqqquuuuqqq676n47gqquuuuqqq6666qqrrvqfjuCqq6666qqrrrrqqquu+p+O4Kqrrrrqqquuuuqqq676n47gqquuuuqqq6666qqrrvqfjspVV1111VVXXXXV/2YSANg8i8RlNldd9X8Elauuuuqqq6666qr/6SRA4AQJbC5TgAQAGAAwKLjCgAFAAhtsrrrqfyEEmKuuuuqqq6666qr/iSSQAHGFQYEwToMENgAqBQDbYAMGBJhnE2Aw4OSqq/4XQYC56qqrrrrqqquu+u8mgQEMEkhAAAYMBhQgkAr3UwRYGACDAgAQOHFOoAI5AY3LDAgwgMHmqqv+h0OAueqqq6666qqrrvrvIoEEBAA4QQIECBQgAKHSgwpEQVFQFKQCGLcJAEugAoDbCDlBBJ4GyBGc4AbZQFyRyVVX/Q+HAHPVVVddddVVV131X00CBAqQwIAECCKAAgjVDkoPUVHdQGWGSkWlQ1EAozR2YsA2zgmc2IndYFpDDriN0EbAkCPkBG7gBCfYXHXV/1BUrrrqqquuuuqqq/4rSaAABAiigA0CokLpQQXqHNVNqAvULVCZQemJuiC6DaJ2YCMMAJh0I1uS0xLaCCRkg3GJp0PUBtwGaGvIEdoIOYIb5AQ5gs1VV/0PROWqq6666qqrrrrqv4IECpAAAQIABFGhzqDMoG5At436HZgdJ7otqBuobqDaE2VO1J6IIAKEwYlt1AZoA2ojbgM5raCt8LSGtoK2hvEIhn1oS2hrmFaQE0SFJmgTyJDJVVf9D0Llqquuuuqqq6666j+bAiIAcUWAAqKi0uNuC/rj0B+H/hian4F+B3XbMDtGlAWqcxSFiEqUSgkTApHgicwGbcTjisyG2xKNR5ADTCtoKzwdwnoP6hzaGsZ9WF+CaQWewAYb3EACm6uu+h+CylVXXXXVVVf9b6LgigQFGHCCAiSwucJgQwSXZXKFAHPVfxEJRQEJLIxQFIgK0UFdwOwUWlwL8zN4fgb6kzA7ifpjqG6gbhNFQVGJqCgKERABEaAcsSeKCoxLclyjNqL1Bag7eDqEOIDWgxPNhEsPbQUKQBCHMB6CJigzyDW05Kqr/gehctVVV1111VX/U0kggQHxTOKKCiRIoAIYJECAgQAZbJAgCmBAYIOTq/6TSSCBAgiIQNFBdFDnMDsBi2tgcT0sboD5NTA7A7OTULehzqHMUJlB6VCdodIRUYgS1K4jVFBOhERLwbhGVKZxjdoR2Vawuo8cD+DwDlzuhcM7QSNkggrUOdiQDXKCnMAJakCCzVVX/Q9A5aqrrrrqqqv+p5EAAAEFAnBymYEIIACBDRKoAIIIpAAJ3CAnrgjwhEmkwGmwAUACm6v+IwgkECCBBSqozKB0UBbQb6PZadi8CTZvgtl1eHEt7s9AfwK6bShzqHNUZ6j2RO2ppRCGMMwCFgtYbMBiAdFBFhjKNkcJAzAaxhHG6TG0NUyHE+zeTV66HS48ES4+DvaeBOMR5ACeICo4IQpkASdXXfU/BALMVVddddX/RArAEBUMUkB0oMBRkApGQIIT2gBtADfAYHPV/yISIMCgABUuiw4UYHOFuUwFFACAoHRIBaJCFMgRsgFADmBDjtBGILENEji5zAk2V/0bSYBAgAIBqKLSQ1TUbcDsJPTH0Pwa2LwZNm+BxY14cR3uT0J3jKxbUOeozCg1iAIFKAlVMJvD4jgcvwaOnYTNLehmMCYcjrAE9o+Sw70jJlXGKRlTNHVMQ9JKT1uatn8Eu+fg9r+GO/8c7vsr2H8arM5DG8EJbQ05QCZXXfU/AALMVVddddX/BBFIBaKiMsMI1QXUDYgZzI6huom7Hei2IXpw4ukIxgO8Ogfrc7C+CMM+5JrLJC6zAYO56n8SCSQwIIECFBA9lB6pggIruMxABKiACkSHooIqlA5UEIAb5Agk5AhtgLaGtgJPAJCJneDEbQ0kWFwmQSZgrnoRRAACjFQgelR6NNtCdRP1x2DjelhcjzZugq2HwsaNeHEt7k/iuonLDJcAQQQEUBrUDuYnYeNG2LgGNk7BfAZlCSyTdjRwdOEiq6Mjhmni6PxF1of72Ml0eJHsK7k6JD2QGzNSwt0Gjk3QFuxegnueCrf+Adz713B0H7QJcoQcwOaqq/4HoHLVVVdd9d8tCio9qhuo30b9Dpodh24bzc7A4lqYXwMbN8DsFO6PQ1lgArcB1hfx/tPQpSfgvafCwa0Q98J0BNnADdxA5jInOAEDBnPVf5cIFB22QaCoEBXKDOoCyhxiBqVHNiYgepAAoMxRmUOZQZmhqIARgBPaCnmEHKGtoK0h15AjeIRphdsAOeHW4baGbNgNACIgG1f9CyQAQKj0KDrUbaB+G82OEYtr0OI62LgJNh8EWw+CzZthfhp3W7j0ZAACA5jLVKBeBxsPhY0boNuEHGHvEly6bUk52KesDsn9S4wHe0zDEeN6xbhc08aRXB/ShkNyWpHjmswRL3dxjnjYB0boO5hvQROUBt0CokKbQOKqq/4HoXLVVVdd9d8lOlQ61O8Q85PExrXE9i3E5i1o+8Fo60Fo4wY8OwX1GGiGASdYQIUmyBFy9TJ4/1a4+Pew+/dweAdM+2g8gHYI0xFMB9AmyCNoI7jhHMEJbmBzmQBz1X+2CBQdIKSAOoMyh7qBZsegbkLdwmUBZQEIqeLogIAyQ2UO0UPdQNGhqKBAJHhCuYa2graEtkRthTxAW8J0hKdDGA7J6QDagKYVOa1QDnhaA4YokAmYq14QAYFKB/02qgtifoJYnCLmp9HmzWj7oWjzQXjjZti8AebHcS04wAESNHGZE7QB9RboHgJlG4YjWN1udOkI9vcpyz3qeh+O9vFqSa6XTMt9pramDSM5LMlxiccVHpa4NZjWMK5hWsM4wGoX1vswHgATYFgfgQ0CMrnqP5EEADZXvUgQYK666qqr/qtIoILqHLptYn6S2LqZcuxh1JMvTj31ktQTD6NunkElsAFDdFDnoA3wBgzA6l4YLkIzNCATcj3C0T2wvoDGSzBcROMerC/C6j4YL8LqHIwXYdiD4RKMB3jchzbgtgLMFQKbq/6DRYCECFCBqFA3ULcJ/TFYnEb9Sdwfg/4UlA2IDscGRA8ErhtQNlAE1E1UNxAJpSOiA0+IhpwwHaDpANoatQM0HaJ2hKc9GPbwsEsOl/D6Ejke4OEAjwd4OIQcsQ0kZHLVc5EAAwF1TnRbMNshZscpizOU7Zsp2w8hth+Kjj0CNm/G8+Oor1CBgCyQAVOBaYS2Bp+C/tEwuxZihDgPXFihvUvEwUVY7lPWh8Swh1Z7aFyRyz2m1QHjsKSNa6ZxRQ5LPK3JacSZuI24jZATniZoI0xLWB9AW8G4hFxDGrJBDuAGNlf9RxEIQKAAAU6wuczmqheIylVX/V8VBRBIYAMCCZyAgQAMngDAXPWfSQIF1E3U76DFGWLrFurxR1NOvxTdmZdkfurhLLZm9B0sOtjYhH4HfAw4DtMWDHM4mmD3aZD3girUCkzgFah0eOtm2LwZARLIQA6oHaLpEgy7sLwHju6Eo9vx0Z1weDs+vAuvzuNhH7clzomr/gNJICEFSBA9RIe6TdQfg/kptHEjbFwPs2vR/Az0x3HZwnUL1Q0cM4geSg/RQelR7VFUpCAiUAQhkBPckEc0rWA6RO2ImA5h3INhF4ZL5Oo+cnWeXJ6D5T3k8jzEDKh4PIC2BgMBZHLVAyhAguhRtwnzY8TsFLF5HbH9IOrxR1KPP4py/FHEzg3QB1SIDlygCVqBKUAD0IAbQY8CjkHbgzxvdGGP2LuIDi6SBxdgdYlcXyLWl+DoIl7ukqtD2rCiDUe0aSDbiMc1Oa0BgRO3EbJhJ7iBgbaGcQlukAO0CTKBBm5gc9W/l0CAhFRBAsxlKuDETsCQDWyuer6oXHXV/wVRAEGZQekhZtBvQcxQVCgziB4RQEJO4AY5wHgI0xGejiBHoOG2BhvMVf9eEiAoM9Rvo40b0PZDiZMvQb3mlejOvASLEzexuQUbPZzaghuvhTPXQzkOez3cl3BpDcs9uPR02L8LvIbthwI3wLgBqwnYhXEXfABxBGUJsQStIVoPrUd5AgQKoI3k6izeezra/Xvy4t+Re08jD24nD++GYR/nCDZX/TtJgJAqREXRQbdA3Rb0x9HiGrT1INh6CNq4CTZugvk1uD8GdRN1CxwVBA6uCFCAAiIgAkpAKRABhQAq4RnyFtlOEw2UDaYlHg7xepc8vJe2vI92eDcc3Ab1NrI7B2WGV4HGQ2hr3AaIChiycRVgQ5mhbhN1W6g/jrZuphx7ON3xR1FPPJzu1KOZnzhFPwcXyA5cwDPwJqwN0zlwQtwC7WFAB3keprONuHiesneOPLgA++fR/n348CxaXoDVRXxwAS/3yGkgxyU5rXGbsBOcuE1A4kwuiwpuMK15lpwgJ2gjOMET2GBz1b+XUCmgAARRkAID2KAAhNxwNhDgiaueLypXXfW/XVToNmG2Axs3wPbNaONGWFyP5megO0bUTSgzUEdgyAlyDdMBrC/A0V1wdAc+uhsf3YfX5/F4gKcVtBXOCWyu+leSQAXKDG1ci7YfSpx6Wcp1r0W55uWYn7iW7S3YnMHJLXjULfCoW2DzGJwb4Bm7cPudcHYPDo9gdQDDGjaugc1HQTsNS8GYoIB4MKgBE2iCMkK3hn4J3RrqEuIAtAftIkyHHS1voB2/gXbq0eS5R9Du+0Pa2b8EIKOD9S7kiLNx1b+BAkUABgrqFhA96jZQfxxmx9DGDWjroWj74Wjn4bD1IFicgW4BHVDAARlgQRosUIAKhKAE1Bl0PZSAAtSAKiiAEtwgDJEFtS2mYYtxfS3T6kFMhxcY925DszPQn4S9W2kxRypY52HYQwhnAwwBOMHm/y0JoqLooS7Q7CTavInYfgjl+GOoZ16c/tSj2DqxwbFt6OYwdLCuUBagbThKWJ6FbFCuBd8CGDgPnB3g/H149z7a7r3o4BxcugtfuhPv3wPLi7Dax6t9PK1wG3Fb40zIxJjLcgQEGCNAIEM2wKAKGLKBG7iBE2yu+neQQIGigApEQVGQAlRQ6XA2cOKcIBOp4BBIkCOYq54Tlauu+t9MgtLD/ARsPwiOPwaufTU48/Jo62aibqIGkRCABCEQEIAFAvAahgv48Hby0pPJ3SeQl55CO7idPLoXT4d42MdtDdkAg81V/wIV6DbRxg3o5EsS178O9aY3pDvxEOYz2NmG4zvwoBvgZR8BN5+EvUN4/DPgaefhwgoOJ1hNMDZQB9tnoL8WVis4egKsjmBKmCq0AAsIcIWcQc7Bm8AOxATdCsoeTAEaoW8Qc2DnFOvjr8vq2IMYN28i7vtTpt0n4qN7yPUuDPu4rSAbkGCuekEUIC6TBADRo24TdRuoLNDsOJqdhI0biGOPRjuPQDuPQMceghYLVEEVCHCF7KAFNIMAVaCCOihbMD8Jsy3QRfAulAL9AhY9zCtEghJ6Q1mDBvAA6xUcLuccLm9guXEK5mdgfgbX47gscMxIVYxhLNBW0AZQAQmygc3/KwqQAEAV6gaaHYeNa9Hmg4idR1BOPIru9GPZOTXjzHHY3gbPYTmDnQ1gDucP4PAstAPoTkPeBGMBDoBza3zv3fj8XfjCHeji7bB7O750F96/F5bn8bCEcYnbCrJhJzjBid0AwAAJCAAw2BAFEGDwBAKygZOr/gMoUBRQQFRUelR7os4gKkiYwOMSxiWoQAgCaCNkgirQwOaqZ6Fy1VX/m9lQepifguteFW5+U9h+ceiPo4AI6DahbkK/gG4GfQ9dBxVgBXkIuZyR4/VMeT1Te0XGg4sMu09jOv/3TBceRx7cRh7eTR7dg9e7MB3gaQmZXPUCSFA30OYt6JpXIm5+C+pNr0e3scn2HE7eDCeugQddCy95E2w0+JunwVPvg4srWCaMggYkYAGC9REcPAnWA7QJWkICDcgGmCsCMmAqYMHYYAXM5jDvYdbB4kbQCF5BjLC9gOX2wzg4cTPra16O6fzfM134e9ruk8mD28jDu8j1LkyH4OSq50MBEleIy8qM6HfQbBv1x9DsBDE7CfNrieOPRscejY49kjh2A2UOtQcquIM4ATmH9SEY8Db4JFCAgLINs2Mwq8CdMI1Qj8Hxa+D0cTixgJ2ArkFpsDFBWcLhIewdwGoJyyO4dAi78xl7i4exnJ/G3Q7UTVrdQtFBVLw8i9a72EAOgCAKZAOb/xckkACBAqJCvwnzM2jjRmL7YZTjj6Geegwbx2ecPg5nTkK/CbEJp7bhSHDnedi7ADb0JyCvhaMO8hC4OOJ77sD33Ebe93Q491S48HTYuwuWF/HqEh72IRNIaAM4AQNgN7ABAwEAMgBkggROcAICgEyu+g8gQRSgQBQoHdEtUOlRtyC6BUTgnPC4QnUOm9cQ3YJc7eHD+xDGTqCBzVXPgcpVV/1vJgECBVx7M7zKq6NtiIsQt4EOQWeg3gz1OHQbMNuE2RxmghnQjzA/gLgIy7OwvweHWydYnnw51je8HOuD8wx7dzBdeALT+b8hLz6ePLgVDu/GwyWYVlz1AAIUULfQ1s3ozCsRD3lHyk2vTxfi+DG47hVg8wRsASePwR33wm13woVDGA0ERAUBNDBXZINxgGkCGzBgsIEGJNiAwQIEFmRA2YLZNbBzDRzbhq0OdiosDN0KOA9798H5izCrPUdbL8H6updgtXcP47knMt37R0zn/hJ2n4QP78TjPuQAaa56JgkkwIBQVCgzYrZNLE4Rs5NocQbNTqLF9cTOwyjHHwnHH07ZPkG/CbUH5lC2ob8OfBIOLsF4AXQc4kFAhbYEFYgCXsHqXuACzHbg1E1w3QnYBvoR2hraBJ5gSugB99BtQvSw2ID5BvQzKB1Qj5H1pXHZgLoBZUaWBajDToTxBOTAZSpAA5v/+8SzqKJ+E/Un0fxatPkgtP0Q4vjDmZ3Y5sRxOHUStndgextOHYfDAn91Fi4eQHSwmIGPw2EH7QjYN9x9B7rjqXD3k/B9T4KLt8L+3Xh5HsYjmNaQA2RymScswAYbMNgAQAIAApvLbHADAMxV/0EUICEVKD3UGVHnxGwb1TnRzVHpyWkFBOXE9cTpRxGbJ2l7dzDe8Vc4G7TGZQIksLnqWSjAZ3PVVf+bqUKdwdywPaEbHkw8pKdeAyXB98D0DBjvgPEeGO6C9R0wnoecoPSwcxKuuwFuuRFuvhauPwHHFtB1oH6D2LiOcuLF4dTL4K2HoLIJniBHyBFy4CpAAgXEDLZuIs68EnrIO1BufiM6xLFr4ZrXgboFw1moDS6ehaffBZdWQEBXQUACLWEytAmyQSZkAxtIyAZuQAMn2GCuUEAIFBAFogcJvIa2grYGEvoOTh6Hh1wLj7gObjkN1+zA5hyiQsy3iO0Hk9uPxf01EAU8AYlygpxAXHU/FVAgBXQLYn6c2DhDbN1E2X4QsXkzZeehdCcfSz3zktTTj6Q/vsXGMVjsQH8SNm+EYw+B2fWwOoKjc8ACys3QgOk8tDVoCXEOfC/kEcxOwrHrYKOHcQ8unYdzF+HcAVxcwaUJjgRNUAO2ZnBiAZtzUAdTgIE0DBQyTmJ1oAoGMGDIATyCAScIQID5v00QAnVQZtBtoPlptHkD2nwQ5fhjKadfgv70gzh+Cq47A9efglPbcGoLdmZw6wE8/RJYUDvotqDN4XAFwxG0u+7AT3s83Pb3cPffw/mnwt4dcHQO1nswrsATdoIb0ADABidgrvpvIEFUiIrqAvWbRL+DFscpi+PEfAeVHhTE5rX0D3l1tl7sTZidvgnv3cF051/TLt0F0xrnBNkAg81Vz4ECfDZXXfW/mkHisvUAq4TxWtheUG6A/lrot6E2YBfaLuQInqAtYTyAYR/aCmYVjh+D666Bm26AG6+HM6dgPgcnNC/w1oPxyZeC+XUAKEfICTwCyf9rEkQPG9egky+NHvTWlFvegiqxcx2cej1oA+z/A+Qa1ivYP4RM6CoUAYYQ9AHzDhZz6Oew2IDNY7A4DrMd6HagHgNtAxvgDlzACZ5AI0QDAQI0QR7BtA/jHiwvwdEu7F2ESxfgcB+q4ZoteNBpuPk6OHmSy4Y1tLogtx+ONx4CpUcY3HCuIAcQYP5/i4KiIgRlhuYniMVpytYtlOOPoGw9mHLsYXSnX4LuzEvQn7mZxfHK5jFYHIfZKdi6FjZOgDs43INL98I4QWxDSxjvgXYAXgF7wBGoQZ1BN4OYYL0Py0MYRkigq7DoYGcGN8zh4T08soeHz+EhG/CQLbh2C7LCboPB0BKag4xjoDmUGaaChEmUI+QIbmCDBBJg/k+SIAIQqECdo/kJmJ9BixuJnUdSTr4Y5fRj2DhVueYMXH8Grt+BroPFDNYJj9+HvYR+Bv0MNIeDBkdH0O65j3zy4/Ct/wB3/T06/yTYvwuvLsBwBDmCR3ADEgBssAFz1X8TCVSgdKjOodsk5sfQfIeycZKYHydKR3SbdNe9FDsv8ZacePjL0k0XWT7p1zh88u/S9u6BbIChrYEGBpxc9RwowGdz1VX/qxmywbiC1T7sn4Xd+/CFgg+P4UVPvRE2HgHbD4eNHYgVtBVME0xrWB/B4R5c2oULF2F3D9YjlB62TsGpm+HYTdBtw3QE0zCH44+EY4+Fbhs8QQ6QI3gCm/93BKjC7ASceCy68Q2JB78dpV+w2ISd14S2hr2/BDcwMI1QAzY6OLUBtxyHh5+Ch5+Bm6+Ba87A5kkoJ6A7AXEM2AFvQx4DHwOfAp8BrgFfD3k9+Hoop6HbgdJDBTRBGCJAASFwwjTAagUHSzi/B/degEv7gOHYNpy5DmbbMI0wrKDNTuLNR2LNcK6gLVFbQ07gxv9bCogeSRAFZjvExjWU7VuoJx5D2XkY9fjD6c+8FP01j2Lj9DbHT8HOCVichNkp2D4NXQ9Hazhawv4lGCeILaCDcR+mI/AIHkANQhAVisEjtBW0EZQgoAgCwJAJmTBOsB5hPcAwQk04U+HUAlYVLkwwJWSDpJBxDGIO0YMCqWCM2gpyAicgAECA+T9LAXUG3TaanUKL69DWQyknX4w49WL0J09y/DRcdx3cchrmAesCGx3cu4ZnjKAO5h30PRwmXDqE9bkD2lMfTz7t7+Huf4DzT4b9u2B1EaYleAI3cAIGA07AXPXfSAIFRIfqHPoNND9OzE8Qi1PE/DjRLYjNa5k/9LU5/VJvwoljG4y3/j4X/uqn2b/t72nDGjCe1tBGyBFIyATMVc+BylVX/W9nQ1vBwb2wugQXbsN3/h2c+F3aqRcnr3lZputeiuHBD2Hr0eLEy8HJx0J7BuzdBqsBnNAa7B/Cagm7e3DfBeg76Gcw34H+JFzzktA9FLYeD/f9Pey1BzM+8gOZTrwk+Yyfhnt+Dw6egdcXINdg/n+pG7B1Izr10uj610XzY1TB/LEw7MP670ENNIcScPw0PPgaeMhJuGYDFgWGhPMDnF3BvXtw9hB2l3C0hHFoDFOjtUZL0xQ4gqyV7INcgBfABvg0uIMimE3QL6HuA5egHYEbhCACJGiGgxHWA1w4hKedh80OrjkJ118Pm9fD/Mlw6+PgUhxnGW+OAY9HeDqCNkBO4OT/HQmiAMaqqN8iFmeIrVsoxx9LOf5o6s6D6U89kvnJa9nagePHYesYxBYM2zDbgpng3AGsJ1iuYUrod0AbMEyQCQRgni25zAIDrqAAKqgDdUAFV5gqHARMDS426Cfo1zBL2BIcq7DVwy3XwCphmCATmoP09QRgAqsiFSyh6PDyLIwH4AYSqEA2sPk/RQHRQZlDtwX9MZhfC5s3ou1bKMeuZ7YNW8fh2AnY7GGYoO9gSrhvhNLDRoXesGxwuILhksk7n45vfTy+6x/g3JPh4B4Y96GtICdwAxIMOLnqfwgFqKI6g34LzY4TG6fQ/Dia7aDSUU4+hI2HvRanb7iFjeF2dv/ml7n3SX/C+nAPU5DAOUIboK0BQwJOrnoeVK666v8CGzCMRzAewdFFfPFWuPMv8bFfh1OPYv2Ul2N60quyfOSLceIl51z34vCQh8Dh02D3XmgJ6gHB0KCtoIxQVqADyLMQm1BvgJOvBPOHwX1/DuefEKyufVXazsNoxx6F7/gluPA3cHQXjEf8/xHQb8PmLXDyJeHYowlDdwNMEyz/FHQEG9fAqRvhzIPgutNwosAwwuMuwLmLcH7X7O5e4ujSRVYHFxiPLjEtd2mrPXJc4jbiNpCZmAKquMxw3cCz4zA/AYtjeOck4/Hj+NQWeRo4Cd1x2HoQLFbgi7C+CKslOEFAKVAMCUzApQnO3QX1Xtg4AdlDvwWLJfjEnKN8Y3J1Dq/OwbAPuYY28P+OCiBQoG4DzU6hzZuJY4+kHHsU9fgj6U8/ho1TOxw/BqePw7ET0G9D24H5MdiqcHYXVhOMDRLoF1A3YBRMS3ADDDQgAQEBBKhA9NAvYGMOm3PY7GGzwnaFeYE+YEuwaOAJhgnWAxyt4c41PP0AemBzDtechmGE1mBqkFkYfT2ykMEWKEAVEJeN+5ANSP5PkUACVSgzKDPUbUF/AhbXE9sPRsceSrdd2NiBzROwswUWrASLgN0RlsBiDrVADHB+CasjaOfuJp/xRHzHE+D8rXB0DsZ9mFaQE5DgBCdX/Q8SAQooPXQbMDuGNk6hjTOo30L9JuX0Y9h4+Ktx7U3X09/7Z9z7Fz/H7j23MqwOcU4wLfH6AE8raCN2ghOcXPV8Ubnqqv+LcoDVgNf7cHSeduHp+M4/w7f9Ovn0V2J46utw8OIvww0vMefml4Kbz8PZp8G5S0AHpUAaWkIYbMgJhkOYzkHZgY0Hw6k3gu6hcO734fD8tfCI96Zt3Ai3/jg++yew/3SYDsH831dm0G3D5nWw8zCkSgjaEtrfQT+H468IJx8Gm8egTfC0s7C8Fw7v3WV9/i6mi7czXbyNae8Opv17mJa75HqPttzHbcTTAG3ANmRigChQZxAdjh5mOzA7hhenYPs6pmM3007ewnj6QSyvvY7D6xecuA5O3QSnb4LYh8PzcHgAOYELhGDRwfEZRIGDAcYGfYWd62BaQ9uF6fgWeeMb4YPbYbiE2wp8CXLi/w0JJECo9NBtocVptPUgYvthlBOPpJ55MTZObXH6BJw5ATs7sHEMyjE4fgxO9XD3AVw8guUEzRABDmgjrFcwHoInIAEDAgJUoWxCvw2b27C1AVsVtgM2gU3DFrAp2DRcB1xfYbPCmLA3h7MD3L2Cu5dwzyGc24NaYLENwwDTCK1BZiHbNahNyAmAMTjBDdxgWkOu+D9JgtJDtw39cZifQRs3oO0HE1sn6ReweRw2j8PmHLyGKNAMew1qB3UGvWE/YX8Jw/kl7fankHc8Fe/eBYf3wXoXpiXkACQ4wclV/4MIICB61G3A7DixOIUWp2F2nFicJE49mo1HvAanz/Rw229yz9/9Nrt3PZWc1nhc4vU+ORzgcQXTgJnAgBs4uer5onLVVf+XOWE8gmlFLi+Re3cTZ5+I7/xjDp7xqjz96W/EpZd5GV78sfASLwcXnwZPuQvWDUqBBgwJaSBgmGC5hOk+uPBUmF0H80fCsdcF/gQO7yr4pjcmVQBhT7B/K0wr/k+TICqUOfTHwcdQB/UhUOYwexBs3Az9Gdhfw32Ph+Wde7T7boX7nkCefQJ58VamS3fRDs/TlpfI8RBPE57WMI0QBTJxroHgMhuiQBRAABAVSg/dAveb0G/B5hnaiQfhUw9luvbRLG98LBdvvInTN3fceB3cchK2DuHiWbhnF6YJDg1TwqKDWQ+1g9k27DwEjj8UnvHnMDwDxlMPIW94Q7w6i6Yj7AbrS4D5/0Slh24DzU+hrQcR2w+lHHs49eSjWZzc4uRxuP4M7GxD9LBxHK49AQ/t4I5DeMYu7I6QBgSZMI0wrWFYAQ0koIAEVOAYxCnot2HWQzXkCMslDCNcmqAmzAy9YS64u8C9BW4ocH2BaytcX+DhG3DPDJ4wgyfvwR0XYViBDd0m9A2mBq11OK9FOYET0yAnaEvIEbgAYwMZlOAE87+cgAAFRA91E7rjaH4dWlwHW9dRNmC2Cf02LLZhXmACImCVsDZszIAC0xJ2j+BoD6b77iHvuhWfvx0O74NxD6YjmFbgkcucXPU/jApEhW4B/Taan4TFGbQ4TcyPE2deivmDXp6dkzA947e4729+g+X5u8lpSVvtkes92voATwPOCTxBNi6zueoFonLVVf/nGdygNWgDuT7AB2fJC0/D9/wN5+56I/78jjdk9Yo38IqPgeuPw189BS6sQB2UAlNCm0AFNk8CAat9WD4D9p8M9XqIU9BdgjwEX/e6+OgeWN4N611oZ8GN/7MUYKBUCKHrj1NeFtgAAppg/xzsPsm0+24nz/49vu9v8Nkn0C7ehg/O0o4u4uEIj2vshDaCBDZgLpMAgxuIK9oEDUAgwIAEqwBVHAWXiu75G7w4SR67AV/zcPLaF2N988tw/kGP5exDt3nJm+AlHgaPvQRPuAfu2oeDAfZGyCU0Q56FzVNw/KFw+iVh/wKMDfKm14DxgGwDeIKcYDoCJ//nRQV1UGZodgJt3EBsPYTYeTjl5GPoTxzn+A5ccxpOnoAIKNtw7XF46TmsDuApe3DfAMsGDUiDDdmgjSBBdOCEFOgY6BqIHQggV7C6AMMhxBo0QqyhjI2wKa1RbbpauCsKT+uC43M40cGpCqdncKyDWuFBC+h76Odw+znYvwDZoMygm0ObINscpmsgR5QTtDVuA+QEbQ3ZgAYJSODG/2oSICAgOug2oduB2SnYvIHYOEm3gH4TygYsZpDA0lALDBNEwLyHENy7gksHMFxa0+59BnnfbXj/PlhfhGkNbQ0eAXOZzVX/gyhAFeoc6gbMT8LiFJodQ4uT6Ngj6W54aTZPB+MzfpuLf/97rC/eR1vtkes92uoSOSxxW0NO4IRMwFz1L6Jy1VX/ryQ48eoibTzCB2dpF27F9z2Ovz33dhy+yivxOo+B192AP3kCPGMP1EEpMBlaQhewcQKO3wIJHJyDi0+A5SVwQASoFnTy5eH8X+K9p8D6ArTG/3lthbpddOw28t6J4aAwxgytl7B/F1x4Ar7vb/H5J5GXbicPzuH1IUxrnBNgcALmMvOcbJ7FPBeDucKAGzBCBkzg1R4+PAe7t+P7nki77c/Ip/8uedNLc9vTXpndh780Zx+1w6vfBG9wDJ58D/zlPXBphARGw3IFy3ugFZhfD6dfCsY/hZZBPuiNkRNUMIKjO2Hch2z8n6UAVVRn0O/A/Axa3Ii2H0qceBT1xPVs7cDJU3DmNNy8BRcmKFvwiDlsLOFvDuDOEdYJFs9mcIMIcIABbYBOwnACBHgP2iF4HziEODwijvbR0T6xPkTDipgGIhsBlCgcdTMOuzm7iy3u29hmsdhgY3PO5qIwm8GsA/WwsQHX3QTzY3D2Ttg/D1GhdFAmyMU2bqdhWkNbQRtg2odpBSSsRqABgiiQCZj/tSSICqpQFtCfgPlp2LiWmAfdHMoCtjZhYwbLFQxASZgMfQeLCm2AowEOD2A6dx/tvjvwpXthtYvXezAdghtgsMHmqv9hFFA6qAs0O44WJ9HsBMyOo2OPoN7wssxPinbvn3LwhD9lOH83ud4jl7u01SVyPMRtxG6QCU6uepFRueqq/5cMbUUervGwYr3chUt38OQLb8vq0pvxBq+w4DVfEv7ocfDkC6AOSoFxhIM9WK5gsYTN6+DUS8HOS8A9fwoX/wbUQ9mCHG6GxY1QN4Hg/zQneIJxHy4+mfyDb4fFtWhxCrUGy124dBu+eBvev4c8ugjrA5wTYCDB5j+Fk2dpa2gDOR7C4Tm8exft7FNod/w53PGK/O2dr819j3lpXv3RlVe8Ca7Zgt+5De44BAHRwXqAC/fA8Tkcfwlo23DPb0ObCr7lTbCEJHzuz+DgVhj3web/DAkQCFCF0kPdQLNTaHEDsfVg4tjDKMduYb4Nx47D8ZPwsJMwa3C34SGbsDHAU/fg6SMcJqQheKYEDKUHCSJgdgLGU7AKyH3IS6ADaPsDefEcunAv3jtLHu7CwQUYlmhaw7gmnEgggtr3LPsN+n6T/c1jLLZP0W+fpN8+SXfsBGVzE82DnAEziC04/nDwJuzdDrGEEpA9eH4Sj0cwLdHiAE+XoK0gl9AGsCHXgCECnGDzv4cgBAAYFFBmUDag24F+B823KXOoC4gFbHRwsoPDNaRgNKRh0UFv2F3DpUNY78N04Sx56Rw+uA9W52A6hBxAASqQI1f9D6MABZQe+m1YnIDZcZifIo4/gjjzkvSnF/jS33D4+D9ivHAXud4jj86Tq0vkcEi2Adwgk6v+1ahcddX/a8bjHu38yGq5hw/Oc/vhOX5p9U68/qud4JVeDNrfw5MugjqIAm6wWsFwFpZH0O/C9qPh1BvDAOz+NbANXDKmgDooPbQ1YP5PssEjDPv43qegS/eSm8eQjbLh1T4s9/BqD09ryAmcgEECm/8ySsgB3MiDgVxdInfvIs/fSrv3cdx1z2vzy/e9Hne95I289oPh9R8Jv3srPPECVwQcHcLqCTA/D/1D4cQbQP4eHN5V8Y1viKcV5Aie4OA2mI7Ayf96CpAAAwWiQ3UOs5MwO4U2bkTHH04cewh1e4OtHdg5CbechhMdPOEAxm04UWFvCbcOcL7BOiEBG0gQUGeggNJDPQXLORyuYNiD3AV2l3DuHnz3rXD+brx7L967D5b7sD6AcYXaBG2ANoBEdDPGUhi6Gat+QZktONg4wezEdfTbZ+hOXEN34jrYOUXb2sKLBWUBZRNmN8HmAlrAdDvIoD7Q/DQeD2BxLbQjGPdh3INpCW0NuQYADOZ/FwEIMBAQPcQcygK6Y2h+Bs23KTOoC+jmUALqCFsFBgEJEswKdMDhCg6OYDo4Ii/eh3fvg9UlGPYhB8gRPEGaq/4HkiA6qJuoPw6zE2h2Au3cjE4+hu7kFrF+Kqun/gXDvc/AB+fI5QVyeQkPB2SOkBPYXPVvQuWqq66CtiT3B9a3TdDW3L0+5NfyPXnd1zjDyz4Wjv4Wbj0ABZQCCbQGwwryEgyPg/mjYOtV4eBOWN4OHI0QBaIHVf7PywbDPkxrvLoEu3dgN3BCG8EJbmCDBBgAbP7rGMwVbuAGw5ocjxjX++ThRdrFO2nnnspfXHgzzr3MK/Iaj4VXeQTwDPjbuwFDVBgHWD0DuAPKddA/CMYDWKun3fAGsD4H4yVoazi8E9qK/9UkkAADgqioLqA7Bv0JtHED2n4YsfNQys71zHdg6wScPAXXbcLhCnYF18/heIPzS7hvgiMgeSaDBHUOLrA5g3oS9gMOd2F9CdrFCd93F9z+NLjrafjs7Xj/HBycg6NdGI/QtIa2BifkCNOASiGjQ6XSSkFRiDpjmG+x3jpFPXYNdecM9eSN1NM3wfFr8M4ptHUcjhaULSgnYf7iMAVMTwIZmG3AeBqmI5idhsWNsL4Iwy5Mh5AjtAEwyGD+91GBqBAdRA8xh34HFqdQXygddJtAgeUAqxF2EuaCg4RZhb6CGxytYHkE094euXcRr/bxtMbZoI1gQyY4uep/GAlUoW5AvwWzHZidhM3r0PZDiWOnCe5luO1vGe+5lTy8iJcXyeUuORzgNoAb2Fz1b0YBPpurrroKMJ5W5NEeeXSB8WjJhdljOf3QBTdtw9kLcDCABRZkQjYggIBhH3wM2ILhVshc4OEI9p8Kq/tgWoIb/6c5wRPkCOMK2hraCG7g5H+uhDbgYUk7vMi0fy/ev5fDZXKXHsT8dOXB18Kqwfk9yAYW1E2YnYDxAizvARtokHWO2YGju2B9AaZDaCvA/K8kgQpgQKAKdY5mJ2B+Gm3cQBx/DOXEYyinH8vs5CbHTsHxa+Gh18D1Fe44hKMKj9iAzQZPX8IdCUeCISEnLosZlB6ObcDiBOxNcPECrC5Cu+si7amPgyf/LTzpr+AZfwv3PRVdeAbs3QOH52B5AVYXYX0J1nswHsG0xOMRHg5gXOLhiFzu4fURuT5gOrzIdHCB6eAC0+ElptUR0zTSppGcJtoEw1AZXWAHdBpyDe0cGHCZw7SCtgYn5ArGA8gRPEFbAwYJbP7XiAACVCB6qBswOwlbD0LbD0UnH045tsX8GGydhm4DpoRjFWaGwxFGw0YHmzM4WsEdF+G+s7C6526me55Au/A0OLoHhkswHYIT3LjqfxgBqlDnMNuG+Sm0eQ3avJE48UjKyUdSNie48A9Mtz2OtnsXeXQOLy+S60Pc1uAGNlf9u1CAz+aqq656JuM2kqsD8vACw3Li0vaLc93De04UuPc8rCawuCwT2gitgQ1tAJ2CdgjTBWBxI6wuwNHtMO7BtOT/BZv/ldzwsCKXe0xHF2kH51gfrblPD0an59xwLUwTXNqHKcEJ/QnYegxoDut7IQdwgMspGA7h6HYYL8B0BDnyv5ICxDMVqAuYn0Dz02hxPdp5BHHsUcSpx9CduYXNE7B9Bq69Fh61AznAPSNsd3BNwOEAt45wHhgF0wSZUOdQZ3BiBhtbcGEN5y/C8jyMz3gG7cl/jZ/0N/jpfwv3PBEu3Ap7d8LROVhdhGEfxkOYltDW0NaQI7QRckQYphVMS2gjtAFPa3JY4dUl2nIfrw9pq0NyeUSOE56SNjVybLShMk09bIBOQu5DuwiUAAdMR9BWkAPkGtoRtBW0FTgBg83/ChIoAIMC6hz6HZidgu2HEscfRZx4KHVnxuIYbJyE2QY0QxoImAASNntYdLC3hDsuwoXzsL77GbR7nkBeegYs74H1RZjWwAQANlf9DyJB9NAtYHYcNs6g7ZvQzoPR8UdSTx4n2p202/6aduF2cu8ecnkBr/ehrcANbK76d6MAn81VV131AImnFbk6xMs91m3G+pqX5IYHg5Zw9iI0wIIEDGSDHCEbeAEsoN0NpuDueji8A5Z3w7QPOXHV/2QGN7w+oq32aQdnacsVF8tD8TULrrsOxhUcHEBrsN4DA7PHgq6B9d3QDoEKeAEHt8HRnTBeghwA87+LQAIBBNQ5zE6gxTUwvxZtP5Q4/ijKyUdRzjya+cmO7ZOwfQ089AzcUODSCg4TZoKScHaEew0rQTO0BtFDP4eTM9jYgLNLuO8iHJ1rjLc+mfaEvySf9Ddw+9/B2afA/t2wPAfDJRiPoA2QA7Q1YKCBE5zgCTAIyAlyQtnADdwgB9wGmNZ4XJHrJbk6JFdLPCZuwhN4TNoS2noOG4IdyLOQB0DtYVpBW4En8ABtBe0I2hKmNZAggc3/DgIJooOyAbOTsLgebT8UnXgUOn4LdTtYnIDNkzCbAYYpIApUQwE2Oph3cOEQ7jgHu2cb47230c4+Be/dBsuzMB6AR8Dg5Kr/YaJC6aDfgo1rYeM6dOyhxIlHEVvXEPMlXHwSedeT8KW78dFZWO/BtMQ5gc1V/yEowGdz1VVXPRfjaU0OS3J1yLpcSzz4wZw5DQfn4XAJFqTBBgM25ARO0E1gw3Q7eLEDnsPBrbA+B9MhYK76n8zghodD2nKfdniRNjb2Z4+kXDfjzGlYXoKjFSSwPg/jAXSPBk7A+AzwCI4dOLoPDm6F9VmYluDkfxUJFEBAXUB/DC3OwMb1aOshaOehxIlHU868GN2JHTaPw/Y1cOIM3LgBGuHCGlaG0XCpwa5hJWhAS9AM6gxOd7Azg3tXcPcuHJydGJ/2eKYn/hX51L/Dd/49Pv80OLwP1rswHkBbght4Ak9AAgY3AHADDDY4wQ0ESADgRG6QBjfcBhjX5LTC6yM8rYACFm7GUyPXSeYG7AQAeS8YgQzjAeQAbQVtBe0IphW0JeTEZQow/7NJIAEBZQ7dJsxOwsYtaPvB6MSjiOPX0O/A/CRsHYf5HJxQCswDqqEzbM+hD7h4CHechUv3TUxnn0E7/2S8fxusLsB0CJ7ADQAwV/0PIUF0UOcwPwGb16Htm9HxR6KdhxLzHg13kfc8kbxwOz64By8v4vEQ2gBOrvoPQwE+m/8OEkQFAMxVV/3PYzyNeFjjaWJ17CXZevg2mwV2z8KUYIENmWBDTpArYAF6JORF8H3A1s2wvgAHz4BxF9qaq/6nMzhhXJPrJR4OmCZxtPkYNm8q7GzBwQVYj+CA4SJMlyAeDSkYbwWqYJxg70mwvBumfciR/3VUoMyh34b5abS4HjYfROw8FB1/DOWal6aePM1sG7ZPwda1cPo4bAGHa9hvMAGjYAkMQAJTg9JDLOBYwKkO7lvB7buwd3ZifMYTGJ/8t7Sn/A1519/D7jNgeQGmQ2hLyBGygSfwBCQgALAB85zMczKQCAEJJADOEU8rnBOMA24DJnCCm/BoPIK1AdcGFuR5QDNoBzAdQltCO4DxANoR5Ag5QE4gAeZ/tAhAEB2UOXSbMD8NmzfDziPQyUdTjm3RbcPiBCy2YKOHEAhYBPSGatjuoRQ4ewB3n4f9syPj2WeQ55+CD++CcRemA2gD0ECAzVX/Q0SBKNBvw+Ia2LwB7TwUHX84sTiFuhXsPZ08+1R86U7y8Cxe7+FpCZ646j8UBfhs/ispIAqUGSigVIgAJ1dd9T+OG24jHlY4NskbX57t6yEvwcEhJGCBDU7IBnkEeQl8Engo5G3glWB+DRzcCqv7oB1BTlz1P5wMTmgjHtZ4fUCLbYYTj2DrJqiG/QuQAB2M56EdAg+Gdgl8EYgdOLwdDm+H4SK0NWD+V5AgBKrQb8PsGFpcB5sPQtsPQ8ceTZx5Werpa5ltw8Zx2LoGjp+G4zNghNUE64QGIBBgQ0soBboNWBQ4U2F/DU/fg4vnkvXTH8/wlL+hPeWv8R1/B7u34tV5mI6gDZAD5AgY3MAGAAyYfxUnkEAgN7DBCdmgDXhaQWtAYAp2hxNyMO434LrAl8D7AQEMF8ADtEMY92E8gHYE0xqcAODkfy6BAggoPZQ59MdhcR1sPgh2HolOPIyy0zPbgcVxqBvQB8wCEPQBs4S5YHMGCrhvH+45C4fnGtP528i9Z+DlPXh9DqYlkOAEJ1f9DxIFygzmJ2DjWti+BR1/JNp+MJp1qJ2HC0/DF56BD+6C5UUYjyAHsLnqPxQF+Gz+q0hQ5lBm0G9CvwGqEBUAcuKqq/7HaQNuDU+Ntv0wZg+7ns0ODs7BmGCBDQ5QDwS0Xch7gZuB45BPBfpjkA0Ong7rc9CWgLnqfzqDGx7X5LDG00Cb3YivvY7ta2Dch6M9cAfMYLobMoAzkPcC2UEWOHg6rO6F8QA88b9CBCAoPfQ7MD+NNh8E2w9Dxx5FnH5p6qmbmO/A4hhsnIKtM7C9DV3C0GBq0AwWCBBgQwhmc9iYwbUV1iM8dR/OXoDl057E8KS/ZHrq35J3/B3efQYeLsG0hLaGHMANcgIn/3EMAmGQgIQ2wDRATmDh0kH0YOFmPBSYbUEFLgKtwHAWpgNoS2iHMB3AeAnaCpyAweZ/PAGqUDdgdgLm18HWLej4I4kTD6JsBbOTsHMtzBYwTkBCrTAPqIY+4cQMCDh7APedh8NdM52/jdy7FR/dCatzMK3ADdzA5qr/ISRQhW4T5qdg83o49hB0/BFofgqVCa3vw+efBnt34qOzeLUL0wo8cdV/OIL/SgooPXQbsHEa3fSq6ORDUVRU5xCF/1NUoHRQZlB6KD1IIK76X8V4vcd075M5+tvf4tzTR9ox2NqBSCABgxNUoV4D9VrwLrTfA28ADwcMXPuacPrlYX4NlDlX/S/hhqcjcv9uxlv/mtVf/zLn/v4i+wlbN0E3Aw+gOcQxyKdCHoCuAypw4iXgxEvB4kbot0GF/xVsUAcxg7oBs1MwP4M2bkI7DyeOPYiygDqHfgtmOzDbgr5Ca7BqsDRMBnFFAhi6gEUHNxToJ7jjAM5fgtWddzLc+g9MT/8H2p3/gC/dAcM+TCtoI3gET+DGfzgbbAw4J2gjTGs8HOKDs+Sl2/DFW/Gl2/HevfjSWXzhbnxuDx8DTgCaQ38SooeyAXUb6ibUTShzUACAxP9oNiBAoAAVKAuoW1A3oRQA1MPGMdjaAAUsGzSDAQEJOKEXCAgBKlBnQAEbJBDPJK76H0QBKlBm0G3C/BQsroX+BBDQRrw6wMMBHo9gWkEbsRuYq/7jEfxXERAd1Bn027B9C7rxldDOLTDbgToHVRD/N6igbgPNj6PFCbQ4DbNj0G9DzEBc9b+IpxXt4B7Gp/8Zl/7+H9gfYH4CqgADARhyBZ6g3Aj1YcBFyL8FrgGOAbMduObVYfth0G1x1f8miYd98uIzGJ/yp6z+5vc4fyvkDmyeASbwCnQMNAfuABuYA4sZnHxp2HoI9MchOv7HExAdlB66DZidgP4UzK+FzZvR9i3EXNQZlC0om1C3YL4JvWBsMBlGYBLYgMEJASzmcKLA9gT3LuHefTi4Z4/1rY9jesbjafc8GV+6E4Y93JaQA+QAbmCDzX8KG5yAsRvYkCNeX8L7d+OLt+KLT8cH98HRLuydx3c/HY5WcC3QA91pqBsQPUQHdRO6LSg9lB4QCIgCiP+RJJC4whAFygzqAuocBCqQE6yX0AdszqB0PIsBCZrBhlpAASqB6gJKD9FBdEAAgAQKrvofRAXqHPodmJ+C+RmoG6CAnPD6AIZDGI/wuAI3cHLVfwqC/yoGFFA3YH4cHX8wuubF0faNaHYC6gYqFRD/60moW8D8ONq+BY4/Ak49Bp18NGzdAPMTEDOQuOp/i8TjAdO5p7N+4l+ydw94E2ZzkAGDAmjQ9iBXUB8M5aHAWeAu4BhQgRMvA8dfHOanQOKq/yWckCO53qXd9xTGJ/4hB0+4g4MldKehziAPwQ3iGkDAHlCBHth5GGw/FPpjEBXE/2wqACBBXUDZgP44LG6AzRvQ4gRlDmUBMYduE2ZbsNFDNGgTpAFzWQJpIGHRw6LCCcNqhLsOYe+iGe58OuNtT6bd+SR86U4Y9/F0CNMK2gA0SIPNfyobnICxR5wDTCu8uoQP7iUv3YH378Crs3C0C+fvg9vuhB44AcQWRAcSRA+lh+ihziF6iODZzP9INjiBBAACMKiDmKEC0YEM+xfgcB/mAf0MogMBBppBhjREQNdBVFC3gWY7UDegLCA6UAACm6v+B5AAQVSoG9BtQ38CZicgerChrWF9iIcVnlaQI84JMFf9pyD4r6QC3Sb0x2DzenTy0bDzIFicRPNjUBeA+N9O0aH5cWLnFnT6xamPfhfKI98V3fCa6MzLwc5DYXEaygwUXPW/g9uSPDrLdMffcXjbWYaAfgPCgLnMAk+Qu5BHoAdDXA+cB/aBHlichOMvBvMzEB1X/S8iQ1uTB3cz3fa3jE/8Mw7ugraA/hiQ4H1gDjoBiCsEzE7C5s0wOwPdFhD8jyWBAgAIUIXooT8B8zNofgrNIHqIBcQMZptwbAuq4GAFqxFaQvJsNlTBrIOTBbYM9yzhvkuwuvduxrufynT3k8nd2/HyPAwH0FaQA9DABsx/CRucXJYN5wTTEq/34Og8PrgH79+Nj87Bcg+fvxvWazgFzOfQnwFVKDOIDqJCzKB0EB0gcPI/lwDABgziihBE4AJ0UHrIBud3YRrgWAddDxZgQJAJnaBWqB1EBfpN6Heg24boICqocNX/JAIFRAdlBt0WzI5Dvw0EIDxNeBygDdBGyBHcwFz1n4Pgv1J0UDeg34HZSVicQVs3oo1rod+BOgeJ//WiQLeNjj2ccs0rUB7+DpSXfF/0oLdBN74BOvNysP1g6HdAARJIXPU/XDa83qWdfyqrpz+F5SHEHEqAzLMlMEG7CHSgRwA7wBIYgAJs3gLzayB6rvpfxAANxiNy93amp/4ly6fdx3qAcgyigo/AR8AZYAMwV5QZ9CegOwZlAVFB/M8jgQLcQAHRgTqoW1C3ULcDs+Oog5hDzIAKpcLmDDDsD7CcYExIwAYb3KCvsN3BdQGrEW7bh/3zK4a7nsp4xxPIc88gj87BsIfbCrIBCTbY/JeywQkYnDgnGPbx6hwc3geH98LqIgyHcHAW7noCLIDjQGwDBgTRQ1lAmQEBTv7HE4BBgkxoayCBCWpCBXVQN2C2gClh9xAWDc4U6AskUAA3KMCsg1Kh9KB+E3U7qNsGdRAFVEEFonDV/xAKiAJlDv0xmJ8C9YAAwTRCG3EbcY6QyVX/qaj8V5AAAEF00O9A3YRuC7ZugvkZtNqFMscKoPG/lgSqqN8hdh6Kzrwy6k8TAXndy5GbD8XdKWgjDHswHsF0CDZX/S/QVuTBWaZ7bmV18VXoN6FWYADMFYIcwGvQAXAMuAXYBs4D54F+AXUHKFz1v4yNPcLqIu2eJzI+7fEsH3YNszmUOQy7kBeBHdB14AGYAWsgNqDMocxBFTzwP5INEgCoQJlBWUDdhH4H+hnRQcwgZmDDOEAxBJAJQwIJM4ENNtQCGzPYEZQJ7jiCs3sw3HcXw51PYbr3Vnx4FoY9aCtwAwxpwPy3sIEEAZ5wG9FwgJfnUb8N/Q7uNkCCu26DEw+GY8dgfhKiBzdQQOmh9BAFoodswAgInPzPY0Bggxt4Ag/AGrRGHdBB9NDPwQ2OGuwu4eEVimC/QBuBBCV0FfoZ1B5ivo3mJ6A/Dt0WrHuIgCbAIIHNVf/dBNFDWUDdgLIJCFTAwNSgJeQE2cANMFf9pyH4LyMgISrUTSgLALRxHVqcgdkJ6DaQCv+7BahAtwWL69HOowiBDiFGYOMEXPd6cO1rw84jYX4Coueq/x3cBrzeIy/ewfrcxNSgVJABc4UAgwfwEkiu2AJeBrgJ8AVQ46r/pTzBsE9euou880mM9yYNiBlXHAIXgG3gNHAtcA0QHZCgAFWQ+B/HBhsQEKACClCFuom7bVRBFaIHKjigJYwD5AitwWRogLnChhqwUeFEwP4Sbj+Ao0sDw73PYLrvGeTevXh5AcYjnA1yAjfA/LeywQlukAOMK1hdwqtdvDwPq3Mw7sPqIly6AxbA5jbULZCAAAQIFBAFMACI/5kMqIITnNDWMO5BOwQtYQ500AYYV0BCBOyOcN8KcoS5YRIcNSgNNirMNqDOoMw6tDgF89MwO4XKAghQgIKr/geQQILooMygbkF0gBABBiiAwAYnYLC56j8NwX8ZcZkK1AXEHBmox2BxHZqfgH4bSg8S/2sJiA6VOcyuJbotNAEN1CBWoNkCrns9OP2KsHkL1E1QgLjqfzzj6ZDcv5dpd49xBRJIgHk2ASP4CBBQgScD9wGLA1jdCuMloHHV/0I29oRXF8l7n8Z0zzmmNVAhAkjwOWAPMDAA28BiCdMR0IDkfyQJQlwWFaIDdVA3oMxQ7aGAKkQHUblsnGB5BG2CBkzmWQyQMK+wVaBOcO8Kzh/A6tydjOdup+3ei4/O4/EA2hrcgAQ3/kewIRNywjnCtIb1JVieg+V5GHbx4Xm458mQCTtA3QZPEAESYC5zAgYA8z+YQAJP0AYYD2C9C+sLwBpmkA2mJbQJAkjgfIP7EtaGEOwnjBNsBHRz6OdQ5qDNa4iNa9H8DHQ7ED1EAVVQcNV/IwkwIFBAmUG3CTEDVUAQBaICAgQktrnqPxXBfxmDeaYOyhwnMD8BG9dDfwL1x6Es+F9NAgWmg24HgEiQQCchFqAVaPM0XPe6cPzFYX4aogfEVf/TGdqAl5eY9g+YVoBB4goDNsZcdgReATcAPfD3wN/cBru3wfJeyMZV/0vlBMMBuXcP7b57mfYAgQpXrMBngRWwD5w/D+0+yCWMh5AT//MJokKZQXQQPURFASqgAjbY0BrsH8FyCQUIgXmmhFpgXqFPOFjDvSvY3x1Z33sH0/k78cF9eLUL0xLcwAlOMP+DCATkBG0F6z1YXoCj87C8AMMh7J+D8TycBLodUIImiAKIyyQgAADzP5Yb2JAjtDW0FQx7cLSLj/axQD1EgagQAWFowAoYuGISHI2wJdiYQ78BdQ7aPAlb16ONG6A/AXUBMQNVUIDEVf+NzBUKqDMoC4gODLZAHVBABRSAAHPVfyqC/1IJbhABJZEnVIVmp9D8NMxOoH4TogOJ/5UMKFB0oBkCIkAGeoiHgTaBCTj50nDqFWDrQdDvgIKr/oezIRsel+TBEdMh2CCezWlIg8Er8N1AB9zCFesTsGwwHAHJVf9LuUGu4Og8eeE+2h7YgIAEBCyBCRBw7ixcfCoMF2A8Asz/SDZkggIUgIDgsjKDOoMAFaAAAgnaBJcOYPcQpgYCBAhwQg1YdLAADgc4ewDL3UuMF+9jung3ubwIbQVtjbMBCdn4H8kTHo9gPIRxBcM+Xu9CW8Le3XDvP8Ac2FhAGyFXQIOooAAACQAQ/2NlAxIM5ATjEax3Yb0LR7vkCMyh34K+h34GpUAYAjBgwAH7E5QJji+g24R+AWVR0fbNsHUTbNwAdQfKDKICAQoQV/23MEigABWIGUQPBpwQHVCh9FDmoAIKILjqPxXBfwUbnJATtBVogmmFpyNUgcX1MD8Ds5PQ76AyBwX/OxkIHD1SjwqoAj2wBDYgHg4IqBWueTXYeTTMT0H0IK76Hy8hG7maaEfgBhLPZmBKmIwTuAjcBWwDW8DWdbB5C8Scq/4XE9AGPOzjg4u0A8gJJCCBBBIYAQNHB3DhNlieBU/QBrD5n0egAAQYMEigCggUIHAAARJIYMNqgL0VDBNIXJYJAmYV5gI1uLCGS4cw7p1nunQ3PrwA4xFua3ACCW78z2OwAcDGbQ3jAYxHaNiH8QCGQzh3B0zAxha0CdoScgAPXBH872BwAgk0yBGGS7A8C/vnyf2JcQ0K6HuYLWC2ARFgc4XAwF7C3hp2Kiy2YbYB3QJi61q0dTPavAUtroWygOggKkiAuOq/gblCAVFBFVS4zAIqKjOIBZQZxAxUkASIq/7TEPxXEdBGGA9hWsLUgAFViPl1sLiO2LgezU9B6cAG8b+SooAqREUB6kAbgMAXgGsgbgQasPMoOPVysLgJui1Q5ar/wSRQYAALNxBA8GwSRMENSHADng7cA3RAL9h+KHRbgLnqf6lMjCEHvLyE9yCXQAIJNEBABRJY7cFqD9oacgTM/1gSYJ5FBaIiAIwCFCABAhucYGBKmBKcXGEIwazChmAc4ewRLA9Hxt17aJfOkqs9PB5AW4ETnJDJ/0wCADdoEx6P8HoXD3swXIJhFy7dAeuzsN2DCkwrcEI2cPK/jhNyhBxgPMKH5/HBBXzpgOEcHF0AGnQVFpswm0NwhYAQrAXn19AlHNuCug3dAmJzjrZuhM0bYeNG6E9A3YToQRWigsRV/w1sQKACKoCABAAEMYMyh7qJ6gJFDyogcdV/GoL/UoY2wHgINDyOMIC6gjZugs0b0Mb10G0DAvO/jwpQUHRQehQQPcQWaAc8ASPwYGAOVMGpl4Xth0B/HFS56n84CalCVCRQgei5wqAA9UJVMAETsAbOAmugAPMz0B8HxFX/WxmckA0PK/JgJPfAI2CgARWYAROw2oVpCW2AHPify2ADAU5AoAIGokAEBhAgUADiWQwkYEBcUQV9gBrsr2F3BctLlxh2z5KrfRj2YDyAtsY5AgmI/5Gc4AQaeAInTCsYDmDYh+EQ9u+D/dthbqiCtoIcQIANTkAAgPkfzQYAG9oKckLDIRxcwIcH5AqGJbQBqqD2sLEBfQUBNgRgwaWEYQ0nFjDfhm4T6gbo2I1o+xbYejBs3AjdNtQNiBlEB9Fx1X8XgQqoAII02EBgVdRtQd2GugllAVEBgbjqPwfBfxlBjjAcwHgAeQhtCXNQB5pdgxY3wOaNaHEKdQuQ+F9FAowlKAuoMxQQC4jjoOOgbfAhsA1cDwjYfgQcezT0J6HMQMFV/0NJSB10W6jfQAICKIC4womK0QwQ0IAeKEADKtBVKHMguOp/swQEk/G64SWQQIAT1IAJGBLWezAeQVtDTvzPl6ACCnBymRJKQgACxGUKQDyLAIkrDLVAV2A1wcUVHC5h2D+gHVwil5fweIjHJeQEGGzA/I9lg4Ecoa0hRxgPYL0P0wHs3QWX7oS6hljDuA+5gmkFHsEJJBiw+Z/NQAIGJ7QBj0s4uoT3L2GgbEKpMEuogn4Oix6qwEAaECyB3RXMgePHoG5Dt4DYmsOJR6FjD0dbD4b5NVA3IDogAEGpXPXfwUBCBKgABQiwQRXqFup2oN+BbgOiggIQV/2nIPivNh3B6gKsL8K4Dz1ED6pbaPMWYvvBxOZNqD8G0QPifw+DehQzqBuo20AVYgGxCRSgAiN4Am4GZkA/h2MvBotrocxBhav+pwooPeqPEd02EaAOEBCAICfAwALUgxpgoAIdMANYgkeQuOp/LxFcpgIUaIAAAQ1IIIFxBeM+TIeQIyD+x5JABgxRAYESAvAETGgB0QMGCSRAXCFAgLhMQC2wCOiAwxGWS2jLfdpqn1zv42kJnrCTy2z+x5MAwbSC4QDGFQwHsN6Hw/Nw4XYYLoBXMBzBeARtCTkBAOJ/BRs8QY5ggweUIx6O4HCPXDaagQqbBa4t0FeYLWBWoQgaVzTg/ADrJZzYhsUxqBtQFhDHboBjj4SdR8Dmg2F2BvotKDOICqoQFcRV/6UMNrhBABGAuEwd1C2YnUSzU6jbhjJHqiBx1X8KKv9VbFBAG2B5HlbnYbWLxxHNOkpA27gJdh6Gjj0c9p+Bhj3sEdL8r6BAUaDO0ewE0W8TFWIL6IB9YAJPwHlgG9gGRmDrwbC4EbotGC5y1f9MUoFuCy2uQ7NtSoHogREECADhCSSgAwewAnpgARwBwyG0JZBc9b+UBCoQHeo2ITowYCCBBCpQgGkJwyXINXjkfzQbDJSAHMET5Ah5CBqgNOiAHhSg4DIlIBAgAQIEAmpAAcYRDgZYrxrt6BJe7cO4gjaCDRhIQID5Hy0TIiAbTCtoK2grGBoYuHQ37N8DbQXTCmTIBCdgcIKT/xUscIIHyBE8wHSE1/t4vWJcbrJawXKERwKbFe6Zw3INajAlNEMKjgx5CNszOH4K9i5APYRxU+jkI/CwD+MBTPvgBk5wgwQCSIAGNlf9ZzM4wQkeQWsIQAVssCHm0J+A+WmYnUDdJh52IQsowVz1H4vKfyUbcoLVRTi8F5bn8XCEjh0jdiG9AdsPQ8ceSVx6Cu3oXmgrUIL5n88CBep20MYNxGyT0kHMwAmewAYMPg+sgR4owPwMbNwAdRMUIMBc9T9N6VF/Am3fTJkVagfqwAMgQCCJbML7gEE9eA0Y6IFDYFpBW4GTq/63CogKZQ7dFgrAQHCFwZUr1vuwOgfTEhD/4ynAEzi5zIZphacDlEssoIACJIgCnrhMXCEAQxH0FZphfwWHaxhXK9rRAbk+ghzACZhnEWD+hzNgIAFgXAJAnQOCvTvh0m0wXIRhHyRoS8gJcgI3/tdQgBu0NbQVbkeorWG1B8Mu9ibDEdxxL8wbvMW18Ig5/OU2XEhoR7BusAYm4NIa4hC2d2DjJKz2oK4gdzZheAyMBzAdoBzBI9h43IeWoAIkl9lc9Z/MBo/QltAOQBMgsAFDKWh2Gi+uhcU1MDsOq3NoWmMLMFf9h6LyX8pAwnofDu7Bh/fgwwv4mmOUHaj3Qdu8BY49Eo4/FR/cTg77OCcQYPM/lkAS1A2Yn0KbNxAzqDNQD14BAgNUkMGXAAMV6LdhfhrKHFTBXPU/jYBuGy3OENsPpnZQN0BzyH0wYIAADB7AAiowARU4DawBr6Ctweaq/6UUED102zA7jgoISAMjEEAHJLA6D+tdaCtw8j+aBALMFR4h15AjDEcwHEIBOkAgIApkggQSCBAgQQTUAgVoCcs1DEdrcljiaYXbCBic4ASb/zXcQAI3aANgsEGCC8+A2QyOzkJbAYY2QE7gCTD/exjcoK2hLWE8gDyEYY+8dJ423IiBtoZ/uBe2gPc4Aa+zAX+6DbcZDo/ACQmsEi7swfYcTtwIB3uwPoIYIXdO4+GxMB5AWwEGQAJGQRtwGmhAgs1V/0lscIM2wnQEwwF4BbVACRQNVFB/HC2uwxs3kvMzcHQPnpbgCdz4P0MBEjjB5r8Jlf9SgkyYlvjgXrR3O967hxwfgk5CuQhuFY4/Bg7vJA9uQ6tzcDRBjpgG5n8uFVQ30eJ6YusmSoWyCfSQ+1wmAQHMgUMggQKUCv1J6HYgOlAACeaq/yEUHep30PbDKMcfRtdDvw1DQE6AuUwICSTAwAQksANcD+wC0zloR2Bz1f9SUaFuoNkptLgOBRBAgtegObAJ7AL7d8L6IuQIOQHmfywbAFTAE7QR2gqmQ9RWMB7ClCQBFVRAAaUCCQQoQAERUAKqoAimhGGCNky09QpPK8gRcgQnRActwcn/CjZkA41gA8llCrh0F0wr2L8PcgADBpyQjf9VnKAAJ0xLGC7B6hwMe3C4y3R4yHhmkzObME7wtwfwYxO8+Ra88hbMN+BvGuytwEAC+yvIizC7DrYfBId7oAHYAE48CHIAT6AACaJA2YX1LpoOcUtQAAYMBjBX/QdzQg7QBljvgg9hbmgNmIAeImB+LWzeiDauw4d3wngAbQAl2PyvJgECcYUECDAYwPwXovJfygCQEyzP40u3w/4d5P4eXL9D3QGfB21eC6deinJwGxzeRU5LvLqAEMb8zxRQZjA7Sew8hNi+mdpBtwNThZzABosrKlCABAQEUBdQ5qAABOaq/0nqJrG4ljj1UtSt48wWUHdguQY3nsUCAgR4BZwCvRS4By4Bl26Fg6fAdACYq/53UplBtwUb16PN6xAQHbgAE7AB9MBygP3bYH0B2gow/zsYnOAJcoK2hukAhj18tMLTBgQoIAII8AgSREAUUIAEETAlHA0wNSBHPA64NXDDNkgIYQnM/x5OaCME4IRsEBWOzsNqD6Y1uIECcoQcgYQ0/ytIgLjMCW0F4z4sz+LlPfjwPrx3ltWwybQDp2cwBDwp4cd34ZXWcOMcDgOOAvYMCUzA/gHML8DiNGw8GIYjiAncwDwCbCSBAAWUGUaAEUBOmAQMMqS56j+YG7Q1TEcwLmF9ATiC2AQ3CMCgxTWw9SC09WA4vINcX4BpiZ3ABOZ/JwkUQIAAAxhCYEAJGGyw+S9A5b9Fg2EP9u/EF2/Fl+4ir9uhuwa6SzABPv5IOHw5fHQnHvfwtIZxHyQus/kfQ4IoqNsiNm5AJ16MurlBN4PYgGkNboBABhogoANGrgggelAHqoC56n+QKGh2gth5BPXaV6Cfw+YJiAWsL4INiMtkQFzRgAcDjwIeD/z9eXjKb8DFx8P6ImCu+l8oKpQ5mp1COw8n5icRQIUcQYCPAQL27oa9Z8D6IrQV/3sk2NDWMB1BW+FhD5a7MK7IcYMcQDMoBSTIBAEKUIAAARIMCUPCOMC4GslmsLETCWzjNoCT/3WckCNEhdYAgw2swcmzTGugQSb/axiIABI8wbSG8RBWF+DgLti/m7xwF+PedeztzLluE04XGIG9CX5nCdcPMK/QJ5clkMB6hPVZ6AosHgzLFUxPABoI0OlHAEYKiA7v90gFJLwu0I5QTpAN3KB04MRuYK76j+CEaQ3jAbQVLHdhuoTmp4BEfaIhwB2x9SC881B0eDtansPjEcoGaezG/zoSKEAB0YECECCQICfIEdy4wvwXoPLfwQ3GQ7x/J77wZPL8U5j2H0J/zYx6ErgPNOsZz7w8dX0WVudh2CMPJ2hrcON/FqHoYXYSHXsE5dRLUHqYHYNYwHQWnFyRQAMqUAEBAQhAoAIqgLjqf47od4iN64kzr0B36uHMN2DjOlgZpiPAXCaBBQhIiC1oO+BnAH92N/zlT8Gtvw3nngjDPji56n+hqFA30dYt6PgjUAdRgAq+CGwAx4AD4OyT4NIzYDgAN/53ECBwAwNOmI5gPETrA1jukeNJWuOy4IqooOQ5KCAEEtjQGmQLcIITLGxjDE6w+V/JCTmCCuQENABA4AZugCGT/10MTpAAwBMMe7jM4PAseel28r5TTPed4eDEI7i4CQ/agQWwX2EocOcAbYQjcZkEEqRhvYL13RAVZo+B1QTT40EGSaBHom4GdQOVOa6bUBeo3oPXF2BaQo54WoMEGNoAbgCAAHPVv5UhBxj2YdiD4QiOzsHmtRBz0Ig2ZrAPzK5BOw9DR3ei5b1o3MO5hrGBDE7+V1GAKpQe6gyiggoAIGgraAWc0FaQBpv/ZFT+OxjIBkfn8bmn4PseT559FHn6EfQ3AZcgGnj7JO3aV0PDBRj3ISfy6D7cEjD/I0goKuq3ie0HEWdennrsRmY9LK6HdYFpCYjLLMBAAgUoPJsniIAoIMBc9T+AugWanyFOPJZ642sx24Bjp6E7DhfvgWxcIRCAuEwNfA3YwBMG+PtfgSf8PJx9AizPQa646n8hCdUttLgWHXsEceyRRED00Bp4CXow0ANnD+Huv4ODO2E8AJv/FZyAQAUk8ATTEsYDPOzhg108ABUywQ26HlJcIRAgQQE6AYYhwQbJ4ASExP8dNpDQGigAgQ1uIADxv1MCBRAgaCMMe3B4N760TZ47RrvrJMOpU9y3cZLzM3iVTVga7i3QFzi/gmYus8GACrjB6hC4HXgQ1BeHYQSeAgqIIlwfjLpN3G+g2THcb0G3hVb3wfoing7QeIinNXZDUTGADTJYPAebZxNgrnoBbMgRhn0YdiGXsNqH9QXY3IKcwQbEAF4V2H4IsbwHlvfBcIlsS5wTcmIMNv8rREBUKDPoNqHbhLqAqACQI0xLGJeQa1BAW0GbwMl/Iir/bRoMB/jSbfjex5P3PIrxuptZ3DSnvwHG22AWMJ54MC1fD8ZDaGtwI5fncRvAyX8vIRVUN9DGDZSTL0G99pXoFrBxErqTsH8B3AADCRgwMAEVEFcYQEAAAnPV/wRRUH+c2H4w9cbXZX7to9jchOM3w2hY7kImIIgCLYEEJdCBzgC7wBMfB0/9Azj7BDi8B3IFNlf9LyNBmaH+GNq6mTj10pStkxRAG+AVRAe+FrwG7n4ynH8iLM9BW4KT/zVswOAGbQ05wHgI611Y78GwpnmGE6YVlICuhwSUPEsA4ooQKLgielBgTwAIYQkQ2Pyv5QQAEgBsADCA+V/JAAkAKiBBW8N6F1+6g5zt0O4+znTiBAebL83T+xmP6uHF56AG9/SwNhyNwAQ2z6IAC6Z98NPBD4F4ecgZ6AkQIyjA9QzMXhHPjsH8JJ6fhsNnwOo+vDoHwyU8HuC2xtMK2gg5YScowcmzCMBgQIJsXPVCuMF4CMtzMOzCeIAPL6D5CVxmMFW00xMNzCl87FGwPg/DLrQj3EbSidqAaWDzP5oEqlDm0G/D7DjMT0C3A7WDnGBawXQEwz6sd4EVOMGAG2TjPwmV/y4GPMDyAnnuSeSdf8V0zUMZTr04Ww8CX4Q8hDqH9enHoraCtoSccCasL0IbsJP/LoqAMkPzU5QTj6Xc8Dp0p25hMYOdB8MIrC+AkysMNCCBBiQQQAINUAEFYIgCrXHVf6MoRN0kFtdRr31lZg96Qza24PSNsHEt3HEbjAOXqYA6cEKOQAPOgLfAjx/gqX8O558Kq11oS676X0hCUaFuwuIMOv4Y4vRLEwXKHJiBz4Kuh9wEP2WCO/8KLt0K611oI2D+dzG0AVQh19BWMOzD0VnyaJ82zGAbBKyXIEPXgYNnaYZMCEEAAhQdRAWE1CEJI0D8n2Hzf4oNAG4AkCMeD9DRfXh3k1zsMG5tU7e2udA/mn/oggcFPLiDSxMcFJgDpYECMDi5TAXcYLoE7enAQ0EvBWUDyhMgDkAduNsiZy8Nm9fh3Wvx3hk4uh0f3oVX9+JhDw/75HQE0xK3NWoj5IBzAidXiCsaYJAAAYCTq56LE9oalufh8C7YvgmGQ7y6RNQtvO5h0RE7Ii+Ath4M4y6Ml9B0QGsrwo0c9lFbYxJs/keSICrUOfTbsLgGNq6FjTMwOwZ1E0oP4x7s3wncDdnACW3gCoEENv8JqPx3kmA8hN3byLv/njzzUNZnbmHjMTssHgZHfwudoduE5XUvi9y437T7JLzehWkJGMx/vahodow49jDqda9Gd9OrM5vB8Rtgfj1cugOmNc9msLnCQAICClCAYgAggOCq/14qc7R5PeXMy9A99G3YuOYUJ07ANQ+HvSPYPw82RIUEogdGmMwVO5Ar4Om3wd1/Bwd3wnTIVf9bCaKD2XFi+6GUa16JsnM9VVA2YbgAFIgHw3gE3P5EuOevYf9OGA+Bxv86AjxBjjAtYdqHYRcfnof9c+R0miYIQY4wDBCCUsCAgQpUIAAJIkClQwqIAtGBCmCQwFz1P5kbABAwLjEBB3fTzi2Y+hnj5ibL+Sa3zx/E33XwmlvwoICLCV2BWQe1wjiCASdXFMCQl8BPBB4M5dEwPw5+HOg8qIOcFXJ+I7l5Aravh72nkfvPwEd3kauz5OoCDPvksAvjIW4DtDVqK8gJu0E2wOCEnEAJNpBgrnpuNrQBVpdg/w44fhNsXwurPTzbhjojV4W6NaeO0A46yrFHo+kAtyPINc0NYTwYpgGUYPM/igQqUOaoPwab18LWLXjrJti8EWbHYPsW2DgJF54A0wqmQ2grGA9AASrgBhLY/Ceg8t/NA17t4gtPpd3250ynHsTymtdk8yGwtQ+rW2FzDv027McroNJD9BAdbfdJ5PIcbmtg4jLzX0JRUXeMsvNQ6nWvTvfgN2G2vcGx43DqMbC/hNUFLrPBDZw8m4AGCNgARsArYOIKc9V/H9UNYuNa6smXpH/Y27N5y0tzfAse/GiITTj7eBhXEBUSiIDagwVqoAX4GPhe8O1PgItPg/UuuHHV/0ISUkX9MbT9EOKaV6Rc84rUCnUGmZB7UB8L0zb48QN+xh/D2SfA6gLkAE7+dxI4oS1huASr87C6hC+dpe0/lPFMT8yhjDA2mEYIQAISGlASApAgBIoO1QUqc1ABBBhsQIC56n8oG2gggSdoK1hdxHt30boNhsUG641NdmczHl+v49qAF9uEgw7+xtABtYMyQkkYGzgBAwIMeQn0FGgrKDfBxjHgKTDeDqyAOUyLDXLr0XDsOnL/weTB7bSDu2iH99KW59D6Irm6iNsRnpZ4WkI7Qm3AbjAdQRuhGJyQI7Q1hABDJlc9gBOmJezfAxeeDFtnYPMEtCNoB7AOcl7or+mIhHa0jU6+BM41cgOMnDQAH0CuMQk2/yNIoAJ1jmbHYfMGOPZQ2HkobD0Itm6B7Rvh+MOhreDgbqib0O1A2YUoYAMJAAgksPkPRuW/kw0AbUXu3QV3/z3t+I2sTtzI4amHcfplQEtou7B9DLoCl+pLoW4T1S2GbgcuPI48uhuPB+AEkv804jJFj2YnKMceRr3u1Zg99K2ZX/sgtjbghpeA2IFLj4Np5DI3oPG8GtAD28Aqoe1BO4IcwQ0EmKv+i6nM0eIU5cRj6B76Nmw+/I04fgwe/jC49mZ43G1wuAeqEAVygtJB7aGtQSPEzTAuIO9ewT1/Bwd3QVuBG1f9L6SCZsfQ1i2UUy9Fuf61KdsnqQExh2kX6vXAQ6HdB37KX8Ltfw77d8C4Dznxv1ImSJATTGsYj/BqFy3vhYOz5O55huF68jhsFeAAPEEKVLlsTMiEDUERCFCdoboBpYcIUEAUaIAECGyu+h/KhkwIQRtgPMKr8+TegununtVik8Ou574646/qCbYDHrsFqwoXK8wThgnUgAJM4AQ3LlOAD2B6OqyWMH8QnHwJKGdgdQesLwIrYAQfO860PM54cDPj/n1MB/cx7d/FtNyF1Xm8OkeOBzAdwnARtxVqI54OIdfgBtMhDPsggQ05giYAcHIV4IQ2wHoPLt4O88fBYhs2NzE9qCcPCtmJ7kxF90DTaXTqJUgmhJkIiI6Me8j1HmoDzgZO/lspIAqqC5idgK0bYefhcPzRcPyRsPUg2LwJNq+DGXB4CRKo21B6UHCZGzjBBif/SSjAZ/PfLiFHyAZpopvjjYfS3zTj9LUw3QNqcGwLugI5P0luPAzXTZwT5ARuKCcg+U+jQGWO5qcpxx9Od8NrMHv4O7C45aXZ2YBbXgy2HwZ33Qr75yCBqYENFhiwAYMT3IBjwA5wfg9u/V04/3dwdA9MR2Bz1X8hgeqC2LyOeuLF6B/29my+2Dty4nTHI26Gx74E3HkBnvoMGBuoB5vLugWUCuMFaEB5cRiX0P7yifC4n4Pzj4PhIji56n8ZBZrtEFs3EKdeknrzm1BveA26megqtAFYQPcyMDQY/+Fu/Lc/g+/4E9i/A8YDcON/L4MCEJQO6gyiR/NjxNZJdOwa6lawswl1hEzAEEBXoEs4HrARcG4Pzu/B0SGMl+6mXXoGeXgnHvdhWkJOXObkqv/pDJjLFAiDDQYsFD0lOnJ2mnVX2ShwpofDChc6SMHYYBigTZAJaUhDGhBEAivIA6iCU9fC9dfDziaoQj+D7RlszKFfzIiNk7B5PSyux7MzsLgW5tfC4jo0Ow3za2B+DcxOoPlJ6HegzkAFBEQFBG7gBAHmqmdJrghkIxu6nujnxKxHMYOViEWh2wy0BNUdymwTRSAFkNgJNnYiDACY/3ISRIHoULcJ81No50HoxGPRyRdHJ14Cjj0aNh8M/UmYCXpgPAeH98L6PCzvheU5WF+CaQk5gRv/iSjAZ/M/gqE1mFYAqMxpi4ey89DCmS04ugu6GZw5AQVo/SbeehSeXYtVMYAbuIEbYBCgAMy/iQQSCFR61G8Ti2uoJx9Lf+PrMHvEO7B5y0tzfAse/ii49sXgrnvg3F3QElqDlmABBQzY4ARPYIAzQAGe8Qx46m/AhcfD6hzkmqv+C0mo20GbN1BOvgSzh78jmy/2zpy4ZsYjboRXehm4sIK/ezrsLSF6kCATVGA2g/44pCBvgHYGhieA/+KX4em/BYd3wHjAVf+LCBRBzHaIjespJx5DveF1Kbe8CbOtOV1ATuAKs5eFYQvWTxrIv/lF/JTfhHNPgKOzkAP/qwlQgAIyQaC6QP0Gmm2j7ZNwbIvFJuzMwAPYgKEYOsO2YC7YP4Tze3CwZ8b9s0wHd+Kje/BwCaYlygkwAGCu+t/AYCMADARYKDrUzSndBmN/it0Go2HWw1hhVWAQtISpQZsgDZmQBgERUAxew3QAuYSNGdx4Cm4+A9fuwOYM+hlszmExh5gHmm/g2Sm8uAFt3AAbN8DiRljcAItrYXYG+uPQbUGZQelBFQA8QjZwAxogwFx1PwMGBRDIQqqom1NmM3AHY1B3Kv2G0Aqi7BDzbaJ0EB2ogAAMmGeRQADmP5UECqSKygzNdmDjWmLnIejki6NTL4VOvQzafiSeXw99D3WEzQqzEdbnYHknHN0J+3fA4b2wugjTGmhg85+IAnw2/xNI4AZtgHGAbKjukMdv4dqHwkng0r2wcQxuuBZKwuAgt24iNx+Bu5MQPagABgDEs8ggQALxggmQQAEqEBWVGZqfpmw/mHr6Zegf9CbMH/m2bN34CE7twEs8Bh7y4nD7Wbj9GTA1aMDUwAAC9WAgR3CCB/AcOA1cAh7/B/CM34G9W2HYh5z4H03iWSRA/K8kQVTUH0NbN1FPvyz9w9+Jrce+PSeu7XnUjfBaLwPLCf786XDuAKgQFTLBCV3AznXQ3wjDCRhPwPpOaH/1JPLvfhru/WtYngU3rvpfQiAV1B8jNq6jnHgU9YbXpnvQW9CduIbewATahvlLwXQKjp4B7W9+m3zCL+F7/g4O7oS2BJv/1SSQwAkYbBQBUaHbQPNtdOxatCjsbMHxHsYlpKEklAm2A3YqLNdwbg8ODpLh0n20w7vJo3tgdR5Ph5AjOMEGzFX/WxgAYaRAKigKqnNKvyA2zsBsxhKYCpxcwPYCPIOhwAiME2SDNKS5LAJKQAlQwriC1SF4DSdn8Nhj8Aon4OYdmG1AmYF6KDOgA6pQ38NsC2anYH4d7s9AdxzqFtQtKDOICgrwCDmCB3CCDSTYXHU/gw2ASoejQ6VDdYZmC8p8hih4SLqdwmIniBUQW5T5SaLfhDKHmEF0WAUUEIEAEEhcJkDiP4wEEUgFlR76TTQ/SWzeSJx4JDr90uj0y6ITL4k2Hwr9CTwzxBHIsFmhO4Kj2+DS02H3abB7OxzcB8MlyIHLzH8mCvDZ/I9gwJANpjVMazC4v4Y4fYYHPQQ213DPnbB1HG55EMwrrFYw9dt457F462GoPwFlE5U5REUKLlPhMglUQAESKIAABUigCqWD0qG6QLMTaOtBxMkXp17/GvQPfRs2HvZGbF9zmuuPwyu9BDziUfD0++DJz4DlAC2hNUieqUDMIBNyAE/gEXwGOAbcegn+/ufg7j+D5b3QjsDmfywJyhzqDLoNqHNQAAbM/woCJCgLND9FbD+Met1r0D/q3dh+9Jty6kzhxW6GN3wZmBL+6Glw1z5kgdKDDW2CMBw7BZsPg6M5HPVwdDuMf3uR/LtfxE/7Lbh0K0xHgLnqfzgBElJF/TaxeR3lxCPpbngN+ge9GfXUQ+gEGqDswMZLQrsWDu+E8W//gvb3P4fv+DPYfQaMe0ADif/dBAAyIFABCQyqMxRzYr4Jx06jGZzYhmMVhgOgQQ4QDbYqHK7g/CEcHU2Mu3fT9u4iV2fx8l48XIKcICcQYK7630ICQAACRQVVFB3UOXXzOFtnznDqGFBgFGzNYXMD6gbkAsYexoApIRsYCEERRIFaoQSkYT3ApSW0AW4SvMQCHnEMbjoBJ47BtAHLHlqABAoggAioc7I7CfUYxAxKDypAgxzBI+TIZU7IiaueW0ImOFGpqFQoleg6ynxG9DMYKrmEulNYHBNlBDwn5qdQt43rFuq2cd2AMkMxw6VDUZEKKEACBUggAQLxryOBAqKg0qHoUb+JFieIjeuI4w8lTr44cfpl0OmXRcdfDDZuQn2PZwPUNWaCRYXthPEeOPckOPckOPsUuHQ7rC7CtAQ3IPlPRgE+m/9JnNBGPK1hGiAh5zfTXbvDw28A78Ntt4N6uOkhcOIamEZYr8GLU3DsxeHYo9DmLdCfxN0O6ragziFmUGagClEheoge6gzKDMoMum00O0EsrkU7DyNOvCT1+teiPujNmT/szdm86cU4dqLjkTfC67ws3HQDPOFOeOKdcDjAZJgaJGABASpQFpAN2hK8Bgf4JmAA/uHv4Mm/CheeBOvz0Eb+R6szmB+H+Unod9DmtajfQlFB4lls/scqPeqPo8V1xIkXp978pswe/W5sP/zlOX0aXuah8CYvDcMAv/s0uOMQWoFuDglME3iCrU048QjYL3BxCUe3w/pPbief8Fv4Sb8KZ/8BVruQA1f9LyCh6In5cWLzOurJR9Pd8JrMHvQmdKcfTQViDbNrYPOlYToN+3fB8Hf/wPR3P0ve+of44q2wugAewfwfYUCAQQGAaECB0iP1aGOH3NyGAse34EQPHMJwCOslyDA1uLSGo8Mjhr17aPt30Q7vwcMlPB5AW4MbOAFz1f8SCpDBRgaioOhRmaNuA/Vz4ti1LE7NiAp3XICn3QsXDmE1wCSYZjAUGBOmAZggAkpACCKgFqgVokAD9oF713DxEPoJrq/wyE249hjUk6AToE2YAnKCHCEbl7nOcD0OZRM8Qo7gCdoR5BraAG0FOYIAm6sewAlO5AYSKh0qlaiVMu+pGzPkio9MmYnF8aAKPFXoT6PFKehO4G4bumPQb0O3Dd0m1AUqMxQdlA6iggJUIAIUoAIKkABBCBBEgAKioKgoOlR7oi6IfpvYOElsXU/ZeQhx4jHE6Zcizrwcceql0dbDYXYc+oS6wh4hJqhr2JjAu3DuKXD3P8Ddj4PzT4OD+2A8hGzg5L8Alf9xDB7x0TnafU9i6Dc53D7GbVtvz8mXOcYjXgJkeMZtsHsANzwUHvXKsHk33PlEuHi2spo9nOnEw2nXvRrau5XceyrsPx2O7sHr8zBchGkJbiAjAiIg5qjbhvlpYuNGYvvBxPFHUE88jNnOSTY24ZqT8NIPh5d9KBj466fBUy7AOsGCNBAgQylAgjqIAqNBBlagG4BjwBMNd/0N7D0Dxj1oI/+jSRAd1AU85A0RHezdBhsn0bAPe3fA4T0w7MO0xDmAG2TyP0JUqBtodhJt3kScfCnKTW/E7MGvzfY125w+Dq/0KHjtR8LFS/BbT4dnHEIGbG5CVhgPwQ0WPZx5EKy24b6nw9HtA+Pf/gV521/gu/4K3/O3cHQecg2Yq/4HE0CgOkezHWLrBuqJR9Fd98r0N70u3ZnHEg0YYOMhMH8JWM7h4A4Y/uHxTP/wc+Qz/hBffDqszkOuweb/FCeoQE4wHmEE+3fi89u02QbTxoJV33NepwnDzVtw002wfzecvQfuugtmcxgmyGmJOEJaIyYkoahY4jJz1f86AhJyxOMBHvbI5QWm/ftYn7+TvTufzu3HX5IT14kU7O7C/lnICtnBGDAAXgNrwFwhQFwhQCBBFMgK5yv8dcIzDuD0IZypsDmDYxvw4FOweQo2boH7zsKFu8F3Qt4HHAKlwux62J5BPQZusLoP1uchCkQBBbiBBDZXPZMTpiU+ugBRyVJRES0gShAB3eIMkVusLwptBovjQZ3B0UVAp3A5gTduRNt30g7uQId3kUf34OVZvD6P17to3MPjIbQV5AA5QhsgJyDBCTZghEACCVRQ6VDpUZ2jbpOYHUOLM8Tm9WjrZrz1ILR5C8yvx902CChL3Aacgh7QAbQVrBKO7oM7/xbu+ns49xTYvxeGfcgRSP6LUPkfyUDDh2eZ7v57lv+wYH/zBE89/racfDS8+ItD9yS49Rw84e9g8zrYfjA89Ea4eA/c92S4dBes6xna9hnaNa9ADvt4dRFWF/D6AowHKNfgBIGiQ3UTzY4TizPE4hR1fowyg9kMTp2Chz8YXvLBcOMOXLgIj78b7jmCZcJkaAYEAiLAAQZK5TIZvA+agR8OTMCdT4f7HgdH98F4ACT/o9mgAjEDRvRK7w97B3Drn6NOxOlDfOlWvHcbHN4NqwswHuJpCW6Qjf9yEqhCXaD+BGzeQBx7NHHtq1Fvem1m1zyMzR246Vp49ZeAl7kRbr8H/vA2uHeAUmF7E2ZbsD8ADXrgmuuhXAd33wWHf/4Exr/6Hdo9j8OXbsPnngb7d8N0ADlx1f9gAlRRtyDmJyhbN1BPPpb++ldidsOrUU6+GNFgHrD5UhCPhIMGe0+H9RP+munvf4l86u/hc0+B5QVoK7D5P8kGGiQwLWF5AV94Klkq02xBdB1LXoxzN1/DNEFuwnU3wfEduHQf3HUPLAcQS2j7OA9BA84V5AgYMERAJmCu+l/ACSoA2BMal3h9iVxdYDq4l+HCCZb3Ph2dOMl6djMnroGbtuDcBTh3EVb7MCZMBhtksAAD5jIJEEgggQJKgXmBvsDKcFvCUydoAwy7MCa4h6GH7hgstmE4BePjgScBDZgDJ07C6hi0e2DvCRBzKHNQBVXIBjZXPRc3mI7g6BxEJRU0REQQFnEyqBumdtvkIFatMNssbF4vyh5wMUidwf0ZtPUw2uosOrqXPLoXr8+T64t4fQGtd/G4D+0IxkOUK2gj5ABu4IYwKECBoqDoULdBdJvEbIeYn6AszqDN64itG2FxPdmdwnWLVECucE7YhjDqG65HsDwPOcDBPpx9EtzxV3Dfk2HvbljvQY6Qjf9CVP4nMkDitiQP7mW863Ec/t02Z7dO8LjN1+HYQ+HlXgq2ng5POQsXzsLZs7BxPWw+CG64CbYuwKXb4eB2WF2AabVNm23j7VvAgLlMgIAIiIAIKBW6GSy24NhpOHMTPORGeNA2lCP4m6fB3ZfgqMHKMAqawQIFhMGCZijAxg7oJhieBNwK8TKQx4G/Bm77M7j4JBh2IUew+R9NgBuUCnu34Xt/m/pKH4ge+nLkE58AwyXK6ZeGgzvw7lPx7lPx/u14dR4P+9BWkBPOCXLiP40CokJ0qNvB/TE0O4WOPZq45pUo170q3ZnH0m+KrU142CPglV8cbpjDnz4ZHncWjgyzCse3YfsYHExwcQWa4PprYfOh8JRd2P2TpzD+wY/Qnv6neO9ufHQer/dgPABPXPU/lAQAZYb6bWJxkrJ9I92Zl2R27cvTX/tyaOuRlAlOn4Kdl4LlNXDhAuw/Y8XqiX/O+MTfYHr6n5DnnoIP7oN2CG7832XA4Ama8HgAy468eCutmzEGRE7E8Ch2r7uOttWzvwnXbMKJR8JyDvf83cB4cA+MF2Dch/EQ2oBzgmyAwQbMVf+L2CABxjnh8YhcXSIPzzHt38v63DPQHZtMsxnreg3Hz8DOTaATUM7CpV1oK0BcJkA8LwESl0kgoACzAAMEHBouJhwtYdyFcYBxgvUI4wp8DjQHPRS8A4zAnffB3bugBBUgICpIXPUC2JAjHg7g8CxEkBG0Uomup8zmeNYRs6DWhHHGeh9iFnTHgs0t4CJwCSZtQ92G+YNg54AcdtGwC8MuXu+i4RKeDmA6gGmJ2hJyAI/IDQlAKAqKSnQblNkWZbZNmR2nzE8Qi1NofgrXLZIO28AEU8PTBEWoB7oBax8O7sOH56Edwd6dcNffw31Pgv17YL0POUA2/otR+Z/KBoGnFbl3N+vb/479fsEds03+XK/IKz8cHvviMDweDu+CcYLd2+HCndCfge5m2HxpqC8JR7uwvBfW52Hag3YAXkMYQlAKlA76Ocy2YOMYbJ2AY6dh5xhsFsgDeNLT4WAf1iNMhgEYBQhCEAkCQpBAabB1LWw8Fg62QUvodmA6AfkM4Ml/D3f8KezdDutd8MT/eAbaCMMe5HVw15PIx/8Q3au+E/WWlyP//og8f4B2Xow4fRYO7sSXnkZeeireezpenoX1JTzsQ1thN8gJ5wRuAIDBgADzvMQV5tlUQAEqUGZQ5tBtQ38cNm4kjj0KnXpp4szLUk8+km4u5h2cuhEe+tLwyJtgdQF+40lwbglRYLuD41tw4hisGxztg5dw4zWw8wh42hru+4tzDH/wE0xP+C184al4tQttAI9gAwLMVf/DSKCCooP5ccrW9cSxB9Gdegzz616OeuLFyPlD2emDGx8Km4+BS3O4cAfsPf1e1k/+E4an/B7TbX9Jnns6ProA0yHQwPzfZQMJCqBBW8Owhw+DvDdpOTDkCMMK7+3C6dMMG5tc6BecONWzOAMbp83+k8/S9u/Fy3N42IccAYMCLHBy1f8yNkiAwA23NR72yYOztNkGw6zHfcfU96zcWI7XszgDsx3YOgbtEvgsTBeBI66ooIAIUEAEqIACSgEBEVCBClCgGWaGWYWxh2mCljCuYNqHdgGUEI+EPA0cAPddhLv/Bi7dDh5BCTQAUADmqhfAhpzweg9IMieaJyKS1pmcJ56NRL9D3djEOWdc9SwvGncFbUBXQWvQElgXGI/hegwtHgRtjdsSpiOYDlFbglfQligH5BHREKAQEZWoM6L21G5GnW1Suk1KnaHS4xK0cWJaj+Q4kQZqEBsB85GmIzzuwcFZfOlOODyPD8/B+afAuafC/n0wHECO4OS/AZX/yWzwQK73aLt3sL5jwf5fbnKrCuv1y/GSj4RrHwZn17B/ByCwYf9OaHeCtiCuAZ+B8iioM8gGbQ0MUBp0hj5gVmDew6KDRYVZAx/Bxbvh7CVgDWEoQAgckIZaIALaBCEIAQINsHUNbDwaLg6weyu0LfAE0+OBp9wKT/l1OPsPcHQW2hps/lfIAdb7sH8nbB3HZ++j/cNvUl7qlZm/5nXwjA3Gp0KuH0Qcewl07R4+uhvvPR3vPQ0f3EEe3IaX5/FwCY8HeFrBtAKMc4JsIIEnnA0QSGBDFCBAAgSlh5hDmUHdgv44zK9FmzfDsUehE48hjj+CsnUttUJfYOdauP7F4bqHQTfB4x8HexcgOtiYQ1/h2CbcsAM98IxLsEi45kbgJnjyCm7/iyPWv/uTTI//TfLsk2C9C7kCm2czV/0PpILqAi1OEts3UE48nO70Y6gnHoW3HkVsPJgbb+m47uGQJ+DcCi48/ZCDpz+V9dP/gvVT/5Dpjr+n7d6JlxdhOgISzP99NpCgAk48HCIndtJIwChHWF2Ci2fI7W3G2nF4+3E2z1yH1/dQ2t20vbvIw7N4fQkPB5Aj2Fz1v5XBCQgEtBGPR2TZY7p0F0QhFUwEZWqM45rVeBPlqFKOAcehPwnDEYxngQugNYQhBLWD2kM/g1kHsxlsLWBbsGnoDFOD9QQCSHADAaVCEdQCugWmm6HNwHcDd63hzmfAxYswriGX4DXkADlymQLcuOoFcEKOeH0A2WjTGsYlXu+howvo+ocRJ29Cmycp82PUzU08LlgfwbQOWgh6iB5qAw3AGlhDDjOUM5zHwUACTEiJPBI0RCI1IkSJQBJRRC1QiukqyI02DuTUaJMgRXQd6kHzEdcj2nQAq118cA7v3gEXb4fD87B3J1x4Bhyeg2kJOYLNfxMq/xvkQK52Gc/dylEUFCKnNQf7r8QtDy+cfgzoGrjvdrhwDqYJGjDtwXgB2hPBc8gt8Bb4BLANWcFAGtoAwwG0NRwdQVmDRvAEAcx7mFWwoAiKYCaYL+BoguUAAmpAGLaug/kj4Z4jOPtkGM8PtBW0S/v4vifjO/4Ibvtj2H06DLuQE/9r2DAewsG9+B6jGnhjg6nbIB5j+kdez/xayFuD4e4FyQKduhadfmk07sHqLD64kzy8kzy8izy4i1yeI4dLeDzC4yGeljgNNMgJIYxAAAWiQMyhLnDdhtlJmJ2GxfWwdQvaehDaehBanCEKVEHXw+YNcPIxcOIhMDPc8xTYuwtKgWNbMCtQCzzoOLz0abhpDrsr2Aw46uH8FvzlJXj63y05+u2fYPybXyDvfTysd6Etuep/gdKhukCLE8TOg4iTDyN2HgwbD0LHHsuphz6KGx4qto7D4TRy8dYVh2fv4+C2v+Po1r9hffvf0e57Km3vXrzahbYGJ/+v2JAjBIDweMRlTlJm8oBWF2HvDN46TqkdmgbWsy1oR6zvfhzt0p3k0XlytYunJUwDzgFIrvpfygYMKpgG0xG5AjCKiiWyjUyrI8reRbR3Aa5/ED5xEnZEboO3QQ8BboJ6AP0+zBosBIuAeQezDuZzmPVQEiKBEVoDG1qDTJCgFogO+lMwPBiWZ2AE8lbgfMLFO+HoXhjPwXQRhosw7ENbQ06QIyCu+hc4IQc8CY4u0JwwDqyXh3C4B9deIk/dRH/8OmLzODHfpus3aMsZuSq0IWgJCWSANkGboAYawROQQIKyIkDqkUHNRCRBQyTBRGQDJ55G2jRBQqYggjqDMofsR7KMtOmQXF4iDy+QB+fI3TvI87fh/fvg4B7YuxuOLkBbgxvY/Dei8r9C4nZEO7iXwRPkSK4PGS+dZe++V2Hnoddw/CY49VKwtQ8X74Lde+HoECywYVpDHkHeCRSgA1cYC2TAZChAMQRQK9QOSoFaIAMyQIIqmAUc3wYX2DsPTijARgfHrwPdBLftwX1/f8TwhL8h77yVdrDCwy7euxUuPB0uPgOWZyHX/K/TBljvQTbShjagacnkhIMRPfgWNl4etu6D6Rkw3AdtgDLboW7vwDUPww08HNHWe0zLi7TVRXJ1iba6SBsOyPEQTyuwsRMjiA7UQVngbge6YzA7CbNTeHYKumOoVgBkKAH9CVg8BDYfBpvXQDfChSfB8nYgYb4FsxkU4JpNeMkz8GLHYRPYH2HdQT+Hp4/w17fDbU+4yPLPfpHxr36Ods/j8OoC5Iqr/hdQgCr0m2h+EvptXI6jEy/OsZd4Pc489BjHdyCXF7jn6YesLu2yunAnh3c9icPb/47hnicxXbiDXF7C4yG0NWD+X7IhR4gObDwegRvpCY9HsNzFhzfgjR1KdMjJelySw5Jp/zzTwTlytYvHFbQ1zgEAEGCu+l8sGwBmhOGQdDIBQUPrfXS0x7R3ntg9C2fvgdM3ktfchE+dpG0JbwGb4G2I4zAzbBuOGY4ZdgSbgh3DtmE0jIKtDjYSFgU2e1guoAmWM9jr4WLAegnjXcDdE5y7HXafDnu3wsFtcHQPLM/B8iJMS3ADN3By1YvAhhywDUcXaU5oA4wrWO6TBxdpR7vU49eiY2fw4gTRbVDqHKYO1gWPAaPIAWxhGQuowGRQgxBkQyQIZENO4MRpMhOACEMJ7EpUM1sUoh9xHWmxZpiWeFiSRxfJvXPk/nny0t34wm1w6R44vA8fnIX1HrQBSDD/3aj8b2BDNsgj2sHEug3kap9h9266ex7PwR2vyj03vTibDzrJiQfBzkvCfAl75+FoH44GWB1BOw8cAAmMwAQWuIALOIAKpQcJCFCAgstC0BfY6uD4Jly/A3edh2EJHXDmGJy4GQ6Ow1PvgXv/+j6Gv/4N2lP/jNy9i1wfwPoAr/fg6AKsLsF4AAYksPlfJScYD2D3Tjytacs92D8Ll87BpZeDWx7OxnUdGzfAzkXw3dDuhXYICigziM0NzAZjXsc0wdhgHGEaYZomMiecJm1sYQKrYhUMGDDgBAwOoIdyHLoboLsJZtdC38F0Hi7+MbR7QBMsdmDzGGztwPUn4KEn4eYtmAN/dR7u2AM6KFtw1wqeeiecv/VpLP/+N1j/3a8w3fX35NFZyBXYXPW/gAJKhehw3aKcegwbL/O2HH+xV2GrO8IX/p5zzzhkOtwnV3ssz93O0T1PYnXf0xh372baP0eu92A8Ajf+37MhR4gODB6PwMbTwDQNsD7Csw1a7ZECjwM5HJHjEW15kRyOIAfcJsBgwMlV/1cIk9AGcrWHs6HVPqwPieUl2t496MJdcOJGfPeNcPIG8sQZfOo07CyYNmG5AHpQD6pQCswCNoHjAQ8N2K5QAAOHhnPArYa7DecNBxNcOIS9QxjOQd5xEd99O5x9Bly4DS48FS48BfbvhaPzMOzDtAQ3sAFz1YsoE2LCU8OHE4wrGI9gfUAu92gHF6inbqKcvB5tn6bNT+B+G+oGms2IruJW8NjhMWAEJkMKRsNkcIITtwQlLgIbAHUiIiiR9DPR9UktSS1J1CUt10zTknF1QFse0A4u0PbuZTq4QO6fIy/eiS/dhQ8v4KOLMB6BR7D5HwIB5n8TCamibkEsjlF2rqVc8wjKDS9F3Pzy1Ie+DBsPO8nWTdCdhqHApSfB3t/DuAtthAZQoPQQAQUoAd0M+jkUgUcoAV2FWmAxg50FnJrD9Zvw2OPgNfzyE2F/gIfcABsPglsFT3oqXPibpzD+1S8yPun3yXNPwctLuA0wraCtoQ2QI5Bg/ndTQMxgtkUcv4G49mHUm1+G7sGvSHfTSzK/4Tq2roXtTdgaodwD490w7sO0BgRRIAOmhKHBusEwwmTIBi0hDWloCQaygDvIDnID2hbkJsQO1E2oFcoR6B7gTuAA+gVsXgvHrofjZ2BrGzbmcLxCXcOF83D3PXC4e4H5RmXj2h32DuDsM27n8M5/YHXrn7F6+l8y3f0P+OA+PB5CTlz1v0RU6DbQxhn6R74Bmy/2Bsx2tijTLnnhbgqFoNEOLrK+eBfrC3cwXLyL6eAcbX2A2wA5Qk5c9QASKIBA0UHpoM6IOiO6OVHnKApkI9uAxyU5HJLTGnLEbpAJTq76v0QgUBRQBxLqFtBtovkOdNto8wxsX4M3T6Hta8mda/GJ6+HEGeL4CcrOMepiTj+rzDtYVNiosFXhTAc3V7g+4HiAgX3g7ga3TnDfCHsD7A+wWk6sz+8x3X0303134HO3kRduhb27YO9O2LsTVpdgWsF4BDkC5jIn2Fz1r6AAQNGhboOyOEbduobu2PXU49cTx86gnWvw9jXk7BjMd3C3RSszMmZkzGmqpAs5BdkCp5BFJISN0gQm1CglKUqimoiJLpJZl1StqZ4Ij+RwxLg+ZFgdsD66xHr/PNOl+2j7F8jlLu3SveTePXB0EQ8HMK2BBjb/gyDA/K8kUEGlJxbHieM3Uc48lHLzyxIPe03iQS9Od9Mm3fXQgGEfxgnGBuMSuATlAsQApUC/BbUHjSBDLdB3EECtcN0pePEz8OhNeNgC5oafewI84xAe+SAYTsFf78GTnmwO/uZPGP/2Fxmf/ue0s0/Fh/fBdAgYnODk/6SoUDfQYoc4fgPl+sdSb3wp+htfhu7Gx7K49gwnboJrTsHxhNk+DGdhtQeH+7C/C+MIWaD1MAU0gTtoFbKDVmEyTMBUYarQAlrCNEGuQPtQdkH7ECPUbZjfAJs3wua1sHkc5jOIEaZDWF2E5TlYnd1lOn87vvh0Zr3ZvOFhDENy6bYnMZx/CsPF2xjufDzjfU/Fq0t4OgI3sLnqf4kIKHPi2E101z6C2lecpsy26RbbaFrTDi8y7d3HdLRLW+7RVnvktIIcweaqF0ACBSiAAAlFQWWGygyFACAbbgOe1rgNmAQDTq76P0pCUQGAArVHZQb9Fsx2oN+G2Q7eOAlbZ/DGCdg6TWyfInaOUTa2KBtb1M1Num5OP5vTlY5FrWzXjo0SzGoBw9rmMBv7U2M5TQzrI9b7lxjPn2M6fy9t9z5y90588Rn40t2wPA+rXRj2YVpDTpADeAIDNlf9G0kgAYHKjJhtUzdOULfPEFun0bFr0fZpPDsGi5N44yTud8huE5cZGYVUIaMno8MWUhBACEKiYIIk1ChMhBuRE7U0+hiJcUmMazQumY72mVb7DIcXGfbPMxxcoB3ukkeXyMPz5OE5vN6DcQ05gJP/gRBg/rcrM1Q30MZJyskHEdc9irjpZeH6l0LXPgJdexxOQW7BtIBxBhJ0e9AfwgzQeWh3ghL6BXQ9hGHWw403w0vcBA+dwfUBJzu4fQ+edBG0CecEf30X3PaU8yz/4XcYHvfrTHf9Pe3CM/DROWhrcOP/BQWoQr9JbJwgjl9HOf0wuutfgnrdSzK/7pFs3XgzJ66vnDkBJxawIWiHcHAB9vdgfw/2D2G5hqlBM7SAFtCAydAmmCZoI7QRPEImpEBbUI9BPQP9NTA7A/NtqAGxgnYRxvtgON+YLpwjLzwDn38KXHgK7N1BlKA/eQNQWJ27g1zt0lYHjBdup+3eSa73IUfAYHPV/yISlBmabaPSodk2ZeM4EQWmFR6O8LimrfbJ8Qiy4RzByVUvAonLDEQgBKVHUQEDAozbGrJhABucXPV/nAJFwZkggSrq5lAXUBdQ59BtwvwEnu3AxjE030HdjJhvEZvblI1NymxG6efU+QZ97Zl3czoVSgSKQgMGJ6txxXp1xHS4z3TpPG1/l7Z3H7l/Hz68gA/ug/UejIcwHkJbgwEScgInV/0HkAAAQVSizIh+k9g4TmyeRFunYOs02jwNGydgcRJ3G2TMSBWsSpYZrjMcHYqCIgiJCAhMkASN4onIkXASmqhtSRlWsD7Eyz2moz2mo13GwwuMh7u05R65OiDX+3h1CQ+HkCO4gc3/UAgw/9spICqKDmbHiK0z6OQt6ORD4OTD4fhD8db1ePsM3jxG7mzB6aBeB7MzsDgG9Q7QrbDYgM0N6BJKg51jcOIY1CUcXIBFgY0KNjTB3Zfg9rsP2bv98Syf8vusn/JHTHc/gdy7Gw/7kGuw+X9HBaJD3QItjhFbJyknH0R/+uH0Zx7F7NpHM7/mIWycOs32iZ6dE7CxBdHBmHC0hsM1DGsYjmB9BOMKhgkmQzNMAa2HqUCrMPWQPWgDuhnUAiUhjoBd8HnIS3t49x584Wn44lPg0jPwxVvJvbthfYCngTLfRt2cXB2AAo9L2tFFcnWApyPIiav+F4uKooPao6igQBKeBsgRZ8M5QU5c9e+gAAkkhEACwG0CDDZIYHPV/xMKkHi2gNJB6UEFygy6Deg2oduCboG6OermqJsR3Zzo56irlNmC0vd0XU+NSkioVJqTaRqZxpHxcJ+23MerQ3K5Ry4v4tUeDEd4PILpENoI2cANMGBwgs1V/5EEMiiQKkRHdAs024TFDlocQ4sd3G1Bv4G7LVw3cLeAusBljusM1Q6iEqUQEhIEjWgjypHARA3CAzrcRas9WB2Sqz3acp9peYm2OiCHI3I4xMMRHpe4DeAGTv6HQ4D5v0ABGFRQ3YB+Cy2OwcYpWJyA+XFYnMab1+Lt6+DEg9A1DyGuv5Hu2sr8FMznsAiYBfQJtUEu4egcrO/bg71zRBpFTymVNh4xXLqb9dknsLrzb1jf+Timc8/AR+fxsA9u/L+ngkoPUVG/SWwco2ydpjt2PfXYzXSnHkY9/mDq8ZuoJ66j2zlObM7QBngB9OACKZiAyTAljAlTgylhmmCaoI3gNWgFsQIdTujgEhxdgMN7Yf8ZsPs0uHQrHN6D9+7BRxfxeISHJbihqNhGpaIoOBtuA57W4AZOrvo/QAESACjABjcAsLnqP4iCZ5HACTYgwFz1/4wECJygAAkwqIIKKCAK1E2ocygV1QVERQh1Myg9ioJKIWpH6WeUUoEEG6dpOZHTRFsd4PURnpZ4XMG0gmy4DdAG8AQ2ANAgG9hc9V9AQioQFaKi0kM3hzqDbgGzbei3odvAdQ7dAtcFqj2UjoiACEJCTuSGohBFKNdoeQkf7sL6EK+P8HBIjkvauMLTGk9rPK1xDpAT2PwvgQDzf5ECVKF0ED30G1Dn0G3AxinYuhadfDC65sXQqUdRjt1A2d4mSiWAooT1IT48B5eegXZvJY7OwjQR3RxFIVcHTPt3M+7dw3judtqle8jxEHKAbFz1AApQgArRb6Bug+jn1M2TxOI4sXma2L4ObV0H8zN4dhovTkO3Bd0cdwtceqxCIjKN20ROEzkOeFzDtMLTCo17sL4IR/ei5X1odR6O7oOjc/joAj66AOMRngZoA5Dg5ApBFEDgBCdXmKuuuuqqq/6DSIDACRKogILLooPoQED0SAFRQQIFKjMEqFRUCuIKZyIFmSMeV9iJs0Fb4WkEG3Lk2Qxu4AY2V/03UYACVFHpoPRQeujmUHqoc1xnUHooHSoVFCgCqYBEREFFaBrw6hJe7sG4hjbhtoZpIHOEbLiN2BM4wQk2/4sgwPxfI8BcIYACCi6LDuocug3YOIV2bkDb16PtG1C/gxQohDyi4RJenoXDczDsw7gEJ6HATjyuyeUeuT4g1wd4WoEbV70IokNRUFSiX0DpUO1RvwHdBpofg24L1wXUBdQNrAoqODqwyTaAG84JxiPc1pATmpZ4vYfW+zAtYVrh4RDGFTihrcGNq6666qqr/gcQgABAAgQEYFABFZCQBAjVGUYIAwYENgBgnA1yAonLsmEnOIEExGVuYHPV/xSCCCAgCkQFFYgKUSEKRIVSkQoIUCAVwChHPCyhDZANnOAGmdgNnNgJTsBg878QAsz/KwESEFB76LdQtwn9HJUOFOAEN2gjDEcwrcEJmYABQ064DRggG7iBBDZX/StJQKAooIDSoVJBBaJC6SACELZQBLa5zGA3yAmyQU7QRsgGbpAN3MCNq6666qqr/oeTAMAGBQggAAHmMgWKgm3kBMQVBgXY2AkYMCCuaGABBpur/odTgAQIFIBAAQpQAEICbCBxNnCCAQEYYWyDE2z+D0CA+X9JgEEFogMEAiSwAYOBnIAEABsAMCDAXPWfKUAAAgwSqHKZG1cY0iCBDSRXXXXVVVf9H6AAATYgEIDAyRXiMgkMYFAA5jIbMNgggQHMVf/LSFwhnkUCAwIMYJ7NPAeb/0MQYK4CBJhnE1eYq6666qqrrrrqv5nEZTbPIgECJ8+iAAw2V/1fIpABAQYEGMz/JwgwV1111VVXXXXVVVddddX/ZARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV111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ddVVV1111f9kBFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV1111VVXXXXVVVddddX/dARXXXXVVVddddVVV1111f90BFddddVVV1111VVXXXXV/3QEV/0biKuuuuqqq6666qqrrvovRHDVv04UiOCqq6666qqrrrrqqqv+C1G56kVTOhQFOyETEGCuuuqq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9ygKdoLNVVddddVV/9sJQqAAJ2Tyf5dAgAIkMOAGADZXXfXvgABz1VVXXXXVVVdd9Z9NAQBO/m8SSBABBtzA5qqr/oNQueqqq6666qqrrvqv4OT/HAkQYDDPlg0wV131HwgB5qqrrrrqqquuuuqqF4EAAwACAVHACZlcddV/IgSYq6666qqrrrrqqqteBOIK8xwiIJOrrvpPhABz1VVXXXXVVVddddW/TMFlTq666r8Ylauuuuqqq6666qqrnj8JEDi5zOaqq/6bULnqqquuuuqqq676f0uAeR4SIAAQYJ7JXHXVfxMEmKuuuuqqq6666qr/CySQIJNnkQDA5nkJJADAgACDAcxVV/0PQuWqq6666qqrrrrqfxWBAAXY4ASJyyQgQObZBBIIsLlMQCYASGCDDZirrvofispVV1111VVXXXXV/yoGAzLPJlAAAAYFVwgw2CCBxHMyZOOqq/4XQIC56qqrrrrqqquu+t9OAgXYgEEBBjA4AQHmMglsrrrqfxEEmKuuuuqqq6666qqrrrrqfzKCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquuuuqqq6666qqrrrrqfzqCq6666qqrrrrqqquuuup/OoKrrrrqqquuuuqqq6666n86gquu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qquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6Qiuuuqqq6666qqrrrrqqv/pCK666qqrrrrqqquuuuqq/+kIrrrqqquuuuqqq6666qr/6ahcddVVV1111VX/vXZuga0bIQfYvwOOzoETMFddddVVz0Tlqquuuuqqq67677F1Azz6HeExbws72/DEn4F/+FlwQk6wushV/0eVCpvXw/wYrC7C+hIMR+DkqqteACpXXXXVVVddddV/vcVpePmPh0e9BZyeweO+H/7m++HwIqiCgqv+j+o24OTD4fiDYXURVuchG9hcddULQeWqq6666qqrrvqvtTgFr/ip8Jh3gTPAHT8Pf/1zsBqAgKggcdX/QfPjcPyhsHM9TAdw8SmwugTTCjBXXfVCULnqqquuuuqqq/7r7DwYXvZT4CXfC24MePoPw1/+MhwcQL8D2gY3WO1y1f8x8+NwzYvD9k0wXIQLT4XhEFRBBdygVMgGTq666rlQueqqq6666qqr/mucfCy8ypfBo94Ubgbu/gX4i1+Gs7dDGyE6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Eg7uAwTdBpQOxiOYVlz13wYB5qqrrrrqqquu+v/h2E3ghPUBZAMnbF0H29fDsAuH90Fr0G+CE9b7MB5BNq76P6LOITqYlpATz9JtQJ3DtIRxyWX9NjhhPOSq/3YIMFddddVVV1111f8Ps23AYAOCuoDt62E6goP7wAkElAptBeMRmKv+ryg9RAfjIc+hzCAqtBVkA4AyAxWYloC56r8dAsxVV1111VVXXfX/S+lhfhz6TWgrWB8AAQoQMBxCG7jq/5DSg4EcAfMsZQZRYTwCzLNEhWyAuep/BCpXXXXVVVddddX/P3UGUeDoLLQJFKAEAqY1tIGr/o/JBm48j5wgR8AAgEBATlz1PwoCzFVXXXXVVVddddVVV131PxnBVVddddVVV1111VVXXfU/HcFVV1111VVXXXXVVVdd9T8dwVVXXXXVVVddddVVV131Px3BVVddddVVV1111VVXXfU/HcFVV1111VVXXXXVVVdd9T8dwVVXXXXVVVddddVVV131Px3BVVddddVVV1111VVXXfU/HcFVV1111VVXXXXVVVdd9T8dwVVXXXXVVVddddVVV131Px3BVVddddVVV1111VVXXfU/HcFVV1111VVXXXXVVVdd9T8dwVVXXXXVVVddddVVV131Px3BVVddddVVV1111VVXXfU/HcFVV1111VVXXXXVVVdd9T8dwVVXXXXVVVddddVVV131Px3/CILQiym6jSWsAAAAAElFTkSuQmCC",
"media_type": "image/png"
}
}
]
ref1 is a VFX sheet, not aesthetic ref. I have plenty to work with — your blog's #272727 / IBM Plex Sans + Source Code Pro stack, your NeoVim's Catppuccin Macchiato (#24273a base, warm pastel accents) + Cascadia Code, the "themeless-but-pleasant" principle, and your density target. Writing the brief now.
Bash (mkdir -p E:/a327ex/Anchor2/app/docs)
(Bash completed with no output)
Write (E:\a327ex\Anchor2\app\docs\visual_identity.md)
File created successfully at: E:\a327ex\Anchor2\app\docs\visual_identity.md (file state is current in your context — no need to Read it back)
Done. The brief lives at visual_identity.md.
What I put in it
- What the app is (2 paragraphs, distilled from OMEGA_APP_PLAN).
- Aesthetic direction built from actual data I pulled from your sites + NeoVim config:
- Your blog uses
#272727/#dadadawith IBM Plex Sans + Source Sans + Source Code Pro - Your NeoVim uses Catppuccin Macchiato (
#24273abase) + Cascadia Code h11 - The app's identity is the synthesis:
#24273abase, Catppuccin warm-pastel accents, IBM Plex Sans UI, Cascadia Code for mono. Nothing foreign from what you already use daily.
- Your blog uses
- Concrete palette — 6 bg shades, 5 text shades, 10 accent colors, 3 border shades, all with hex values and semantic names (
blue= links,peach= active mode,mauve= Oracle, etc.). - Typography scale — 8 sizes from 10px labels to 32px display headings, mapped to concrete use cases, all at 1:1 smooth filter mode.
- Chrome rules — 0-2px radius, 1px borders, no shadows, depth via bg-color differentiation only. Explicit rejection of SaaS-y rounded-card look.
- Full UI surfaces inventory — every panel, widget, view, and element type the app will have, mapped to the 10 phases. This is the list an image-gen model can render from.
- 7 image-gen prompts — one mood board (prompt A) and six specific screen mockups (canvas, browse mode, command palette, writing view, code editor, agent chat). Each references prompt A as a base so they stay consistent.
- Reference apps with specific things to borrow from each, and an anti-references list (Notion, Roam, Stardew pixel-cozy, Linear, Dribbble) so the image-gen model doesn't drift toward them.
- Working process for both UI design and prompt writing, with the "forbidden" words that pull image-gen toward SaaS defaults.
- Open questions — light mode, agent avatars, game-view framing, empty states.
One thing I want to flag
I corrected a small thing from your message: your blog uses IBM Plex Sans, not Inter. I chose Plex Sans for the app since that's what you already live in (blog + I assume you've developed taste for it). If you'd rather actually go Inter, swap is trivial — one font-register call.
What I'd do next
- You skim the brief, push back on anything off.
- Paste prompt A + prompt B into gpt-image-1 or Midjourney, see if the output feels right. Iterate on the prompt if not.
- I write an HTML mockup (via the
frontend-designskill) of the main canvas + status bar + command palette, so you can see the actual layout interactively. - Only then start the Lua implementation.
Want me to generate the HTML mockup now so you have something concrete to compare against whatever the image-gen produces, or wait until after you've tried the prompts?
Try generating an HTML mockup yourself so I can see.
Skill
Launching skill: frontend-design:frontend-design
Base directory for this skill: C:\Users\adn.claude\plugins\cache\claude-plugins-official\frontend-design\unknown\skills\frontend-design
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction: - Purpose: What problem does this interface solve? Who uses it? - Tone: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction. - Constraints: Technical requirements (framework, performance, accessibility). - Differentiation: What makes this UNFORGETTABLE? What's the one thing someone will remember?
CRITICAL: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is: - Production-grade and functional - Visually striking and memorable - Cohesive with a clear aesthetic point-of-view - Meticulously refined in every detail
Frontend Aesthetics Guidelines
Focus on: - Typography: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font. - Color & Theme: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes. - Motion: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise. - Spatial Composition: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density. - Backgrounds & Visual Details: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
IMPORTANT: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
ARGUMENTS: Generate an HTML mockup of the Anchor app's main canvas view for the user to preview. The full design brief is at E:/a327ex/Anchor2/app/docs/visual_identity.md — read that first, it contains the palette, typography, density, chrome rules, and anti-references. This is a design preview, not a production app: one self-contained HTML file with embedded CSS and minimal JS for interactivity. Write it to E:/a327ex/Anchor2/app/docs/mockup.html.
What to show in the mockup: - Full-viewport dark canvas (#24273a) with a subtle 4px dot grid pattern - Status bar at the bottom (22px tall, bg_panel #2a2d42, 1px border_faint top edge) with: mode indicator "CANVAS" in peach on the left, document title in the middle, element count + time + agent badges on the right - Left sidebar file tree (~260px wide, bg_panel, IBM Plex Sans 12-13px), showing folders and files with chevron indicators, one file highlighted as selected with bg_selected + 1px blue left border - Right sidebar: Oracle agent chat panel (~340px wide, mauve accent #c6a0f6), showing 3-4 messages with user messages in text_primary and agent messages in bg_inset with mauve left border. Tiny input at the bottom with placeholder "ask Oracle". - Main canvas area between the sidebars: four freely-positioned text block elements at non-grid coordinates. Each element is a rectangle with text inside at varying sizes (one heading 20px SemiBold, others body 14px). The second element is SELECTED — thin 1px blue border with 4 small 4x4px corner handles and 4 edge handles. - Command palette overlay (centered, 560px wide, 320px tall, bg_panel, 1px border_faint) with a search input showing typed "op" and 5 filtered action rows with yellow-highlighted matched characters, right-aligned kbd shortcuts in muted gray. The first row is highlighted bg_hover. Behind the modal, the rest of the UI is dimmed ~30% via a semi-transparent overlay.
Fonts: use IBM Plex Sans (from Google Fonts) for UI and Cascadia Code (from Google Fonts) for monospace/kbd hints. All at smooth rendering with proper font-smoothing CSS.
Critical constraints from the brief: - No drop shadows anywhere (depth via bg colors only). - Corner radius 0-2px maximum; no rounded cards. - 1px borders, low contrast except for focused element which is blue. - Mid-dense: 4-8px padding, 11-14px text is normal. - Anti-references: DO NOT look like Notion/Roam/Linear/Dribbble/any modern SaaS. Look like a customized Emacs / Helix editor / Bloomberg Terminal with better typography.
Make a tiny bit of it interactive: - Clicking a canvas text block selects it (move the handles). - Pressing Ctrl/Cmd+P toggles the command palette. - Typing filters the command palette list.
Keep JS minimal. This is fundamentally a visual preview. Use realistic lorem-ish but contextually-appropriate text in the elements (not obvious placeholder words like "Lorem ipsum"). Content should read like "notes from a dev journal" — use phrases like "friction points from yesterday", "re-read the OMEGA plan", etc. Makes it feel like a real workspace.
I'll read the brief first to make sure the mockup aligns precisely with the established palette and rules.
Read (E:\a327ex\Anchor2\app\docs\visual_identity.md)
1 # Anchor App — Visual Identity Brief
2
3 Authoritative reference for the app's look and feel. Feed image-generation
4 prompts from the bottom section into ChatGPT's `gpt-image-1` (best for UI
5 screenshots with legible text), Midjourney v7 (best for mood boards), or
6 Flux 1.1 Pro (best for local control). Interactive HTML mockups are generated
7 by Claude directly.
8
9 ---
10
11 ## 1. What the app is
12
13 Anchor is a single, unified workspace for all creative work — writing,
14 reading, coding, note-making, music composition, game development — built
15 entirely on the Anchor game engine. It replaces a scattered collection of
16 tools (Notepad, NeoVim, Claude Code, Explorer, DAW, browser) with one
17 environment owned end-to-end by one user.
18
19 Documents are **spatial canvases** where elements (text blocks, images, code,
20 game views, diagrams) are positioned freely at (x, y, w, h). There is no
21 Markdown — the document *is* its visual form. A blog post is a canvas whose
22 elements happen to be stacked in a column. A knowledge map is a canvas with
23 elements placed spatially. Same primitive either way.
24
25 It also serves triple use: the app is the daily dev environment, the website
26 (a327ex.com) is rendered by the same engine compiled to WASM, and artistic
27 artifacts (games, interactive essays) drop into the same view primitives.
28
29 The prevailing feel target is **meticulously customized Emacs or Bloomberg
30 Terminal**, not Stardew Valley. Dense, keyboard-first, information-rich, every
... [374 more lines]
Brief ingested. Writing the mockup now — the aesthetic direction is a high-precision restrained dark UI (refined density, not minimalism), executed to the letter of the brief's palette, typography, and chrome rules. Every pixel needs intentionality.
Write (E:\a327ex\Anchor2\app\docs\mockup.html)
File created successfully at: E:\a327ex\Anchor2\app\docs\mockup.html (file state is current in your context — no need to Read it back)
The mockup is now visible in the Launch preview panel. Open it and let me know what you think.
A quick orientation so you know where to look:
- Left sidebar (260px): file tree rooted at
E:/a327ex, hovering your actual project folders.visual_identity.mdis the selected file (bg_selected + 1px blue left border). Two tinyMand+badges hint at git status without shouting. - Canvas (between sidebars): 5 text elements positioned freely. The second one ("Friction, yesterday.") is the selected element — 1px blue border + 8 handles (4 corners + 4 edges). Click any other element to move the selection. The dot grid is 1px dots at 14px spacing, ~4.5% luminance — "barely visible" per §7 of the brief.
- Right sidebar (340px): Oracle panel with four messages. User messages inline, Oracle messages in
bg_insetwith a 2px mauve left border. Context meta at top shows what's selected. Tiny input at the bottom. - Status bar (22px): mode "CANVAS" in peach on the left, git diff chip, draft-status dot. Center: document path. Right: element count, time, three agent badges (Oracle/Librarian lit, Architect dimmed), inbox badge with "3" in peach.
- Command palette: open by default (seeded with "op" so you see the filtered state directly). Press Ctrl+P to toggle. Type to refilter live — fuzzy subsequence match highlights in yellow. Esc closes.
Interactions: click any canvas element to select it, Ctrl+P to toggle palette, type to filter, Esc to close.
Tell me where it feels off — palette density, grid visibility, typography sizes, anything. We iterate on this before porting to Lua.
This looks.............. REALLY GOOD!!!!!!!!!!!!!! I definitely couldn't have done it myself. Now, let me think. For each new mockup I ask, add new files, don't overwrite existing ones. One thing, the idea for the filesystem is that the app will have its own filesystem that sits on top of the system's filesystem. I explicitly don't want the notion of folders and want instead to have everything tag-based. The visual tags you did inside the "OMEGA plan, re-read" element look really nice, by the way, I like the way they look a lot. But I think the file browser to the left needs to take that into account. It's primarily a tag-based system. Then, there's the AI agent integration. I'm not sure if I want it as its own thing on the right, or if I want something else. Ideally, I want to be able to click an element and be able to type something about that element and the AI understand it instantly. But if I can do this with every element, do I need the general chat window? Probably, I'm not sure how the UX would work here actually. I think I need to think about this one more. Let's try a blog post view next. Or rather, let's have a book I'm writing that has inside it a game view, but the game view is also open in the app, like I just dragged it there, right? So I want to see one view that's primarily text with a game view, and then a game view. The game is 480x270 at its base resolution, so the view itself might be larger than that but should maintain that aspect ratio I think. The way it will work in real life is that the game view can be resized whatever way we want, it will just resize the game as though it were resizing on a real monitor with whatever logic the game uses to handle that, for most our games that means black bars on sides. Either way, let's try something like that. You may create a new prompt for yourself so that things are more specific instead of relying on my own which is kinda vague.
Glad it landed. Let me capture the tag-based filesystem call in the brief first (it's a durable design decision that every future mockup will depend on), then build the book+game mockup.
Edit (E:\a327ex\Anchor2\app\docs\visual_identity.md)
The file E:\a327ex\Anchor2\app\docs\visual_identity.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\app\docs\visual_identity.md)
The file E:\a327ex\Anchor2\app\docs\visual_identity.md has been updated successfully. (file state is current in your context — no need to Read it back)
Now the new mockup. Internal prompt I'm building against:
Write (E:\a327ex\Anchor2\app\docs\mockup_book_and_game.html)
File created successfully at: E:\a327ex\Anchor2\app\docs\mockup_book_and_game.html (file state is current in your context — no need to Read it back)
The mockup is now visible in the preview panel.
What I built against
Internal spec I refined from your request (so the intent is durable even if this response scrolls away):
Two-element scene showing "same game instance, rendered at two sizes." The essay is a book element on the left (~560px wide, serif body, Plex Sans heading, real prose about the triple-use idea). Inline at the middle of its text flow is a 480×270 native game view with a caption labeling it as figure 1. To the right of the book, a standalone game view at 520×338 — wider than 16:9 — with automatic horizontal letterbox top/bottom. Both views show pixel-identical game scenes (player + enemies + projectiles + hit effect + HUD), sold visually as "same instance." Left sidebar is the new tag-based filesystem (no folders, active filter chips at top, two-column tag overview, flat file list with inline tag chips, intersection filter
writing ∩ seven-storiesshowing 7 matches). Right sidebar removed — agent UX is deferred per your open question. Status bar shows the tag query instead of a folder path.
Things worth pointing at
- Tag sidebar: click any tag pill in the "Tags" grid to toggle it. Click the × on an active filter chip to remove it. "clear" wipes all. File rows show 3 tags inline with a
+Noverflow. - Book: real prose in IBM Plex Serif 15px / line-height 1.62. Heading in Plex Sans SemiBold. Three tag chips below the byline. The inline game view is a
<figure>with a small italic Plex Sans caption below it — "fig 1" labeled like a printed book. - Game views: identical SVG scene (player mid-fire, two projectiles en route, hit impact with particles on the enemy being shot, three other enemies scattered, muzzle flash, score popup, HUD). Tiny peach "Game · rough · 480×270" badge top-left. Tiny meta bottom-right. The standalone view shows the letterbox bars above and below.
- Standalone view is selected — blue border + 8 handles, consistent with the previous mockup, framing the "just dragged it there" story.
- Connector annotation ("↙ same instance, resized · one loop · rendered twice · aspect-preserved") sits in the gap between the two views. Mauve arrow, muted text — low-volume but tells the story.
- Supporting note card below the standalone game — a half-prose / half-code scratchpad that reads like an actual footnote the author would leave themselves. Deliberately includes a
// todo:line about a real open question (where keyboard input goes when a game view is focused).
Things I deliberately did NOT do
- No right sidebar — kept the canvas breathing and deferred the agent-UX question.
- No peach border on game-view frames — just the corner badge. Full peach border felt too loud; the dark
#000game bg already contrasts enough against the navy canvas. If you want the stronger frame, say the word. - No command palette this time — covered in the first mockup.
Docs I updated alongside
- visual_identity.md — Phase 3 section now explicitly says "no folders, tags only," with a concrete tag-chip spec; §7 open-questions has the agent-UX options enumerated and the game-view-border question marked resolved-for-now (badge only).
Next natural mockups
Tell me which feels most useful:
- Agent UX options — three variants of the element-local-AI idea (floating popover; slim strip inside selected element chrome; keep-global-panel + quick-ask keybind) side by side so you can compare.
- Write mode — distraction-free single column with the Editor agent's ghosted-text suggestion inline (
text_faintpreview + Tab-to-accept). - Code editor + Architect agent — Lua syntax highlighting, gutter, an agent strip.
- Music / piano roll + Composer agent — the Phase 8 surface, teal accent.
- Something else you want to see.
What feels off in this one?
Yes, this is very good. Let's try your further ideas. You can write a prompt for each and create each mockup and I'll correct as we go with my own needs and wants as I see each mockup.
All four coming up. I'll build them in sequence, each with its own internal prompt captured in the HTML comment block so you can see what I was solving for. You stop me when something feels off.
Write (E:\a327ex\Anchor2\app\docs\mockup_agent_ux_study.html)
File created successfully at: E:\a327ex\Anchor2\app\docs\mockup_agent_ux_study.html (file state is current in your context — no need to Read it back)
mockup_agent_ux_study.html is visible in the preview panel. Moving on to Write mode.
Write (E:\a327ex\Anchor2\app\docs\mockup_write_mode.html)
File created successfully at: E:\a327ex\Anchor2\app\docs\mockup_write_mode.html (file state is current in your context — no need to Read it back)
mockup_write_mode.html is visible in the preview panel. On to the code editor.
Write (E:\a327ex\Anchor2\app\docs\mockup_code_editor.html)
File created successfully at: E:\a327ex\Anchor2\app\docs\mockup_code_editor.html (file state is current in your context — no need to Read it back)
mockup_code_editor.html is visible in the preview panel. Final one — piano roll + Composer.
Write (E:\a327ex\Anchor2\app\docs\mockup_music_piano_roll.html)
File created successfully at: E:\a327ex\Anchor2\app\docs\mockup_music_piano_roll.html (file state is current in your context — no need to Read it back)
mockup_music_piano_roll.html is visible in the preview panel. All four are done.
What you have now
Four files in Anchor2/app/docs/:
mockup_agent_ux_study.html — design study, not an app view. Three variants of element-local AI shown side-by-side with pros/cons and an "open question" line per variant. Ends with a reading/recommendation paragraph. My draft lean is variant A (popover) with the option to promote to C (hybrid) later.
mockup_write_mode.html — Phase 6, distraction-free prose. No sidebars. IBM Plex Serif 16.5px in a 720px column. Real prose ("Notes toward a room of one's own"). Current paragraph has a blue left rail, ends with an inline ghost suggestion (peach blinking caret +
[Tab]hint). Editor agent suggests a paragraph-level revision below the current paragraph in a pink-accented block with accept/dismiss/nuke keybinds.mockup_code_editor.html — Phase 4, the actual Anchor2
main.luarendered with syntax highlighting (mauve keywords, green strings, peach numbers, blue functions, muted comments). Gutter + line numbers + git markers. Inline diff hunk shows Architect proposing to fold 8 repetitivefont_registercalls into a loop (with red/green backing and keyboard accept/reject). Architect panel on the right in blue with a plausible exchange about the tradeoff. Left sidebar has a file-outline block with current-symbol highlighting.mockup_music_piano_roll.html — Phase 8, piano roll. 2-octave pitch column with black/white keys, bar+chord lanes up top (Cmaj9 · Am7 · Fmaj7 · G7sus4), bar/beat/eighth tick grid, peach notes with one selected + a blue dotted ghost suggestion one pitch up from the Composer (voice-leading alternative). Bass notes in a warmer peach-yellow. Velocity lane below. Transport strip between the roll and the status bar with play/stop/record/metronome + BPM/time/key/loop chips. Composer panel in teal has a theory-literate exchange that ties into the Zettai Zetsumei analysis you're working through.
Things shared across all four
- Same palette, same font stack, same chrome rules — zero drift from the brief.
- Left sidebar is tag-based in every mockup that has one. File rows show 2–3 inline tag chips.
- Each agent has its sub-hue: Oracle mauve, Editor pink, Architect blue, Composer teal. Their panels all share the same structure (avatar + role + context meta + message list + scope chips + input).
- Status bar grammar is stable: mode (peach) · mode-specific chips · doc name · time · agent badges · inbox badge.
- Mode-specific chrome only where it pays its way: the transport strip in Compose, the ghost/suggestion block in Write, the inline diff hunk in Code.
What I'd want your read on
- Agent UX: which variant (A/B/C) reads right to you? My soft vote is A, but I'd love your gut.
- Write mode: is the ghost-text rendering prominent enough, or too prominent? Is the paragraph suggestion block well-scoped (sentence-level feedback) or should Editor make bigger structural proposals inline?
- Code editor: does the inline diff feel like the right place for AI proposals (as opposed to a separate diff panel)? And — is the Architect's pushback ("not really readable, try a helper instead") the right conversational register?
- Piano roll: hardest to get right without actual interaction. Does the density read, or is it too packed? Are the chord labels + functional analysis (Iᴹ9, vi⁷, IVᴹ7, V⁷ˢᵘˢ) at the top something you'd want, or clutter?
Pick any of those to push back on, or flag something I didn't anticipate.
I think it's safer for us to the normal agent UX with a screen on the side for now. I don't know how exactly I'll want to integrate UI conversations on a per-element basis, if at all, so for now I think it's a good idea to keep it normal. The writer mode is the most polished of them all, looks good, works well. I rarely write focused like that, I need lots of tabs open and so on, but the general UX, especially with the agent interjection, looks really nice. That little box with the accept/deny on the writer mode is the cleanest. The code editor looks the worst. I think the accept/reject thing got broken somehow so it's displaying incorrectly. But that's honestly a detail, you seem to have a handle on everything else so we don't need to fix this now. The piano roll is also whatever, I actually don't like composing using the piano roll, I prefer programs like Guitar Pro where they give you the actual sheet music thing, so whatever we do will probably learn towards that or something like Strudel where it's code based, or a mix of both somehow. But the default DAW UI will not be what I use. I think there's no need to iterate on these that much more. You have a really good handle on how the UI feels and you're applying it consistently everywhere. It's really functional and looks pretty decent, so we'll just go with this general style and then we'll decide on further details as we implement each phase and each element and so on. Please do any upkeeping work that you need to consolidate all this so future instances can know where to look exactly. I'll reiterate everything that I found really good: general feel of the UI, top and bottom status bars, tag-based tab on the left, the book + game mockup looks logical and like it makes sense, both the A and B AI conversation UIs look good, the B looks especially good, we might want to use that general idea for other purposes in the future other than AI integration. The general way in which you presented the Agent UX study also looks good with the A, B, C big blocks and title + little description on the side. Everything about this page looks well presented. The writer mode looks the most well polished, the AI integration looks clean, and especially the UI for accept/reject and so on looks really good. That whole page looks nice with the top and bottom status bars that I mentioned I liked as well. The general way in which the chords are separated at the top status bar in the piano roll looks good, the bottom status bar also looks good and functional for that screen.
I think an important thing to mention is that the target resolution actually isn't 1920x1080, because I have two monitors, and I'll definitely want the app to take over multiple monitors most of the time. So in reality we'll have more space to play with in the end. But for now it's fine to assume one screen only.
Captured. Consolidating everything before we move to implementation.
Edit (E:\a327ex\Anchor2\app\docs\visual_identity.md)
The file E:\a327ex\Anchor2\app\docs\visual_identity.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\app\docs\visual_identity.md)
The file E:\a327ex\Anchor2\app\docs\visual_identity.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\Anchor2\app\docs\visual_identity.md)
The file E:\a327ex\Anchor2\app\docs\visual_identity.md has been updated successfully. (file state is current in your context — no need to Read it back)
Now adding the three new sections at the end — committed direction, mockup index, reusable patterns.
Edit (E:\a327ex\Anchor2\app\docs\visual_identity.md)
The file E:\a327ex\Anchor2\app\docs\visual_identity.md has been updated successfully. (file state is current in your context — no need to Read it back)
Now the project memory — correcting the outdated multi-monitor claim and pointing future sessions at the settled reference.
Read (C:\Users\adn.claude\projects\E--a327ex\memory\project_anchor_app.md)
1 ---
2 name: Anchor app (omega app)
3 description: Canvas-based workspace app in Anchor2/app/ — the omega-app vision from OMEGA_APP_PLAN.md, starting Phase 1 Foundation 2026-04-17
4 type: project
5 originSessionId: 776d994d-07fd-4a03-a799-680a4b64e07c
6 ---
7 The user is building an "omega app" in `Anchor2/app/` — a canvas-based unified workspace (planned to replace Notepad, Explorer, editors, DAW, browser). The authoritative design is `OMEGA_APP_PLAN.md` in the repo root. Documents are spatial canvases of positioned elements (text, image, code, game view); no Markdown; native structured format. Triple use: dev environment, a327ex.com website via WASM, artistic artifacts — all rendered by Anchor.
8
9 **Why:** Four months of Claude Code use eroded code ownership; the realization was that what needs owning is the *environment*, not the code. Claude-written code is replaceable; the place you work inside of isn't.
10
11 **How to apply:**
12 - Follow `OMEGA_APP_PLAN.md` phase order (1 Foundation → 10 Background). Phase 1 has many sub-systems; build one at a time.
13 - Target hardware is a single 1920×1080 Windows monitor. No hi-DPI or multi-monitor work needed.
14 - App runs at `engine_set_game_size(1440, 900)` + `scale=1`, `filter='smooth'`. Not pixel-art; high-res for legibility.
15 - Engine now supports per-layer + per-font `filter_mode` (smooth/rough). Mixed-mode frames work: game-view elements can be rough layers inside an otherwise smooth canvas.
16 - Coding conventions match arena (`Anchor2/arena/main.lua`): procedural framework modules, `class()` for entities, `make_entity(self)`, ID-based cross-refs, explicit destroy.
17
Edit (C:\Users\adn.claude\projects\E--a327ex\memory\project_anchor_app.md)
The file C:\Users\adn\.claude\projects\E--a327ex\memory\project_anchor_app.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (C:\Users\adn.claude\projects\E--a327ex\memory\MEMORY.md)
The file C:\Users\adn\.claude\projects\E--a327ex\memory\MEMORY.md has been updated successfully. (file state is current in your context — no need to Read it back)
Consolidation done. Here's what's now in place.
What changed in the brief
- §2 Target hardware — new subsection. Dev target is single 1440×900 now; eventual target is multi-monitor; no hi-DPI.
- §3 Phase 8 Music — rewritten. Piano roll is not the primary music UI. Sheet-music (Guitar Pro-like) and/or code-based (Strudel-like) are the preferred directions. The piano-roll mockup stays as a layout reference only.
- §7 Open questions — agent UX resolved for v1 (global right-side panel); variants A/B deferred with B flagged as a candidate for non-AI element-local affordances. Multi-monitor and the code-editor diff bug added as known items.
- §8 Design status (new) — an explicit "locked decisions" block so future sessions don't re-open settled questions. Lists non-goals too.
- §9 Reference mockups (new) — table indexing all six mockup files with a one-line description each and flags where a mockup predates a later decision (e.g.
mockup.htmluses folder-based files before the tag decision). - §10 Reusable patterns (new) — the three you called out:
- Accept/reject block (from Write mode) — canonical pattern for any inline proposal, AI or otherwise.
- Inline element strip (variant B) — reusable for element-local affordances generally.
- Design-study page layout — template for future comparison pages.
What changed in memory
project_anchor_app.md: corrected the multi-monitor claim, added the authoritative-references reading order (plan → brief → mockups → CLAUDE.md), listed all locked facts, flagged the music-not-piano-roll preference.MEMORY.mdindex: updated the one-liner for the Anchor app to say "visual identity locked, ready for Phase 1 implementation."
Future Claude instances opening this project will read the project memory, follow it to visual_identity.md, hit §8 first (locked decisions), then §9 to browse the mockups. That's the path.
Where I think we go next
Phase 1 Foundation, first concrete slice. Following the brief's "working process" (§6): pick the minimum elements, decide hierarchy, build.
Concrete first step — implement in Anchor2/app/main.lua (replacing the current smooth-vs-rough demo):
- Empty smooth canvas with the dot grid (14px spacing, ~4.5% luminance, matches mockups).
- 22px status bar at the bottom with mode indicator "CANVAS" in peach + one placeholder middle slot.
- One hard-coded text element at e.g.
(200, 150, 340, 100)with a short line of static text in Plex Sans 14px. - Click element → selected (1px blue border + 4 corner handles + 4 edge handles, 5×5px, matching mockup).
- Drag body → move. Drag handle → resize.
- Click empty space → deselect.
No file browser yet, no agent panel yet, no text editing yet, no command palette yet. Just the canvas + element + selection state machine — which is the primitive everything else sits inside. ~180–220 lines of Lua against the existing framework.
Want me to start on that, or something else first?
Do we have a plan file ready? Where is it? And does it take into account the fact that we locked the design now? We could regenerate it or change it based on what we now know is more likely to happen.
Yes — E:/a327ex/OMEGA_APP_PLAN.md at the repo root is the plan. It predates the design lock and has a few stale pieces. Let me re-read it to be precise about what to touch.
Read (E:\a327ex\OMEGA_APP_PLAN.md)
190 - Conversation view as a panel
191
192 **Milestone:** Blog posts are written in this app. It's the daily writing tool. Vim keys work. Modes switch. AI Oracle available for questions.
193
194 ---
195
196 ### Phase 3: Filesystem + Tagging
197
198 **Filesystem view:**
199 - Tree view of directories (panel in Browse mode)
200 - File preview (click to preview without opening)
201 - File operations (create, rename, move, delete — with undo)
202 - Drag files between folders
203
204 **Metadata database (SQLite):**
205 - Every file gets a stable ID
206 - Tags (arbitrary string labels)
207 - Project assignments (file belongs to projects X, Y)
208 - Custom metadata
209 - Full-text search index
210
211 **Tag-based workflow:**
212 - Right-click file → assign to project, add tags
213 - Filter views: files matching tag query
214 - Tag management panel
215
216 **AI integration for this phase:**
217 - AI-assisted tagging: agent scans untagged files, suggests tags
218 - AI memory per file: conversation summaries attach to file metadata
219 - Librarian agent: search-focused, finds things in knowledge base
... [50 more lines]
Read (E:\a327ex\OMEGA_APP_PLAN.md)
320
321 **Milestone:** Notes, references, highlights organized and searchable. Knowledge base with AI-suggested connections.
322
323 ---
324
325 ### Phase 8: Music Views
326
327 **Composition:**
328 - Piano roll view
329 - Synth/instrument patches using Anchor audio system
330 - Sound library browser (integrated with filesystem tags)
331
332 **Theory learning:**
333 - Exercise view (chord ID, scale construction, intervals)
334 - Reference wall for songs being studied
335 - Progress tracking
336
337 **AI integration for this phase:**
338 - Composer agent: music-focused, knows theory curriculum, suggests chord changes
339 - Active during composition and practice
340
341 **Milestone:** Chiptune game music composable within the app. Theory learning integrated with composition tools.
342
343 ---
344
345 ### Phase 9: Game Development Views
346
347 **Core:**
348 - Game launcher (run projects from the app)
349 - Live game state inspection
... [85 more lines]
Yes — OMEGA_APP_PLAN.md at the repo root is the plan. It's from before the design lock and has a few stale bits:
- Phase 3 describes "Tree view of directories" / "Drag files between folders" — contradicts the tag-based decision.
- Phase 8 puts piano roll first — contradicts your sheet-music / code-based preference.
- Track B lists engine work as pending but doesn't note that the per-layer filter-mode engine work is already done.
- No "current status" section telling a new reader where we are and where to find the locked design decisions.
Everything else in it (vision, architecture, other phases, dependency graph, agent roster) still reads correctly. My approach: preserve the original voice, surgically update the stale parts, and add a current-status header that points to the brief + mockups. Not regenerating.
Edit (E:\a327ex\OMEGA_APP_PLAN.md)
The file E:\a327ex\OMEGA_APP_PLAN.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\OMEGA_APP_PLAN.md)
The file E:\a327ex\OMEGA_APP_PLAN.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\OMEGA_APP_PLAN.md)
The file E:\a327ex\OMEGA_APP_PLAN.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\OMEGA_APP_PLAN.md)
The file E:\a327ex\OMEGA_APP_PLAN.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (E:\a327ex\OMEGA_APP_PLAN.md)
The file E:\a327ex\OMEGA_APP_PLAN.md has been updated successfully. (file state is current in your context — no need to Read it back)
Done. Summary of what the plan now says vs. before:
| Section | Change |
|---|---|
| New Current Status (2026-04-17) block between Vision and Architecture | Tells a future reader where we are + the reading order for the project (plan → brief → mockups → CLAUDE.md), what's done, what's next, and the four decisions that supersede older text below (tag-based files, sheet-music/code music, global agent panel, multi-monitor). |
| Track B | Split into "Done" (per-layer + per-font filter_mode, shipped 2026-04-17) and "Pending" (HTTP, directory listing, file watching, async). |
| Phase 1 milestone | Added Implementation notes with the 8-step recommended build order, visual reference to mockup.html, and pointer to arena coding conventions. |
| Phase 3 | Rewrote around the explicit "the app has no folders" statement. Files view is flat + tag-based. "Drag files between folders" removed. Added reference to mockup_book_and_game.html as the canonical visual. |
| Phase 8 | Rewrote to lead with notation / code-based composition (Guitar Pro + Strudel analogies). Piano roll demoted to fallback, noted mockup_music_piano_roll.html is kept as a layout-grammar reference only. |
Everything else — vision, architecture, dependency graph, agent roster, Phases 2, 4, 5, 6, 7, 9, 10 — is unchanged.
Ready to start Phase 1?
The first concrete slice is the one I proposed last turn — canvas + one text element + selection + status bar, in Anchor2/app/main.lua, replacing the smooth-vs-rough demo. ~180–220 lines. Matches mockup.html's center region.
Say the word and I'll draft it.
Change the file name to plan.md and move inside the app folder. Then let's end this session. Call it Anchor App Design
Let me find all references to the old path first so I can update them cleanly.
Grep (OMEGA_APP_PLAN)
Found 2 files
Anchor2\app\docs\visual_identity.md
anchor.blot.im\logs\anchor-arena-final-and-neovim-diff-tool.md
Grep (OMEGA_APP_PLAN)
Found 1 file
C:\Users\adn\.claude\projects\E--a327ex\memory\project_anchor_app.md
Grep (OMEGA_APP_PLAN)
172:by phase from OMEGA_APP_PLAN.md. Image-gen prompts below reference these.
Grep (OMEGA_APP_PLAN)
12:1. `OMEGA_APP_PLAN.md` in repo root — the 10-phase build plan.
Moving the file and updating both references in parallel.
Bash (mv E:/a327ex/OMEGA_APP_PLAN.md E:/a327ex/Anchor2/app/plan.md && ls -la E:/a327ex...)
-rw-r--r-- 1 adn 197121 23391 Apr 17 13:08 E:/a327ex/Anchor2/app/plan.md
ls: cannot access 'E:/a327ex/OMEGA_APP_PLAN.md': No such file or directory
old path cleared
Edit (E:\a327ex\Anchor2\app\docs\visual_identity.md)
The file E:\a327ex\Anchor2\app\docs\visual_identity.md has been updated successfully. (file state is current in your context — no need to Read it back)
Edit (C:\Users\adn.claude\projects\E--a327ex\memory\project_anchor_app.md)
The file C:\Users\adn\.claude\projects\E--a327ex\memory\project_anchor_app.md has been updated successfully. (file state is current in your context — no need to Read it back)
File moved and both references updated. Now ending the session.
Skill
Launching skill: end-session
Base directory for this skill: E:\a327ex.claude\skills\end-session
End Session Workflow
This skill is invoked from the same conversation where the work was done. You already have the full session context in memory — you do NOT need to read the transcript.
Step 1: Get Session Info
Ask the user: 1. Session title (max 30 characters). Examples: "Anchor Phase 10 Part 5", "Physics Arena Setup", "Timer System Fix" 2. Which project was this session for? Options: Anchor, Anchor2, emoji-ball-battles, orblike, other
Step 2: Write Summary
Write the summary from your conversation memory. You have the full session context — no need to read any files.
The summary should be thorough and detailed. Each major topic deserves its own section with multiple specific bullet points. Don't compress — expand.
Purpose: These summaries serve as searchable records. Future Claude instances will grep through past logs to find how specific topics were handled. The more detail you include, the more useful the summary becomes for finding relevant context later.
Format (this is just an example structure — adapt sections to match what actually happened):
# [Title] ## Summary [1-2 sentence overview of the session's main focus] **[Topic 1 - e.g., "Spring Module Implementation"]:** - First specific detail about what was done - Second detail - include file names, function names - User correction or feedback (quote if notable) - Technical decisions and why **[Topic 2 - e.g., "Camera Research"]:** - What was researched - Key findings - How it influenced implementation **[Topic 3 - e.g., "Errors and Fixes"]:** - Specific error message encountered - Root cause identified - How it was fixed [Continue for each major topic...] --- [Rest of transcript follows]Rules: - Be thorough — If in doubt, include more detail, not less. Each topic should be as detailed as possible while still being a summary. - Think searchability — Future instances will search these logs. Include keywords, function names, error messages that someone might grep for. - One section per major topic — Don't combine unrelated work into one section - Chronological order — Sections should match conversation flow - Specific details — Error messages, file names, function names, parameter values - Include user quotes — When user gave notable feedback, quote it (e.g., "k/d variables are not intuitive at all") - Weight planning equally — Research, proposals, alternatives considered, user feedback on approach are as important as implementation - Weight problems solved — Errors, root causes, fixes, user corrections all matter - Technical specifics — Include formulas, API signatures, parameter changes when relevant
Step 3: Get User Approval
Show the title and summary to the user. Wait for approval before proceeding. If they have corrections, fix them.
Step 4: Convert Transcript and Write Log File
# Find recent sessions (Claude + Cursor; see script). Same script lives in Anchor2: python E:/a327ex/Anchor2/scripts/find-recent-session.py --limit 5 # or: python E:/a327ex/Anchor/scripts/find-recent-session.py --limit 5The script shows sessions sorted by when they ended. The first result is the current conversation (since end-session was invoked here). Use it.
Convert the transcript to markdown and write the log file with the approved summary as header:
python E:/a327ex/Anchor2/scripts/jsonl-to-markdown.py [SESSION_PATH] E:/a327ex/anchor.blot.im/logs/[slug].md # or: python E:/a327ex/Anchor/scripts/jsonl-to-markdown.py ...The same script auto-detects Claude Code JSONL vs Cursor/Composer agent JSONL (
~/.cursor/projects/.../agent-transcripts/...). For Composer sessions, usefind-recent-session.py(it merges both sources) and pick the[cursor]line for the current chat.Use lowercase hyphenated slug derived from the title (e.g., "anchor-primitives-hitstop-animation").
Then replace the default header (
# Session YYYY-MM-DD...) with the approved title and summary.Step 5: Sync Context Files to Blot
cp E:/a327ex/.claude/CLAUDE.md E:/a327ex/anchor.blot.im/context/CLAUDE.md cp E:/a327ex/Anchor/docs/* E:/a327ex/anchor.blot.im/context/When the session was Anchor2 (optional):
cp E:/a327ex/Anchor2/.claude/CLAUDE.md E:/a327ex/anchor.blot.im/context/CLAUDE_ANCHOR2.mdStep 6: Commit Project Repo
Based on which project was worked on:
For Anchor:
bash cd E:/a327ex/Anchor git add docs/ framework/ engine/ scripts/ reference/ git statusFor Anchor2:
bash cd E:/a327ex/Anchor2 git add framework/ engine/ arena/ reference/ scripts/ docs/ .claude/ git statusFor emoji-ball-battles:
bash cd E:/a327ex/emoji-ball-battles git add -A git statusFor orblike:
bash cd E:/a327ex/orblike git add -A git statusFor other projects: Ask the user which files to stage.
IMPORTANT — FULL SUMMARY IN COMMIT: The commit message MUST include the FULL summary from the log file. Read the summary back from the log file to ensure nothing is missing.
IMPORTANT — COMMIT METHOD: The summary contains backticks, special characters, and markdown that WILL break heredocs and
git commit -m. ALWAYS use the file-based method below. NEVER try a heredoc first — it will fail and produce a malformed commit that needs amending.Commit using a temporary file (extracts only the summary text, not the markdown heading or
## Summaryline):# Extract summary: skip line 1 (# Title) and line 3 (## Summary), take lines 4 onward until the --- separator awk 'NR>=4 && /^---$/{exit} NR>=4{print}' E:/a327ex/anchor.blot.im/logs/[slug].md > /tmp/commit_msg.txt # Prepend the title (plain text, no #) and append attribution sed -i "1i [Title]\n" /tmp/commit_msg.txt printf "\nGenerated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n" >> /tmp/commit_msg.txt git commit -F /tmp/commit_msg.txtStep 7: Push Both Repos
# Push project repo to GitHub git push origin main # Push Blot repo (logs and context are already there) cd E:/a327ex/anchor.blot.im && git add -A && git commit -m "[Title]" && git push origin masterStep 8: Confirm
Tell the user: - Commit hash - That GitHub push succeeded - That Blot push succeeded
ARGUMENTS: Anchor App Design
Here's the summary for your approval before I run the rest of the end-session steps.
Anchor App Design
Summary
Session focused on the new Anchor app (omega-app): fixed the engine's filter_mode rendering so high-resolution UI and pixel-art game views can coexist in one frame, scaffolded Anchor2/app/, committed the visual identity via a brief and six HTML mockups, and updated the build plan accordingly.
Omega app orientation:
- Read
OMEGA_APP_PLAN.mdplusAnchor2/.claude/CLAUDE.mdandarena/main.luaas the canonical v2 coding reference. - The app replaces a scattered toolchain (Notepad, Explorer, editors, DAW, browser) with one Anchor-engine-rendered workspace; triple-use with a327ex.com (via WASM) and artistic artifacts.
- Flagged architectural open questions before any code: element-as-entity vs lighter widgets, canvas/edit vs vim normal/insert/visual mode hierarchy, testing approach, Track B engine timing.
Filter mode research in anchor.c:
- Global
static int filter_mode = FILTER_ROUGHat line 921, binary smooth/rough toggle. - Mapped three places filter_mode is used: font atlas rasterization (1-bit mono vs 8-bit grayscale at line 1065-1114), font atlas GL filter GL_NEAREST/GL_LINEAR at line 1155, and shape SDF shader uniform
u_aa_width(1.0 smooth / 0.0 rough) set once per frame at lines 9907-9910 and 10319-10321. - Identified three bugs breaking smooth mode: (1) Layer FBO textures hardcoded to
GL_NEARESTat lines 1704-1705 and 1751-1752 so smooth AA inside the FBO is destroyed on upscale; (2) sprite/glyph fragment shader branch at lines 9258-9260 force-snaps UVs to texel centers regardless of filter_mode, defeating linear sampling on glyphs; (3)texture_loadhardcodesGL_NEARESTat lines 828-829. - Also noted: no MSAA (only
SDL_GL_DOUBLEBUFFER), noSDL_WINDOW_ALLOW_HIGHDPI, game size fixed at init, and that the binary global filter mode prevented mixing pixel-art game views inside a smooth UI canvas.
Engine fixes — per-layer and per-font filter_mode:
- User escalated the mixed-mode concern to a blocker: "Let's actually fix this at the source."
- Added
int filter_modefield to theLayerstruct; changedlayer_create(w, h, filter)to set FBO color texture + effect ping-pong buffer filters accordingly. - Added
layer_get_or_create(name, filter); updatedl_layer_createLua binding to accept optional'smooth' | 'rough'argument, defaulting to current global. - Added per-layer
u_aa_widthuniform upload inlayer_renderso smooth and rough layers coexist in the same frame. - Fixed the sprite/glyph shader UV snap: gated
sampleUV = floor(vUV * texSize) + 0.5) / texSizeonu_aa_width == 0.0. In smooth mode glyphs now sample linearly, making sub-pixel text positioning and rotation look right. - Changed
font_load(name, path, size, filter)to take an explicit filter param (previously read the global); updatedl_font_loadto accept optional fourth string arg. - Framework updates:
layer_new(name, filter)andfont_register(name, path, size, filter)pass filter through. Default remained rough for arena back-compat. - Built engine cleanly (cl.exe, Visual Studio 2022), copied anchor.exe to
Anchor2/app/andAnchor2/arena/, verified both with--headless --verifyruns. Arena still renders identically.
Anchor2/app/ scaffolding:
- Created
Anchor2/app/withanchor/framework copy,assets/(copied Quicksand-Regular.ttf, RobotoMono-Regular.ttf, LanaPixel.ttf from existing locations),anchor.exe,run.bat, andmain.lua. main.luademo: 1440×900 smooth vs rough side-by-side — both halves draw identical content (circles, rounded rects, rotated shapes, outlines, star polygon, thin lines at sub-pixel angles, sub-pixel positioned text) to visually prove the fix. User confirmed: "It works beautifully and perfectly."
Visual identity brief creation (Anchor2/app/docs/visual_identity.md):
- User requested a document summarizing what the app will have + pointers for an image-gen model, with explicit preference for "functional but pretty" not "minimalist with huge spacing".
- Answered 5 design questions: mix of cool-neutral + warm-dark palette; mix of bloomberg-extreme + mid-dense density; fonts — "I think my website uses Inter, check yourself" (it uses IBM Plex Sans per live CSS fetch) + NeoVim uses Cascadia Code h11 + Catppuccin Macchiato theme; "themeless but pleasant" as the mood; no brand motif.
- Gathered concrete data: fetched
a327ex.comlive CSS (bg#272727, text#dadada, IBM Plex Sans + Source Code Pro); readC:/Users/adn/AppData/Local/nvim/init.lua(Catppuccin Macchiato + Cascadia Code h11, custom diff highlight colors#424f71/#4b5c55/#604355). - Committed palette: backgrounds bg_deep #1c1e2d / bg_base #24273a / bg_panel #2a2d42 / bg_inset #1f2030 / bg_hover #2f334a / bg_selected #363a54; text primary #dadada / secondary #a5adcb / muted #7f849c / faint #6e738d / heading #e4e6f3; accents from Catppuccin Macchiato (blue #8aadf4, lavender, peach, green, red, yellow, pink, mauve, teal); borders faint #353a50, subtle #3f4358, active = blue.
- Typography: IBM Plex Sans UI, IBM Plex Serif long-form, Cascadia Code mono. Size scale from 10px labels to 32px display.
- Chrome rules: 0-2px radius, 1px borders, no shadows (depth via bg-color only), hover 80ms ease-out.
- Per-agent accent mapping: Oracle mauve, Editor pink, Architect blue, Composer teal, Librarian yellow, Cartographer lavender.
- Recommended image-gen tools as of early 2026: OpenAI gpt-image-1 (best at UI typography), Midjourney v7 (mood boards), Flux 1.1 Pro (local control); noted Claude itself for interactive HTML mockups.
Mockup 1 — main canvas (mockup.html):
- Full app view at 1440×900: 260px left tree-style file browser, canvas with 5 freely-positioned text elements (2nd selected with 1px blue border + 8 handles), 340px Oracle agent panel right, 22px status bar, command palette open with "op" query filtered and yellow-highlighted match chars.
- User feedback: "This looks.............. REALLY GOOD!!!!!!!!!!!!!!"
Tag-based filesystem decision and Mockup 2 (mockup_book_and_game.html):
- User clarified: "the app will have its own filesystem... I explicitly don't want the notion of folders and want instead to have everything tag-based."
- Also flagged: inline tags ("OMEGA plan, re-read" element's tag chips) looked really good, keep that pattern.
- Updated brief's §3 Phase 3 from "Tree view of directories" to "no folders, tags only" with flat file list + active filter chips + two-column tag overview + inline tag chips on file rows.
- Mockup 2 built: book element with inline game view at native 480×270, standalone game view at 520×380 (aspect 1.368, narrower than 16:9 so horizontal letterbox bars visible), identical SVG arena scene in both (player mid-fire, 4 enemies, 2 projectiles, hit impact with particles, score popup, HUD), small "↙ same instance, resized" annotation between them, right sidebar removed, new tag-based left sidebar with
writing ∩ seven-storiesfilter showing 7 matches. - Brief also updated: §7 resolved game-view-border question (corner peach badge only, no full border); added per-element AI candidates (popover / strip / hybrid) as enumerated options.
Mockups 3-6 — agent UX, write mode, code editor, piano roll:
- Four more mockups built in sequence.
mockup_agent_ux_study.html: design-study page with 3-column comparison of variants A (floating popover below selected element), B (inline strip inside element chrome), C (hybrid: global panel + per-element quick-ask via ⌘;). Each column has mini-canvas + description + pros/cons + open question. Footer has reading/recommendation paragraph.mockup_write_mode.html: distraction-free prose, no sidebars, 720px centered column, Plex Serif 16.5px line-height 1.72, real essay "Notes toward a room of one's own", current paragraph has blue left rail + inline ghost suggestion continuing sentence in text_faint with blinking peach caret + [Tab] hint, paragraph-level Editor proposal block with pink left-edge and accept/dismiss/nuke keybinds, whisper topbar + status bar.mockup_code_editor.html: Phase 4 editor showing real Anchor2/app/main.lua syntax-highlighted (mauve keywords, green strings, peach numbers, blue functions, muted comments), file outline in left sidebar, right sidebar Architect panel in blue with plausible exchange about font_register refactor, inline diff hunk showing 8 lines → 4 loop-based replacement with accept/reject keybinds — note: hunk-head alignment is visually broken (acknowledged, fixable at implementation time).mockup_music_piano_roll.html: 2-octave piano roll, chord progression lane at top (Cmaj9 · Am7 · Fmaj7 · G7sus4 with functional labels Iᴹ9/vi⁷/IVᴹ7/V⁷ˢᵘˢ), peach notes, one selected with blue dotted ghost suggestion (voice-leading fix A4), bass voice in peach-yellow, velocity lane below, transport strip with play/stop/record/metronome/BPM/key/loop chips, Composer panel in teal with theory-literate exchange citing user's Zettai Zetsumei analysis.
Design feedback and lock-in:
- User: "I think it's safer for us to the normal agent UX with a screen on the side for now" — committed to variant C (right-side panel) for v1; variants A/B deferred.
- Praised: accept/reject block in write mode ("the cleanest"), tag-based left sidebar, consistent top/bottom status bars, general UI feel, book+game logic, agent UX study's A/B/C presentation format.
- "The writer mode is the most polished... I rarely write focused like that, I need lots of tabs open and so on, but the general UX... looks really nice."
- Piano roll NOT the direction: "I prefer programs like Guitar Pro where they give you the actual sheet music thing, or something like Strudel where it's code based, or a mix of both somehow."
- "Target resolution actually isn't 1920x1080, because I have two monitors, and I'll definitely want the app to take over multiple monitors most of the time."
- "I think there's no need to iterate on these that much more. You have a really good handle on how the UI feels."
Final consolidation:
visual_identity.mdupdated: §2 added "Target hardware" subsection for single-1440×900-now / multi-monitor-eventual; §3 Phase 8 rewrote around sheet-music + code-based composition primary / piano roll fallback; §7 resolved agent UX open question and added multi-monitor + code-editor-diff-bug items; new §8 "Design status (committed)" with locked decisions + explicit non-goals; new §9 "Reference mockups" table indexing all 6 files with descriptions; new §10 "Reusable patterns" documenting accept/reject block + inline element strip + design-study page layout as cross-mode templates.project_anchor_app.mdmemory rewritten: corrected the stale "single 1920×1080, no multi-monitor" claim; added authoritative-references reading order; listed all locked facts; flagged music-not-piano-roll preference; pointed future sessions atdocs/visual_identity.md§8 and the mockup files.MEMORY.mdindex updated: one-liner now reads "visual identity locked, ready for Phase 1 implementation."
Plan file update and relocation:
OMEGA_APP_PLAN.mdwas pre-lock; surgically updated rather than regenerated to preserve original voice.- Added new "Current Status (2026-04-17)" section between Vision and Architecture: lists reading order (plan → visual_identity.md → mockup files → CLAUDE.md), what's done, what's next, and four locked decisions that supersede older text.
- Split Track B into "Done" (per-layer + per-font filter_mode) and "Pending" (HTTP, directory listing, file watching, async).
- Added Implementation notes to Phase 1 milestone with 8-step recommended build order + reference to mockup.html + elements-as-v2-entities note.
- Rewrote Phase 3 around explicit "the app has no folders" statement; removed "drag files between folders"; added reference to mockup_book_and_game.html.
- Rewrote Phase 8 around sheet-music / code-based composition primary; piano roll demoted to fallback; kept piano-roll mockup as layout-grammar reference only.
- File moved:
E:/a327ex/OMEGA_APP_PLAN.md→E:/a327ex/Anchor2/app/plan.md; updated the two remaining references invisual_identity.mdline 172 andproject_anchor_app.md.
Approve the summary and I'll run the transcript conversion, commit, and push?
Yes.
Bash (python E:/a327ex/Anchor2/scripts/find-recent-session.py --limit 5)
2026-04-17T16:16:53.231Z 776d994d-07fd-4a03-a799-680a4b64e07c [claude] <-- MOST RECENT
C:\Users\adn\.claude\projects\E--a327ex\776d994d-07fd-4a03-a799-680a4b64e07c.jsonl
2026-04-17T13:01:09.071Z 3ec7c86a-d4e5-4f02-8a7e-6deb6961ef74 [claude]
C:\Users\adn\.claude\projects\E--a327ex\3ec7c86a-d4e5-4f02-8a7e-6deb6961ef74.jsonl
2026-04-17T12:43:32.562Z 095dff0f-d58d-4183-b397-0130746980c4 [claude]
C:\Users\adn\.claude\projects\E--a327ex\095dff0f-d58d-4183-b397-0130746980c4.jsonl
2026-04-17T11:50:17.641Z 9bc123c2-e499-48f6-8418-a3167f5a0c66 [claude]
C:\Users\adn\.claude\projects\E--a327ex\9bc123c2-e499-48f6-8418-a3167f5a0c66.jsonl
2026-04-17T01:08:22.830Z a0bf2526-09d1-4ebc-82ed-3ac87de8e7a6 [claude]
C:\Users\adn\.claude\projects\E--a327ex\a0bf2526-09d1-4ebc-82ed-3ac87de8e7a6.jsonl