diff --git a/.github/scripts/validate-site.mjs b/.github/scripts/validate-site.mjs index 7d02872..5c6a48a 100644 --- a/.github/scripts/validate-site.mjs +++ b/.github/scripts/validate-site.mjs @@ -13,7 +13,7 @@ const ok = (msg) => console.log(' ✓ ' + msg); // Pages built on the shared kit (must load assets/site.js). const KIT_PAGES = [ 'index.html', 'browse.html', 'series.html', 'body.html', 'character.html', - 'family.html', 'quiz.html', 'craft.html', 'contact.html', + 'family.html', 'quiz.html', 'craft.html', 'contact.html', 'configurator.html', ]; // Standalone legacy page — kept for reference, intentionally self-contained. const STANDALONE_PAGES = ['index-gallery-original.html']; diff --git a/README.md b/README.md index 43ab73d..7e0d9d8 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,8 @@ build_profiles.py # WHR/BWR analysis → classify into the 6 Body Families build_characters.py # Series → Body → 4 characters → photoshoot|placeholder merge_stories.py # fold story/profile inputs into characters.json make_thumbs.py # generate hero/gallery thumbnails (re-run after build_characters) +build_neck_compat.py # neck-connector classes → db/neck_compatibility.json (head interchangeability) +build_heads.py # reverse-engineer heads → db/heads.json (configurator head gallery; imports build_neck_compat) build_package.py # stage the deliverable (code + referenced images) + zip ``` diff --git a/configurator.html b/configurator.html new file mode 100644 index 0000000..92b9713 --- /dev/null +++ b/configurator.html @@ -0,0 +1,569 @@ + + + + + +ZELEX — Configurator + + + + + + +
Atlas Configurator
+
Loading catalog…
+ + + + + diff --git a/db/configurator_examples.json b/db/configurator_examples.json new file mode 100644 index 0000000..55254bf --- /dev/null +++ b/db/configurator_examples.json @@ -0,0 +1,139 @@ +{ + "_comment": "Reverse-engineered worked examples: three strong-data ZELEX architectures expressed as configurator build documents, each paired with the values its declarations resolve to. This is the proof that the declarative model in db/configurator_schema.json round-trips real catalogued bodies. `build` = buyer inputs only; `resolved` = output of the schema's derivations; `source` = where each fact came from. All numbers are transcribed from db/, not invented.", + "spec_version": "1.0.0", + "validated_against": "db/configurator_schema.json#/build_document_schema", + + "examples": [ + { + "id": "yvonne-zg170c", + "title": "I-Series Muse — ZG170C (e.g. Yvonne / Valerie cast)", + "why_chosen": "Full 17-field spec card; exact-confidence Muse; 59 live variants — the richest head pool to exercise head/face/tone axes.", + "build": { + "spec_version": "1.0.0", + "body": { "line": "I-Series", "height_cm": 170, "cup": "C", "material": "Silicone" }, + "head": { "head_code": "GE52_2", "face_variant": "Standard", "head_tone_match": true }, + "components": { "skin_tone": "Tan", "breast_type": "Standard", "standing_feet": false, "fingers": false } + }, + "resolved": { + "body_code": "ZG170C", + "family": "The Muse", + "family_confidence": "exact", + "WHR": 0.686, + "BWR": 1.357, + "signature": { + "upper_bust": 87.5, "under_bust": 71.5, "waist": 64.5, "hip": 94, + "neck": 33, "shoulder_width": 40, "arm_length": 68, "hand_length": 18.5, + "leg_length": 78, "foot_length": 23, "thigh_circ": 50, "calf_circ": 32, + "weight_kg": 36.1 + }, + "sku": "GE52_2+ZG170C-Tan", + "price": "3599.00", + "price_basis": "catalogued live variant (authoritative)", + "estimated": false + }, + "movable_jaw_alt": { + "note": "Switching face_variant → Movable Jaw resolves a different head+face and SKU, per db/product_overrides.json.", + "build_delta": { "head.head_code": "GE02_1", "head.face_variant": "Movable Jaw" }, + "resolved_sku": "GE02_1_2(GE46MJ)+ZG170C-Tan" + }, + "source": { + "signature": "db/body_measurements.json#/bodies/ZG170C", + "family_whr_bwr": "db/body_profiles.json#/profiles (ZG170C)", + "sku_price": "db/live_variants.json (body=ZG170C, head=GE52_2, tone=Tan)", + "movable_jaw": "db/product_overrides.json#/GE02_1" + } + }, + + { + "id": "somi-zk168b", + "title": "K-Series Muse — ZK168B (Somi cast)", + "why_chosen": "Full spec card; demonstrates the WHR/BWR classifier landing at a family boundary (WHR just under Icon, BWR low) yet still resolving to a precomputed family value — the case where you trust the stored classification over a re-derive.", + "build": { + "spec_version": "1.0.0", + "body": { "line": "K-Series", "height_cm": 168, "cup": "B", "material": "Silicone" }, + "head": { "head_code": "KE03_1", "face_variant": "Standard", "head_tone_match": true }, + "components": { "skin_tone": "Fair", "breast_type": "Standard", "standing_feet": false, "fingers": false } + }, + "resolved": { + "body_code": "ZK168B", + "family": "The Muse", + "family_confidence": "loose", + "WHR": 0.649, + "BWR": 1.238, + "signature": { + "upper_bust": 78, "under_bust": 66, "waist": 63, "hip": 97, + "neck": 27.5, "shoulder_width": 34.5, "arm_length": 71, "hand_length": 16, + "leg_length": 81, "foot_length": 22.5, "thigh_circ": 51, "calf_circ": 33, + "weight_kg": 37.5 + }, + "sku": "KE03_1+ZK168B-1", + "price": "3869.10", + "price_basis": "catalogued live variant (authoritative)", + "estimated": false, + "classifier_note": "WHR 0.649 sits below the Muse floor (0.65) and inside the Icon band (0.60–0.65), but BWR 1.238 is below both. The nearest-center family (The Muse) contains NEITHER axis in range → confidence 'loose' (per db/family_taxonomy.json#/confidence_labels). This is why resolve_price prefers the stored db/body_profiles family over a live re-derive." + }, + "source": { + "signature": "db/body_measurements.json#/bodies/ZK168B", + "family_whr_bwr": "db/body_profiles.json#/profiles (ZK168B)", + "sku_price": "db/live_variants.json (body=ZK168B, head=KE03_1)" + } + }, + + { + "id": "zxe215-zx172e", + "title": "SLE Icon — ZX172E (ZXE215_1 cast)", + "why_chosen": "Exercises the SLE-only axes (TPE material, skeleton_version) and the version/tone SKU suffix; exact-confidence Icon. Shows the same architecture priced two ways across skeleton versions.", + "build": { + "spec_version": "1.0.0", + "body": { "line": "SLE 3.0", "height_cm": 172, "cup": "E", "material": "TPE", "skeleton_version": "SLE 3.0" }, + "head": { "head_code": "ZXE215_1", "face_variant": "Standard", "head_tone_match": true }, + "components": { "skin_tone": "Tan", "breast_type": "Standard", "standing_feet": false, "fingers": false } + }, + "resolved": { + "body_code": "ZX172E", + "family": "The Icon", + "family_confidence": "exact", + "WHR": 0.608, + "BWR": 1.504, + "signature": { + "upper_bust": 86.5, "under_bust": 67, "waist": 57.5, "hip": 94.5, + "neck": 32.5, "shoulder_width": 38, "arm_length": 70.5, "hand_length": 19, + "leg_length": 84.5, "foot_length": 21, "thigh_circ": 48.5, "calf_circ": 34, + "weight_kg": 35.7 + }, + "sku": "ZXE215_1+ZX172E-Tan-Sle3.0", + "price": "2000.00", + "price_basis": "catalogued live variant (authoritative)", + "estimated": false + }, + "skeleton_version_alt": { + "note": "Same body, head, tone, but SLE 2.0 skeleton resolves a separate, lower-priced SKU — proving skeleton_version is a real price axis, not cosmetic.", + "build_delta": { "body.skeleton_version": "SLE 2.0" }, + "resolved_sku": "ZXE203_W1+ZX172E-White-Sle2.0", + "resolved_price": "1600.00" + }, + "source": { + "signature": "db/body_measurements.json#/bodies/ZX172E", + "family_whr_bwr": "db/body_profiles.json#/profiles (ZX172E)", + "sku_price": "db/live_variants.json (body=ZX172E, head=ZXE215_1, tone=Tan, Sle3.0)" + } + } + ], + + "bespoke_example": { + "id": "bespoke-empress", + "title": "Bespoke combination — no catalogued architecture", + "why_chosen": "Shows the warn-path: a valid-looking selection that resolve_body_code cannot map to a real body_code.", + "build": { + "spec_version": "1.0.0", + "body": { "line": "K-Series", "height_cm": 175, "cup": "K", "material": "Silicone" }, + "head": { "head_code": "KE03_1", "face_variant": "Standard" }, + "components": { "skin_tone": "Fair" } + }, + "resolved": { + "body_code": null, + "validation_flags": ["bespoke_combination"], + "disposition": "Route to a bespoke inquiry (PDR-003 notify-me pattern), not an instant SKU. ZK175K is not a catalogued architecture." + } + } +} diff --git a/db/configurator_schema.json b/db/configurator_schema.json new file mode 100644 index 0000000..e9e3b4c --- /dev/null +++ b/db/configurator_schema.json @@ -0,0 +1,267 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "spec_version": "1.0.0", + "title": "ZELEX Declarative Configurator Spec", + "description": "A data-driven specification a configurator UI is GENERATED from (not hand-coded against). Each axis declares its control, type, option source, provenance, and price effect. A buyer's selections form a 'build document' that resolves — through the declarations in `derivations` — to a catalogued body architecture, a SKU, a measurement signature, a Body Family, and a price. See docs/pdr/PDR-011-declarative-configurator.md. Large option sets are referenced by data source rather than inlined, so the catalog stays the single source of truth.", + "generated_from": [ + "db/catalog.json", "db/body_measurements.json", "db/body_profiles.json", + "db/body_types.json", "db/live_variants.json", "db/product_overrides.json" + ], + + "data_sources": { + "catalog": { "file": "db/catalog.json", "note": "series + 255 head+body products" }, + "measurements": { "file": "db/body_measurements.json", "note": "spec-card measurements — source of truth for the signature" }, + "profiles": { "file": "db/body_profiles.json", "note": "WHR/BWR + Body Family classification per body_code" }, + "body_types": { "file": "db/body_types.json", "note": "architecture records (family, slots, photoshoots)" }, + "variants": { "file": "db/live_variants.json", "note": "396 live SKUs — head+body+tone → price" } + }, + + "provenance_legend": { + "catalog": "Enumerated directly from catalogued product data.", + "spec-card": "Read from db/body_measurements.json once a body_code resolves; not buyer-editable.", + "derived": "Computed by a rule in `derivations`; never stored as input.", + "proposed": "A real ZELEX option not yet structured in db/. Flagged so the team can decide to backfill it before this axis goes live." + }, + + "groups": [ + { + "id": "body", + "label": "Body Architecture", + "intent": "Selectors that RESOLVE to one catalogued architecture. They are filters, not free composition — every valid combination must map to an existing body_code (or be flagged bespoke).", + "axes": [ + { + "id": "line", "label": "Series / Line", "control": "select", "type": "string", + "required": true, "provenance": "catalog", + "enum": ["K-Series", "I-Series", "Fusion", "SLE 3.0", "The Classic", "The Sculpt"], + "code_prefix": { "K-Series": "ZK", "I-Series": ["ZG", "ZGX"], "Fusion": "ZF", "SLE 3.0": "ZX", "The Classic": "ZC", "The Sculpt": "ZS" }, + "status": { "The Classic": "in_development", "The Sculpt": "in_development" }, + "note": "Drives the body_code prefix and the head-pool naming grammar." + }, + { + "id": "height_cm", "label": "Height", "control": "slider", "type": "integer", + "unit": "cm", "required": true, "provenance": "catalog", + "min": 153, "max": 175, "step": 1, "default": 168, + "exclude_below": 120, "exclude_reason": "Torso / mini bodies are out of scope (is_torso filter in build_characters.py).", + "note": "Resolves with line+cup to a body_code. Not all heights exist for all lines." + }, + { + "id": "cup", "label": "Cup", "control": "select", "type": "string", + "required": true, "provenance": "catalog", + "enum": ["A", "B", "C", "D", "E", "F", "G", "J", "K"], + "default": "C" + }, + { + "id": "material", "label": "Material", "control": "radio", "type": "string", + "required": true, "provenance": "catalog", + "enum": ["Silicone", "TPE"], + "default_by_line": { "K-Series": "Silicone", "I-Series": "Silicone", "Fusion": "Silicone", "SLE 3.0": "TPE" }, + "note": "Catalog titles mark K/I/Fusion as Silicone; SLE skews TPE. Material is a price driver." + }, + { + "id": "skeleton_version", "label": "Skeleton Version", "control": "select", "type": "string", + "required": false, "provenance": "catalog", + "enum": ["SLE 2.0", "SLE 3.0"], "default": "SLE 3.0", + "visible_when": { "line": "SLE 3.0" }, + "note": "Only meaningful for the SLE line; appears in SKU suffix (…-Sle3.0)." + }, + { + "id": "body_code", "label": "Resolved Architecture", "control": "derived", "type": "string", + "provenance": "derived", "derivation_ref": "resolve_body_code" + }, + { + "id": "signature", "label": "Measurement Signature", "control": "derived", "type": "object", + "provenance": "spec-card", "source_ref": "measurements", + "fields": ["upper_bust", "under_bust", "waist", "hip", "neck", "shoulder_width", "arm_length", "hand_length", "leg_length", "foot_length", "thigh_circ", "calf_circ", "weight_kg"], + "unit": "cm (weight_kg in kg)", + "note": "Locked to the resolved body_code. Read-only — the buyer picks an architecture, not loose tape measures." + }, + { + "id": "family", "label": "Body Family", "control": "derived", "type": "string", + "provenance": "derived", "derivation_ref": "classify_family" + } + ] + }, + + { + "id": "head", + "label": "Head & Face", + "axes": [ + { + "id": "head_code", "label": "Head", "control": "gallery-select", "type": "string", + "required": true, "provenance": "catalog", + "enum_source": { "source": "catalog", "path": "products[*].head_code", "distinct": true, "filter": "matches selected line prefix" }, + "note": "163 distinct heads in catalog; rendered as an image gallery filtered to the line, not a 163-row dropdown." + }, + { + "id": "face_variant", "label": "Jaw / Face Build", "control": "radio", "type": "string", + "required": true, "provenance": "catalog", + "enum": ["Standard", "Movable Jaw"], + "default": "Standard", + "resolves": { "Movable Jaw": "appends MJ face_code (e.g. GE46MJ) per db/product_overrides.json" }, + "note": "~50 catalog variants carry a Movable-Jaw face_code. Availability depends on head_code." + }, + { + "id": "head_tone_match", "label": "Match head tone to body", "control": "toggle", "type": "boolean", + "required": false, "provenance": "catalog", "default": true, + "note": "When true, head skin_tone follows the body skin_tone component; otherwise selectable independently." + }, + { + "id": "cross_line_heads", "label": "Interchangeable heads (cross-line)", "control": "toggle", "type": "boolean", + "required": false, "provenance": "proposed", "default": false, + "compat_basis": "neck_class (db/heads.json#/neck_classes) — heads attach at the neck; the connector size, not the marketing line, is the constraint.", + "note": "Show every head that physically fits this body's neck connector, across lines. A cross-line pairing is a CUSTOM build (neck-class is estimated from spec cards), never a catalogued SKU — it resolves to a bespoke inquiry." + } + ] + }, + + { + "id": "components", + "label": "Components & Finish", + "axes": [ + { + "id": "skin_tone", "label": "Skin Tone", "control": "swatch", "type": "string", + "required": true, "provenance": "catalog", + "enum": ["Fair", "Tan", "White"], + "default": "Fair", + "note": "From live_variants tone field (Tan 228, Fair 72, White 23 SKUs); resolves into the SKU suffix (…-Tan)." + }, + { + "id": "breast_type", "label": "Breast Build", "control": "radio", "type": "string", + "required": false, "provenance": "catalog", + "enum": ["Standard", "Gel / Implant"], + "default": "Standard", + "note": "15 catalog SKUs reference an implant/gel build; offered where the body supports it." + }, + { + "id": "standing_feet", "label": "Standing Feet (foot bolts)", "control": "toggle", "type": "boolean", + "required": false, "provenance": "proposed", "default": false, + "note": "PROPOSED — a real ZELEX option not yet in db/. Backfill a per-body 'standing' flag before enabling." + }, + { + "id": "fingers", "label": "Articulated Fingers", "control": "toggle", "type": "boolean", + "required": false, "provenance": "proposed", "default": false, + "note": "PROPOSED — needs a per-body capability flag in db/ before going live." + } + ] + }, + + { + "id": "face", + "label": "Face & Finish", + "intent": "Per-head finish options. PROPOSED: these are real ZELEX customizations, but there is no per-head face-feature data in db/ to reverse-engineer from — the enums below are the standard option set, not catalogued per-head availability/defaults. They compose into the build as a custom finish (no SKU impact) and write to the `face_features` slot reserved on each head (db/heads.json). Backfill that slot per head to turn these from global options into head-aware ones.", + "axes": [ + { "id": "eye_color", "label": "Eye Colour", "control": "select", "type": "string", "provenance": "proposed", + "enum": ["As pictured", "Brown", "Hazel", "Blue", "Green", "Grey"], "default": "As pictured", + "note": "PROPOSED — acrylic eye swap. Per-head default unknown (no db/ data); 'As pictured' = the head's shipped eyes." }, + { "id": "makeup", "label": "Makeup", "control": "radio", "type": "string", "provenance": "proposed", + "enum": ["As pictured", "Natural", "Glam"], "default": "As pictured", + "note": "PROPOSED — factory makeup style." }, + { "id": "eyebrows", "label": "Eyebrows", "control": "radio", "type": "string", "provenance": "proposed", + "enum": ["Painted", "Implanted"], "default": "Painted", + "note": "PROPOSED — hand-painted vs implanted brow hair." }, + { "id": "wig_color", "label": "Wig", "control": "select", "type": "string", "provenance": "proposed", + "enum": ["As pictured", "Black", "Brunette", "Blonde", "Red"], "default": "As pictured", + "note": "PROPOSED — removable wig; not a sculpt attribute." }, + { "id": "freckles", "label": "Freckles", "control": "toggle", "type": "boolean", "provenance": "proposed", + "default": false, "note": "PROPOSED — optional painted freckles." } + ] + } + ], + + "derivations": [ + { + "id": "resolve_body_code", + "produces": "body.body_code", + "inputs": ["body.line", "body.height_cm", "body.cup"], + "rule": "code = code_prefix(line) + height_cm + cup; lookup must exist in db/body_measurements.json#/bodies. If absent, set body_code=null and raise the `bespoke_combination` validation flag.", + "example": "K-Series + 168 + B → ZK168B" + }, + { + "id": "classify_family", + "produces": "body.family", + "inputs": ["signature.waist", "signature.hip", "signature.upper_bust"], + "rule": "WHR = waist/hip; BWR = upper_bust/waist; choose the family whose whr_range and bwr_range both contain the point (db/body_profiles.json#/families). On no exact containment, pick nearest range-center and label confidence near|loose (see db/family_taxonomy.json#/confidence_labels).", + "note": "Prefer the precomputed value at db/body_profiles.json#/profiles[body_code] when present; recompute only for bespoke combinations." + }, + { + "id": "resolve_sku", + "produces": "resolved.sku", + "inputs": ["head.head_code", "head.face_variant", "body.body_code", "components.skin_tone", "body.skeleton_version"], + "rule": "sku = head_code [ + '(' + faceMJ + ')' if Movable Jaw ] + '+' + body_code [ + '-' + skin_tone ] [ + '-Sle' + version for SLE ]. Match against db/live_variants.json#/sku for an exact catalogued SKU.", + "example": "ZXE215_1 + ZX172E + Tan + SLE 3.0 → ZXE215_1+ZX172E-Tan-Sle3.0" + }, + { + "id": "resolve_price", + "produces": "resolved.price", + "inputs": ["resolved.sku", "body.family", "body.material"], + "rule": "If resolved.sku matches a live variant, use its price (authoritative). Otherwise estimate: base_by_line × material_factor × (1 + family_premium). Mark estimated:true.", + "pricing_model": { + "base_by_line_usd": { "SLE 3.0": 1800, "Fusion": 3200, "I-Series": 3400, "K-Series": 3600 }, + "material_factor": { "Silicone": 1.0, "TPE": 0.85 }, + "family_premium": { "The Classic": 0.20, "The Muse": 0.25, "The Icon": 0.30, "The Siren": 0.35, "The Empress": 0.30, "The Sculpt": 0.25 }, + "note": "Premiums mirror db/body_profiles.json. Catalogued SKU price always wins over the estimate." + } + } + ], + + "validation": [ + { "id": "bespoke_combination", "severity": "warn", "when": "resolve_body_code finds no catalogued body_code", "message": "This line + height + cup is not a catalogued architecture. Treat as a bespoke inquiry, not an instant SKU." }, + { "id": "mj_unsupported", "severity": "error", "when": "face_variant == 'Movable Jaw' and head_code has no MJ face_code in product_overrides", "message": "Selected head has no Movable-Jaw build." }, + { "id": "neck_incompatible", "severity": "error", "when": "head neck_class != body neck_class", "message": "This head's neck connector does not fit this body — different neck class." }, + { "id": "cross_line_head", "severity": "warn", "when": "head line != body line (but neck_class matches)", "message": "Cross-line head pairing — neck-compatible but not a catalogued combination. Custom build / bespoke inquiry, not an instant SKU. Neck fit is estimated; confirm before order." }, + { "id": "skeleton_scope", "severity": "error", "when": "skeleton_version is set and line != 'SLE 3.0'", "message": "Skeleton version applies to the SLE line only." }, + { "id": "torso_excluded", "severity": "error", "when": "height_cm < 120", "message": "Torso / mini bodies are out of scope." }, + { "id": "dev_line", "severity": "warn", "when": "line in ['The Classic','The Sculpt']", "message": "This line is in development — route to notify-me, not checkout (see PDR-003)." } + ], + + "build_document_schema": { + "$comment": "JSON Schema a saved build is validated against. Inputs only — derived fields live in `resolved` and are recomputed, never trusted from input.", + "type": "object", + "required": ["spec_version", "body", "head", "components"], + "properties": { + "spec_version": { "const": "1.0.0" }, + "body": { + "type": "object", + "required": ["line", "height_cm", "cup", "material"], + "properties": { + "line": { "enum": ["K-Series", "I-Series", "Fusion", "SLE 3.0", "The Classic", "The Sculpt"] }, + "height_cm": { "type": "integer", "minimum": 120, "maximum": 175 }, + "cup": { "enum": ["A", "B", "C", "D", "E", "F", "G", "J", "K"] }, + "material": { "enum": ["Silicone", "TPE"] }, + "skeleton_version": { "enum": ["SLE 2.0", "SLE 3.0"] } + } + }, + "head": { + "type": "object", + "required": ["head_code", "face_variant"], + "properties": { + "head_code": { "type": "string" }, + "face_variant": { "enum": ["Standard", "Movable Jaw"] }, + "head_tone_match": { "type": "boolean" }, + "cross_line_heads": { "type": "boolean" } + } + }, + "components": { + "type": "object", + "required": ["skin_tone"], + "properties": { + "skin_tone": { "enum": ["Fair", "Tan", "White"] }, + "breast_type": { "enum": ["Standard", "Gel / Implant"] }, + "standing_feet": { "type": "boolean" }, + "fingers": { "type": "boolean" } + } + }, + "face": { + "type": "object", + "description": "Optional custom finish (all PROPOSED — no per-head data backing yet).", + "properties": { + "eye_color": { "enum": ["As pictured", "Brown", "Hazel", "Blue", "Green", "Grey"] }, + "makeup": { "enum": ["As pictured", "Natural", "Glam"] }, + "eyebrows": { "enum": ["Painted", "Implanted"] }, + "wig_color": { "enum": ["As pictured", "Black", "Brunette", "Blonde", "Red"] }, + "freckles": { "type": "boolean" } + } + } + } + } +} diff --git a/db/heads.json b/db/heads.json new file mode 100644 index 0000000..b8889f9 --- /dev/null +++ b/db/heads.json @@ -0,0 +1,4701 @@ +{ + "version": "1.0.0", + "_comment": "Head catalog reverse-engineered from products + variants + characters + movable-jaw overrides (scripts/build_heads.py). One record per head sculpt: line, movable-jaw availability, skin tones, paired bodies, cast characters, a representative image, and price range. Feeds the configurator head gallery (PDR-011). Regenerate after build_characters.py / make_thumbs.py.", + "generated_from": [ + "db/catalog.json", + "db/live_variants.json", + "db/product_overrides.json", + "db/characters.json" + ], + "series_line_map": { + "Fusion": "Fusion", + "I": "I-Series", + "K": "K-Series", + "SLE": "SLE 3.0" + }, + "neck_classes": { + "_basis": "Neck-connector class is the interchangeability constraint, not the marketing line. Threshold: neck circumference < 29.0cm = 'slim', else 'standard'. ESTIMATED from spec-card neck measurements — confirm against the physical neck joint.", + "slim": "Narrow connector — K-Series (~27cm).", + "standard": "Standard connector — Fusion / I-Series / SLE 3.0 (~31-33cm). Heads here are mutually swappable." + }, + "count": 189, + "heads": { + "GE02_1": { + "head_code": "GE02_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE46MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [ + "I-ZG170C-01" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE02_1/GE02_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE03_1": { + "head_code": "GE03_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE70MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C", + "ZG175E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/I-Series/GE03_1/GE03_1-101.jpg", + "price_range": [ + 3599.0, + 3899.0 + ], + "face_features": null + }, + "GE03_2": { + "head_code": "GE03_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE70MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C", + "ZG175E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/I-Series/GE03_2/GE03_2-101.jpg", + "price_range": [ + 3599.0, + 3899.0 + ], + "face_features": null + }, + "GE07_1": { + "head_code": "GE07_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/I-Series/GE07_1_ZG170C/GE07_1_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE07_3": { + "head_code": "GE07_3", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE07_3/GE07_3-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE100_1": { + "head_code": "GE100_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE100_1/GE100_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE101_1": { + "head_code": "GE101_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": null, + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE109_1": { + "head_code": "GE109_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE109_1/GE109_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE111_1": { + "head_code": "GE111_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 3, + "representative_image": "assets/I-Series/GE111_1/GE111_1-109.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE111_2": { + "head_code": "GE111_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE111_2/GE111_2-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE111_3": { + "head_code": "GE111_3", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE111_3_ZGE175E/GE111_3_ZGE175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE113_1": { + "head_code": "GE113_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE50MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE113_1_GE50MJ/GE113_1_GE50MJ_-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE114_1": { + "head_code": "GE114_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE52MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/I-Series/GE114_1/GE114_1-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE115_1": { + "head_code": "GE115_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE55MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C", + "ZG175E" + ], + "characters": [ + "I-ZG175E-01" + ], + "product_count": 2, + "representative_image": "assets/thumbs/I-Series/GE115_1/GE115_1-101.jpg", + "price_range": [ + 3599.0, + 3899.0 + ], + "face_features": null + }, + "GE116_1": { + "head_code": "GE116_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE49MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/I-Series/GE116_1/GE116_1-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE122_1": { + "head_code": "GE122_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE122_1/GE122_1-115.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE122_2": { + "head_code": "GE122_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE122_2_ZG170C/GE122_2_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE123_1": { + "head_code": "GE123_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE123_1/GE123_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE124_1": { + "head_code": "GE124_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE124_1/GE124_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE124_2": { + "head_code": "GE124_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE124_2_ZG170C/GE124_2_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE125_1": { + "head_code": "GE125_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C", + "ZGX165F" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/I-Series/GE125_1/GE125_1-102.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE125_2": { + "head_code": "GE125_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE125_2/GE125_2-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE125_3": { + "head_code": "GE125_3", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE127_1": { + "head_code": "GE127_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE78MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170D" + ], + "characters": [ + "I-ZG170D-01" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE127_1_GE78MJ_ZG170D/GE127_1_GE78MJ_ZG170D-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE134_1": { + "head_code": "GE134_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE122MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [ + "I-ZGX165F-03" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE134_1_GE122MJ_ZGX165F/GE134_1_GE122MJ_ZGX165F-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE137_1": { + "head_code": "GE137_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE125MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE137_1_GE125MJ_ZG175E/GE137_1_GE125MJ_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE138_1": { + "head_code": "GE138_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE106MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [ + "I-ZG175E-03" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE138_1_GE106MJ_ZG175E/GE138_1_GE106MJ_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE139_1": { + "head_code": "GE139_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE08MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C", + "ZGX165F" + ], + "characters": [ + "I-ZGX165F-02" + ], + "product_count": 2, + "representative_image": "assets/thumbs/I-Series/GE139_1_GE08MJ_ZGX165F/GE139_1_GE08MJ_ZGX165F-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE139_2": { + "head_code": "GE139_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE141_1": { + "head_code": "GE141_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE72MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [ + "I-ZGX165F-01" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE141_1_GE72MJ_ZGX165F/GE141_1_GE72MJ_ZGX165F-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE146_1": { + "head_code": "GE146_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE88MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE146_1_GE88MJ_ZG170C/GE146_1_GE88MJ_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE149_1": { + "head_code": "GE149_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE74MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170D" + ], + "characters": [ + "I-ZG170D-02" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE149_1_GE74MJ_ZG170D/GE149_1_GE74MJ_ZG170D-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE14_1": { + "head_code": "GE14_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE109MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE14_1/GE14_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE14_2": { + "head_code": "GE14_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE109MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE14_2/GE14_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE14_3": { + "head_code": "GE14_3", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE109MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE14_3/GE14_3-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE16_1": { + "head_code": "GE16_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE76MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE16_1/GE16_1-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE16_2": { + "head_code": "GE16_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE76MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE16_2/GE16_2-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE173_1": { + "head_code": "GE173_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE110MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE173_1_GE110MJ_ZG170C/GE173_1_GE110MJ_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE24_1": { + "head_code": "GE24_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE24_1_ZG170C/GE24_1_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE41_1": { + "head_code": "GE41_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE98MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [ + "I-ZG175E-02" + ], + "product_count": 2, + "representative_image": "assets/thumbs/I-Series/GE41_1_GE98MJ_ZG175E/GE41_1_GE98MJ_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE45_1": { + "head_code": "GE45_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/I-Series/GE45_1/GE45_1-105.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE45_2": { + "head_code": "GE45_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE45_2/GE45_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE45_5": { + "head_code": "GE45_5", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE45_5/GE45_5-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE45_6": { + "head_code": "GE45_6", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE45_6/GE45_6-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE45_7": { + "head_code": "GE45_7", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE45_7_ZG175E/GE45_7_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE45_8": { + "head_code": "GE45_8", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [ + "I-ZGX165F-04" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE45_8_ZGX165F/GE45_8_ZGX165F-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE46_2": { + "head_code": "GE46_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE46_2/GE46_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE46_3": { + "head_code": "GE46_3", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE46_3/GE46_3-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE46_4": { + "head_code": "GE46_4", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE46_4/GE46_4-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE46_5": { + "head_code": "GE46_5", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE46_5/GE46_5-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE47_1": { + "head_code": "GE47_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 31.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG162D" + ], + "characters": [ + "I-ZG162D-01" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE47_1_ZG162D/GE47_1_ZG162D-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE48_1": { + "head_code": "GE48_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE48_1/GE48_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE48_2": { + "head_code": "GE48_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE48_2/GE48_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE49_1": { + "head_code": "GE49_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE49_1/GE49_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE49_2": { + "head_code": "GE49_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE49_2/GE49_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE50_1": { + "head_code": "GE50_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE50_1/GE50_1-123.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE51_2": { + "head_code": "GE51_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE51_2/GE51_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE52_1": { + "head_code": "GE52_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [ + "I-ZG170C-03" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE52_1/GE52_1-108.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE52_2": { + "head_code": "GE52_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE52_2/GE52_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE53_1": { + "head_code": "GE53_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [ + "I-ZG170C-04" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE53_1/GE53_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE53_2": { + "head_code": "GE53_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE53_2/GE53_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE53_3": { + "head_code": "GE53_3", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [ + "I-ZG170C-02" + ], + "product_count": 2, + "representative_image": "assets/thumbs/I-Series/GE53_3/GE53_3-108.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE55_3": { + "head_code": "GE55_3", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE55_3/GE55_3-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE58_1": { + "head_code": "GE58_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE58_1_ZG175E/GE58_1_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE59_1": { + "head_code": "GE59_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE58MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE59_1_GE58MJ_ZG175E/GE59_1_GE58MJ_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE60_1": { + "head_code": "GE60_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 31.5, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE06MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG162D" + ], + "characters": [ + "I-ZG162D-02" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE60_1_GE06MJ_ZG162D/GE60_1_GE06MJ_ZG162D-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE64_1": { + "head_code": "GE64_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE24MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE64_1_GE24MJ_ZGX165F/GE64_1_GE24MJ_ZGX165F-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE68_1": { + "head_code": "GE68_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 31.5, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE37MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG162D" + ], + "characters": [ + "I-ZG162D-03" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE68_1_GE37MJ_ZG162D/GE68_1_GE37MJ_ZG162D-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE76_1": { + "head_code": "GE76_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE76_1/GE76_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE78_1": { + "head_code": "GE78_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C", + "ZG175E" + ], + "characters": [], + "product_count": 3, + "representative_image": "assets/I-Series/GE78_1/GE78_1-101.jpg", + "price_range": [ + 3599.0, + 3899.0 + ], + "face_features": null + }, + "GE78_2": { + "head_code": "GE78_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE78_2/GE78_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE81_1": { + "head_code": "GE81_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE81_1/GE81_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE82_1": { + "head_code": "GE82_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE47MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [ + "I-ZG175E-04" + ], + "product_count": 1, + "representative_image": "assets/thumbs/I-Series/GE82_1_GE47MJ_ZG175E/GE82_1_GE47MJ_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE86_1": { + "head_code": "GE86_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZGX165F" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE86_1/GE86_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE88_2": { + "head_code": "GE88_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE88_2_ZG170C/GE88_2_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE94_1": { + "head_code": "GE94_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE94_1/GE94_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE94_2": { + "head_code": "GE94_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE45MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE94_2/GE94_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE95_1": { + "head_code": "GE95_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE53MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE95_1/GE95_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE95_2": { + "head_code": "GE95_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE53MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE95_2/GE95_2-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE95_3": { + "head_code": "GE95_3", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE53MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE95_3/GE95_3-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE95_4": { + "head_code": "GE95_4", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE53MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE95_4_GE53MJ_ZG175E/GE95_4_GE53MJ_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE95_5": { + "head_code": "GE95_5", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE53MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE95_5_ZG175E/GE95_5_ZG175E-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE95_6": { + "head_code": "GE95_6", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE53MJ" + ], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE95_6_GE53MJ_ZG170C/GE95_6_GE53MJ_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE95_7": { + "head_code": "GE95_7", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE53MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE95_7_GE53MJ_ZG170C/GE95_7_GE53MJ_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE97_1": { + "head_code": "GE97_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard", + "Movable Jaw" + ], + "mj_face_codes": [ + "GE07MJ" + ], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE97_1/GE97_1-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "GE98_1": { + "head_code": "GE98_1", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 30, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZG175E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/I-Series/GE98_1/GE98_1-101.jpg", + "price_range": [ + 3899.0, + 3899.0 + ], + "face_features": null + }, + "GE98_2": { + "head_code": "GE98_2", + "line": "I-Series", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZG170C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/I-Series/GE98_2_ZG170C/GE98_2_ZG170C-101.jpg", + "price_range": [ + 3599.0, + 3599.0 + ], + "face_features": null + }, + "KE01_1": { + "head_code": "KE01_1", + "line": "K-Series", + "neck_class": "slim", + "neck_cm": 27.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZK168B" + ], + "characters": [ + "K-ZK168B-01" + ], + "product_count": 2, + "representative_image": "assets/thumbs/K-Series/KE01_1+ZK168B-1/KE01_1_ZK168B-101.jpg", + "price_range": [ + 3869.1, + 3869.1 + ], + "face_features": null + }, + "KE02_1": { + "head_code": "KE02_1", + "line": "K-Series", + "neck_class": "slim", + "neck_cm": 27.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZK159D", + "ZK168B" + ], + "characters": [ + "K-ZK159D-01", + "K-ZK168B-03" + ], + "product_count": 2, + "representative_image": "assets/thumbs/K-Series/KE02_1+ZK168B-1/KE02_1_ZK168B-101.jpg", + "price_range": [ + 3869.1, + 3869.1 + ], + "face_features": null + }, + "KE03_1": { + "head_code": "KE03_1", + "line": "K-Series", + "neck_class": "slim", + "neck_cm": 27.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZK168B" + ], + "characters": [ + "K-ZK168B-02" + ], + "product_count": 2, + "representative_image": "assets/thumbs/K-Series/KE03_1+ZK168B-2/KE03_1_ZK168B-101.jpg", + "price_range": [ + 3869.1, + 3869.1 + ], + "face_features": null + }, + "ZFE01_1": { + "head_code": "ZFE01_1", + "line": "Fusion", + "neck_class": "standard", + "neck_cm": 31, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZF161D", + "ZF168B" + ], + "characters": [ + "Fusion-ZF161D-01", + "Fusion-ZF168B-01" + ], + "product_count": 2, + "representative_image": "assets/thumbs/Fusion-Series/ZFE01_1+ZF168B/ZFE01_1+ZF168B-101.jpg", + "price_range": [ + 4299.0, + 4299.0 + ], + "face_features": null + }, + "ZFE01_2": { + "head_code": "ZFE01_2", + "line": "Fusion", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZF169C" + ], + "characters": [ + "Fusion-ZF169C-01" + ], + "product_count": 1, + "representative_image": "assets/thumbs/Fusion-Series/ZFE01_2+ZF169C/ZFE01_2+ZF169C-101.jpg", + "price_range": [ + 4299.0, + 4299.0 + ], + "face_features": null + }, + "ZFE03_1": { + "head_code": "ZFE03_1", + "line": "Fusion", + "neck_class": "standard", + "neck_cm": 31, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZF168B" + ], + "characters": [ + "Fusion-ZF168B-02" + ], + "product_count": 1, + "representative_image": "assets/thumbs/Fusion-Series/ZFE03_1+ZF168B/ZFE03_1+ZF168B-101.jpg", + "price_range": [ + 4299.0, + 4299.0 + ], + "face_features": null + }, + "ZFE05_1": { + "head_code": "ZFE05_1", + "line": "Fusion", + "neck_class": "standard", + "neck_cm": 31, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Fair" + ], + "bodies": [ + "ZF168B" + ], + "characters": [ + "Fusion-ZF168B-03" + ], + "product_count": 1, + "representative_image": "assets/thumbs/Fusion-Series/ZFE05_1+ZF168B/ZFE05_1_ZF168B-101.jpg", + "price_range": [ + 4299.0, + 4299.0 + ], + "face_features": null + }, + "ZX201_2": { + "head_code": "ZX201_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZX201_2_ZX172E/ZX201_2_ZX172E-102.jpg", + "price_range": null, + "face_features": null + }, + "ZX204_1": { + "head_code": "ZX204_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZX204_1_ZX172E/ZX204_1_ZX172E-102.jpg", + "price_range": null, + "face_features": null + }, + "ZX207_1": { + "head_code": "ZX207_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZX207_1_ZX172E/ZX207_1_ZX172E-105.jpg", + "price_range": null, + "face_features": null + }, + "ZXE200_1": { + "head_code": "ZXE200_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G", + "ZX165D" + ], + "characters": [ + "SLE-ZX165D-04" + ], + "product_count": 2, + "representative_image": "assets/thumbs/SLE-Series/ZXE200_1_ZX165D/ZXE200_1_ZX165D-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE200_2": { + "head_code": "ZXE200_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE200_2_ZX160J/ZXE200_2_ZX160J-104.jpg", + "price_range": [ + 2000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE200_3": { + "head_code": "ZXE200_3", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K" + ], + "characters": [ + "SLE-ZX166K-01" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE200_3_ZX166K/ZXE200_3_ZX166K-101.jpg", + "price_range": [ + 2000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE200_W1": { + "head_code": "ZXE200_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX171C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE200_W1_ZX171C/ZXE200_W1_ZX171C-102.jpg", + "price_range": null, + "face_features": null + }, + "ZXE200_W2": { + "head_code": "ZXE200_W2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE200_W2_ZX172E/ZXE200_W2_ZX172E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE200_Z1": { + "head_code": "ZXE200_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX164G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE200_Z1_ZX164G/ZXE200_Z1_ZX164G-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE201_1": { + "head_code": "ZXE201_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J", + "ZX163E", + "ZX166K", + "ZX171C", + "ZX172E", + "ZX84J" + ], + "characters": [ + "SLE-ZX163E-04", + "SLE-ZX166K-03", + "SLE-ZX172E-02" + ], + "product_count": 5, + "representative_image": "assets/thumbs/SLE-Series/ZXE201_1_ZX172E/ZXE201_1_ZX172E-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE201_2": { + "head_code": "ZXE201_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE201_3": { + "head_code": "ZXE201_3", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D", + "ZX85G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE201_3_ZX85G/ZXE201_3_ZX85G-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE201_4": { + "head_code": "ZXE201_4", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX108J", + "ZX109G", + "ZX111K", + "ZX117E", + "ZX164G", + "ZX172E" + ], + "characters": [ + "SLE-ZX164G-04" + ], + "product_count": 5, + "representative_image": "assets/thumbs/SLE-Series/ZXE201_4_ZX164G/ZXE201_4_ZX164G-108.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE201_5": { + "head_code": "ZXE201_5", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX84J", + "ZX91E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/SLE-Series/ZXE201_5_ZX84J/ZXE201_5_ZX84J-102.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE201_W2": { + "head_code": "ZXE201_W2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX153B", + "ZX172E" + ], + "characters": [ + "SLE-ZX153B-01" + ], + "product_count": 2, + "representative_image": "assets/thumbs/SLE-Series/ZXE201_W2_ZX153B/ZXE201_W2_ZX153B-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE201_Z1": { + "head_code": "ZXE201_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE201_Z1_ZX172E/ZXE201_Z1_ZX172E-103.jpg", + "price_range": null, + "face_features": null + }, + "ZXE202_1": { + "head_code": "ZXE202_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J", + "ZX164G" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/SLE-Series/ZXE202_1_ZX160J/ZXE202_1_ZX160J-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE202_2": { + "head_code": "ZXE202_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE202_Z1": { + "head_code": "ZXE202_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX160J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE202_Z1_ZX160J/ZXE202_Z1_ZX160J-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE203_1": { + "head_code": "ZXE203_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX108J", + "ZX109G", + "ZX111K", + "ZX117E", + "ZX160J", + "ZX164G", + "ZX171C" + ], + "characters": [], + "product_count": 7, + "representative_image": "assets/SLE-Series/ZXE203_1_ZX108J/ZXE203_1_ZX108J-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE203_2": { + "head_code": "ZXE203_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K", + "ZX172E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/SLE-Series/ZXE203_2_ZX166K/ZXE203_2_ZX166K-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE203_3": { + "head_code": "ZXE203_3", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX163E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE203_3_ZX163E/ZXE203_3_ZX163E-101.jpg", + "price_range": [ + 1799.0, + 1799.0 + ], + "face_features": null + }, + "ZXE203_4": { + "head_code": "ZXE203_4", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX91E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE203_4_ZX91E/ZXE203_4_ZX91E-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE203_5": { + "head_code": "ZXE203_5", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX84J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE203_5_ZX84J/ZXE203_5_ZX84J-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE203_W1": { + "head_code": "ZXE203_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX117E", + "ZX171C", + "ZX172E" + ], + "characters": [ + "SLE-ZX172E-03" + ], + "product_count": 3, + "representative_image": "assets/thumbs/SLE-Series/ZXE203_W1_ZX172E/ZXE203_W1_ZX172E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE203_Z1": { + "head_code": "ZXE203_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX165D" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE203_Z1_ZX165D/ZXE203_Z1_ZX165D-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE204_1": { + "head_code": "ZXE204_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX108J", + "ZX109G", + "ZX111K", + "ZX160J", + "ZX163E", + "ZX164G", + "ZX166K", + "ZX172E", + "ZX91E" + ], + "characters": [ + "SLE-ZX160J-04", + "SLE-ZX163E-03", + "SLE-ZX166K-02" + ], + "product_count": 9, + "representative_image": "assets/thumbs/SLE-Series/ZXE204_1_ZX166K/ZXE204_1_ZX166k-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE204_2": { + "head_code": "ZXE204_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX84J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE204_2_ZX84J/ZXE204_2_ZX84J-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE204_Z1": { + "head_code": "ZXE204_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE204_Z1_ZX172E/ZXE204_Z1_ZX172E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE205_1": { + "head_code": "ZXE205_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J", + "ZX172E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/SLE-Series/ZXE205_1_ZX160J/ZXE205_1_ZX160J-102.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE205_2": { + "head_code": "ZXE205_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE205_2_ZX164G/ZXE205_2_ZX164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE205_Z1": { + "head_code": "ZXE205_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX166K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE205_Z1_ZX166K/ZXE205_Z1_ZX166K-102.jpg", + "price_range": null, + "face_features": null + }, + "ZXE206_1": { + "head_code": "ZXE206_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE206_1_ZX160J/ZXE206_1_ZX160J-101.jpg", + "price_range": [ + 2000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE206_2": { + "head_code": "ZXE206_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX172E", + "ZX86K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE206_2_ZX86K/ZXE206_2_ZX86K-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE206_3": { + "head_code": "ZXE206_3", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX163E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE206_3_ZX163E/ZXE206_3_ZX163E-101.jpg", + "price_range": [ + 1799.0, + 1799.0 + ], + "face_features": null + }, + "ZXE206_4": { + "head_code": "ZXE206_4", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX109G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE206_4_ZX109G/ZXE206_4_ZX109G-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE206_5": { + "head_code": "ZXE206_5", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX117E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE206_5_ZX117E/ZXE206_5_ZX117E-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE206_W1": { + "head_code": "ZXE206_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX109G", + "ZX153B" + ], + "characters": [ + "SLE-ZX153B-02" + ], + "product_count": 2, + "representative_image": "assets/thumbs/SLE-Series/ZXE206_W1_ZX153B/ZXE206_W1_ZX153B-120_195fc9d2-52b2-453a-b899-69d67c0ec99c.jpg", + "price_range": null, + "face_features": null + }, + "ZXE206_W2": { + "head_code": "ZXE206_W2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX117E", + "ZX172E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/SLE-Series/ZXE206_W2_ZX117E/ZXE206_W2_ZX117E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE206_Z1": { + "head_code": "ZXE206_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX160J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE206_Z1_ZX160J/ZXE206_Z1_ZX160J-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE207_1": { + "head_code": "ZXE207_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE207_2": { + "head_code": "ZXE207_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE207_3": { + "head_code": "ZXE207_3", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE207_3_ZX164G/ZXE207_3_ZX164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE207_Z1": { + "head_code": "ZXE207_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX160J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE207_Z1_ZX160J/ZXE207_Z1_ZX160J-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE208_1": { + "head_code": "ZXE208_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 2000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE208_4": { + "head_code": "ZXE208_4", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX86K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE208_4_ZX86K/ZXE208_4_ZX86K-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE208_5": { + "head_code": "ZXE208_5", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J", + "ZX85G", + "ZX91E" + ], + "characters": [ + "SLE-ZX160J-03" + ], + "product_count": 3, + "representative_image": "assets/thumbs/SLE-Series/ZXE208_5_ZX160J/ZXE208_5_ZX160J-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE208_W1": { + "head_code": "ZXE208_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX171C" + ], + "characters": [ + "SLE-ZX171C-04" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE208_W1_ZX171C/ZXE208_W1_ZX171C-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE208_Z1": { + "head_code": "ZXE208_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX166K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE208_Z1_ZX166K/ZXE208_Z1_ZX166K-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE209_1": { + "head_code": "ZXE209_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE209_1_ZX166K/ZXE209_1_ZX166K-101.jpg", + "price_range": [ + 1799.0, + 2000.0 + ], + "face_features": null + }, + "ZXE209_2": { + "head_code": "ZXE209_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE209_2_ZX165D/ZXE209_2_ZX165D-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE209_W1": { + "head_code": "ZXE209_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE209_W1_ZX172E/ZXE209_W1_ZX172E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE209_Z1": { + "head_code": "ZXE209_Z1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX172E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE209_Z1_ZX172E/ZXE209_Z1_ZX172E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE210_1": { + "head_code": "ZXE210_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX171C" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE210_2": { + "head_code": "ZXE210_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE211_1": { + "head_code": "ZXE211_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX171C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE211_1_ZX171C/ZXE211_1_ZX171C-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE211_2": { + "head_code": "ZXE211_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE211_2_ZX164G/ZXE211_2_ZX164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE212_1": { + "head_code": "ZXE212_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K", + "ZX171C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE212_1_ZX166K/ZXE212_1_ZX166K-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE212_2": { + "head_code": "ZXE212_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE212_2_ZX164G/ZXE212_2_ZX164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE212_W1": { + "head_code": "ZXE212_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE212_W1-ZX172E/ZXE212_W1-ZX172E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE212_W2": { + "head_code": "ZXE212_W2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX171C" + ], + "characters": [ + "SLE-ZX171C-02" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE212_W2_ZX171C/ZXE212_W2_ZX171C-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE213_1": { + "head_code": "ZXE213_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K", + "ZX85G" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/SLE-Series/ZXE213_1_ZX166K/ZXE213_1_ZX166K-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE213_2": { + "head_code": "ZXE213_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D", + "ZX171C", + "ZX86K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE213_2_ZX86K/ZXE213_2_ZX86K-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE214_1": { + "head_code": "ZXE214_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX171C" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE214_2": { + "head_code": "ZXE214_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE215_1": { + "head_code": "ZXE215_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX108J", + "ZX109G", + "ZX111K", + "ZX117E", + "ZX165D", + "ZX166K", + "ZX171C", + "ZX172E" + ], + "characters": [ + "SLE-ZX172E-01" + ], + "product_count": 6, + "representative_image": "assets/thumbs/SLE-Series/ZXE215_1_ZX172E/ZXE215_1_ZX172E-108.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE215_2": { + "head_code": "ZXE215_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX84J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE215_2_ZX84J/ZXE215_2_ZX84J-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE215_3": { + "head_code": "ZXE215_3", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX91E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE215_3_ZX91E/ZXE215_3_ZX91E-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE215_W1": { + "head_code": "ZXE215_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX171C", + "ZX172E" + ], + "characters": [ + "SLE-ZX171C-03" + ], + "product_count": 2, + "representative_image": "assets/thumbs/SLE-Series/ZXE215_W1_ZX171C/ZXE215_W1_ZX171C-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE216_1": { + "head_code": "ZXE216_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX108J", + "ZX109G", + "ZX111K", + "ZX117E", + "ZX163E", + "ZX164G", + "ZX85G" + ], + "characters": [ + "SLE-ZX163E-01", + "SLE-ZX164G-02" + ], + "product_count": 7, + "representative_image": "assets/thumbs/SLE-Series/ZXE216_1_ZX164G/ZXE216_1_ZX164G-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE216_2": { + "head_code": "ZXE216_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J", + "ZX84J" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/SLE-Series/ZXE216_2_ZX160J/ZXE216_2_ZX160J-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE216_3": { + "head_code": "ZXE216_3", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX109G", + "ZX165D", + "ZX86K" + ], + "characters": [ + "SLE-ZX165D-01" + ], + "product_count": 3, + "representative_image": "assets/thumbs/SLE-Series/ZXE216_3_ZX165D/ZXE216_3_ZX165D-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE216_4": { + "head_code": "ZXE216_4", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K", + "ZX91E" + ], + "characters": [], + "product_count": 2, + "representative_image": "assets/SLE-Series/ZXE216_4_ZX166K/ZXE216_4_ZX166K-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE216_W1": { + "head_code": "ZXE216_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX171C", + "ZX172E" + ], + "characters": [ + "SLE-ZX172E-04" + ], + "product_count": 2, + "representative_image": "assets/thumbs/SLE-Series/ZXE216_W1_ZX172E/ZXE216_W1_ZX172E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE217_1": { + "head_code": "ZXE217_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J" + ], + "characters": [ + "SLE-ZX160J-02" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE217_1_ZX160J/ZXE217_1_ZX160J-101_d32a9ded-3b83-4bc1-b5c3-0463117f63b0.jpg", + "price_range": [ + 2000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE217_2": { + "head_code": "ZXE217_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G" + ], + "characters": [ + "SLE-ZX164G-03" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE217_2_ZX164G/ZXE217_2_ZX164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE217_4": { + "head_code": "ZXE217_4", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX84J" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE217_4_ZX84J/ZXE217_4_ZX84J-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE217_5": { + "head_code": "ZXE217_5", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX86K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE217_5_ZX86K/ZXE217_5_ZX86K-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE218_1": { + "head_code": "ZXE218_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX160J", + "ZX171C" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE218_1_ZX160J/ZXE218_1_ZX160J-102.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE218_2": { + "head_code": "ZXE218_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE218_2_ZX166K/ZXE218_2_ZX166K-101.jpg", + "price_range": [ + 2000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE218_W1": { + "head_code": "ZXE218_W1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 33, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX171C", + "ZX172E" + ], + "characters": [ + "SLE-ZX171C-01" + ], + "product_count": 2, + "representative_image": "assets/thumbs/SLE-Series/ZXE218_W1_ZX171C/ZXE218_W1_ZX171C-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE218_W2": { + "head_code": "ZXE218_W2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [], + "bodies": [ + "ZX117E" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE218_W2_ZX117E/ZXE218_W2_ZX117E-101.jpg", + "price_range": null, + "face_features": null + }, + "ZXE219_1": { + "head_code": "ZXE219_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX163E", + "ZX164G" + ], + "characters": [ + "SLE-ZX163E-02", + "SLE-ZX164G-01" + ], + "product_count": 2, + "representative_image": "assets/thumbs/SLE-Series/ZXE219_1_ZX164G/ZXE219_1_ZX164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE219_2": { + "head_code": "ZXE219_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D" + ], + "characters": [], + "product_count": 0, + "representative_image": null, + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE220_1": { + "head_code": "ZXE220_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE220_1_ZX166K/ZXE220_1_ZX166K-101.jpg", + "price_range": [ + 2000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE220_2": { + "head_code": "ZXE220_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE220_2_ZX164G/ZXE220_2_ZX164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE221_2": { + "head_code": "ZXE221_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE221_2_ZX164G/ZXE221_2_ZX164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE222_1": { + "head_code": "ZXE222_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D" + ], + "characters": [ + "SLE-ZX165D-03" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE222_1_ZX165D/ZXE222_1_ZX165D-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE223_1": { + "head_code": "ZXE223_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX111K", + "ZX160J", + "ZX166K" + ], + "characters": [ + "SLE-ZX160J-01" + ], + "product_count": 3, + "representative_image": "assets/thumbs/SLE-Series/ZXE223_1_ZX160J/ZXE223_1_ZX160J-101.jpg", + "price_range": [ + 1000.0, + 2000.0 + ], + "face_features": null + }, + "ZXE223_2": { + "head_code": "ZXE223_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX86K" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE223_2_ZX86K/ZXE223_2_ZX86K-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE223_3": { + "head_code": "ZXE223_3", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": null, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX85G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE223_3_ZX85G/ZXE223_3_ZX85G-101.jpg", + "price_range": [ + 1000.0, + 1000.0 + ], + "face_features": null + }, + "ZXE224_1": { + "head_code": "ZXE224_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX164G" + ], + "characters": [], + "product_count": 1, + "representative_image": "assets/SLE-Series/ZXE224_1_ZG164G/ZXE224_1_ZG164G-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE224_2": { + "head_code": "ZXE224_2", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX165D" + ], + "characters": [ + "SLE-ZX165D-02" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE224_2_ZX165D/ZXE224_2_ZX165D-108.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE226_1": { + "head_code": "ZXE226_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX166K" + ], + "characters": [ + "SLE-ZX166K-04" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE226_1_ZX166K/ZXE226_1_ZX166K-101.jpg", + "price_range": [ + 1600.0, + 2000.0 + ], + "face_features": null + }, + "ZXE231_1": { + "head_code": "ZXE231_1", + "line": "SLE 3.0", + "neck_class": "standard", + "neck_cm": 32.5, + "face_variants": [ + "Standard" + ], + "mj_face_codes": [], + "skin_tones": [ + "Tan" + ], + "bodies": [ + "ZX170A" + ], + "characters": [ + "SLE-ZX170A-01" + ], + "product_count": 1, + "representative_image": "assets/thumbs/SLE-Series/ZXE231_1_ZX170A/ZXE231_1_ZX170A-101.jpg", + "price_range": [ + 2000.0, + 2000.0 + ], + "face_features": null + } + } +} diff --git a/db/neck_compatibility.json b/db/neck_compatibility.json new file mode 100644 index 0000000..11dfa73 --- /dev/null +++ b/db/neck_compatibility.json @@ -0,0 +1,184 @@ +{ + "version": "1.0.0", + "_comment": "Neck-connector compatibility — the basis for interchangeable heads (PDR-011 §8). neck_class is the compatibility key; heads fit a body when their classes match (see `compatibility`). neck_class is derived from spec-card neck CIRCUMFERENCE (threshold 29.0cm) until a measured `neck_joint_mm` connector spec is supplied per body — fill neck_joint_mm to replace the estimate. Generated by scripts/build_neck_compat.py; consumed by build_heads.py and configurator.html.", + "generated_from": [ + "db/body_measurements.json" + ], + "neck_slim_max_cm": 29.0, + "classes": { + "slim": { + "neck_circ_cm_max": 29.0, + "typical_lines": [ + "K-Series" + ], + "connector": "narrow" + }, + "standard": { + "neck_circ_cm_min": 29.0, + "typical_lines": [ + "Fusion", + "I-Series", + "SLE 3.0" + ], + "connector": "standard" + } + }, + "compatibility": { + "slim": [ + "slim" + ], + "standard": [ + "standard" + ] + }, + "count": 21, + "bodies": { + "ZC165D": { + "line": "Classic", + "neck_circ_cm": null, + "neck_class": null, + "neck_joint_mm": null, + "class_basis": "line-default" + }, + "ZF161D": { + "line": "Fusion", + "neck_circ_cm": null, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "line-default" + }, + "ZF168B": { + "line": "Fusion", + "neck_circ_cm": 31, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZF169C": { + "line": "Fusion", + "neck_circ_cm": 32, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZG162D": { + "line": "I-Series", + "neck_circ_cm": 31.5, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZG170C": { + "line": "I-Series", + "neck_circ_cm": 33, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZG170D": { + "line": "I-Series", + "neck_circ_cm": 32, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZG175E": { + "line": "I-Series", + "neck_circ_cm": 30, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZGX165F": { + "line": "I-Series", + "neck_circ_cm": 30, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZK159D": { + "line": "K-Series", + "neck_circ_cm": 26.5, + "neck_class": "slim", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZK168B": { + "line": "K-Series", + "neck_circ_cm": 27.5, + "neck_class": "slim", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZS165D": { + "line": "Sculpt", + "neck_circ_cm": null, + "neck_class": null, + "neck_joint_mm": null, + "class_basis": "line-default" + }, + "ZX153B": { + "line": "SLE 3.0", + "neck_circ_cm": null, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "line-default" + }, + "ZX160J": { + "line": "SLE 3.0", + "neck_circ_cm": 32, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZX163E": { + "line": "SLE 3.0", + "neck_circ_cm": null, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "line-default" + }, + "ZX164G": { + "line": "SLE 3.0", + "neck_circ_cm": 32.5, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZX165D": { + "line": "SLE 3.0", + "neck_circ_cm": 32.5, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZX166K": { + "line": "SLE 3.0", + "neck_circ_cm": 32, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZX170A": { + "line": "SLE 3.0", + "neck_circ_cm": 32.5, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZX171C": { + "line": "SLE 3.0", + "neck_circ_cm": 33, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + }, + "ZX172E": { + "line": "SLE 3.0", + "neck_circ_cm": 32.5, + "neck_class": "standard", + "neck_joint_mm": null, + "class_basis": "measured-circumference" + } + } +} diff --git a/docs/data-requests/README.md b/docs/data-requests/README.md new file mode 100644 index 0000000..dc6a5f1 --- /dev/null +++ b/docs/data-requests/README.md @@ -0,0 +1,49 @@ +# ZELEX — Manufacturer Data Request + +Two data points let the configurator (PDR-011) stop estimating and start using +real specs. Please fill the `<-- FILL` columns in the two CSVs in this folder and +return them. Pre-filled columns are what we already have — for context, do not +change them. + +## 1. Neck joint spec — `neck-joint-request.csv` (21 bodies) + +**Why:** heads are interchangeable when their neck CONNECTOR matches. We currently +estimate this from neck *circumference* (a soft-tissue proxy). The real connector +spec makes it exact. + +| Column | What we need | +|---|---| +| `neck_joint_diameter_mm` | Diameter (mm) of the head-mount connector at the neck. | +| `neck_joint_type` | Connector mechanism: screw / bayonet / magnet / peg / other. | +| `interchange_group` | If the factory already groups connectors (e.g. "A"/"B"), the group id for this body. Optional. | + +Two bodies with the same diameter + type are physically interchangeable, +regardless of product line. + +## 2. Per-head face features — `head-features-request.csv` (189 heads) + +**Why:** the configurator's *Face & Finish* options (eye colour, makeup, eyebrows, +wig, freckles) are currently GLOBAL proposals — we have no per-head defaults or +availability. Fill these to make each head show its true shipped finish and which +options it actually supports. Rows are sorted by **priority** (1 = heads with a +named character, i.e. the ones buyers see most) — fill those first if time is short. + +| Column | What we need | +|---|---| +| `default_eye_color` | Eye colour the head ships with. | +| `eye_swappable` | Can the acrylic eyes be changed? Y/N. | +| `default_makeup` | Factory makeup style (Natural / Glam / …). | +| `eyebrows` | Painted or implanted brow hair. | +| `default_wig_color` | Wig colour shipped. | +| `wig_removable` | Removable wig? Y/N. | +| `freckles_available` | Optional painted freckles offered? Y/N. | + +## Returning the data + +Return the filled CSVs as-is. We load `neck_joint_mm` into +`db/neck_compatibility.json` (per body) and the face fields into the +`face_features` slot in `db/heads.json` (per head) — no schema changes needed; the +configurator picks them up automatically. + +> Regenerate these templates after any catalog change: +> `python scripts/build_data_request.py` diff --git a/docs/data-requests/head-features-request.csv b/docs/data-requests/head-features-request.csv new file mode 100644 index 0000000..94793dc --- /dev/null +++ b/docs/data-requests/head-features-request.csv @@ -0,0 +1,190 @@ +head_code,line,neck_class,movable_jaw (known),priority (1=has cast),default_eye_color <-- FILL,eye_swappable <-- FILL (Y/N),default_makeup <-- FILL,eyebrows <-- FILL (Painted/Implanted),default_wig_color <-- FILL,wig_removable <-- FILL (Y/N),freckles_available <-- FILL (Y/N),notes +GE02_1,I-Series,standard,Y,1,,,,,,,, +GE115_1,I-Series,standard,Y,1,,,,,,,, +GE127_1,I-Series,standard,Y,1,,,,,,,, +GE134_1,I-Series,standard,Y,1,,,,,,,, +GE138_1,I-Series,standard,Y,1,,,,,,,, +GE139_1,I-Series,standard,Y,1,,,,,,,, +GE141_1,I-Series,standard,Y,1,,,,,,,, +GE149_1,I-Series,standard,Y,1,,,,,,,, +GE41_1,I-Series,standard,Y,1,,,,,,,, +GE45_8,I-Series,standard,N,1,,,,,,,, +GE47_1,I-Series,standard,N,1,,,,,,,, +GE52_1,I-Series,standard,N,1,,,,,,,, +GE53_1,I-Series,standard,N,1,,,,,,,, +GE53_3,I-Series,standard,N,1,,,,,,,, +GE60_1,I-Series,standard,Y,1,,,,,,,, +GE68_1,I-Series,standard,Y,1,,,,,,,, +GE82_1,I-Series,standard,Y,1,,,,,,,, +KE01_1,K-Series,slim,N,1,,,,,,,, +KE02_1,K-Series,slim,N,1,,,,,,,, +KE03_1,K-Series,slim,N,1,,,,,,,, +ZFE01_1,Fusion,standard,N,1,,,,,,,, +ZFE01_2,Fusion,standard,N,1,,,,,,,, +ZFE03_1,Fusion,standard,N,1,,,,,,,, +ZFE05_1,Fusion,standard,N,1,,,,,,,, +ZXE200_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE200_3,SLE 3.0,standard,N,1,,,,,,,, +ZXE201_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE201_4,SLE 3.0,standard,N,1,,,,,,,, +ZXE201_W2,SLE 3.0,standard,N,1,,,,,,,, +ZXE203_W1,SLE 3.0,standard,N,1,,,,,,,, +ZXE204_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE206_W1,SLE 3.0,standard,N,1,,,,,,,, +ZXE208_5,SLE 3.0,standard,N,1,,,,,,,, +ZXE208_W1,SLE 3.0,standard,N,1,,,,,,,, +ZXE212_W2,SLE 3.0,standard,N,1,,,,,,,, +ZXE215_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE215_W1,SLE 3.0,standard,N,1,,,,,,,, +ZXE216_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE216_3,SLE 3.0,standard,N,1,,,,,,,, +ZXE216_W1,SLE 3.0,standard,N,1,,,,,,,, +ZXE217_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE217_2,SLE 3.0,standard,N,1,,,,,,,, +ZXE218_W1,SLE 3.0,standard,N,1,,,,,,,, +ZXE219_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE222_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE223_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE224_2,SLE 3.0,standard,N,1,,,,,,,, +ZXE226_1,SLE 3.0,standard,N,1,,,,,,,, +ZXE231_1,SLE 3.0,standard,N,1,,,,,,,, +GE03_1,I-Series,standard,Y,2,,,,,,,, +GE03_2,I-Series,standard,Y,2,,,,,,,, +GE07_1,I-Series,standard,N,2,,,,,,,, +GE07_3,I-Series,standard,N,2,,,,,,,, +GE100_1,I-Series,standard,N,2,,,,,,,, +GE109_1,I-Series,standard,N,2,,,,,,,, +GE111_1,I-Series,standard,N,2,,,,,,,, +GE111_2,I-Series,standard,N,2,,,,,,,, +GE111_3,I-Series,standard,N,2,,,,,,,, +GE113_1,I-Series,standard,Y,2,,,,,,,, +GE114_1,I-Series,standard,Y,2,,,,,,,, +GE116_1,I-Series,standard,Y,2,,,,,,,, +GE122_1,I-Series,standard,N,2,,,,,,,, +GE122_2,I-Series,standard,N,2,,,,,,,, +GE123_1,I-Series,standard,N,2,,,,,,,, +GE124_1,I-Series,standard,N,2,,,,,,,, +GE124_2,I-Series,standard,N,2,,,,,,,, +GE125_1,I-Series,standard,N,2,,,,,,,, +GE125_2,I-Series,standard,N,2,,,,,,,, +GE137_1,I-Series,standard,Y,2,,,,,,,, +GE146_1,I-Series,standard,Y,2,,,,,,,, +GE14_1,I-Series,standard,Y,2,,,,,,,, +GE14_2,I-Series,standard,Y,2,,,,,,,, +GE14_3,I-Series,standard,Y,2,,,,,,,, +GE16_1,I-Series,standard,Y,2,,,,,,,, +GE16_2,I-Series,standard,Y,2,,,,,,,, +GE173_1,I-Series,standard,Y,2,,,,,,,, +GE24_1,I-Series,standard,N,2,,,,,,,, +GE45_1,I-Series,standard,N,2,,,,,,,, +GE45_2,I-Series,standard,N,2,,,,,,,, +GE45_5,I-Series,standard,N,2,,,,,,,, +GE45_6,I-Series,standard,N,2,,,,,,,, +GE45_7,I-Series,standard,N,2,,,,,,,, +GE46_2,I-Series,standard,N,2,,,,,,,, +GE46_3,I-Series,standard,N,2,,,,,,,, +GE46_4,I-Series,standard,N,2,,,,,,,, +GE46_5,I-Series,standard,N,2,,,,,,,, +GE48_1,I-Series,standard,N,2,,,,,,,, +GE48_2,I-Series,standard,N,2,,,,,,,, +GE49_1,I-Series,standard,N,2,,,,,,,, +GE49_2,I-Series,standard,N,2,,,,,,,, +GE50_1,I-Series,standard,N,2,,,,,,,, +GE51_2,I-Series,standard,N,2,,,,,,,, +GE52_2,I-Series,standard,N,2,,,,,,,, +GE53_2,I-Series,standard,N,2,,,,,,,, +GE55_3,I-Series,standard,N,2,,,,,,,, +GE58_1,I-Series,standard,N,2,,,,,,,, +GE59_1,I-Series,standard,Y,2,,,,,,,, +GE64_1,I-Series,standard,Y,2,,,,,,,, +GE76_1,I-Series,standard,N,2,,,,,,,, +GE78_1,I-Series,standard,N,2,,,,,,,, +GE78_2,I-Series,standard,N,2,,,,,,,, +GE81_1,I-Series,standard,N,2,,,,,,,, +GE86_1,I-Series,standard,N,2,,,,,,,, +GE88_2,I-Series,standard,N,2,,,,,,,, +GE94_1,I-Series,standard,N,2,,,,,,,, +GE94_2,I-Series,standard,Y,2,,,,,,,, +GE95_1,I-Series,standard,Y,2,,,,,,,, +GE95_2,I-Series,standard,Y,2,,,,,,,, +GE95_3,I-Series,standard,Y,2,,,,,,,, +GE95_4,I-Series,standard,Y,2,,,,,,,, +GE95_5,I-Series,standard,Y,2,,,,,,,, +GE95_6,I-Series,standard,Y,2,,,,,,,, +GE95_7,I-Series,standard,Y,2,,,,,,,, +GE97_1,I-Series,standard,Y,2,,,,,,,, +GE98_1,I-Series,standard,N,2,,,,,,,, +GE98_2,I-Series,standard,N,2,,,,,,,, +ZX201_2,SLE 3.0,standard,N,2,,,,,,,, +ZX204_1,SLE 3.0,standard,N,2,,,,,,,, +ZX207_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE200_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE200_W1,SLE 3.0,standard,N,2,,,,,,,, +ZXE200_W2,SLE 3.0,standard,N,2,,,,,,,, +ZXE200_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE201_3,SLE 3.0,standard,N,2,,,,,,,, +ZXE201_5,SLE 3.0,standard,N,2,,,,,,,, +ZXE201_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE202_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE202_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE203_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE203_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE203_3,SLE 3.0,standard,N,2,,,,,,,, +ZXE203_4,SLE 3.0,standard,N,2,,,,,,,, +ZXE203_5,SLE 3.0,standard,N,2,,,,,,,, +ZXE203_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE204_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE204_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE205_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE205_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE205_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE206_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE206_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE206_3,SLE 3.0,standard,N,2,,,,,,,, +ZXE206_4,SLE 3.0,standard,N,2,,,,,,,, +ZXE206_5,SLE 3.0,standard,N,2,,,,,,,, +ZXE206_W2,SLE 3.0,standard,N,2,,,,,,,, +ZXE206_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE207_3,SLE 3.0,standard,N,2,,,,,,,, +ZXE207_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE208_4,SLE 3.0,standard,N,2,,,,,,,, +ZXE208_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE209_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE209_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE209_W1,SLE 3.0,standard,N,2,,,,,,,, +ZXE209_Z1,SLE 3.0,standard,N,2,,,,,,,, +ZXE211_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE211_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE212_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE212_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE212_W1,SLE 3.0,standard,N,2,,,,,,,, +ZXE213_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE213_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE215_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE215_3,SLE 3.0,standard,N,2,,,,,,,, +ZXE216_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE216_4,SLE 3.0,standard,N,2,,,,,,,, +ZXE217_4,SLE 3.0,standard,N,2,,,,,,,, +ZXE217_5,SLE 3.0,standard,N,2,,,,,,,, +ZXE218_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE218_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE218_W2,SLE 3.0,standard,N,2,,,,,,,, +ZXE220_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE220_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE221_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE223_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE223_3,SLE 3.0,standard,N,2,,,,,,,, +ZXE224_1,SLE 3.0,standard,N,2,,,,,,,, +GE101_1,I-Series,standard,N,2,,,,,,,, +GE125_3,I-Series,standard,N,2,,,,,,,, +GE139_2,I-Series,standard,N,2,,,,,,,, +ZXE201_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE202_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE207_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE207_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE208_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE210_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE210_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE214_1,SLE 3.0,standard,N,2,,,,,,,, +ZXE214_2,SLE 3.0,standard,N,2,,,,,,,, +ZXE219_2,SLE 3.0,standard,N,2,,,,,,,, diff --git a/docs/data-requests/neck-joint-request.csv b/docs/data-requests/neck-joint-request.csv new file mode 100644 index 0000000..e6f063b --- /dev/null +++ b/docs/data-requests/neck-joint-request.csv @@ -0,0 +1,22 @@ +body_code,line,neck_circ_cm (known),neck_class (current estimate),neck_joint_diameter_mm <-- FILL,neck_joint_type <-- FILL (screw/bayonet/magnet/peg),"interchange_group <-- FILL (factory connector group, optional)",notes +ZC165D,Classic,,,,,, +ZF161D,Fusion,,standard,,,, +ZF168B,Fusion,31,standard,,,, +ZF169C,Fusion,32,standard,,,, +ZG162D,I-Series,31.5,standard,,,, +ZG170C,I-Series,33,standard,,,, +ZG170D,I-Series,32,standard,,,, +ZG175E,I-Series,30,standard,,,, +ZGX165F,I-Series,30,standard,,,, +ZK159D,K-Series,26.5,slim,,,, +ZK168B,K-Series,27.5,slim,,,, +ZS165D,Sculpt,,,,,, +ZX153B,SLE 3.0,,standard,,,, +ZX160J,SLE 3.0,32,standard,,,, +ZX163E,SLE 3.0,,standard,,,, +ZX164G,SLE 3.0,32.5,standard,,,, +ZX165D,SLE 3.0,32.5,standard,,,, +ZX166K,SLE 3.0,32,standard,,,, +ZX170A,SLE 3.0,32.5,standard,,,, +ZX171C,SLE 3.0,33,standard,,,, +ZX172E,SLE 3.0,32.5,standard,,,, diff --git a/docs/pdr/PDR-011-declarative-configurator.md b/docs/pdr/PDR-011-declarative-configurator.md new file mode 100644 index 0000000..3d78ae3 --- /dev/null +++ b/docs/pdr/PDR-011-declarative-configurator.md @@ -0,0 +1,366 @@ +# PDR-011: Declarative Configurator — Build-a-ZELEX from Catalog Data + +**Branch:** claude/zelex-config-ui-builder-rso32 +**Date:** 2026-06-06 +**Status:** Implemented — PDR + schema + worked examples + working `configurator.html` prototype + +--- + +## Decision + +**Build the ZELEX configurator as a *declarative* tool: a UI generated from a data +spec rather than hand-coded, where a buyer's selections form a JSON "build +document" that resolves — through declared rules — to a catalogued body +architecture, a SKU, a measurement signature, a Body Family, and a price.** + +The configurator must not let buyers invent arbitrary bodies. ZELEX's entire +positioning is *documented measurement* — every body is a measured architecture, +not a slider toy. So the body axes (line / height / cup) are **selectors that +resolve to an existing `body_code`**, which then locks in the spec-card +signature and family. Heads, faces, tone, and components compose on top to form a +SKU. This keeps the catalog as the single source of truth and makes the tool +honest about what is real (catalogued) versus bespoke (an inquiry, not a +checkout). + +This package proves the model is sound before any UI is built: + +- `db/configurator_schema.json` — the declarative spec the UI is generated from. +- `db/configurator_examples.json` — three strong-data bodies reverse-engineered + into build documents, with truthful resolved values. +- This PDR — the method, the data grounding, and the rules. + +--- + +## 1. Why declarative, and what "declarative" means here + +A hand-coded configurator hard-codes its options in markup and logic: a +`