🌐 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%} }
services.vin

layer 02 / 04 · Services

The work, ordered by the number.

services.vin is the Services layer’s one address: every physical job a car needs, sold in five lanes, quoted from its VIN, ordered on one chassis, settled on one invoice. Vendor cost and our margin post as separate lines on every order. The quote is free. No account.

A lane is a shelf, not an address — no lane ever mints a door.

MOVEFIXPAPERKEEPPOWER

01 / 05

MOVE.

The car moves.

Long haul, last mile, the border crossing, the breakdown. Every move quotes from the VIN and two zips — the decode supplies what the dispatcher would have asked on the phone.

transport.vin is this lane’s flagship: the move is its own order, at its own address, never re-quoted here.

serves this laneships · deliver · deliveries → transport.vin

02 / 05

FIX.

The work on the car itself.

Cash mechanical, insurer-paid collision, the diagnostic read, the finish — four addresses, one work order. A completed fix posts its facts to the record.

Inspection and recon run as one unit: the finding drives the work order.

serves this lanerepairs · shops → repair.vin · bodyshop → collision.vin · inspections · recon · reconditioning → inspection.vin · detailing → detail.vin

03 / 05

PAPER.

One office visit, two doors, one chassis.

Title and registration are co-canonical peers: the rare transfer and the annual renewal each hold their own address and ride the same order. Emissions is the third paper — the state-regulated test whose pass or fail posts as a fact.

Where a state’s gate has not cleared, the row reads “not yet offered in that state” — a fact, stated.

serves this lanetitles · transfer · gift · lien · liens → title.vin · renew · plates · tags → registration.vin · smog → emissions.vin

04 / 05

KEEP.

The car, kept.

Scheduled service by the book, the month of storage, the keeping surface itself. The keep lane is the record’s slow lane — recurring, quiet, attached to the same seventeen characters.

serves this lanegarages → garage.vin

05 / 05

POWER.

The act of charging is Services.

The state of the battery is Data — state-of-health reads at the record, per report, like an odometer. The command stays in this lane; the query exits to the catalog. That line is the lane.

  • charge.vinThe charging act, dispatched from the VIN

serves this lanechargers · charges → charge.vin

One chassis.

Quote → paid order → webhook → one invoice, deal-attached. Every lane sells through the same four hops.

The quote posts from the VIN, free. The paid order opens at the posted price with vendor cost and our margin as separate lines. Webhooks post distance-to-done. An order attached to an open deal settles under the parent invoice’s one total.

One VIN, one order record per job, one invoice per deal.

Order from a lane

not yet open · vendor papering per service cluster + per-state title/reg fulfillment gate before orders

Order actions render through the compliance gate. Vendor agreements per service cluster and the per-state title and registration gate are in progress; until they clear, nothing on this page takes a paid order. The quote is live today — every job prices from the VIN, free, no account.

Service orderthe order id · services.vin/7MMVABDM3RN163785
VIN7MMVABDM3RN163785
Servicemobile pre-purchase inspection
Attached tothe open deal · settles on the parent invoice
  • vendor costposts live
  • our marginposts live
  • total · computed at orderposts at order
  1. 01Quotefree · from the VIN

    Every lane prices from the decode — vendor cost and margin itemized before any commitment.

  2. 02Paid ordertimestamp posts as it clears

    The order opens at the posted price. service.created posts to the record.

  3. 03Webhookposts as it changes

    Vendor status posts as it changes — service.updated, then service.completed with the completion facts. Distance-to-done is a line on the record, not a phone call.

  4. 04One invoiceposts at settlement

    A deal-attached order settles under the parent invoice’s one total at buy.vin — the move’s line settles at transport.vin, the member that owns it.

Order id, timestamps, and amounts render live at the address. Structure, not samples.

Graduation is a pointer swap.

A held service transacts here until its door ships.

The order chassis takes the order at this address: the same order type, the same canonical name, the same ledger stream. When a lane’s member door goes live, the pointer swaps — the address changes, the record does not. Going live is a data change, not a layout one.

MOVEroadside.vintows.vinimport.vinimports.vinexport.vinexports.vincustoms.vin

FIXcollision.vintires.vinupfit.vinmods.vinaftermarket.vinthe parts are Commerce; only the install is a Services act

PAPERemissions.vin

KEEPstorage.vingarage.vinparking.vintolls.vinfleets · driver — persona marks, no door

POWERcharge.vin

the seams — the fact reads in another layer

  • battery · batteries · sohthe health is a record fact; it reads in the Data layer at data.vin
  • warranty · warrantiesthe VSC sale books in Commerce at fi.vin; the covered-repair claim is a fix-lane order here fi.vin
  • accessories · partthe thing is Commerce, the fitment is Data; only the install is a Services act
  • escrowsettlement is Commerce; this layer cross-references, never claims escrow.vin

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://services.vin/ -H 'accept: text/markdown'        → the markdown twin of this page
curl https://services.vin/{VIN} -H 'accept: application/json' → the record as typed evidence objects
curl https://services.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.