🌐 US-Proxy
>; the forty bespoke doors don't, so a body-keyed rule silently fails on every one of them (that flashed the hamburger white on hover, 2026-07-28). Guarded by a test. */ .estate-nav[data-s="dark"]{background:#0A1411;border-bottom-color:#20342B;color:#DCE7E0} .estate-nav[data-s="dark"] .lockup .stop{color:#35B183} .estate-nav[data-s="dark"] .estate-layers a:hover,.estate-nav[data-s="dark"] .estate-layers .sl-here{color:#35B183} .estate-nav[data-s="dark"] .estate-layers .sl-held{color:#8BA396} .estate-nav[data-s="dark"] .estate-nav-body{background:#0A1411;border-bottom-color:#20342B} .estate-nav[data-s="dark"] .estate-layers a{border-top-color:#20342B} .estate-nav[data-s="dark"] .nav-cta{color:#DCE7E0!important;border-color:#20342B} .estate-nav[data-s="dark"] .nav-cta:hover{border-color:#DCE7E0} .estate-nav[data-s="dark"] .nav-partner{background:#35B183;color:#0A1411} .estate-nav[data-s="dark"] .nav-partner:hover{filter:brightness(1.06);color:#0A1411} .estate-nav[data-s="dark"] .nav-btn:hover{background:rgba(255,255,255,.06)} .nav-state:checked ~ .estate-nav .i-menu{opacity:0;transform:rotate(90deg) scale(.7)} .nav-state:checked ~ .estate-nav .i-close{opacity:1;transform:none} .nav-state:focus-visible ~ .estate-nav .nav-btn{outline:2px solid var(--accent,var(--green,#0E6B4A));outline-offset:2px} @media(min-width:861px){ .estate-nav-row{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:16px} .estate-nav-row .lockup{grid-column:1;justify-self:start} .estate-nav-body{display:contents} .estate-layers{grid-column:2;justify-self:center;flex-wrap:nowrap;column-gap:22px} /* The right slot: field and/or CTA share one grid cell as a flex row, so if a surface ever passes BOTH they sit side by side instead of overlapping. */ .estate-nav-end{grid-column:3;justify-self:end;display:flex;align-items:center;gap:12px} .estate-nav-end .vin-field--bar{width:260px;max-width:100%} } @media(max-width:860px){ .estate-nav-row .nav-btn{display:inline-flex} /* EVERY SHELL TOKEN IN THIS SHEET NAMES BOTH VOCABULARIES. --bg / --rule / --accent are the shared SHELL's semantic slots (styles.ts). The forty bespoke doors render their :root from rootCss(), which emits --paper / --line / --green and has NEVER carried the shell's names. So on every bespoke door the bar and the open menu both resolved to rgba(0,0,0,0) — a transparent header with the page scrolling through it, and a transparent dropdown. It looked correct on the shell and broke on forty doors, which is why a shell-only check passed it. Fallback chain, not a rename: shell slot, then door token, then literal. */ /* THE DROPDOWN MUST NAME BOTH TOKEN VOCABULARIES. --bg / --rule are the shared SHELL's semantic slots (styles.ts). The forty bespoke doors render their :root from rootCss(), which emits --paper and --line and has never carried --bg or --rule. So on every bespoke door the open menu resolved to rgba(0,0,0,0) — a transparent panel with the page scrolling behind it. It looked right on the shell and broke everywhere else, which is why a shell-only check would have passed it. Fallback chain, not a rename: shell slot, then door token, then literal. */ .estate-nav-body{position:absolute;top:100%;left:0;right:0;z-index:50;flex-direction:column;align-items:stretch;gap:14px;background:var(--bg,var(--paper,#FFFFFF));border-bottom:1px solid var(--rule,var(--line,#E4E8E5));padding:16px 24px 20px;opacity:0;transform:translateY(-10px);pointer-events:none;transition:opacity .24s ease,transform .28s cubic-bezier(.2,.7,.3,1)} /* .estate-nav-end unwraps here so field/CTA keep their own dropdown slots (field on top, CTA lower) instead of grouping as they do on desktop. */ .estate-nav-end{display:contents} .estate-nav-body .vin-field--bar{order:0} .estate-layers{order:1;flex-direction:column;align-items:stretch;column-gap:0;row-gap:0;font-size:1.05rem} .estate-layers a,.estate-layers .sl-here,.estate-layers .sl-held{display:flex;align-items:center;min-height:54px;padding:0;border-top:1px solid var(--rule,var(--line,#E4E8E5))} .estate-nav-body .nav-cta{order:2;justify-content:center;margin-top:4px} .estate-nav-body .nav-partner{order:3;justify-content:center;margin-top:4px;width:100%;min-height:48px;font-size:1rem;font-weight:700;font-family:var(--sans-display)} .nav-state:checked ~ .estate-nav .estate-nav-body{opacity:1;transform:none;pointer-events:auto} } /* The shared menu-toggle machinery EstateNav renders: the sr-only checkbox, the hamburger button + its menu/close icon, the scrim, and the scroll lock. The nav STRUCTURE (bar grid, layers, CTA, mobile dropdown) lives in estateNavCss above; the old .nav-inner / .nav-links / .nav-panel / .np-* sheet was retired with DoorNav (2026-07-27). Icon-swap + focus are scoped to .estate-nav there. */ .sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0} .nav-state{position:fixed;top:0;left:0} .nav-btn{display:none;align-items:center;justify-content:center;width:48px;height:48px;margin-right:-12px;border-radius:8px;cursor:pointer;position:relative;z-index:2;color:inherit} .nav-btn:hover{background:#F5F7F6} .nav-ico,.nav-ico svg,.nav-ico path,.nav-ico span{pointer-events:none} .nav-ico{position:relative;width:24px;height:24px;display:block} .nav-ico > span{position:absolute;inset:0;display:block;width:24px;height:24px;transition:opacity .22s ease,transform .28s cubic-bezier(.2,.7,.3,1)} .nav-ico svg{width:24px;height:24px;display:block} .i-close{opacity:0;transform:rotate(-90deg) scale(.7)} .nav-scrim{display:none;position:fixed;inset:0;z-index:40;background:rgba(11,18,15,.28);opacity:0;pointer-events:none;transition:opacity .26s ease} .nav-state:checked ~ .nav-scrim{opacity:1;pointer-events:auto} /* THE SCROLL LOCK — clip, never hidden. overflow:clip is not a scroll container, so nothing clamps the offset to 0; both Chromium and WebKit hold position. */ body:has(.nav-state:checked){overflow:clip} .nav-scrim{overscroll-behavior:contain} .nav-state:checked ~ .nav-scrim{touch-action:none} @media(max-width:860px){ .nav-scrim{display:block} } /* ---- ranks: the ground ------------------------------------------------ */ .price,.price-col,.price-block{ --p-ink:#0B120F;--p-soft:#3C4642;--p-muted:#66716B; --p-posted:#0E6B4A;--p-rule:#E4E8E5; } [data-ground="dark"] .price,[data-ground="dark"] .price-col,[data-ground="dark"] .price-block, [data-s="dark"] .price,[data-s="dark"] .price-col,[data-s="dark"] .price-block, [data-surface="dark"] .price,[data-surface="dark"] .price-col,[data-surface="dark"] .price-block, .dark .price,.dark .price-col,.dark .price-block{ --p-ink:#F2F7F4;--p-soft:#DCE7E0;--p-muted:#8BA396; --p-posted:#35B183;--p-rule:#20342B; } /* ---- ranks: the type -------------------------------------------------- */ .price-eyebrow{ display:block;font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.68rem;font-weight:600; letter-spacing:.22em;text-transform:uppercase;color:var(--p-muted,#66716B); } .price-lead{ display:block;font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace; font-size:clamp(1.5rem,1.05rem + 1.35vw,1.875rem); font-weight:600;letter-spacing:-.02em;line-height:1.05;color:var(--p-ink,#0B120F); font-variant-numeric:tabular-nums;white-space:nowrap; } /* Posted takes the green (tokens.ts: the trust signal is the stop, posted prices, primary actions). Quoted never does — a quote is not certified. */ .price-lead[data-price="posted"]{color:var(--p-posted,#0E6B4A)} .price-lead[data-price="quoted"]{color:var(--p-ink,#0B120F)} .price-sum{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:1.0625rem;font-weight:600; letter-spacing:-.01em;color:var(--p-ink,#0B120F);text-align:right;white-space:nowrap; font-variant-numeric:tabular-nums; } .price-line{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.875rem;font-weight:500; color:var(--p-ink,#0B120F);text-align:right;white-space:nowrap; font-variant-numeric:tabular-nums; } .price-qual{ display:block;font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.8125rem;font-weight:400; line-height:1.5;color:var(--p-soft,#3C4642);font-variant-numeric:tabular-nums; } .price-qual + .price-qual{margin-top:4px} /* An anchor is a Qualifier that names its source and its date. It is never a was/now: attestation has no before-price, so the strike is refused here rather than trusted not to be authored. */ .price-anchor{color:var(--p-muted,#66716B)} .price-lead,.price-sum,.price-line,.price-qual,.price-anchor,.price-slot{text-decoration:none} .price-lead s,.price-sum s,.price-line s,.price-qual s,.price-anchor s, .price-lead del,.price-qual del,.price-anchor del{text-decoration:none;font-style:normal} /* The slot inherits the rank it stands in for and is capped at Line. It never takes weight >=600, never green, never full ink. */ .price-slot{color:var(--p-muted,#66716B);font-weight:400;letter-spacing:.04em} .price-sum.price-slot{font-size:.875rem;font-weight:400} .price-lead.price-slot{font-size:1.0625rem;font-weight:400;letter-spacing:.04em} /* ---- the column: ONE shrink-wrapped box (THE ALIGNMENT LAW, §11/§12.5) -- */ .price-col{ display:grid;grid-template-columns:minmax(0,1fr) max-content; gap:0 16px;align-items:baseline;font-variant-numeric:tabular-nums; } .price-col > .price-line,.price-col > .price-sum{grid-column:2} .price-col > .price-rule{grid-column:1 / -1;height:1px;background:var(--p-rule,#E4E8E5);margin:8px 0} /* A price that is also a link is still an address: 44px target, no colour hand-off to the link rule. */ a.price-lead,a.price-sum,a.price-line{display:inline-block;padding:12px 0;margin:-12px 0} a.price-lead:hover,a.price-sum:hover,a.price-line:hover{text-decoration:underline;text-underline-offset:4px} /* ======================================================================= */ /* ADOPTION — the hooks the shipped landings already emit, resolved onto */ /* the five ranks. Every selector below was measured on the served artifact */ /* on 2026-07-26; all of them sit on a white or paper-2 ground, so the ink */ /* values are safe without a per-door ground test. */ /* ======================================================================= */ /* Line: 12 distinct renderings across 126 figures, collapsed to one. */ .stk-rows .amt,.ord-rows .amt,.order-rows .amt,.order-rows .o-amt,.pay-rows .amt, .venue-rows .v-price,.comp-rows .c-price:not(.h),.result-rows .r-price, .option-rows .o-pay{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.875rem;font-weight:500; color:#0B120F;text-align:right;white-space:nowrap; font-variant-numeric:tabular-nums; } /* Sum: 21 of 22 shipped renderings already agreed at 17px/600/ink. The outlier is sticker's Monroney facsimile (.msrp-*), which is a reproduction of a printed label and keeps its own smaller scale on purpose — promoting it made an unpriced total the loudest money on that page, measured, so it is excluded here rather than argued with. */ .stk-total .amt,.ord-total .amt,.order-total .amt,.order-total .o-amt, .pay-out .amt{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:1.0625rem;font-weight:600; letter-spacing:-.01em;color:#0B120F;white-space:nowrap; font-variant-numeric:tabular-nums; } /* Lead: the door's own posted price. vhr.vin's posted block is the estate's only shipped instance where the real price stands alone in its own element; the peer SKU beneath it takes the Sum rank, per §12.2. */ .posted-rows li:first-child .amt{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:clamp(1.5rem,1.05rem + 1.35vw,1.875rem); font-weight:600;letter-spacing:-.02em;line-height:1.05;color:#0E6B4A; font-variant-numeric:tabular-nums; } .posted-rows li + li .amt{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:1.0625rem;font-weight:600; letter-spacing:-.01em;color:#0B120F;font-variant-numeric:tabular-nums; } /* Qualifier: the TTL/anchor line under a posted price, and the ladder rung's own explanatory clause. 4.9:1 muted -> 9.8:1 ink-soft. */ .posted-rows .amt small,.rung-what,.rung-text{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.8125rem;font-weight:400; line-height:1.5;color:#3C4642;font-variant-numeric:tabular-nums; } .posted-rows .amt small{display:block;margin-top:4px} /* The price pair inside a proof card is two peer SKUs: Sum rank, one ink. (The same two prices inside .close-row are label text on a button — one of them aria-disabled — so they are left to the door: restyling them would dress a disabled control as an active one.) */ .proof-prices .pp b{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:1.0625rem;font-weight:600; letter-spacing:-.01em;color:#0B120F;font-variant-numeric:tabular-nums; } /* Slot: figures a landing shows the shape of but does not post — the five value bands, the register slot lines. They keep their size, and their place in the column, and stop impersonating a price. (sticker's option prices are withheld by a ratified rule, not merely unpriced; they already render at the slot's weight and ink and are left where they are — sizing them up would draw the eye to a figure the door is deliberately not showing.) */ .st-slot,.r-slots,.m-slots{ font-weight:400;color:#66716B;letter-spacing:.04em; font-variant-numeric:tabular-nums; } /* The door's own posted fee sentence keeps the posted green (it is a posted price) and gains the Qualifier's size and weight. */ .sheet-fee,.order-fee,.zero-fee{ font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.8125rem;font-weight:500; color:#0E6B4A; } /* Tabular on every money column box, not on each figure — insurance against a face swap. Measured cost today: 0.00px (Fira Code digit-width delta 0). */ .stk-rows,.ord-rows,.order-rows,.pay-rows,.opt-rows,.venue-rows,.comp-rows, .result-rows,.option-rows,.posted-rows,.pay-grid,.doc-msrp,.proof-prices, .close-row{font-variant-numeric:tabular-nums} /* Money is never struck through, anywhere, however it was authored. */ .stk-rows s,.ord-rows s,.order-rows s,.pay-rows s,.posted-rows s,.opt-rows s, .comp-rows s,.venue-rows s,.result-rows s,.option-rows s{text-decoration:none} /* Below 414px the label column and the money column compete for the same ~290px. The Line rank steps down one notch so the figure never buys its width out of the line name — measured on insure.vin, whose .what label was clipping 3px further at 375px before this step existed. Sum:Line holds at 17/13 = 1.31x, still inside §12.2. */ @media(max-width:414px){ .stk-rows .amt,.ord-rows .amt,.order-rows .amt,.order-rows .o-amt,.pay-rows .amt, .venue-rows .v-price,.comp-rows .c-price:not(.h),.result-rows .r-price, .option-rows .o-pay{font-size:.8125rem} } @media(max-width:560px){ .posted-rows li:first-child .amt{text-align:left} } .next-rows a,.product-rows a,.rec-rows a,.rail-rows a,.dir-rows a,.grammar-rows a{ /* Square, not rounded (founder ruling 2026-08-04): the row hover/focus fill sits flush. One shared value so no door drifts back to a radius. */ padding-left:12px;padding-right:12px;border-radius:0; } @media(max-width:700px){ .next-rows .addr,.product-rows .addr,.rec-rows .addr,.rail-rows .addr,.dir-rows .addr,.grammar-rows .addr{grid-column:1;grid-row:1} .next-rows .arrow,.product-rows .arrow,.rec-rows .arrow,.rail-rows .arrow,.dir-rows .arrow,.grammar-rows .arrow{grid-column:2;grid-row:1;align-self:center} .next-rows .desc,.product-rows .desc,.rec-rows .desc,.rail-rows .desc,.dir-rows .desc,.grammar-rows .desc{grid-column:1 / -1;grid-row:2} } /* THE AGENT BAND'S CODE SAMPLE — scrolls in its own box, never wraps. Founder ruling 2026-07-28, superseding the ≤860px pre-wrap fit that shipped here: code keeps its line shape at every width and the box scrolls horizontally inside itself (white-space:pre + overflow-x:auto). Every door also ships the same pair locally on .demo-pre; this shared rule enforces the ruling for any door whose local block goes missing — the apis.vin case, where the absent block let the raw pre push ~660px of page-level scroll at 320px. */ .demo-pre{white-space:pre;overflow-x:auto;overflow-wrap:normal} /* THE AGENT BAND SITS IN THE PAGE, not against the glass. The band is full-bleed by design — its rule and ground span the viewport — but its CONTENT belongs in the same measure as everything above it. Three treatments shipped across the estate: 20 doors padding:5.5rem max(28px,calc((100% - var(--wrap))/2)) 6rem correct 16 doors padding:5.5rem 0 6rem no padding at all 6 doors padding:5.5rem 28px 6rem 28px, no measure So on 22 of 40 doors "for the agent you send" ran to the window edge while the section above it stopped at the wrap. Only the horizontal padding is set here — each door keeps its own vertical rhythm, border and ground. The +28px is not a fudge. A normal section is .wrap — max-width:var(--wrap) AND 28px of padding inside it — so its CONTENT is var(--wrap) minus 56, not var(--wrap). Centring a full-bleed band on var(--wrap) alone therefore left the agent band 56px wider than everything above it and 28px further out on each side: 1040 against 984 at a 1440 viewport. Below the wrap both clamp to 28px, which is why this only ever showed on desktop. */ .agent{ padding-left:max(28px,calc((100% - var(--wrap))/2 + 28px)); padding-right:max(28px,calc((100% - var(--wrap))/2 + 28px)); } .estate-footer{background:#0A1411;color:#DCE7E0;border-top:1px solid #20342B} .estate-footer .wrap{max-width:var(--wrap);margin:0 auto;padding:0 28px} .estate-footer .stop{color:#35B183} .estate-footer a:focus-visible{outline:2px solid #35B183;outline-offset:3px;border-radius:2px} .ef-ident{padding:3.2rem 0 2.4rem;display:flex;align-items:flex-start;justify-content:space-between;gap:20px 40px;flex-wrap:wrap} .ef-word{font-family:'Sora', -apple-system, 'Segoe UI', Roboto, Helvetica, sans-serif;font-weight:700;font-size:clamp(1.3rem,2.6vw,1.6rem);letter-spacing:-.02em;color:#F2F7F4;line-height:1} .ef-line{margin-top:.55rem;font-size:.88rem;color:#8BA396} .ef-auth{display:inline-flex;align-items:baseline;gap:12px;flex-wrap:wrap;text-decoration:none;border:1px solid #20342B;border-radius:12px;padding:12px 18px;transition:border-color .16s ease} .ef-auth:hover{border-color:#35B183} .ef-auth-addr{font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-weight:500;color:#35B183;font-size:.9rem} .ef-auth-what{color:#8BA396;font-size:.86rem} .ef-seam{border:0;border-top:1px solid #20342B} .ef-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:2.6rem 40px;padding:3rem 0} .ef-pw{font-family:'Sora', -apple-system, 'Segoe UI', Roboto, Helvetica, sans-serif;font-weight:700;font-size:1rem;letter-spacing:-.01em;color:#F2F7F4;line-height:1.1} .ef-doors{list-style:none;display:flex;flex-direction:column;margin-top:.5rem} .ef-door{font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.8rem;font-weight:400;line-height:1.3;display:block;padding:3.5px 0;color:#8BA396;text-decoration:none;transition:color .13s ease} a.ef-door:hover{color:#35B183} .ef-held{color:#5E6E66} .ef-base{padding:1.9rem 0 3rem;display:flex;align-items:center;justify-content:space-between;gap:12px 24px;flex-wrap:wrap;font-size:.82rem;color:#8BA396} .ef-house{font-family:'Fira Code', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;font-size:.78rem;display:flex;gap:14px;flex-wrap:wrap;align-items:center} .ef-house .ef-door{display:inline;padding:0} .ef-sep{opacity:.45} @media(max-width:520px){ .estate-footer .ef-cols{grid-template-columns:repeat(2,1fr);gap:1.8rem 18px} .estate-footer .ef-door{font-size:.78rem} .estate-footer .ef-ident{flex-direction:column} .estate-footer .ef-auth{width:100%} }
maintenance.vin

The book,
not the counter.

The advisor’s sheet says “recommended today.” This page answers with the book: the factory maintenance schedule for any VIN, interval by interval, each item with its source — derived from the decode and the posted specs, so a recommended list is checkable line by line. Free. No account.

An agent keeping your car reads this same schedule as typed data — you appear only where you are load-bearing: authorize the work.

7MMVABDM3RN163785

2024 Mazda CX-50

  • 01The bookspecs.vin/7MMVABDM3RN163785the schedule posts interval by interval from the decode and the posted specs — each item with its source; no line renders without oneposts live
  • 02Due nowwhere odometer evidence exists on the record, due-at-mileage posts beside the interval; where it doesn’t, the slot stays empty — never a guessfills from evidence
  • 03Open campaignrecalls.vin/7MMVABDM3RN163785the recall record posts beside the schedule — a campaign is the manufacturer’s work, free at the dealer$0
  • 04The orderservices.vin/7MMVABDM3RN163785due work at a posted price on the services chassis — vendor cost and margin as separate lines; the compliance gate holds until it clearsposts per order
The scheduleevery interval, every source, read whole — the free rung of the ladder$0

Intervals and items render live at the address, from the book for your VIN. This page states structure, not a schedule — the slots fill from the posted specs, never from an invented interval.

maintenance.vin schedule: $0 · every VIN, every visit · no account

the ladderanonymous — the whole schedule, free · the record’s odometer evidence fills the due-at-mileage slots · ordered work posts a price only when the compliance gate clears — deeper rungs are honest slots, never a teaser

Decode. Read. Keep.

The Schedule Plan — three verbs, each doing its own job.

  • 01DecodePaste the VIN at maintenance.vin/{VIN}; the schedule posts interval by interval from the decode and the posted specs at specs.vin, each item with its source. Free, no account.
  • 02ReadCheck any “recommended” list against the book. Where odometer evidence exists on the record, due-at-mileage posts beside the interval; an open campaign posts from recalls.vin beside the schedule — the manufacturer’s work, free at the dealer.
  • 03KeepOrder due work at a posted price when the compliance gate clears — every job quotes from the VIN on the services chassis at services.vin, and every completion posts to the record: a service history that is a record, not a shoebox.
Postedmaintenance.vin schedule: $0 · every VIN, every visit · no account
The gateThe order action renders through the compliance gate: service-vendor agreements are in progress; until they clear, nothing on this page takes a paid order. The schedule is live today, and ordered work runs on the services chassis at services.vin.
AgentsThe same schedule as typed JSON at the same address, via Accept negotiation.

The counter test.

At the counter

the recommended list, checked against the book

The advisor’s sheet says “recommended today” — items nobody can trace to the manual, priced at the counter, paid for twice or skipped once. This page answers item by item, interval by interval, each with its source. What the book calls for at this mileage posts; what it doesn’t is a question to ask out loud at the counter.

the interval · the due mileage · the order price

On the record

the shoebox becomes a service history

A completion posts to the record — order id, item, timestamp, invoice line. Kept maintenance stops being receipts in a shoebox and becomes a service history the next buyer reads on the same record at vhr.vin. The record, then the resale.

the order id · the timestamp · the invoice line

The schedule states what the book calls for; the record states what posted. A gap between them is a fact, not an accusation.

Questions with posted answers.

  • Can I order maintenance here today?

    Not yet. Service-vendor agreements are in progress; the order action posts on this record the day they clear. The schedule is live today — free, no account — and every job already quotes from the VIN at services.vin.

  • Where does the schedule come from?

    From the decode and the posted specs for this VIN — the interval, the item, the source, each posted. No line renders without a source.

  • What about work done elsewhere?

    The schedule states what the book calls for; the record states what posted. A gap between them is a fact, not an accusation — and receipts you hold are still yours to keep.

  • Is a recall part of the schedule?

    It posts beside it. A campaign is the manufacturer’s work, free at the dealer — the recall record for any VIN reads at recalls.vin, and an open one renders on this schedule the day it opens.

  • How does maintenance.vin make money?

    On ordered work: margin, posted per order as its own line beside the vendor cost. The schedule itself is free — posted like every other fact.

For the agent you send

The agent reads the same record you do. Same two routes, three representations — the numbers never differ between them.

motions: B2A · B2A2C

curl https://maintenance.vin/ -H 'accept: text/markdown'        → the markdown twin of this page
curl https://maintenance.vin/{VIN} -H 'accept: application/json' → the record as typed evidence objects
curl https://maintenance.vin/{VIN} -H 'accept: text/markdown'    → the record's markdown twin

Machine surfaces on this host: /llms.txt · /icp.json · /.well-known/agents.json · one estate MCP server — apis.vin/mcp (every door a lens; tool results carry the door URL).

Attribution: X-Client-Type: html | md | json | mcp — read for agent-led demand attribution; it never changes the record.