paperInkDefinition top-level constant

FamilyDefinition const paperInkDefinition

Paper & ink (spec §5.3 #11; motion brief §2.3 "Paper & ink"): outlined paper slips (rounded-rect fills, 2–6 % corners, under a hand-drawn fineliner outline). Press: the outline "boils" to an alternate stroke in frame 1 (tint), an ink wash spreads from the fingertip to its peak and dries on effectsSlow (releaseAlt), the slip drops 1 dp (release 1400/0.9, seeded × {0.9, 1, 1.1}); display glyphs bleed in from 104 %; sound typewriter, haptic soft · 0.6. The palette is built by buildPaperInkCandidate.

Implementation

const FamilyDefinition paperInkDefinition = FamilyDefinition(
  family: ThemeFamily.paperInk,
  brightnessWeights: [2, 7],
  schemes: [Weighted(HarmonyScheme.analogous, 1)],
  shapes: [Weighted(KeyShapeKind.roundedRect, 1)],
  cornerPermille: IntRange(20, 60),
  styles: [Weighted(KeyStyleKind.outlined, 1)],
  keyStyle: KeyStyleSpec(
    kind: KeyStyleKind.outlined,
    outlineWidthCdp: 150,
    edgeShadePermille: 650,
    stateLayerPermille: 0,
  ),
  displayFonts: [Weighted(FontIds.newsreader, 1)],
  keyFonts: [Weighted(FontIds.newsreader, 1)],
  displayWeight: IntRange(350, 450),
  keyWeight: IntRange(400, 500),
  operatorWeightBonus: IntRange(200, 300),
  backgrounds: [Weighted(BackgroundKind.paperSheet, 1)],
  patterns: [
    Weighted(BackgroundPattern.none, 1),
    Weighted(BackgroundPattern.stripes, 1),
    Weighted(BackgroundPattern.grid, 1),
    Weighted(BackgroundPattern.dots, 1),
  ],
  sound: SoundPackId.typewriter,
  dark: paperInkDarkRanges,
  light: paperInkLightRanges,
  motion: MotionSpec(
    verb: PressVerb.ink,
    scheme: MotionScheme.standard,
    pressIn: SpringTokens.effectsFast,
    release: SpringTokens.standardFast,
    releaseAlt: SpringTokens.effectsSlow,
    depthCdp: 100,
    entry: EntryStyle.bleed,
    entryScalePermille: 1040,
    fx: PressFx.inkWash,
    impact: ImpactStyle.soft,
    impactPermille: 600,
  ),
  motionRanges: MotionRanges(),
  nonColourOperatorCue: OperatorCue.pattern,
  bile: BileRule.v2,
);