{
  "$schema": "https://protobible.dev/schemas/iter1-handover-v1.json",
  "doc": "Iteration 1 — Component Specification (Handover)",
  "version": 1,
  "date": "2026-05-10",
  "scope": ["home-screen", "burger-menu"],
  "platform_agnostic": true,
  "reference_implementation": {
    "platform": "android",
    "path": "packages/android"
  },
  "tokens_api": {
    "endpoint": "/api/v1/tokens",
    "tiers": ["primitives", "semantic", "component", "views"],
    "source": "tokens/{primitive,semantic,component,view}/*.json (DTCG)",
    "consolidated_snapshot": "packages/design-tokens-api/tokens.json"
  },
  "components": [
    { "id": "home-screen",        "title": "Home screen",        "classification": ["composite"],                                  "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#home-screen" },
    { "id": "topbar",             "title": "TopBar",             "classification": ["sticky"],                                     "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#topbar" },
    { "id": "hero-carousel",      "title": "HeroCarousel",       "classification": ["composite", "swipeable"],                     "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#hero-carousel" },
    { "id": "hero-card-shell",    "title": "HeroCardShell",      "classification": ["chrome", "wrapper"],                          "breakpoint_aware": false, "interactive": false, "modal": false, "anchor": "#hero-card-shell" },
    { "id": "page-indicator",     "title": "PageIndicator",      "classification": ["indicator", "read-only"],                     "breakpoint_aware": false, "interactive": false, "modal": false, "anchor": "#page-indicator" },
    { "id": "hero-video",         "title": "HeroVideoCard",      "classification": ["hero", "variant"],                            "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#hero-video" },
    { "id": "hero-bible-verse",   "title": "HeroBibleVerseCard", "classification": ["hero", "variant"],                            "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#hero-bible-verse" },
    { "id": "hero-featured",      "title": "HeroFeaturedCard",   "classification": ["hero", "variant"],                            "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#hero-featured" },
    { "id": "hero-live-stream",   "title": "HeroLiveStreamSlide","classification": ["hero", "variant", "live"],                    "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#hero-live-stream" },
    { "id": "button-group-section","title": "ButtonGroupSection","classification": ["section"],                                    "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#button-group-section" },
    { "id": "row-section",        "title": "RowSection",         "classification": ["section", "scrollable"],                      "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#row-section" },
    { "id": "card-poster",        "title": "CardPoster",         "classification": ["card", "row-item"], "aspect_ratio": "9:16",   "breakpoint_aware": false, "interactive": true,  "modal": false, "anchor": "#card-poster" },
    { "id": "card-landscape",     "title": "CardLandscape",      "classification": ["card", "row-item"], "aspect_ratio": "16:9",   "breakpoint_aware": false, "interactive": true,  "modal": false, "anchor": "#card-landscape" },
    { "id": "card-top10",         "title": "CardTop10",          "classification": ["card", "row-item", "ranked"],                 "breakpoint_aware": false, "interactive": true,  "modal": false, "anchor": "#card-top10" },
    { "id": "bottom-nav",         "title": "BottomNavigation",   "classification": ["sticky", "tablist"],                          "breakpoint_aware": true,  "interactive": true,  "modal": false, "anchor": "#bottom-nav" },
    { "id": "menu-drawer",        "title": "MenuDrawer",         "classification": ["modal", "overlay", "navigation"],             "breakpoint_aware": true,  "interactive": true,  "modal": true,  "anchor": "#menu-drawer" }
  ],
  "cross_cutting": [
    { "id": "motion",       "title": "Motion language",       "anchor": "#motion" },
    { "id": "a11y",         "title": "Accessibility baseline","anchor": "#a11y" },
    { "id": "breakpoints",  "title": "Breakpoints",           "anchor": "#breakpoints" },
    { "id": "tokens-ref",   "title": "Token reference",       "anchor": "#tokens-ref" }
  ],
  "motion_scale": {
    "duration": {
      "short_ms": 120,
      "medium_ms": 220,
      "long_ms": 340,
      "carousel_ms": 600
    },
    "easing": {
      "linear":         "linear",
      "standard_out":   "cubic-bezier(0, 0, 0.2, 1)",
      "standard_in":    "cubic-bezier(0.4, 0, 1, 1)",
      "standard":       "cubic-bezier(0.4, 0, 0.2, 0.8)",
      "spring_gentle":  "spring(stiffness=MediumLow, damping=Medium)",
      "spring_snappy":  "spring(stiffness=Medium, damping=High)"
    }
  },
  "breakpoints": {
    "mobile":  { "shortest_dimension_dp": "<600" },
    "tablet":  { "shortest_dimension_dp": ">=600" },
    "desktop": { "scaffolded_only": true },
    "tv":      { "scaffolded_only": true }
  },
  "accessibility_baseline": {
    "min_hit_target_dp": 48,
    "min_contrast_body_ratio": 4.5,
    "min_contrast_large_ratio": 3.0,
    "max_dynamic_type_scale": 2.0,
    "respect_prefers_reduced_motion": true,
    "modal_focus_trap_required": true
  },
  "token_path_coverage": {
    "total_unique_paths_cited": 250,
    "api_resolved": 157,
    "kotlin_default": 70,
    "spec_only": 23,
    "report": "handover-fragments/token-coverage.html"
  },
  "convention": {
    "size_units":   "dp (== iOS pt @1x == CSS px == Flutter logical pixel) and sp (scalable, dynamic-type-aware)",
    "time_units":   "ms",
    "easing_units": "cubic-bezier or symbolic name (linear, ease-out, ease-in, ease-in-out)",
    "color_format": "DTCG token paths (no hex literals in spec body)"
  },
  "governance": {
    "audit_kotlin_defaults": {
      "script": "packages/design-tokens-api/scripts/audit-kotlin-defaults.mjs",
      "current": { "violations": 0, "fields": 328, "lifted": 193, "exempt": 21, "no_default": 114 }
    },
    "kotlin_inline_literal_lint": {
      "script": "tools/audit/kotlin-inline-literal-lint.mjs",
      "current": { "violations": 0, "files_scanned": 112 }
    },
    "ci_workflow": ".github/workflows/tokens-governance.yml"
  }
}
