@domandigital/craft 0.18.2 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -914,6 +914,8 @@ interface SnapshotImage {
914
914
  width: number;
915
915
  height: number;
916
916
  top: number;
917
+ /** Version 2, craft 0.19 and later: distance from the viewport's left edge, so a hero can say which side its picture sits. */
918
+ left?: number;
917
919
  role: ImageRole;
918
920
  alt: string | null;
919
921
  /** Empty alt, `aria-hidden` or `role="presentation"`. */
@@ -2228,8 +2230,14 @@ declare function visualMeasures(img: RgbaImage, maxSamples?: number): SnapshotVi
2228
2230
  * comparison involving it uses `layout` exactly as version 1 did, so the null
2229
2231
  * models and the estate register compare as they were calibrated until they
2230
2232
  * are re-snapshotted.
2233
+ *
2234
+ * 3 adds `hero` (the headline's size and where the hero's picture sits).
2235
+ * Rhythm, the sequence of light and dark bands, is read from the version 2
2236
+ * `sections`, so a version 2 fingerprint measures it without a fresh
2237
+ * snapshot. A part neither side carries is left out of the distance rather
2238
+ * than counted as different (see `fingerprintDistance`).
2231
2239
  */
2232
- declare const FINGERPRINT_VERSION = 2;
2240
+ declare const FINGERPRINT_VERSION = 3;
2233
2241
  /** One section as layout comparison sees it. */
2234
2242
  interface FingerprintSection {
2235
2243
  role: SectionRole;
@@ -2253,8 +2261,26 @@ interface FingerprintSection {
2253
2261
  /** Large standalone figures. */
2254
2262
  figures?: number;
2255
2263
  }
2264
+ /** Where the hero's largest picture sits, relative to the headline. */
2265
+ type HeroImage = "left" | "right" | "full" | "none";
2266
+ /** The hero's composition: the first thing two sites are compared on by eye. */
2267
+ interface FingerprintHero {
2268
+ /** The headline (the first h1 inside the hero), or null when the hero has none. */
2269
+ headline: {
2270
+ sizePx: number;
2271
+ weight: number;
2272
+ class: FontClass;
2273
+ italic: boolean;
2274
+ } | null;
2275
+ /**
2276
+ * The largest photo or illustration in the hero: beside the text (left or
2277
+ * right of the viewport's centre line), `full` when it spans the width,
2278
+ * `none` without one. Absent when the snapshot predates image positions.
2279
+ */
2280
+ image?: HeroImage;
2281
+ }
2256
2282
  interface Fingerprint {
2257
- version: 1 | 2;
2283
+ version: 1 | 2 | 3;
2258
2284
  /** The most prominent chromatic colour: button fills first, then painted area, then text. */
2259
2285
  accent: Oklch | null;
2260
2286
  ground: Oklch;
@@ -2276,10 +2302,29 @@ interface Fingerprint {
2276
2302
  layout: SectionKind[];
2277
2303
  /** Version 2: present when every section carries a role and geometry. */
2278
2304
  sections?: FingerprintSection[];
2305
+ /** Version 3: present when the page has a hero section. */
2306
+ hero?: FingerprintHero;
2279
2307
  }
2280
2308
  declare function fingerprint(s: Snapshot): Fingerprint;
2309
+ /**
2310
+ * Chroma at which a ground's tint is unmistakable. RMP's cream sits at 0.010
2311
+ * and Bellerose's stone at 0.007, both plainly warm paper; Bellerose's
2312
+ * porcelain (#F1F3F4) at 0.003 is a cool hint. A page ground is the largest
2313
+ * area on the page and the eye adapts to it, so a tint far below what reads
2314
+ * as a difference between two buttons still reads as warm or cool paper.
2315
+ */
2316
+ declare const TEMPERATURE_FULL = 0.006;
2317
+ /** A ground is named warm or cool from this temperature, about chroma 0.0024. Below it, the name stays neutral. */
2318
+ declare const TEMPERATURE_NAMED = 0.4;
2319
+ /**
2320
+ * How warm or cool a colour reads, -1 (fully cool) through 0 (neutral) to 1
2321
+ * (fully warm): the chroma over `TEMPERATURE_FULL`, signed by the hue.
2322
+ */
2323
+ declare function groundTemperature(o: Oklch): number;
2324
+ type Temperature = "warm" | "neutral" | "cool";
2325
+ declare function temperatureName(o: Oklch): Temperature;
2281
2326
  interface FingerprintDistance {
2282
- /** 0 identical, 1 nothing in common. A weighted mean of the parts. */
2327
+ /** 0 identical, 1 nothing in common. A weighted mean of the parts both sides measure. */
2283
2328
  total: number;
2284
2329
  parts: {
2285
2330
  accent: number;
@@ -2289,34 +2334,78 @@ interface FingerprintDistance {
2289
2334
  motion: number;
2290
2335
  effects: number;
2291
2336
  layout: number;
2337
+ /** Null when either side has no sections (version 1). */
2338
+ rhythm: number | null;
2339
+ /** Null when either side has no hero. */
2340
+ hero: number | null;
2292
2341
  };
2293
2342
  }
2294
2343
  /**
2295
2344
  * How much each part counts. Accent and type are where a model's defaults
2296
2345
  * show first and where a real business has something of its own, so they
2297
- * carry half the weight between them.
2346
+ * carry the most. Structure (the running order, the rhythm of light and dark
2347
+ * bands, and the hero's composition) carries a quarter between its three
2348
+ * parts: two sites that open the same way read as the same site before any
2349
+ * colour is compared. A part only one side measures is left out and the
2350
+ * rest are weighed over what remains.
2298
2351
  */
2299
2352
  declare const DISTANCE_WEIGHTS: {
2300
- readonly accent: 0.25;
2301
- readonly type: 0.25;
2353
+ readonly accent: 0.2;
2354
+ readonly type: 0.2;
2302
2355
  readonly ground: 0.1;
2303
2356
  readonly shape: 0.1;
2304
- readonly motion: 0.1;
2357
+ readonly motion: 0.05;
2305
2358
  readonly effects: 0.1;
2306
2359
  readonly layout: 0.1;
2360
+ readonly rhythm: 0.1;
2361
+ readonly hero: 0.05;
2307
2362
  };
2308
2363
  /** Layout distance, 0 to 1: by role and geometry when both have them, else by kind as in version 1. */
2309
2364
  declare function layoutDistance(a: Fingerprint, b: Fingerprint): number;
2365
+ /** A section's band by the lightness of what it is painted on. */
2366
+ type LightnessBand = "light" | "mid" | "dark";
2367
+ declare function bandOf(l: number): LightnessBand;
2368
+ /**
2369
+ * The page's rhythm: its bands of light and dark in running order, each run
2370
+ * of same-lightness sections merged into one. "Light hero, white logo strip,
2371
+ * near-black band, light features" is light, dark, light: the strip is part
2372
+ * of the light opening, which is how a visitor sees it. Null for a version 1
2373
+ * fingerprint, which has no section backgrounds.
2374
+ */
2375
+ declare function rhythmOf(fp: Fingerprint): LightnessBand[] | null;
2376
+ /** The first bands count double: the opening is what two sites are compared on before anyone scrolls. */
2377
+ declare const OPENING_BANDS = 3;
2378
+ /**
2379
+ * Rhythm distance, 0 to 1: the edit distance over the opening bands and over
2380
+ * the whole sequence, averaged. Null when either side has no sections.
2381
+ */
2382
+ declare function rhythmDistance(a: Fingerprint, b: Fingerprint): number | null;
2383
+ /**
2384
+ * Hero distance, 0 to 1, over the parts both sides measure: where the text
2385
+ * sits (centred or left), how wide it runs, the headline's class and size,
2386
+ * and which side the picture is on. Null when either side has no hero.
2387
+ */
2388
+ declare function heroDistance(a: Fingerprint, b: Fingerprint): number | null;
2310
2389
  /** ΔE in OKLab. 0.02 is barely visible; by 0.3 two accents read as different colours. */
2311
2390
  declare const ACCENT_SCALE = 0.3;
2312
2391
  /** Grounds sit near white, where a smaller step already reads as a different paper. */
2313
2392
  declare const GROUND_SCALE = 0.15;
2393
+ /**
2394
+ * How much a difference in temperature adds to the ground distance, on top
2395
+ * of ΔE. Cream against porcelain is ΔE 0.013, a tenth of `GROUND_SCALE`, and
2396
+ * nobody takes them for the same paper: the temperature carries what ΔE
2397
+ * cannot at this chroma. Warm against cool adds 0.6; warm against neutral
2398
+ * white adds 0.3; two warm papers add nothing.
2399
+ */
2400
+ declare const TEMPERATURE_WEIGHT = 0.6;
2314
2401
  /** A part at or below this distance counts as shared between two sites. */
2315
2402
  declare const SHARED_PART = 0.2;
2316
2403
  /** Two accents within this ΔE_OK read as the same colour family: about 6 on the familiar ΔE scale. */
2317
2404
  declare const ACCENT_SHARED: number;
2318
2405
  /** Two grounds within this ΔE_OK read as the same paper. */
2319
2406
  declare const GROUND_SHARED: number;
2407
+ /** Ground distance, 0 to 1: ΔE over `GROUND_SCALE`, plus the temperature gap. */
2408
+ declare function groundDistance(a: Oklch, b: Oklch): number;
2320
2409
  declare function fingerprintDistance(a: Fingerprint, b: Fingerprint): FingerprintDistance;
2321
2410
  /**
2322
2411
  * The nearest neighbours of a fingerprint in a set, closest first. Typicality
@@ -2582,8 +2671,9 @@ declare function emptyEstate(): EstateRegister;
2582
2671
  declare function addSite(register: EstateRegister, site: EstateSite): EstateRegister;
2583
2672
  /**
2584
2673
  * What two fingerprints effectively share, named the way a person would see
2585
- * it: "Fraunces headline", "no accent", "pill buttons". A part counts when its
2586
- * distance is `SHARED_PART` or less.
2674
+ * it: "Fraunces headline", "no accent", "pill buttons", "cream ground",
2675
+ * "light hero then dark band". A part counts when its distance is
2676
+ * `SHARED_PART` or less; a part neither side measures never counts.
2587
2677
  */
2588
2678
  declare function sharedParts(a: Fingerprint, b: Fingerprint, d?: FingerprintDistance): string[];
2589
2679
  interface EstateMatch {
@@ -2703,7 +2793,18 @@ interface Typicality {
2703
2793
  */
2704
2794
  declare function typicality(target: Fingerprint, runs: NullRun[], k?: number): Typicality;
2705
2795
  declare function hueName(o: Oklch | null): string;
2796
+ /**
2797
+ * The coarse name the null's choice counts use ("white", "cream"), kept
2798
+ * stable so a harvest compares with earlier runs. `groundLabel` is the one a
2799
+ * person reads.
2800
+ */
2706
2801
  declare function groundName(o: Oklch): string;
2802
+ /**
2803
+ * The ground as a person would name it, with its temperature: "cream",
2804
+ * "cool grey", "warm white", "cool dark". Every light neutral page used to be
2805
+ * "grey", which put RMP's cream and Bellerose's porcelain under one word.
2806
+ */
2807
+ declare function groundLabel(o: Oklch): string;
2707
2808
  declare function shapeName(roundness: number | null): string;
2708
2809
  /** The discrete choices a fingerprint makes, as part → value. What a person would name. */
2709
2810
  declare function choicesOf(fp: Fingerprint): Record<string, string[]>;
@@ -3345,4 +3446,4 @@ declare function characterReport(input: CharacterInputs, copyTells?: Set<string>
3345
3446
 
3346
3447
  declare function retrofitPlan(report: CharacterReport, direction?: ArtDirection | null): string;
3347
3448
 
3348
- export { ACCENT_SCALE, ACCENT_SHARED, AI_PHRASES, AI_SOURCE_TYPES, AI_VIOLET, AI_WORDS, type AccentFork, type AccentForkOptions, type Action, type ActionPosition, type Area, type ArtDirection, BASELINE_VERSION, BUZZWORDS, type Band, type Baseline, type BaselineEntry, CATALOGUE, CATALOGUE_VERSION, CHOICE_KEYS, COMPONENT_ROLES, CONSIDERATION, CONTENT_FEATURES, CONVENTION, CUSTOMER_KINDS, type Calibration, type CandidateKind, type CharacterInputs, type CharacterReport, type CheckOptions, type CheckReport, type CheckRestraintInput, type ChoiceKey, type Claim, type ClaimsReport, type CompetitorComparison, type ComponentPair, type ComponentTypicality, type Consideration, type ContrastCheck, type ContrastReport, type CopySide, type CopyTell, type CraftConfig, type CraftTokensInput, type CraftTokensResult, type CustomerKind, DEFAULT_IGNORE, DENSITIES, DENSITY_NAMES, DIRECTION_VERSION, DIRECTION_VERSIONS, DISTANCE_WEIGHTS, DURATION_MS, DURATION_S, type DensityCssOptions, type DensityName, type DirectionChoice, type DirectionComparison, type DirectionMatch, type DirectionProblem, type DirectionReport, type DirectionSource, type DirectionSummary, type DurationName, EASE, EASE_TUPLE, EDGE_STEP, ESTATE_VERSION, EXIT_RATIO, type EaseName, type EmitCssOptions, type EstateMatch, type EstatePair, type EstateRegister, type EstateSite, FINGERPRINT_VERSION, FLAGGED_TARGET, FUNCTION_WORDS, type Fact, type FactComparison, type FactKind, type Finding, type Fingerprint, type FingerprintDistance, type FingerprintSection, type FluidSpaceOptions, type FluidTypeOptions, type FluidTypeResult, type FontClass, GROUND_SCALE, GROUND_SHARED, type Gamut, type Generation, type GradientContrast, HIERARCHY_FIELDS, HOME_FILE, HOME_URL, HOUSE, HOUSE_BUDGET, HOUSE_LOCKED, HOUSE_TYPE, HUMAN_TYPICAL_TARGET, type HarvestCandidate, type HarvestOptions, type Hit, type HouseRule, type HouseTier, IMAGERY_TELLS, type ImageProvenance, type ImageRole, JSON_SCHEMA_VERSION, type JobContext, type JobMap, type JobPart, LABELS, LEXICAL_FEATURES, LICENCES, LIGHTNESS_CURVE, type Label, type LabelSummary, type LexicalFeatures, type LicenceEntry, type LicenceSubject, MIN_DECIDED, MIN_PARAGRAPHS, MIN_RUNS, MOOD, type MeasuredPage, type MotionDecision, type MotionKind, type MultiClient, NEGATIVE_REASSURANCE, NULL_VERSION, type NullModel, type NullRun, type Oklch, type OklchToHexOptions, PAGE_TYPES, PILL_LIMIT, PLAINER_WORDS, PREFERENCE, PROFILE, PROFILE_MEASURED, PROFILE_PARAGRAPHS, PROMO_BADGE, PROOF_NAMES, PROPOSED, PROVENANCE_SCAN_BYTES, type PageCopy, type PageHierarchy, type PageResult, type PageType, type PaletteColour, type PhotoReviewOptions, type PhotoReviewResult, type Proposal, type ProposeInput, RAMP_STEPS, READABLE_SNAPSHOT_VERSIONS, REFLEX_FONTS_1, REFLEX_FONTS_2, REGISTERS, REGISTER_BASELINE, REGISTER_FEATURES, REGISTER_IDS, RENDERED_PATHS, RENDERED_TELLS, REVEAL_LIMIT, REVIEW_PHRASES, type Ramp, type RampFromAnchorsOptions, type RampOptions, type RampStep, type ReasonInput, type Register, type RegisterCheck, type RegisterFeatures, type RegisterId, type RegisterProfile, type RenderedTell, type ResearchInput, type RestraintBudget, type RestraintReport, type RestraintSeverity, type RestraintViolation, type Rgb, type RgbaImage, SAMPLES_PER_SEGMENT, SCALE, SECTION_ROLES, SHADCN_LIMIT, SHADCN_PRIMITIVES, SHARED_PART, SIBLING_AT, SNAPSHOT_VERSION, SOURCE_KINDS, SPACE_STEPS, SPECIFICITY_COPY_TELLS, SPECIFICITY_RENDERED_TELLS, SPRING, STANDING_CLAIM, STOCK_AVATAR_HOSTS, STOCK_FIGURES, STOCK_PHOTO_HOSTS, STOCK_PHRASES, STUDY_WORDS, type SarifOptions, type SarifTell, type SectionGeometry, type SectionKind, type SectionRhythmOptions, type SectionRole, type SemanticInput, type SemanticResult, type Severity, type SeverityLevel, type SeverityOverride, type ShapeFeatures, type ShouldAnimateInput, type SignalResult, type Snapshot, type SnapshotColour, type SnapshotControl, type SnapshotEffects, type SnapshotFont, type SnapshotGradient, type SnapshotHeading, type SnapshotImage, type SnapshotMotion, type SnapshotPatch, type SnapshotSection, type SnapshotVisual, type SourceFile, type SourceKind, type SourceTell, type SpaceStep, type Specific, type SpecificKind, type Specificity, type StudyWord, type Surface, TELL_HEAVY, TRADE_NOUNS, TYPE_STEPS, TYPICAL_AT, type TailwindPreset, type TargetCheck, type Tell, type TellException, type TellRate, type Tricolon, type TypeStep, type Typicality, type UnmeasuredPage, VAGUE_WORDS, type ValidateContext, type Verdict, accentFork, addSite, apcaContrast, applyBaseline, applyHouseGate, applySeverity, auditSnapshot, briefTerms, calibrate, catalogueTable, characterReport, checkCopy, checkOrder, checkPair, checkPhotoReview, checkReason, checkRegister, checkRestraint, choicesOf, clauseDepth, closestComponents, compareCompetitor, compareDirections, compareFacts, compareToDeclared, compareToEstate, componentDistance, componentShared, componentTypicalities, componentTypicality, componentsOf, contentWords, countWords, craftTokens, createBaseline, cv, deltaEOk, deltaEOkHex, densityCss, densityTokens, designTells, documentParagraphs, emitCss, emptyEstate, estateComponentPairs, estatePairs, exitDuration, extractHtml, faceLicence, featureLabel, findClaims, findColours, findingKey, fingerprint, fingerprintDistance, fluidClamp, fluidSpace, fluidType, fontClass, formatCalibration, formatClaims, formatComparison, formatCompetitor, formatDirectionMatches, formatHex, formatReport, getRegister, globToRegExp, gradientContrast, gradientStops, groundName, harvest, hedgeCount, hedgedClose, hexToOklch, holdHouseBlocks, houseRule, hueName, hueSwatch, ignoreMatcher, inP3Gamut, inSrgbGamut, initDirection, isAiViolet, isBlurb, isCategoryLabel, isCream, isFlagged, jobWords, layoutDistance, lexicalOf, licencesJson, makeSnapshot, motionTokens, namedSources, nearest, nominalisations, normaliseFamily, nullPrompt, oklchToHex, oklchToRgb, pageCopy, paletteFromPixels, paragraphUniformity, parseBaseline, parseColour, parseCraftConfig, parseHex, participialClauses, phrasalCoordinations, propose, protectedFacts, ramp, rampFromAnchors, readSnapshot, registerBrief, registerOf, registersDoc, renderedOrder, researchPrompt, retrofitPlan, runTell, scanProvenance, scanSource, sectionRhythm, semantic, sentencesOf, severityExceptions, shapeMoves, shapeName, shapeOf, words as shapeWords, sharedParts, shouldAnimate, siblingLine, skeleton, skeletonRepeat, specificity, specifics, splitSentences, stackedConditional, stockAvatarSource, stockSource, summariseDirection, tailwindV3Preset, tailwindV4Theme, tellById, toGamut, toJson, toSarif, tradeOf, tricolons, typeFeatureTokens, typicality, unprovenClaims, validateDirection, validateHierarchy, validateJob, visibleText, visualMeasures, vocabulary, vocabularyCounts, wcagContrast, wordListsJson };
3449
+ export { ACCENT_SCALE, ACCENT_SHARED, AI_PHRASES, AI_SOURCE_TYPES, AI_VIOLET, AI_WORDS, type AccentFork, type AccentForkOptions, type Action, type ActionPosition, type Area, type ArtDirection, BASELINE_VERSION, BUZZWORDS, type Band, type Baseline, type BaselineEntry, CATALOGUE, CATALOGUE_VERSION, CHOICE_KEYS, COMPONENT_ROLES, CONSIDERATION, CONTENT_FEATURES, CONVENTION, CUSTOMER_KINDS, type Calibration, type CandidateKind, type CharacterInputs, type CharacterReport, type CheckOptions, type CheckReport, type CheckRestraintInput, type ChoiceKey, type Claim, type ClaimsReport, type CompetitorComparison, type ComponentPair, type ComponentTypicality, type Consideration, type ContrastCheck, type ContrastReport, type CopySide, type CopyTell, type CraftConfig, type CraftTokensInput, type CraftTokensResult, type CustomerKind, DEFAULT_IGNORE, DENSITIES, DENSITY_NAMES, DIRECTION_VERSION, DIRECTION_VERSIONS, DISTANCE_WEIGHTS, DURATION_MS, DURATION_S, type DensityCssOptions, type DensityName, type DirectionChoice, type DirectionComparison, type DirectionMatch, type DirectionProblem, type DirectionReport, type DirectionSource, type DirectionSummary, type DurationName, EASE, EASE_TUPLE, EDGE_STEP, ESTATE_VERSION, EXIT_RATIO, type EaseName, type EmitCssOptions, type EstateMatch, type EstatePair, type EstateRegister, type EstateSite, FINGERPRINT_VERSION, FLAGGED_TARGET, FUNCTION_WORDS, type Fact, type FactComparison, type FactKind, type Finding, type Fingerprint, type FingerprintDistance, type FingerprintHero, type FingerprintSection, type FluidSpaceOptions, type FluidTypeOptions, type FluidTypeResult, type FontClass, GROUND_SCALE, GROUND_SHARED, type Gamut, type Generation, type GradientContrast, HIERARCHY_FIELDS, HOME_FILE, HOME_URL, HOUSE, HOUSE_BUDGET, HOUSE_LOCKED, HOUSE_TYPE, HUMAN_TYPICAL_TARGET, type HarvestCandidate, type HarvestOptions, type HeroImage, type Hit, type HouseRule, type HouseTier, IMAGERY_TELLS, type ImageProvenance, type ImageRole, JSON_SCHEMA_VERSION, type JobContext, type JobMap, type JobPart, LABELS, LEXICAL_FEATURES, LICENCES, LIGHTNESS_CURVE, type Label, type LabelSummary, type LexicalFeatures, type LicenceEntry, type LicenceSubject, type LightnessBand, MIN_DECIDED, MIN_PARAGRAPHS, MIN_RUNS, MOOD, type MeasuredPage, type MotionDecision, type MotionKind, type MultiClient, NEGATIVE_REASSURANCE, NULL_VERSION, type NullModel, type NullRun, OPENING_BANDS, type Oklch, type OklchToHexOptions, PAGE_TYPES, PILL_LIMIT, PLAINER_WORDS, PREFERENCE, PROFILE, PROFILE_MEASURED, PROFILE_PARAGRAPHS, PROMO_BADGE, PROOF_NAMES, PROPOSED, PROVENANCE_SCAN_BYTES, type PageCopy, type PageHierarchy, type PageResult, type PageType, type PaletteColour, type PhotoReviewOptions, type PhotoReviewResult, type Proposal, type ProposeInput, RAMP_STEPS, READABLE_SNAPSHOT_VERSIONS, REFLEX_FONTS_1, REFLEX_FONTS_2, REGISTERS, REGISTER_BASELINE, REGISTER_FEATURES, REGISTER_IDS, RENDERED_PATHS, RENDERED_TELLS, REVEAL_LIMIT, REVIEW_PHRASES, type Ramp, type RampFromAnchorsOptions, type RampOptions, type RampStep, type ReasonInput, type Register, type RegisterCheck, type RegisterFeatures, type RegisterId, type RegisterProfile, type RenderedTell, type ResearchInput, type RestraintBudget, type RestraintReport, type RestraintSeverity, type RestraintViolation, type Rgb, type RgbaImage, SAMPLES_PER_SEGMENT, SCALE, SECTION_ROLES, SHADCN_LIMIT, SHADCN_PRIMITIVES, SHARED_PART, SIBLING_AT, SNAPSHOT_VERSION, SOURCE_KINDS, SPACE_STEPS, SPECIFICITY_COPY_TELLS, SPECIFICITY_RENDERED_TELLS, SPRING, STANDING_CLAIM, STOCK_AVATAR_HOSTS, STOCK_FIGURES, STOCK_PHOTO_HOSTS, STOCK_PHRASES, STUDY_WORDS, type SarifOptions, type SarifTell, type SectionGeometry, type SectionKind, type SectionRhythmOptions, type SectionRole, type SemanticInput, type SemanticResult, type Severity, type SeverityLevel, type SeverityOverride, type ShapeFeatures, type ShouldAnimateInput, type SignalResult, type Snapshot, type SnapshotColour, type SnapshotControl, type SnapshotEffects, type SnapshotFont, type SnapshotGradient, type SnapshotHeading, type SnapshotImage, type SnapshotMotion, type SnapshotPatch, type SnapshotSection, type SnapshotVisual, type SourceFile, type SourceKind, type SourceTell, type SpaceStep, type Specific, type SpecificKind, type Specificity, type StudyWord, type Surface, TELL_HEAVY, TEMPERATURE_FULL, TEMPERATURE_NAMED, TEMPERATURE_WEIGHT, TRADE_NOUNS, TYPE_STEPS, TYPICAL_AT, type TailwindPreset, type TargetCheck, type Tell, type TellException, type TellRate, type Temperature, type Tricolon, type TypeStep, type Typicality, type UnmeasuredPage, VAGUE_WORDS, type ValidateContext, type Verdict, accentFork, addSite, apcaContrast, applyBaseline, applyHouseGate, applySeverity, auditSnapshot, bandOf, briefTerms, calibrate, catalogueTable, characterReport, checkCopy, checkOrder, checkPair, checkPhotoReview, checkReason, checkRegister, checkRestraint, choicesOf, clauseDepth, closestComponents, compareCompetitor, compareDirections, compareFacts, compareToDeclared, compareToEstate, componentDistance, componentShared, componentTypicalities, componentTypicality, componentsOf, contentWords, countWords, craftTokens, createBaseline, cv, deltaEOk, deltaEOkHex, densityCss, densityTokens, designTells, documentParagraphs, emitCss, emptyEstate, estateComponentPairs, estatePairs, exitDuration, extractHtml, faceLicence, featureLabel, findClaims, findColours, findingKey, fingerprint, fingerprintDistance, fluidClamp, fluidSpace, fluidType, fontClass, formatCalibration, formatClaims, formatComparison, formatCompetitor, formatDirectionMatches, formatHex, formatReport, getRegister, globToRegExp, gradientContrast, gradientStops, groundDistance, groundLabel, groundName, groundTemperature, harvest, hedgeCount, hedgedClose, heroDistance, hexToOklch, holdHouseBlocks, houseRule, hueName, hueSwatch, ignoreMatcher, inP3Gamut, inSrgbGamut, initDirection, isAiViolet, isBlurb, isCategoryLabel, isCream, isFlagged, jobWords, layoutDistance, lexicalOf, licencesJson, makeSnapshot, motionTokens, namedSources, nearest, nominalisations, normaliseFamily, nullPrompt, oklchToHex, oklchToRgb, pageCopy, paletteFromPixels, paragraphUniformity, parseBaseline, parseColour, parseCraftConfig, parseHex, participialClauses, phrasalCoordinations, propose, protectedFacts, ramp, rampFromAnchors, readSnapshot, registerBrief, registerOf, registersDoc, renderedOrder, researchPrompt, retrofitPlan, rhythmDistance, rhythmOf, runTell, scanProvenance, scanSource, sectionRhythm, semantic, sentencesOf, severityExceptions, shapeMoves, shapeName, shapeOf, words as shapeWords, sharedParts, shouldAnimate, siblingLine, skeleton, skeletonRepeat, specificity, specifics, splitSentences, stackedConditional, stockAvatarSource, stockSource, summariseDirection, tailwindV3Preset, tailwindV4Theme, tellById, temperatureName, toGamut, toJson, toSarif, tradeOf, tricolons, typeFeatureTokens, typicality, unprovenClaims, validateDirection, validateHierarchy, validateJob, visibleText, visualMeasures, vocabulary, vocabularyCounts, wcagContrast, wordListsJson };
package/dist/index.d.ts CHANGED
@@ -914,6 +914,8 @@ interface SnapshotImage {
914
914
  width: number;
915
915
  height: number;
916
916
  top: number;
917
+ /** Version 2, craft 0.19 and later: distance from the viewport's left edge, so a hero can say which side its picture sits. */
918
+ left?: number;
917
919
  role: ImageRole;
918
920
  alt: string | null;
919
921
  /** Empty alt, `aria-hidden` or `role="presentation"`. */
@@ -2228,8 +2230,14 @@ declare function visualMeasures(img: RgbaImage, maxSamples?: number): SnapshotVi
2228
2230
  * comparison involving it uses `layout` exactly as version 1 did, so the null
2229
2231
  * models and the estate register compare as they were calibrated until they
2230
2232
  * are re-snapshotted.
2233
+ *
2234
+ * 3 adds `hero` (the headline's size and where the hero's picture sits).
2235
+ * Rhythm, the sequence of light and dark bands, is read from the version 2
2236
+ * `sections`, so a version 2 fingerprint measures it without a fresh
2237
+ * snapshot. A part neither side carries is left out of the distance rather
2238
+ * than counted as different (see `fingerprintDistance`).
2231
2239
  */
2232
- declare const FINGERPRINT_VERSION = 2;
2240
+ declare const FINGERPRINT_VERSION = 3;
2233
2241
  /** One section as layout comparison sees it. */
2234
2242
  interface FingerprintSection {
2235
2243
  role: SectionRole;
@@ -2253,8 +2261,26 @@ interface FingerprintSection {
2253
2261
  /** Large standalone figures. */
2254
2262
  figures?: number;
2255
2263
  }
2264
+ /** Where the hero's largest picture sits, relative to the headline. */
2265
+ type HeroImage = "left" | "right" | "full" | "none";
2266
+ /** The hero's composition: the first thing two sites are compared on by eye. */
2267
+ interface FingerprintHero {
2268
+ /** The headline (the first h1 inside the hero), or null when the hero has none. */
2269
+ headline: {
2270
+ sizePx: number;
2271
+ weight: number;
2272
+ class: FontClass;
2273
+ italic: boolean;
2274
+ } | null;
2275
+ /**
2276
+ * The largest photo or illustration in the hero: beside the text (left or
2277
+ * right of the viewport's centre line), `full` when it spans the width,
2278
+ * `none` without one. Absent when the snapshot predates image positions.
2279
+ */
2280
+ image?: HeroImage;
2281
+ }
2256
2282
  interface Fingerprint {
2257
- version: 1 | 2;
2283
+ version: 1 | 2 | 3;
2258
2284
  /** The most prominent chromatic colour: button fills first, then painted area, then text. */
2259
2285
  accent: Oklch | null;
2260
2286
  ground: Oklch;
@@ -2276,10 +2302,29 @@ interface Fingerprint {
2276
2302
  layout: SectionKind[];
2277
2303
  /** Version 2: present when every section carries a role and geometry. */
2278
2304
  sections?: FingerprintSection[];
2305
+ /** Version 3: present when the page has a hero section. */
2306
+ hero?: FingerprintHero;
2279
2307
  }
2280
2308
  declare function fingerprint(s: Snapshot): Fingerprint;
2309
+ /**
2310
+ * Chroma at which a ground's tint is unmistakable. RMP's cream sits at 0.010
2311
+ * and Bellerose's stone at 0.007, both plainly warm paper; Bellerose's
2312
+ * porcelain (#F1F3F4) at 0.003 is a cool hint. A page ground is the largest
2313
+ * area on the page and the eye adapts to it, so a tint far below what reads
2314
+ * as a difference between two buttons still reads as warm or cool paper.
2315
+ */
2316
+ declare const TEMPERATURE_FULL = 0.006;
2317
+ /** A ground is named warm or cool from this temperature, about chroma 0.0024. Below it, the name stays neutral. */
2318
+ declare const TEMPERATURE_NAMED = 0.4;
2319
+ /**
2320
+ * How warm or cool a colour reads, -1 (fully cool) through 0 (neutral) to 1
2321
+ * (fully warm): the chroma over `TEMPERATURE_FULL`, signed by the hue.
2322
+ */
2323
+ declare function groundTemperature(o: Oklch): number;
2324
+ type Temperature = "warm" | "neutral" | "cool";
2325
+ declare function temperatureName(o: Oklch): Temperature;
2281
2326
  interface FingerprintDistance {
2282
- /** 0 identical, 1 nothing in common. A weighted mean of the parts. */
2327
+ /** 0 identical, 1 nothing in common. A weighted mean of the parts both sides measure. */
2283
2328
  total: number;
2284
2329
  parts: {
2285
2330
  accent: number;
@@ -2289,34 +2334,78 @@ interface FingerprintDistance {
2289
2334
  motion: number;
2290
2335
  effects: number;
2291
2336
  layout: number;
2337
+ /** Null when either side has no sections (version 1). */
2338
+ rhythm: number | null;
2339
+ /** Null when either side has no hero. */
2340
+ hero: number | null;
2292
2341
  };
2293
2342
  }
2294
2343
  /**
2295
2344
  * How much each part counts. Accent and type are where a model's defaults
2296
2345
  * show first and where a real business has something of its own, so they
2297
- * carry half the weight between them.
2346
+ * carry the most. Structure (the running order, the rhythm of light and dark
2347
+ * bands, and the hero's composition) carries a quarter between its three
2348
+ * parts: two sites that open the same way read as the same site before any
2349
+ * colour is compared. A part only one side measures is left out and the
2350
+ * rest are weighed over what remains.
2298
2351
  */
2299
2352
  declare const DISTANCE_WEIGHTS: {
2300
- readonly accent: 0.25;
2301
- readonly type: 0.25;
2353
+ readonly accent: 0.2;
2354
+ readonly type: 0.2;
2302
2355
  readonly ground: 0.1;
2303
2356
  readonly shape: 0.1;
2304
- readonly motion: 0.1;
2357
+ readonly motion: 0.05;
2305
2358
  readonly effects: 0.1;
2306
2359
  readonly layout: 0.1;
2360
+ readonly rhythm: 0.1;
2361
+ readonly hero: 0.05;
2307
2362
  };
2308
2363
  /** Layout distance, 0 to 1: by role and geometry when both have them, else by kind as in version 1. */
2309
2364
  declare function layoutDistance(a: Fingerprint, b: Fingerprint): number;
2365
+ /** A section's band by the lightness of what it is painted on. */
2366
+ type LightnessBand = "light" | "mid" | "dark";
2367
+ declare function bandOf(l: number): LightnessBand;
2368
+ /**
2369
+ * The page's rhythm: its bands of light and dark in running order, each run
2370
+ * of same-lightness sections merged into one. "Light hero, white logo strip,
2371
+ * near-black band, light features" is light, dark, light: the strip is part
2372
+ * of the light opening, which is how a visitor sees it. Null for a version 1
2373
+ * fingerprint, which has no section backgrounds.
2374
+ */
2375
+ declare function rhythmOf(fp: Fingerprint): LightnessBand[] | null;
2376
+ /** The first bands count double: the opening is what two sites are compared on before anyone scrolls. */
2377
+ declare const OPENING_BANDS = 3;
2378
+ /**
2379
+ * Rhythm distance, 0 to 1: the edit distance over the opening bands and over
2380
+ * the whole sequence, averaged. Null when either side has no sections.
2381
+ */
2382
+ declare function rhythmDistance(a: Fingerprint, b: Fingerprint): number | null;
2383
+ /**
2384
+ * Hero distance, 0 to 1, over the parts both sides measure: where the text
2385
+ * sits (centred or left), how wide it runs, the headline's class and size,
2386
+ * and which side the picture is on. Null when either side has no hero.
2387
+ */
2388
+ declare function heroDistance(a: Fingerprint, b: Fingerprint): number | null;
2310
2389
  /** ΔE in OKLab. 0.02 is barely visible; by 0.3 two accents read as different colours. */
2311
2390
  declare const ACCENT_SCALE = 0.3;
2312
2391
  /** Grounds sit near white, where a smaller step already reads as a different paper. */
2313
2392
  declare const GROUND_SCALE = 0.15;
2393
+ /**
2394
+ * How much a difference in temperature adds to the ground distance, on top
2395
+ * of ΔE. Cream against porcelain is ΔE 0.013, a tenth of `GROUND_SCALE`, and
2396
+ * nobody takes them for the same paper: the temperature carries what ΔE
2397
+ * cannot at this chroma. Warm against cool adds 0.6; warm against neutral
2398
+ * white adds 0.3; two warm papers add nothing.
2399
+ */
2400
+ declare const TEMPERATURE_WEIGHT = 0.6;
2314
2401
  /** A part at or below this distance counts as shared between two sites. */
2315
2402
  declare const SHARED_PART = 0.2;
2316
2403
  /** Two accents within this ΔE_OK read as the same colour family: about 6 on the familiar ΔE scale. */
2317
2404
  declare const ACCENT_SHARED: number;
2318
2405
  /** Two grounds within this ΔE_OK read as the same paper. */
2319
2406
  declare const GROUND_SHARED: number;
2407
+ /** Ground distance, 0 to 1: ΔE over `GROUND_SCALE`, plus the temperature gap. */
2408
+ declare function groundDistance(a: Oklch, b: Oklch): number;
2320
2409
  declare function fingerprintDistance(a: Fingerprint, b: Fingerprint): FingerprintDistance;
2321
2410
  /**
2322
2411
  * The nearest neighbours of a fingerprint in a set, closest first. Typicality
@@ -2582,8 +2671,9 @@ declare function emptyEstate(): EstateRegister;
2582
2671
  declare function addSite(register: EstateRegister, site: EstateSite): EstateRegister;
2583
2672
  /**
2584
2673
  * What two fingerprints effectively share, named the way a person would see
2585
- * it: "Fraunces headline", "no accent", "pill buttons". A part counts when its
2586
- * distance is `SHARED_PART` or less.
2674
+ * it: "Fraunces headline", "no accent", "pill buttons", "cream ground",
2675
+ * "light hero then dark band". A part counts when its distance is
2676
+ * `SHARED_PART` or less; a part neither side measures never counts.
2587
2677
  */
2588
2678
  declare function sharedParts(a: Fingerprint, b: Fingerprint, d?: FingerprintDistance): string[];
2589
2679
  interface EstateMatch {
@@ -2703,7 +2793,18 @@ interface Typicality {
2703
2793
  */
2704
2794
  declare function typicality(target: Fingerprint, runs: NullRun[], k?: number): Typicality;
2705
2795
  declare function hueName(o: Oklch | null): string;
2796
+ /**
2797
+ * The coarse name the null's choice counts use ("white", "cream"), kept
2798
+ * stable so a harvest compares with earlier runs. `groundLabel` is the one a
2799
+ * person reads.
2800
+ */
2706
2801
  declare function groundName(o: Oklch): string;
2802
+ /**
2803
+ * The ground as a person would name it, with its temperature: "cream",
2804
+ * "cool grey", "warm white", "cool dark". Every light neutral page used to be
2805
+ * "grey", which put RMP's cream and Bellerose's porcelain under one word.
2806
+ */
2807
+ declare function groundLabel(o: Oklch): string;
2707
2808
  declare function shapeName(roundness: number | null): string;
2708
2809
  /** The discrete choices a fingerprint makes, as part → value. What a person would name. */
2709
2810
  declare function choicesOf(fp: Fingerprint): Record<string, string[]>;
@@ -3345,4 +3446,4 @@ declare function characterReport(input: CharacterInputs, copyTells?: Set<string>
3345
3446
 
3346
3447
  declare function retrofitPlan(report: CharacterReport, direction?: ArtDirection | null): string;
3347
3448
 
3348
- export { ACCENT_SCALE, ACCENT_SHARED, AI_PHRASES, AI_SOURCE_TYPES, AI_VIOLET, AI_WORDS, type AccentFork, type AccentForkOptions, type Action, type ActionPosition, type Area, type ArtDirection, BASELINE_VERSION, BUZZWORDS, type Band, type Baseline, type BaselineEntry, CATALOGUE, CATALOGUE_VERSION, CHOICE_KEYS, COMPONENT_ROLES, CONSIDERATION, CONTENT_FEATURES, CONVENTION, CUSTOMER_KINDS, type Calibration, type CandidateKind, type CharacterInputs, type CharacterReport, type CheckOptions, type CheckReport, type CheckRestraintInput, type ChoiceKey, type Claim, type ClaimsReport, type CompetitorComparison, type ComponentPair, type ComponentTypicality, type Consideration, type ContrastCheck, type ContrastReport, type CopySide, type CopyTell, type CraftConfig, type CraftTokensInput, type CraftTokensResult, type CustomerKind, DEFAULT_IGNORE, DENSITIES, DENSITY_NAMES, DIRECTION_VERSION, DIRECTION_VERSIONS, DISTANCE_WEIGHTS, DURATION_MS, DURATION_S, type DensityCssOptions, type DensityName, type DirectionChoice, type DirectionComparison, type DirectionMatch, type DirectionProblem, type DirectionReport, type DirectionSource, type DirectionSummary, type DurationName, EASE, EASE_TUPLE, EDGE_STEP, ESTATE_VERSION, EXIT_RATIO, type EaseName, type EmitCssOptions, type EstateMatch, type EstatePair, type EstateRegister, type EstateSite, FINGERPRINT_VERSION, FLAGGED_TARGET, FUNCTION_WORDS, type Fact, type FactComparison, type FactKind, type Finding, type Fingerprint, type FingerprintDistance, type FingerprintSection, type FluidSpaceOptions, type FluidTypeOptions, type FluidTypeResult, type FontClass, GROUND_SCALE, GROUND_SHARED, type Gamut, type Generation, type GradientContrast, HIERARCHY_FIELDS, HOME_FILE, HOME_URL, HOUSE, HOUSE_BUDGET, HOUSE_LOCKED, HOUSE_TYPE, HUMAN_TYPICAL_TARGET, type HarvestCandidate, type HarvestOptions, type Hit, type HouseRule, type HouseTier, IMAGERY_TELLS, type ImageProvenance, type ImageRole, JSON_SCHEMA_VERSION, type JobContext, type JobMap, type JobPart, LABELS, LEXICAL_FEATURES, LICENCES, LIGHTNESS_CURVE, type Label, type LabelSummary, type LexicalFeatures, type LicenceEntry, type LicenceSubject, MIN_DECIDED, MIN_PARAGRAPHS, MIN_RUNS, MOOD, type MeasuredPage, type MotionDecision, type MotionKind, type MultiClient, NEGATIVE_REASSURANCE, NULL_VERSION, type NullModel, type NullRun, type Oklch, type OklchToHexOptions, PAGE_TYPES, PILL_LIMIT, PLAINER_WORDS, PREFERENCE, PROFILE, PROFILE_MEASURED, PROFILE_PARAGRAPHS, PROMO_BADGE, PROOF_NAMES, PROPOSED, PROVENANCE_SCAN_BYTES, type PageCopy, type PageHierarchy, type PageResult, type PageType, type PaletteColour, type PhotoReviewOptions, type PhotoReviewResult, type Proposal, type ProposeInput, RAMP_STEPS, READABLE_SNAPSHOT_VERSIONS, REFLEX_FONTS_1, REFLEX_FONTS_2, REGISTERS, REGISTER_BASELINE, REGISTER_FEATURES, REGISTER_IDS, RENDERED_PATHS, RENDERED_TELLS, REVEAL_LIMIT, REVIEW_PHRASES, type Ramp, type RampFromAnchorsOptions, type RampOptions, type RampStep, type ReasonInput, type Register, type RegisterCheck, type RegisterFeatures, type RegisterId, type RegisterProfile, type RenderedTell, type ResearchInput, type RestraintBudget, type RestraintReport, type RestraintSeverity, type RestraintViolation, type Rgb, type RgbaImage, SAMPLES_PER_SEGMENT, SCALE, SECTION_ROLES, SHADCN_LIMIT, SHADCN_PRIMITIVES, SHARED_PART, SIBLING_AT, SNAPSHOT_VERSION, SOURCE_KINDS, SPACE_STEPS, SPECIFICITY_COPY_TELLS, SPECIFICITY_RENDERED_TELLS, SPRING, STANDING_CLAIM, STOCK_AVATAR_HOSTS, STOCK_FIGURES, STOCK_PHOTO_HOSTS, STOCK_PHRASES, STUDY_WORDS, type SarifOptions, type SarifTell, type SectionGeometry, type SectionKind, type SectionRhythmOptions, type SectionRole, type SemanticInput, type SemanticResult, type Severity, type SeverityLevel, type SeverityOverride, type ShapeFeatures, type ShouldAnimateInput, type SignalResult, type Snapshot, type SnapshotColour, type SnapshotControl, type SnapshotEffects, type SnapshotFont, type SnapshotGradient, type SnapshotHeading, type SnapshotImage, type SnapshotMotion, type SnapshotPatch, type SnapshotSection, type SnapshotVisual, type SourceFile, type SourceKind, type SourceTell, type SpaceStep, type Specific, type SpecificKind, type Specificity, type StudyWord, type Surface, TELL_HEAVY, TRADE_NOUNS, TYPE_STEPS, TYPICAL_AT, type TailwindPreset, type TargetCheck, type Tell, type TellException, type TellRate, type Tricolon, type TypeStep, type Typicality, type UnmeasuredPage, VAGUE_WORDS, type ValidateContext, type Verdict, accentFork, addSite, apcaContrast, applyBaseline, applyHouseGate, applySeverity, auditSnapshot, briefTerms, calibrate, catalogueTable, characterReport, checkCopy, checkOrder, checkPair, checkPhotoReview, checkReason, checkRegister, checkRestraint, choicesOf, clauseDepth, closestComponents, compareCompetitor, compareDirections, compareFacts, compareToDeclared, compareToEstate, componentDistance, componentShared, componentTypicalities, componentTypicality, componentsOf, contentWords, countWords, craftTokens, createBaseline, cv, deltaEOk, deltaEOkHex, densityCss, densityTokens, designTells, documentParagraphs, emitCss, emptyEstate, estateComponentPairs, estatePairs, exitDuration, extractHtml, faceLicence, featureLabel, findClaims, findColours, findingKey, fingerprint, fingerprintDistance, fluidClamp, fluidSpace, fluidType, fontClass, formatCalibration, formatClaims, formatComparison, formatCompetitor, formatDirectionMatches, formatHex, formatReport, getRegister, globToRegExp, gradientContrast, gradientStops, groundName, harvest, hedgeCount, hedgedClose, hexToOklch, holdHouseBlocks, houseRule, hueName, hueSwatch, ignoreMatcher, inP3Gamut, inSrgbGamut, initDirection, isAiViolet, isBlurb, isCategoryLabel, isCream, isFlagged, jobWords, layoutDistance, lexicalOf, licencesJson, makeSnapshot, motionTokens, namedSources, nearest, nominalisations, normaliseFamily, nullPrompt, oklchToHex, oklchToRgb, pageCopy, paletteFromPixels, paragraphUniformity, parseBaseline, parseColour, parseCraftConfig, parseHex, participialClauses, phrasalCoordinations, propose, protectedFacts, ramp, rampFromAnchors, readSnapshot, registerBrief, registerOf, registersDoc, renderedOrder, researchPrompt, retrofitPlan, runTell, scanProvenance, scanSource, sectionRhythm, semantic, sentencesOf, severityExceptions, shapeMoves, shapeName, shapeOf, words as shapeWords, sharedParts, shouldAnimate, siblingLine, skeleton, skeletonRepeat, specificity, specifics, splitSentences, stackedConditional, stockAvatarSource, stockSource, summariseDirection, tailwindV3Preset, tailwindV4Theme, tellById, toGamut, toJson, toSarif, tradeOf, tricolons, typeFeatureTokens, typicality, unprovenClaims, validateDirection, validateHierarchy, validateJob, visibleText, visualMeasures, vocabulary, vocabularyCounts, wcagContrast, wordListsJson };
3449
+ export { ACCENT_SCALE, ACCENT_SHARED, AI_PHRASES, AI_SOURCE_TYPES, AI_VIOLET, AI_WORDS, type AccentFork, type AccentForkOptions, type Action, type ActionPosition, type Area, type ArtDirection, BASELINE_VERSION, BUZZWORDS, type Band, type Baseline, type BaselineEntry, CATALOGUE, CATALOGUE_VERSION, CHOICE_KEYS, COMPONENT_ROLES, CONSIDERATION, CONTENT_FEATURES, CONVENTION, CUSTOMER_KINDS, type Calibration, type CandidateKind, type CharacterInputs, type CharacterReport, type CheckOptions, type CheckReport, type CheckRestraintInput, type ChoiceKey, type Claim, type ClaimsReport, type CompetitorComparison, type ComponentPair, type ComponentTypicality, type Consideration, type ContrastCheck, type ContrastReport, type CopySide, type CopyTell, type CraftConfig, type CraftTokensInput, type CraftTokensResult, type CustomerKind, DEFAULT_IGNORE, DENSITIES, DENSITY_NAMES, DIRECTION_VERSION, DIRECTION_VERSIONS, DISTANCE_WEIGHTS, DURATION_MS, DURATION_S, type DensityCssOptions, type DensityName, type DirectionChoice, type DirectionComparison, type DirectionMatch, type DirectionProblem, type DirectionReport, type DirectionSource, type DirectionSummary, type DurationName, EASE, EASE_TUPLE, EDGE_STEP, ESTATE_VERSION, EXIT_RATIO, type EaseName, type EmitCssOptions, type EstateMatch, type EstatePair, type EstateRegister, type EstateSite, FINGERPRINT_VERSION, FLAGGED_TARGET, FUNCTION_WORDS, type Fact, type FactComparison, type FactKind, type Finding, type Fingerprint, type FingerprintDistance, type FingerprintHero, type FingerprintSection, type FluidSpaceOptions, type FluidTypeOptions, type FluidTypeResult, type FontClass, GROUND_SCALE, GROUND_SHARED, type Gamut, type Generation, type GradientContrast, HIERARCHY_FIELDS, HOME_FILE, HOME_URL, HOUSE, HOUSE_BUDGET, HOUSE_LOCKED, HOUSE_TYPE, HUMAN_TYPICAL_TARGET, type HarvestCandidate, type HarvestOptions, type HeroImage, type Hit, type HouseRule, type HouseTier, IMAGERY_TELLS, type ImageProvenance, type ImageRole, JSON_SCHEMA_VERSION, type JobContext, type JobMap, type JobPart, LABELS, LEXICAL_FEATURES, LICENCES, LIGHTNESS_CURVE, type Label, type LabelSummary, type LexicalFeatures, type LicenceEntry, type LicenceSubject, type LightnessBand, MIN_DECIDED, MIN_PARAGRAPHS, MIN_RUNS, MOOD, type MeasuredPage, type MotionDecision, type MotionKind, type MultiClient, NEGATIVE_REASSURANCE, NULL_VERSION, type NullModel, type NullRun, OPENING_BANDS, type Oklch, type OklchToHexOptions, PAGE_TYPES, PILL_LIMIT, PLAINER_WORDS, PREFERENCE, PROFILE, PROFILE_MEASURED, PROFILE_PARAGRAPHS, PROMO_BADGE, PROOF_NAMES, PROPOSED, PROVENANCE_SCAN_BYTES, type PageCopy, type PageHierarchy, type PageResult, type PageType, type PaletteColour, type PhotoReviewOptions, type PhotoReviewResult, type Proposal, type ProposeInput, RAMP_STEPS, READABLE_SNAPSHOT_VERSIONS, REFLEX_FONTS_1, REFLEX_FONTS_2, REGISTERS, REGISTER_BASELINE, REGISTER_FEATURES, REGISTER_IDS, RENDERED_PATHS, RENDERED_TELLS, REVEAL_LIMIT, REVIEW_PHRASES, type Ramp, type RampFromAnchorsOptions, type RampOptions, type RampStep, type ReasonInput, type Register, type RegisterCheck, type RegisterFeatures, type RegisterId, type RegisterProfile, type RenderedTell, type ResearchInput, type RestraintBudget, type RestraintReport, type RestraintSeverity, type RestraintViolation, type Rgb, type RgbaImage, SAMPLES_PER_SEGMENT, SCALE, SECTION_ROLES, SHADCN_LIMIT, SHADCN_PRIMITIVES, SHARED_PART, SIBLING_AT, SNAPSHOT_VERSION, SOURCE_KINDS, SPACE_STEPS, SPECIFICITY_COPY_TELLS, SPECIFICITY_RENDERED_TELLS, SPRING, STANDING_CLAIM, STOCK_AVATAR_HOSTS, STOCK_FIGURES, STOCK_PHOTO_HOSTS, STOCK_PHRASES, STUDY_WORDS, type SarifOptions, type SarifTell, type SectionGeometry, type SectionKind, type SectionRhythmOptions, type SectionRole, type SemanticInput, type SemanticResult, type Severity, type SeverityLevel, type SeverityOverride, type ShapeFeatures, type ShouldAnimateInput, type SignalResult, type Snapshot, type SnapshotColour, type SnapshotControl, type SnapshotEffects, type SnapshotFont, type SnapshotGradient, type SnapshotHeading, type SnapshotImage, type SnapshotMotion, type SnapshotPatch, type SnapshotSection, type SnapshotVisual, type SourceFile, type SourceKind, type SourceTell, type SpaceStep, type Specific, type SpecificKind, type Specificity, type StudyWord, type Surface, TELL_HEAVY, TEMPERATURE_FULL, TEMPERATURE_NAMED, TEMPERATURE_WEIGHT, TRADE_NOUNS, TYPE_STEPS, TYPICAL_AT, type TailwindPreset, type TargetCheck, type Tell, type TellException, type TellRate, type Temperature, type Tricolon, type TypeStep, type Typicality, type UnmeasuredPage, VAGUE_WORDS, type ValidateContext, type Verdict, accentFork, addSite, apcaContrast, applyBaseline, applyHouseGate, applySeverity, auditSnapshot, bandOf, briefTerms, calibrate, catalogueTable, characterReport, checkCopy, checkOrder, checkPair, checkPhotoReview, checkReason, checkRegister, checkRestraint, choicesOf, clauseDepth, closestComponents, compareCompetitor, compareDirections, compareFacts, compareToDeclared, compareToEstate, componentDistance, componentShared, componentTypicalities, componentTypicality, componentsOf, contentWords, countWords, craftTokens, createBaseline, cv, deltaEOk, deltaEOkHex, densityCss, densityTokens, designTells, documentParagraphs, emitCss, emptyEstate, estateComponentPairs, estatePairs, exitDuration, extractHtml, faceLicence, featureLabel, findClaims, findColours, findingKey, fingerprint, fingerprintDistance, fluidClamp, fluidSpace, fluidType, fontClass, formatCalibration, formatClaims, formatComparison, formatCompetitor, formatDirectionMatches, formatHex, formatReport, getRegister, globToRegExp, gradientContrast, gradientStops, groundDistance, groundLabel, groundName, groundTemperature, harvest, hedgeCount, hedgedClose, heroDistance, hexToOklch, holdHouseBlocks, houseRule, hueName, hueSwatch, ignoreMatcher, inP3Gamut, inSrgbGamut, initDirection, isAiViolet, isBlurb, isCategoryLabel, isCream, isFlagged, jobWords, layoutDistance, lexicalOf, licencesJson, makeSnapshot, motionTokens, namedSources, nearest, nominalisations, normaliseFamily, nullPrompt, oklchToHex, oklchToRgb, pageCopy, paletteFromPixels, paragraphUniformity, parseBaseline, parseColour, parseCraftConfig, parseHex, participialClauses, phrasalCoordinations, propose, protectedFacts, ramp, rampFromAnchors, readSnapshot, registerBrief, registerOf, registersDoc, renderedOrder, researchPrompt, retrofitPlan, rhythmDistance, rhythmOf, runTell, scanProvenance, scanSource, sectionRhythm, semantic, sentencesOf, severityExceptions, shapeMoves, shapeName, shapeOf, words as shapeWords, sharedParts, shouldAnimate, siblingLine, skeleton, skeletonRepeat, specificity, specifics, splitSentences, stackedConditional, stockAvatarSource, stockSource, summariseDirection, tailwindV3Preset, tailwindV4Theme, tellById, temperatureName, toGamut, toJson, toSarif, tradeOf, tricolons, typeFeatureTokens, typicality, unprovenClaims, validateDirection, validateHierarchy, validateJob, visibleText, visualMeasures, vocabulary, vocabularyCounts, wcagContrast, wordListsJson };