SnapSparrow

Editorial Classic View — Implementation Spec

v1.0 · March 25, 2026
0. Overview

This is a styling layer on Classic, not a new layout engine

The Editorial Classic view is the third export view (alongside Classic and Editorial). It uses Classic's grid and card layout engine exactly as-is — the same row composition logic, the same card-as-atom model where each screenshot + its annotations = one card, the same annotation margin positioning (right, left, bottom).

What changes is purely visual: colors, typography, image framing, annotation note styling, and the addition of the Editorial view's title block and footer. No grid algorithm changes. No new layout logic.

Once validated, this view will replace both Classic and Editorial. The two existing views will be removed.

1. What changes from Classic

Changes from Classic

Element Classic Editorial Classic
Title block Simple text title Cal Sans title + coral accent bar + superline metadata (from Editorial)
Footer Simple footer "COMPOSED WITH SNAPSPARROW" + Date (from Editorial)
Image frame Screenshot bleeds to card edge 12px padding, 4px radius, 1px #EBEBEB border on image
On-image badges Current badge colors Annotation ink palette colors (see §11)
Annotation number Current style Large zero-padded numeral (22px, wt 400, annotation ink color)
Annotation type label Current style Filled pill (white text on annotation ink color)
Annotation body text Current style #4A4A4A, 13px, line-height 1.55
Annotation separators Current style Full-width colored rule at 12% opacity in outgoing annotation's ink color
Caption field Not in current Classic Italic line at bottom of card (see §8)
Manifest section N/A None — annotations live inline on cards only
2. What stays from Classic

Unchanged from Classic

All of the following remain exactly as they are in the Classic view:

Grid/row composition logic. Card-as-atom model. Annotation margin positions (right, left, bottom) and the logic that determines which position to use. Card sizing and proportions. Image scaling behavior. Row ordering. Badge numbering. Badge positioning on images. The relationship between annotation count and card layout.

Do not modify any Classic grid or layout logic. This spec only affects rendering/styling within the existing card structure.

3. Surface & background colors

Export surface system

#F0F0ED
Export background — stone
#FFFFFF
Card background — pure white
#E8E8E6
Card border & primary dividers
#F0F0ED
Internal card dividers (margin border, caption separator)
#EBEBEB
Image frame border (inside card)

JPG export must fill with #F0F0ED, not transparency.

4. Title block

Adopted from Editorial view

The title block is taken directly from the existing Editorial view implementation. Structure, top to bottom:

1. Coral accent bar (3px wide, 22px tall, #D4726A, border-radius 1.5px)
   + Superline: document type · screen count · annotation count
2. Title (Cal Sans, user-authored)
3. Date (long month format: "March 24, 2026")
4. Hairline rule (1px, #E8E8E6, full content width)
Typography
Element Font Size Weight Color
Superline (doc type) Hanken Grotesk 11px 600 #8A8A8A
Superline (counts) Hanken Grotesk 11px 500 #ADADAD
Title Cal Sans 26px 400 #1A1A1A
Date Hanken Grotesk 13px 400 #ADADAD

All sizes above are at screen scale. The title block sits above all cards, outside any card container.

5. Image card frame treatment

Padded frame inside the card

The screenshot no longer bleeds to the card edge. Instead, it sits inside a padded frame within the card, creating a visible white mat around the image. This solves the white-screenshot-on-white-card boundary problem.

Card padding around image: 12px on all sides
Image border-radius: 4px
Image border: 1px solid #EBEBEB
Card border-radius: 10px
Card border: 1px solid #E8E8E6
Card background: #FFFFFF

The 1px #EBEBEB border on the image itself ensures a defined edge even when the screenshot content is white. The 12px padding ensures the card's white background is always visible as a mat between the image and the card edge.

On-image annotation badges are positioned relative to the image frame area (inside the padding), not relative to the card edge.

6. On-image badge styling

Badge appearance on screenshots

Badges on the image use the annotation ink palette colors instead of the current Classic badge colors. Size and positioning logic remain unchanged from Classic.

Shape: circle, filled
Size: unchanged from Classic (same diameter)
Color: annotation ink color (see §11)
Text: white, centered, same weight as Classic
Shadow: 0 1px 3px rgba(0,0,0,0.2)
Position: unchanged from Classic logic
7. Annotation margin styling

Annotation note appearance

The annotation notes in the margin area (right, left, or bottom of card) are restyled. The margin position logic — which side the annotations appear on, how many fit — remains unchanged from Classic.

Per-annotation structure

Each annotation entry, top to bottom:

1. Header line: number + type pill
   Number: zero-padded (01, 02, 03...)
     Font: Hanken Grotesk, 22px, weight 400
     Color: annotation ink color
     Letter-spacing: -0.03em
   Pill: filled rounded rectangle
     Background: annotation ink color
     Text: white, 9px, weight 700, uppercase, letter-spacing 0.07em
     Padding: 2px 8px
     Border-radius: 3px
   Gap between number and pill: 7px
   Number and pill are baseline-aligned

2. Body text
   Font: Hanken Grotesk, 13px, weight 400
   Color: #4A4A4A
   Line-height: 1.55
   Margin-top: 5px from header line
Between annotations
Separator: 1px horizontal rule, full margin width
Color: outgoing annotation's ink color at 12% opacity
Margin: 18px above and below the rule

"Outgoing" = the annotation above the rule.
If annotation 03 (Region, #5B3A77) is above and
annotation 04 (Callout, #263747) is below,
the rule color is rgba(91, 58, 119, 0.12).
Bottom annotations (horizontal layout)

When annotations appear below a full-width image, they can be laid out side by side in columns if there are 2–3 annotations. Separated by a 1px vertical rule in #E8E8E6. Each annotation gets equal width.

Margin area styling
Background: #FFFFFF (same as card)
Padding: 22px on all sides
Border between image and margin: 1px solid #F0F0ED
  (border-left for right margins, border-right for left margins,
   border-top for bottom annotations)
8. Caption field

Optional per-image caption

Each card has an optional user-authored caption — a note about the overall screenshot (distinct from annotations, which point at specific elements). The caption appears at the very bottom of the card, below everything else.

Placement rules
Card with annotations + caption:
  Image frame → Annotation margin → Caption strip

Card with caption only (no annotations):
  Image frame → Caption strip

Card with neither:
  Image frame only
Caption styling
Font: Hanken Grotesk, 12px, weight 400, italic
Color: #8A8A8A
Line-height: 1.45
Padding: 10px 24px 14px
Border-top: 1px solid #F0F0ED
Background: #FFFFFF (same as card)

The caption is always the last element inside the card. It is separated from the content above it (either the image frame or the annotation area) by a subtle #F0F0ED hairline. It is visually quieter than annotation text — smaller, italic, lighter color.

When annotations are in a side margin (left or right), the caption spans the full card width beneath both the image and the margin. It is not scoped to a column.

9. Card anatomy summary

Complete card structure

┌─────────────────────────────────────────────┐
│ Card (white, 10px radius, 1px #E8E8E6) │
│ │
│ ┌──────────────────────┬──────────────┐ │
│ │ Image frame (12px) │ Annotation │ │
│ │ │ margin │ │
│ │ ┌────────────────┐ │ │ │
│ │ │ Screenshot │ │ 03 REGION │ │
│ │ │ (4px radius, │ │ Body text... │ │
│ │ │ 1px #EBEBEB) │ │ │ │
│ │ │ [3] │ │ ──────────── │ │
│ │ │ [4] │ │ │ │
│ │ └────────────────┘ │ 04 CALLOUT │ │
│ │ │ Body text... │ │
│ └──────────────────────┴──────────────┘ │
│ ┌─────────────────────────────────────┐ │
│ │ Caption (italic, #8A8A8A, 12px) │ │
│ └─────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────┘

Caption spans full card width regardless of margin position. Annotation margin can be on the right (shown), left (zigzag), or bottom.

Adopted from Editorial view

Hairline rule: 1px, #E8E8E6, full content width
Margin-top from last card: 32px
Margin from rule to footer text: 10px

Left: "COMPOSED WITH SNAPSPARROW"
  Hanken Grotesk, 400 weight, 10px, letter-spacing 0.06em, uppercase, #ADADAD

Right: "snapsparrow.app"
  Hanken Grotesk, 400 weight, 10px, #ADADAD

Date does not appear in the footer — it is in the title block.

11. Color reference

Annotation ink palette

These colors are used for on-image badges, annotation margin numbers, type pills, and separator rules.

Type Color Hex
Callout
#263747
Callout Linked
#2E4A5A
Region
#5B3A77
Arrow
#CA9C63
Strike
#B85647
Comparative A
#2C5461
Comparative B
#4D857E
Surface & text colors
Role Hex
Export background (stone) #F0F0ED
Card background #FFFFFF
Card border #E8E8E6
Internal dividers #F0F0ED
Image frame border #EBEBEB
Brand accent (coral bar) #D4726A
Primary text #1A1A1A
Secondary text #4A4A4A
Muted text #8A8A8A
Light muted text #ADADAD
12. Typography reference

Font stack

Role Font Source
Export title only Cal Sans Google Fonts (single weight, 400)
Everything else Hanken Grotesk Google Fonts (variable, 200–900)
Type scale (screen scale)
Element Size Weight Style Color
Title 26px 400 Cal Sans #1A1A1A
Superline (doc type) 11px 600 Uppercase, 0.1em #8A8A8A
Superline (counts) 11px 500 Uppercase, 0.1em #ADADAD
Date 13px 400 Normal #ADADAD
Annotation number 22px 400 -0.03em tracking Ink color
Annotation type pill 9px 700 Uppercase, 0.07em White on ink
Annotation body 13px 400 lh 1.55 #4A4A4A
Caption 12px 400 Italic, lh 1.45 #8A8A8A
Footer 10px 400 Uppercase, 0.06em #ADADAD
13. Output format

Export deliverable

Default: Stitched JPG
  Width: matches Classic export width
  Height: variable (content-dependent)
  Quality: 92%
  Background fill: #F0F0ED
  Color space: sRGB

Options: PDF (single page, fonts embedded), multi-file JPG (deferred)