{"id":4728,"date":"2026-09-15T19:49:26","date_gmt":"2026-09-15T19:49:26","guid":{"rendered":"https:\/\/severeinjurylawyers.com\/?page_id=4728"},"modified":"2026-09-15T21:06:52","modified_gmt":"2026-09-15T21:06:52","slug":"como-funcionan-las-camaras-flock","status":"publish","type":"page","link":"https:\/\/severeinjurylawyers.com\/es\/tools\/how-flock-cameras-work\/","title":{"rendered":"Flock Cameras: How They Work"},"content":{"rendered":"\n<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\" \/>\n    <title>How a Flock Camera Works: Texas Explainer | J. Alexander Law<\/title>\n    <link\n      rel=\"stylesheet\"\n      href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@700;800;900&#038;family=Source+Sans+3:wght@400;500;600;700&#038;display=swap\"\n    \/>\n    <style id=\"flock-inline-css\">\n      .jca-flock {\n        --gold: #f3b937;\n        --gold-deep: #d99a1a;\n        --gold-soft: rgba(243, 185, 55, 0.14);\n        --gold-line: rgba(243, 185, 55, 0.4);\n        --ink: #000;\n        --ink-1: #0a0a0a;\n        --ink-2: #121212;\n        --ink-3: #181818;\n        --paper: #ffffff;\n        --muted: #e9ebef;\n        --faint: #cdd1d8;\n        --line: rgba(255, 255, 255, 0.1);\n        --line-2: rgba(255, 255, 255, 0.17);\n        --r: 3px;\n        --r-lg: 4px;\n        --maxw: 1200px;\n        --gut: clamp(20px, 5vw, 48px);\n        --sec-pad: 96px;\n        --fhead: \"Montserrat\", system-ui, -apple-system, sans-serif;\n        --fbody: \"Source Sans 3\", \"Source Sans Pro\", system-ui, -apple-system, sans-serif;\n        --ease: cubic-bezier(0.2, 0.7, 0.2, 1);\n        --sh-sm: 0 1px 2px rgba(0, 0, 0, 0.55), 0 8px 22px rgba(0, 0, 0, 0.4);\n        --sh: 0 26px 60px -26px rgba(0, 0, 0, 0.8), 0 8px 24px rgba(0, 0, 0, 0.45);\n        --glow: 0 14px 40px -12px rgba(243, 185, 55, 0.55);\n      }\n      .jca-flock *,\n      .jca-flock *::before,\n      .jca-flock *::after {\n        box-sizing: border-box;\n      }\n      .jca-flock {\n        margin-block: 0;\n        margin-inline: calc(50% - 50vw);\n        max-width: 100vw;\n        font-family: var(--fbody);\n        background: var(--ink);\n        color: var(--paper);\n        font-size: 18px;\n        line-height: 1.62;\n        -webkit-font-smoothing: antialiased;\n        text-rendering: optimizeLegibility;\n        overflow-x: clip;\n        overflow-y: visible;\n      }\n      .jca-flock img,\n      .jca-flock svg {\n        max-width: 100%;\n        display: block;\n      }\n      .jca-flock a {\n        text-decoration: none;\n      }\n      .jca-flock :where(a:not(.fx-btn):not(.fx-mobilecall__btn)) {\n        color: inherit;\n      }\n      .jca-flock :where(button) {\n        font-family: inherit;\n        cursor: pointer;\n      }\n      .jca-flock :where(button:not(.fx-btn):not(.fx-tt-part)) {\n        background: none;\n        border: 0;\n        color: inherit;\n      }\n      button:where(.fx-tt-part) {\n        font: inherit;\n        margin: 0;\n        border: 0;\n        padding: 0;\n        background: none;\n        color: inherit;\n        text-align: start;\n        letter-spacing: inherit;\n        line-height: inherit;\n        text-transform: inherit;\n        width: 100%;\n      }\n      .fx-tt-parts > li {\n        display: flex;\n      }\n      fieldset:where(.fx-radio-row) {\n        border: 0;\n        margin: 0;\n        padding: 0;\n        min-width: 0;\n      }\n      .jca-flock ul,\n      .jca-flock ol {\n        margin: 0;\n        padding: 0;\n        list-style: none;\n      }\n      .jca-flock h1,\n      .jca-flock h2,\n      .jca-flock h3,\n      .jca-flock h4 {\n        font-family: var(--fhead);\n        font-weight: 800;\n        line-height: 1.1;\n        letter-spacing: -0.01em;\n        margin: 0;\n        color: var(--paper);\n        overflow-wrap: break-word;\n        font-style: normal;\n      }\n      .jca-flock p,\n      .jca-flock li,\n      .jca-flock address,\n      .jca-flock blockquote,\n      .jca-flock em,\n      .jca-flock i {\n        overflow-wrap: break-word;\n        font-style: normal;\n      }\n      .jca-flock ::selection {\n        background: rgba(243, 185, 55, 0.3);\n        color: var(--paper);\n      }\n      .jca-flock a:focus-visible,\n      .jca-flock button:focus-visible,\n      .jca-flock input:focus-visible,\n      .jca-flock select:focus-visible,\n      .jca-flock [tabindex]:focus-visible {\n        outline: 3px solid var(--gold);\n        outline-offset: 3px;\n        border-radius: 4px;\n      }\n      .jca-flock [id] {\n        scroll-margin-top: calc(var(--wp-head, 79px) + 16px);\n      }\n      .fx-wrap {\n        max-width: var(--maxw);\n        margin: 0 auto;\n        padding-inline: var(--gut);\n      }\n      .fx-section {\n        padding-block: var(--sec-pad);\n        position: relative;\n        overflow-x: clip;\n      }\n      @media (max-width: 900px) {\n        .jca-flock {\n          --sec-pad: 64px;\n        }\n      }\n      .fx-section--1 {\n        background: var(--ink);\n      }\n      .fx-section--2 {\n        background: var(--ink-1);\n        border-top: 1px solid var(--line);\n        border-bottom: 1px solid var(--line);\n      }\n      .fx-section--3 {\n        background: var(--ink-2);\n        border-top: 1px solid var(--line);\n        border-bottom: 1px solid var(--line);\n      }\n      .fx-h1 {\n        font-size: clamp(2.1rem, 4.6vw, 3.6rem);\n        font-weight: 900;\n        line-height: 1.06;\n        letter-spacing: -0.02em;\n        max-width: 32ch;\n        margin-inline: auto;\n        text-wrap: balance;\n      }\n      .fx-h1-br {\n        display: inline;\n      }\n      @media (max-width: 900px) {\n        .fx-h1-br {\n          display: none;\n        }\n      }\n      .fx-h2 {\n        font-size: clamp(1.7rem, 3.6vw, 2.6rem);\n        font-weight: 800;\n        letter-spacing: -0.016em;\n      }\n      .fx-h3 {\n        font-size: 1.2rem;\n        font-weight: 700;\n        color: var(--paper);\n      }\n      .fx-eyebrow {\n        display: inline-flex;\n        align-items: center;\n        gap: 0.6rem;\n        font-size: 0.72rem;\n        font-weight: 800;\n        letter-spacing: 0.18em;\n        text-transform: uppercase;\n        color: var(--gold);\n        margin: 0 0 10px;\n      }\n      .fx-eyebrow::before {\n        content: \"\";\n        width: 24px;\n        height: 2px;\n        background: var(--gold);\n        flex: none;\n      }\n      .fx-head {\n        max-width: 52rem;\n        margin-bottom: 32px;\n      }\n      .fx-head p:not(.fx-eyebrow) {\n        color: var(--muted);\n        font-size: 17px;\n        line-height: 1.7;\n        margin: 14px 0 0;\n        max-width: 68ch;\n      }\n      .fx-btn {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        gap: 0.5rem;\n        font-weight: 800;\n        font-size: 0.95rem;\n        line-height: 1.15;\n        padding: 0.85rem 1.4rem;\n        border-radius: var(--r);\n        border: 2px solid transparent;\n        min-height: 45px;\n        transition:\n          transform 0.18s var(--ease),\n          background 0.2s var(--ease),\n          border-color 0.2s var(--ease);\n        text-align: center;\n      }\n      .fx-btn--gold {\n        background: var(--gold);\n        color: var(--ink);\n        box-shadow: var(--glow);\n      }\n      .fx-btn--gold:hover {\n        background: var(--gold-deep);\n        transform: translateY(-2px);\n      }\n      .fx-btn--line {\n        background: transparent;\n        color: var(--paper);\n        border-color: var(--line-2);\n      }\n      .fx-btn--line:hover {\n        border-color: var(--gold-line);\n        background: var(--gold-soft);\n        transform: translateY(-2px);\n      }\n      .fx-btn--sm {\n        padding: 0.4rem 0.9rem;\n        min-height: 34px;\n        font-size: 0.82rem;\n      }\n      @media (max-width: 767px) {\n        .fx-btn--sm {\n          min-height: 44px;\n        }\n      }\n      .fx-btn[disabled] {\n        opacity: 0.45;\n        cursor: default;\n        transform: none !important;\n      }\n      @media (max-width: 560px) {\n        .fx-cta-row .fx-btn {\n          flex: 1 1 100%;\n        }\n      }\n      .fx-cta-row {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 0.9rem;\n        margin-top: 1.8rem;\n        justify-content: center;\n      }\n      .fx-hero {\n        position: relative;\n        overflow: hidden;\n        background-color: var(--ink-2);\n        background-image: radial-gradient(1000px 520px at 50% -10%, rgba(243, 185, 55, 0.1), transparent 62%);\n        padding-top: clamp(3.2rem, 6vw, 5.5rem);\n      }\n      .fx-hero__intro {\n        text-align: center;\n      }\n      .fx-hero__lede {\n        font-size: 1.06rem;\n        line-height: 1.65;\n        color: var(--muted);\n        max-width: 56ch;\n        margin: 1.1rem auto 0;\n        text-wrap: balance;\n      }\n      .fx-chips {\n        display: grid;\n        grid-template-columns: repeat(3, 1fr);\n        gap: 14px;\n        margin: 2.2rem auto 0;\n        list-style: none;\n        padding: 0;\n        width: 100%;\n      }\n      @media (max-width: 900px) {\n        .fx-chips {\n          grid-template-columns: 1fr;\n          gap: 10px;\n          max-width: 520px;\n          margin-inline: auto;\n        }\n      }\n      .fx-sr-only {\n        position: absolute;\n        width: 1px;\n        height: 1px;\n        overflow: hidden;\n        clip: rect(0, 0, 0, 0);\n        white-space: nowrap;\n      }\n      .fx-tt {\n        width: 100%;\n      }\n      .fx-tt-stagewrap {\n        position: relative;\n        width: 100%;\n        max-width: 640px;\n        margin: 0 auto;\n      }\n      .fx-tt-stage {\n        position: relative;\n        width: 100%;\n        aspect-ratio: 1\/1;\n        background: radial-gradient(circle at 50% 46%, transparent 0%, transparent 38%, var(--ink-2) 86%), var(--ink-2);\n        overflow: hidden;\n        cursor: grab;\n        touch-action: pan-y;\n        outline: none;\n        user-select: none;\n      }\n      .fx-tt-stage::after {\n        content: \"Loading the interactive model.\";\n        position: absolute;\n        inset: 0;\n        display: grid;\n        place-items: center;\n        color: var(--faint);\n        font-size: 14px;\n        pointer-events: none;\n      }\n      .jca-flock.is-ready .fx-tt-stage::after {\n        display: none;\n      }\n      .fx-tt-stage.is-dragging {\n        cursor: grabbing;\n      }\n      .fx-tt-stage:focus-visible {\n        box-shadow: inset 0 0 0 3px var(--gold);\n      }\n      .fx-tt-imgwrap {\n        position: absolute;\n        inset: 0;\n      }\n      .fx-tt-img {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        pointer-events: none;\n        user-select: none;\n        -webkit-user-drag: none;\n      }\n      .fx-tt-reflection {\n        position: absolute;\n        left: 50%;\n        bottom: 5%;\n        width: 44%;\n        height: 7%;\n        transform: translateX(-50%);\n        background: radial-gradient(ellipse at center, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0) 72%);\n        pointer-events: none;\n      }\n      .fx-tt-hotlayer {\n        position: absolute;\n        inset: 0;\n      }\n      .fx-tt-hot {\n        position: absolute;\n        transform: translate(-50%, -50%);\n        width: 28px;\n        height: 28px;\n        border-radius: 50%;\n        background: var(--gold);\n        color: var(--ink);\n        font-family: var(--fhead);\n        font-weight: 700;\n        font-size: 13px;\n        line-height: 1;\n        display: grid;\n        place-items: center;\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.55);\n        opacity: 0;\n        pointer-events: none;\n        transition:\n          opacity 0.2s var(--ease),\n          transform 0.15s var(--ease),\n          background 0.2s var(--ease),\n          box-shadow 0.2s var(--ease);\n        cursor: pointer;\n      }\n      @media (max-width: 767px) {\n        .fx-tt-hot {\n          width: 28px;\n          height: 28px;\n        }\n        .fx-tt-hot::before {\n          content: \"\";\n          position: absolute;\n          inset: -8px;\n        }\n      }\n      .fx-tt-hot.is-visible {\n        opacity: 1;\n        pointer-events: auto;\n      }\n      .fx-tt-hot:hover,\n      .fx-tt-hot:focus-visible {\n        background: var(--gold-deep);\n        box-shadow: 0 2px 14px rgba(243, 185, 55, 0.7);\n      }\n      .fx-tt-hot:focus-visible {\n        outline: 3px solid var(--paper);\n        outline-offset: 2px;\n      }\n      .fx-tt-hot::after {\n        content: \"\";\n        position: absolute;\n        inset: -7px;\n        border-radius: 50%;\n        border: 2px solid var(--gold);\n        opacity: 0;\n      }\n      .fx-tt.is-introducing .fx-tt-hot.is-visible::after {\n        animation: fxTTPulse 1.6s var(--ease) 1;\n      }\n      @keyframes fxTTPulse {\n        0% {\n          opacity: 0.85;\n          transform: scale(1);\n        }\n        100% {\n          opacity: 0;\n          transform: scale(1.6);\n        }\n      }\n      .fx-tt-cardslot {\n        background: var(--ink-3);\n        border: 1px dashed var(--line-2);\n        border-radius: var(--r-lg);\n        padding: 22px 24px;\n        min-height: 84px;\n        text-align: center;\n        margin: 0 0 1.4rem;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n      }\n      .fx-tt-cardslot.is-active {\n        border-style: solid;\n        border-color: var(--line);\n        text-align: left;\n        display: block;\n        min-height: 215px;\n      }\n      .fx-tt-card__num {\n        display: inline-flex;\n        width: 24px;\n        height: 24px;\n        border-radius: var(--r);\n        background: var(--gold);\n        color: var(--ink);\n        font-family: var(--fhead);\n        font-weight: 800;\n        font-size: 0.78rem;\n        align-items: center;\n        justify-content: center;\n        margin-bottom: 0.5rem;\n      }\n      .fx-tt-card__title {\n        margin: 0 0 0.5rem;\n        font-size: 1.05rem;\n        color: var(--paper);\n      }\n      .fx-tt-cardslot p {\n        margin: 0 0 0.4rem;\n        color: var(--muted);\n        font-size: 0.9rem;\n        line-height: 1.55;\n      }\n      .fx-tt-cardslot__prompt {\n        margin: 0;\n        color: var(--muted);\n        font-size: 0.92rem;\n        line-height: 1.6;\n      }\n      .fx-tt-controls {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 1rem;\n        margin-top: 1.1rem;\n      }\n      .fx-tt-arrow {\n        width: 40px;\n        height: 40px;\n        flex: none;\n        border: 2px solid var(--line-2);\n        border-radius: var(--r);\n        color: var(--paper);\n        background: transparent;\n        display: grid;\n        place-items: center;\n        font-size: 1.2rem;\n        transition:\n          border-color 0.2s var(--ease),\n          background 0.2s var(--ease);\n        cursor: pointer;\n      }\n      @media (max-width: 767px) {\n        .fx-tt-arrow {\n          width: 44px;\n          height: 44px;\n        }\n      }\n      .fx-tt-arrow:hover {\n        border-color: var(--gold-line);\n        background: var(--gold-soft);\n      }\n      .fx-tt-viewcol {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 0.2rem;\n        min-width: 150px;\n      }\n      .fx-tt-viewname {\n        font-variant-numeric: tabular-nums;\n        font-family: var(--fhead);\n        font-weight: 700;\n        color: var(--paper);\n        text-align: center;\n        font-size: 0.95rem;\n      }\n      .fx-tt-angle {\n        font-variant-numeric: tabular-nums;\n      }\n      .fx-tt-hint {\n        font-size: 12px;\n        color: var(--faint);\n        transition: opacity 0.4s var(--ease);\n        opacity: 1;\n        white-space: nowrap;\n        display: block;\n      }\n      .fx-tt-hint.is-hidden {\n        opacity: 0;\n      }\n      .fx-tt-parts {\n        display: grid;\n        grid-template-columns: repeat(3, minmax(0, 230px));\n        justify-content: center;\n        gap: 0.5rem 2rem;\n        list-style: none;\n        padding: 0;\n        margin: 1.3rem auto 0;\n        max-width: 900px;\n      }\n      .fx-tt-part {\n        border-bottom: 3px solid transparent;\n        padding: 0.4rem 0.1rem;\n        cursor: pointer;\n        display: flex;\n        gap: 0.5rem;\n        align-items: baseline;\n        color: var(--paper);\n        font-size: 0.86rem;\n        transition:\n          border-color 0.18s var(--ease),\n          color 0.18s var(--ease);\n      }\n      .fx-tt-part b {\n        color: var(--gold);\n        font-family: var(--fhead);\n        font-weight: 800;\n        flex: none;\n      }\n      .fx-tt-part:hover {\n        color: var(--paper);\n      }\n      .fx-tt-part.is-active {\n        border-bottom-color: var(--gold);\n        color: var(--paper);\n      }\n      @media (max-width: 860px) {\n        .fx-tt-parts {\n          display: flex;\n          flex-wrap: nowrap;\n          overflow-x: auto;\n          justify-content: flex-start;\n          gap: 0.5rem;\n          padding-bottom: 0.3rem;\n          max-width: 100%;\n        }\n        .fx-tt-part {\n          border-bottom: 0;\n          flex: none;\n          white-space: nowrap;\n          border-radius: var(--r);\n          background: var(--ink-1);\n          padding: 0.5rem 1rem;\n          min-height: 44px;\n          display: inline-flex;\n          align-items: center;\n        }\n        .fx-tt-part.is-active {\n          background: rgba(243, 185, 55, 0.14);\n          box-shadow: inset 0 -3px 0 var(--gold);\n        }\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .fx-tt-hot {\n          transition: opacity 0.01ms;\n        }\n        .fx-tt.is-introducing .fx-tt-hot.is-visible::after {\n          animation: none;\n        }\n      }\n      .fx-chip {\n        display: flex;\n        flex-direction: column;\n        gap: 0.2rem;\n        background: var(--ink-3);\n        border: 1px solid var(--line);\n        border-radius: var(--r-lg);\n        padding: 22px 24px;\n        min-width: 0;\n      }\n      .fx-chip b {\n        font-family: var(--fhead);\n        font-size: 1.3rem;\n        font-weight: 800;\n        color: var(--paper);\n      }\n      .fx-chip span {\n        font-size: 0.8rem;\n        color: var(--muted);\n      }\n      .fx-chip a.fx-fn {\n        font-size: 0.72rem;\n        color: var(--gold);\n        font-weight: 700;\n      }\n      .fx-fn {\n        color: var(--gold);\n        font-weight: 700;\n        font-size: 0.78em;\n        text-decoration: none;\n        vertical-align: super;\n        margin-left: 1px;\n      }\n      .fx-fn:hover {\n        text-decoration: underline;\n      }\n      .fx-callout {\n        border-left: 3px solid var(--gold);\n        background: rgba(243, 185, 55, 0.06);\n        padding: 0.9rem 1.1rem;\n        margin: 1.2rem 0;\n        border-radius: 0 var(--r) var(--r) 0;\n      }\n      .fx-callout b {\n        color: var(--gold);\n        font-family: var(--fhead);\n        font-weight: 800;\n        font-size: 0.72rem;\n        letter-spacing: 0.1em;\n        text-transform: uppercase;\n        display: block;\n        margin-bottom: 0.35rem;\n      }\n      .fx-callout p {\n        margin: 0;\n        color: var(--paper);\n        font-size: 0.94rem;\n        line-height: 1.6;\n      }\n      .fx-legal__build { font-size: 0.72rem; color: var(--faint); margin: 0.6rem 0 0; }\n      .jca-flock a.fx-inlink { color: var(--gold); text-decoration: underline; text-decoration-color: var(--gold-line); text-underline-offset: 3px; }\n      .jca-flock a.fx-inlink:hover { text-decoration-color: var(--gold); }\n      .fx-note--links { margin-top: 1.2rem; max-width: 68ch; }\n      .fx-src-line {\n        font-size: 0.82rem;\n        color: var(--faint);\n        margin-top: 0.9rem;\n      }\n      .fx-src-line a {\n        color: var(--gold);\n        font-weight: 700;\n      }\n      .fx-rail {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 0.5rem;\n        margin-bottom: 1.8rem;\n        justify-content: center;\n      }\n      .fx-rail__btn {\n        width: 38px;\n        height: 38px;\n        border: 1.5px solid var(--gold-line);\n        border-radius: var(--r);\n        color: var(--gold);\n        font-family: var(--fhead);\n        font-weight: 800;\n        font-size: 0.92rem;\n        display: grid;\n        place-items: center;\n        background: transparent;\n        flex: none;\n        cursor: pointer;\n        transition:\n          border-color 0.2s var(--ease),\n          background 0.2s var(--ease),\n          color 0.2s var(--ease);\n      }\n      .fx-rail__btn:hover {\n        border-color: var(--gold);\n        background: var(--gold-soft);\n        color: var(--paper);\n      }\n      @media (max-width: 767px) {\n        .fx-rail__btn {\n          width: 44px;\n          height: 44px;\n        }\n        .fx-rail {\n          display: grid;\n          grid-template-columns: repeat(4, 44px);\n          justify-content: center;\n          gap: 6px;\n        }\n      }\n      .fx-rail__btn[aria-current=\"step\"] {\n        background: var(--gold);\n        color: var(--ink);\n      }\n      .fx-progress {\n        height: 3px;\n        background: var(--line);\n        border-radius: var(--r);\n        margin-bottom: 2rem;\n        overflow: hidden;\n      }\n      .fx-progress__bar {\n        height: 100%;\n        background: var(--gold);\n        width: 12.5%;\n        transition: width 0.3s var(--ease);\n      }\n      .fx-storygrid {\n        display: grid;\n        grid-template-columns: 1.35fr 1fr;\n        gap: clamp(1.8rem, 3.6vw, 3rem);\n        align-items: start;\n      }\n      .fx-storygrid.is-wide {\n        grid-template-columns: 1fr;\n      }\n      .fx-storygrid.is-wide .fx-stage,\n      .fx-storygrid.is-wide .fx-stagectl {\n        display: none;\n      }\n      .fx-storygrid.is-wide .fx-panels {\n        max-width: 76ch;\n        margin-inline: auto;\n        width: 100%;\n      }\n      .fx-storygrid > div {\n        min-width: 0;\n      }\n      .fx-tt,\n      .fx-tt-stagewrap {\n        min-width: 0;\n      }\n      @media (max-width: 900px) {\n        .fx-storygrid {\n          grid-template-columns: 1fr;\n        }\n      }\n      @media (max-width: 600px) {\n        .fx-stage.fx-stage--tall {\n          aspect-ratio: 1\/1.9;\n        }\n        .fx-stage.fx-stage--xtall {\n          aspect-ratio: 1\/2.4;\n        }\n        #fx-s2-cam {\n          width: 34% !important;\n          height: auto !important;\n          right: 2% !important;\n          bottom: 44% !important;\n        }\n        #fx-flash {\n          left: 82% !important;\n          top: 56% !important;\n        }\n        #fx-car {\n          width: 76% !important;\n          left: 50% !important;\n          top: 96% !important;\n        }\n        #fx-s3-img {\n          top: 2% !important;\n          left: 0 !important;\n          transform: none !important;\n        }\n        .fx-scene[data-step=\"3\"] .fx-platechip {\n          top: 15.8% !important;\n        }\n        .fx-scene[data-step=\"3\"] .fx-goldbox {\n          y: 16.3 !important;\n        }\n        #fx-s3-attrcard {\n          top: 35% !important;\n          left: 4% !important;\n          width: 92% !important;\n        }\n        #fx-s3-leadcard {\n          top: 55% !important;\n          left: 4% !important;\n          width: 92% !important;\n        }\n        .fx-scene[data-step=\"3\"] .fx-confwrap.fx-normal {\n          top: 66% !important;\n          left: 4% !important;\n          width: 70% !important;\n        }\n        .fx-scene[data-step=\"3\"] .fx-confwrap.fx-hard {\n          top: 66% !important;\n          left: 4% !important;\n          width: 70% !important;\n        }\n        #fx-s4-tag1 {\n          top: 46% !important;\n          left: 8% !important;\n          width: 84% !important;\n        }\n        #fx-s4-tag2 {\n          top: 58% !important;\n          left: 8% !important;\n          width: 84% !important;\n        }\n        #fx-s4-whocard {\n          top: 82% !important;\n        }\n        #fx-s6-phone {\n          left: 50% !important;\n          top: 83% !important;\n          width: 34% !important;\n          transform: translate(-50%, 0) !important;\n        }\n        .fx-scene[data-step=\"6\"] .fx-connectors:not(.fx-fan-bg) {\n          display: none;\n        }\n        #fx-s6-hotcard {\n          left: 4% !important;\n          top: 66% !important;\n          width: 92% !important;\n        }\n        #fx-s6-alertcap {\n          left: 4% !important;\n          top: 78.5% !important;\n          right: 4% !important;\n          width: auto !important;\n          bottom: auto !important;\n          text-align: center;\n        }\n        .fx-scene[data-step=\"6\"] .fx-dashpanel {\n          left: 2% !important;\n          top: 2% !important;\n          width: 96% !important;\n          height: 62% !important;\n        }\n        .fx-scene[data-step=\"6\"] .fx-dashsplit {\n          flex-direction: column !important;\n        }\n        .fx-scene[data-step=\"6\"] .fx-fanwrap {\n          width: 100% !important;\n          flex: 0 0 auto !important;\n          min-height: 150px;\n          margin-top: 0.6rem;\n        }\n        .fx-scene[data-step=\"2\"] .fx-glass {\n          top: 0 !important;\n          left: 0 !important;\n          width: 100% !important;\n          max-width: none !important;\n        }\n      }\n      .fx-stage {\n        position: relative;\n        aspect-ratio: 16\/10;\n        border-radius: var(--r-lg);\n        overflow: hidden;\n        background: radial-gradient(circle at 50% 46%, transparent 0%, transparent 38%, var(--ink-2) 86%), var(--ink-2);\n      }\n      .fx-stage-svg {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        display: none;\n      }\n      .fx-stage-svg.is-active {\n        display: block;\n      }\n      .fx-stage-svg .fx-scene {\n        position: absolute;\n        inset: 0;\n        display: none;\n      }\n      .fx-stage-svg .fx-scene.is-active {\n        display: block;\n        animation: fxFade 0.4s var(--ease);\n      }\n      .fx-objwrap {\n        position: absolute;\n        aspect-ratio: 1\/1;\n      }\n      .fx-obj {\n        max-width: none;\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        pointer-events: none;\n        user-select: none;\n        -webkit-user-drag: none;\n        display: block;\n        -webkit-mask-image: radial-gradient(ellipse at center, var(--ink) 58%, transparent 100%);\n        mask-image: radial-gradient(ellipse at center, var(--ink) 58%, transparent 100%);\n      }\n      .fx-connectors {\n        position: absolute;\n        inset: 0;\n        width: 100%;\n        height: 100%;\n        pointer-events: none;\n      }\n      .fx-cone {\n        fill: var(--gold);\n        fill-opacity: 0.18;\n        filter: blur(6px);\n      }\n      #fx-arc4 {\n        stroke-width: 3px;\n        filter: drop-shadow(0 0 3px var(--gold));\n      }\n      .fx-goldline {\n        stroke: var(--gold);\n        stroke-width: 0.35;\n        fill: none;\n        vector-effect: non-scaling-stroke;\n      }\n      .fx-svgline-muted {\n        stroke: var(--line-2);\n        stroke-width: 0.3;\n        fill: none;\n        vector-effect: non-scaling-stroke;\n      }\n      .fx-goldbox {\n        stroke: var(--gold);\n        stroke-width: 0.4;\n        fill: none;\n        vector-effect: non-scaling-stroke;\n      }\n      .fx-dash {\n        stroke-dasharray: 3 2;\n        animation: fxDashMove 1.4s linear infinite;\n      }\n      @keyframes fxDashMove {\n        to {\n          stroke-dashoffset: -20;\n        }\n      }\n      .fx-camdot {\n        fill: var(--gold);\n        animation: fxDotPulse 2.2s var(--ease) 1;\n      }\n      @keyframes fxDotPulse {\n        0% {\n          opacity: 0;\n          r: 0.4;\n        }\n        30% {\n          opacity: 1;\n          r: 2.2;\n        }\n        100% {\n          opacity: 1;\n          r: 1.6;\n        }\n      }\n      .fx-fannode {\n        fill: var(--gold);\n      }\n      .fx-fanline {\n        stroke: var(--gold-line);\n        stroke-width: 0.18;\n        fill: none;\n        stroke-dasharray: 30;\n        stroke-dashoffset: 30;\n        transition: stroke-dashoffset 0.8s var(--ease);\n        vector-effect: non-scaling-stroke;\n      }\n      .fx-search-scene.is-fanned .fx-fanline {\n        stroke-dashoffset: 0;\n      }\n      .fx-fandot {\n        fill: var(--gold);\n        opacity: 0.35;\n        transition: opacity 0.6s var(--ease);\n      }\n      .fx-search-scene.is-fanned .fx-fandot {\n        opacity: 0.7;\n      }\n      .fx-glass {\n        position: absolute;\n        background: rgba(0, 0, 0, 0.55);\n        border: 1px solid var(--line-2);\n        -webkit-backdrop-filter: blur(8px);\n        backdrop-filter: blur(8px);\n        border-radius: var(--r-lg);\n        padding: 0.85rem 1rem;\n        color: var(--muted);\n        font-size: 14px;\n        line-height: 1.5;\n        box-sizing: border-box;\n      }\n      .fx-glass--gold {\n        border-color: var(--gold-line);\n      }\n      .fx-glass--muted {\n        border-color: var(--line-2);\n      }\n      .fx-glass__eyebrow {\n        display: block;\n        font-family: var(--fhead);\n        font-weight: 700;\n        font-size: 11px;\n        letter-spacing: 0.14em;\n        text-transform: uppercase;\n        color: var(--gold);\n        margin-bottom: 0.4rem;\n      }\n      .fx-glass__title {\n        display: block;\n        font-family: var(--fhead);\n        font-weight: 800;\n        color: var(--paper);\n        font-size: 15px;\n        margin-bottom: 0.3rem;\n      }\n      .fx-glass p {\n        margin: 0 0 0.35rem;\n        font-size: 14px;\n        color: var(--muted);\n      }\n      .fx-glass p:last-child {\n        margin-bottom: 0;\n      }\n      .fx-glass__note {\n        font-size: 12px;\n        color: var(--faint);\n      }\n      .fx-stripcard {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: baseline;\n        row-gap: 0.3rem;\n        padding: 0.55rem 0.8rem;\n        border-radius: 0;\n        font-variant-numeric: tabular-nums;\n      }\n      .fx-stripcard .fx-glass__eyebrow {\n        display: inline;\n        margin: 0;\n        padding-right: 0.5rem;\n        font-size: 11px;\n      }\n      .fx-strip-item {\n        font-size: 14px;\n        color: var(--muted);\n        padding-left: 0.5rem;\n        border-left: 1px solid var(--line-2);\n        white-space: nowrap;\n      }\n      .fx-strip-muted {\n        color: var(--faint);\n      }\n      .fx-glass__lead {\n        font-family: var(--fhead);\n        font-weight: 700;\n        color: var(--paper);\n        font-size: 16px;\n        margin: 0;\n      }\n      .fx-bignum {\n        font-family: var(--fhead);\n        font-weight: 800;\n        color: var(--paper);\n        font-variant-numeric: tabular-nums;\n        font-size: clamp(22px, 3vw, 34px);\n        line-height: 1.1;\n      }\n      .fx-bignum small {\n        display: block;\n        font-family: var(--fhead);\n        font-weight: 700;\n        font-size: 11px;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n        color: var(--muted);\n        margin-top: 0.3rem;\n      }\n      .fx-scene-caption {\n        position: absolute;\n        left: 4%;\n        bottom: 3%;\n        right: 4%;\n        font-size: 14px;\n        color: var(--faint);\n        margin: 0;\n      }\n      .fx-pending {\n        position: absolute;\n        inset: 0;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        color: var(--faint);\n        font-size: 14px;\n        background: var(--ink-2);\n      }\n      .fx-pending[hidden] {\n        display: none;\n      }\n      .fx-floorline {\n        position: absolute;\n        left: 4%;\n        right: 4%;\n        height: 1px;\n        background: var(--line-2);\n      }\n      .fx-flash {\n        position: absolute;\n        width: 12%;\n        padding-top: 12%;\n        transform: translate(-50%, -50%);\n        border-radius: var(--r-lg);\n        background: rgba(255, 255, 255, 0.55);\n        opacity: 0;\n        pointer-events: none;\n      }\n      .fx-flash.is-on {\n        animation: fxFlash 0.5s var(--ease);\n      }\n      .fx-car {\n        animation: fxCarIn 1s var(--ease) both;\n      }\n      @keyframes fxCarIn {\n        0% {\n          opacity: 0;\n          transform: translate(-50%, -100%) translateX(-260%);\n        }\n        100% {\n          opacity: 1;\n          transform: translate(-50%, -100%) translateX(0);\n        }\n      }\n      .fx-platechip {\n        position: absolute;\n        transform: translate(-50%, -50%);\n        background: var(--paper);\n        color: var(--ink-1);\n        font-family: ui-monospace, Consolas, monospace;\n        font-weight: 800;\n        font-size: 22px;\n        letter-spacing: 2px;\n        padding: 0.4rem 0.7rem;\n        border: 2px solid var(--gold);\n        border-radius: var(--r);\n        display: none;\n      }\n      .fx-scene:not(.is-hardread) .fx-platechip.fx-normal {\n        display: block;\n      }\n      .fx-scene.is-hardread .fx-platechip.fx-hard {\n        display: block;\n      }\n      .fx-night-overlay {\n        position: absolute;\n        inset: 0;\n        background: rgba(0, 0, 0, 0.45);\n        opacity: 0;\n        pointer-events: none;\n        transition: opacity 0.3s var(--ease);\n      }\n      .fx-scene.is-hardread .fx-night-overlay {\n        opacity: 1;\n      }\n      .fx-confwrap {\n        position: absolute;\n        width: 44%;\n      }\n      .fx-scene[data-step=\"3\"] .fx-scene-caption {\n        background: var(--ink-2);\n        padding: 0.3rem 0 0;\n      }\n      @media (min-width: 901px) and (max-width: 1120px) {\n        .fx-scene[data-step=\"3\"] #fx-s3-attrcard p {\n          font-size: 13px;\n          line-height: 1.45;\n        }\n        .fx-scene[data-step=\"3\"] #fx-s3-leadcard {\n          top: auto !important;\n          bottom: 4%;\n        }\n      }\n      .fx-confwrap.fx-normal,\n      .fx-confwrap.fx-hard {\n        display: none;\n      }\n      .fx-scene:not(.is-hardread) .fx-confwrap.fx-normal {\n        display: block;\n      }\n      .fx-scene.is-hardread .fx-confwrap.fx-hard {\n        display: block;\n      }\n      .fx-track {\n        height: 8px;\n        background: var(--ink-3);\n        border-radius: 4px;\n        overflow: hidden;\n        margin-top: 0.3rem;\n      }\n      .fx-track__fill {\n        height: 100%;\n        background: var(--gold);\n        border-radius: 4px;\n      }\n      .fx-track__fill--muted {\n        background: var(--muted);\n      }\n      .fx-tag {\n        position: absolute;\n        transform: translate(-50%, -100%);\n        background: rgba(0, 0, 0, 0.55);\n        border: 1px solid var(--line-2);\n        -webkit-backdrop-filter: blur(8px);\n        backdrop-filter: blur(8px);\n        border-radius: var(--r);\n        padding: 0.35rem 0.8rem;\n        font-size: 12px;\n        color: var(--muted);\n        white-space: nowrap;\n        text-align: center;\n        margin-bottom: 6px;\n      }\n      .fx-tag b {\n        display: block;\n        color: var(--gold);\n        font-family: var(--fhead);\n        font-weight: 800;\n        font-size: 13px;\n      }\n      .fx-rettrack {\n        position: absolute;\n        height: 14px;\n        background: var(--ink-3);\n        border-radius: var(--r);\n        overflow: visible;\n      }\n      .fx-rettrack__fill {\n        position: absolute;\n        left: 0;\n        top: 0;\n        height: 100%;\n        border-radius: var(--r);\n        background: var(--gold);\n        transition: width 0.2s var(--ease);\n      }\n      .fx-rettrack__evidence {\n        position: absolute;\n        left: 100%;\n        top: 0;\n        bottom: 0;\n        width: 16%;\n        background: repeating-linear-gradient(\n          45deg,\n          var(--gold-line),\n          var(--gold-line) 3px,\n          transparent 3px,\n          transparent 7px\n        );\n        border-radius: 0 var(--r) var(--r) 0;\n      }\n      .fx-rettrack__tick {\n        position: absolute;\n        top: -4px;\n        bottom: -4px;\n        width: 2px;\n        background: var(--paper);\n        transform: translateX(-50%);\n      }\n      .fx-retticks {\n        position: absolute;\n        font-size: 12px;\n        color: var(--faint);\n      }\n      .fx-retticks span {\n        position: absolute;\n        transform: translateX(-50%);\n      }\n      .fx-dashpanel {\n        position: absolute;\n        left: 2%;\n        top: 4%;\n        width: 62%;\n        height: 92%;\n        background: rgba(0, 0, 0, 0.4);\n        border: 1px solid var(--line-2);\n        -webkit-backdrop-filter: blur(6px);\n        backdrop-filter: blur(6px);\n        border-radius: var(--r-lg);\n        padding: 1rem 1.2rem;\n      }\n      .fx-chiprow {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 0.4rem;\n      }\n      .fx-chip-sm {\n        background: var(--ink-2);\n        border: 1px solid var(--line-2);\n        border-radius: var(--r);\n        padding: 0.35rem 0.7rem;\n        font-size: 12px;\n        color: var(--muted);\n      }\n      .fx-resultrows {\n        margin-top: 0.8rem;\n        display: flex;\n        flex-direction: column;\n        gap: 0.4rem;\n      }\n      .fx-resultrow {\n        background: var(--ink-1);\n        border: 1px solid var(--line);\n        border-radius: var(--r);\n        padding: 0.5rem 0.7rem;\n        font-size: 14px;\n        color: var(--muted);\n        display: flex;\n        flex-direction: column;\n      }\n      .fx-resultrow b {\n        color: var(--paper);\n        font-size: 14px;\n      }\n      .fx-dashsplit {\n        display: flex;\n        gap: 0.8rem;\n        align-items: stretch;\n        margin-top: 0.8rem;\n      }\n      .fx-dashsplit .fx-resultrows {\n        flex: 1 1 auto;\n        margin-top: 0;\n        min-width: 0;\n      }\n      .fx-fanwrap {\n        position: relative;\n        flex: 0 0 34%;\n        min-height: 150px;\n      }\n      .fx-searchcounts {\n        position: absolute;\n        left: 0;\n        top: 66%;\n        width: 100%;\n        display: flex;\n        flex-direction: column;\n        gap: 0.35rem;\n      }\n      .fx-dashpanel {\n        z-index: 0;\n      }\n      .fx-fan-bg {\n        z-index: -1;\n      }\n      .fx-dashpanel > .fx-chiprow,\n      .fx-dashpanel > .fx-resultrows,\n      .fx-dashpanel > .fx-searchcounts--row {\n        position: relative;\n        z-index: 1;\n      }\n      .fx-searchcounts--row {\n        position: static !important;\n        left: auto !important;\n        top: auto !important;\n        width: auto !important;\n        display: flex;\n        flex-direction: row;\n        gap: 2rem;\n        margin-top: 0.5rem;\n      }\n      .fx-searchcounts--row .fx-bignum {\n        font-size: 44px;\n      }\n      @media (min-width: 901px) {\n        .fx-scene[data-step=\"6\"] .fx-dashpanel {\n          display: flex;\n          flex-direction: column;\n          padding: 0.9rem 1.1rem;\n        }\n        .fx-scene[data-step=\"6\"] .fx-resultrows {\n          margin-top: 0.6rem;\n          gap: 0.35rem;\n        }\n        .fx-scene[data-step=\"6\"] .fx-resultrow {\n          flex-direction: row;\n          justify-content: space-between;\n          align-items: baseline;\n          gap: 0.6rem;\n          padding: 0.42rem 0.7rem;\n        }\n        .fx-scene[data-step=\"6\"] .fx-searchcounts--row {\n          margin-top: auto;\n          padding-top: 0.6rem;\n        }\n        .fx-scene[data-step=\"6\"] .fx-searchcounts--row .fx-bignum {\n          font-size: 38px;\n        }\n      }\n      .fx-bignum-row {\n        display: flex;\n        gap: 2.4rem;\n        flex-wrap: wrap;\n        margin-top: 1.1rem;\n      }\n      .fx-nodelabel {\n        position: absolute;\n        transform: translate(-50%, -50%);\n        font-family: var(--fhead);\n        font-weight: 700;\n        font-size: 14px;\n        color: var(--paper);\n        background: rgba(0, 0, 0, 0.55);\n        border: 1px solid var(--line-2);\n        border-radius: var(--r);\n        padding: 0.3rem 0.7rem;\n        white-space: nowrap;\n      }\n      .fx-nodelabel--sm {\n        font-size: 12px;\n        font-weight: 600;\n        color: var(--muted);\n      }\n      .fx-tlrail {\n        position: absolute;\n        left: 56%;\n        right: 4%;\n        top: 8%;\n        bottom: auto;\n        height: 2px;\n        background: var(--line-2);\n      }\n      .fx-tlpoint {\n        position: absolute;\n        top: 0;\n        transform: translate(-50%, -50%);\n        text-align: center;\n        white-space: nowrap;\n      }\n      .fx-tlpoint b {\n        display: block;\n        font-family: var(--fhead);\n        font-weight: 800;\n        color: var(--gold);\n        font-size: 13px;\n      }\n      .fx-tlpoint span {\n        font-size: 12px;\n        color: var(--muted);\n      }\n      .fx-masked {\n        -webkit-mask-image: radial-gradient(ellipse 72% 72% at 50% 50%, var(--ink) 55%, transparent 92%);\n        mask-image: radial-gradient(ellipse 72% 72% at 50% 50%, var(--ink) 55%, transparent 92%);\n      }\n      .fx-packet4 {\n        position: absolute;\n        left: 38%;\n        top: 22%;\n        transform: translate(-50%, -50%);\n        animation: none;\n        z-index: 3;\n        width: 250px;\n        max-width: 48%;\n        padding: 12px 16px;\n      }\n      .fx-packet4 p,\n      .fx-packet4 div {\n        white-space: normal;\n      }\n      @media (max-width: 900px) {\n        .fx-scene[data-step=\"4\"] .fx-packet4 {\n          width: 64% !important;\n          max-width: none !important;\n          left: 44% !important;\n          top: 22% !important;\n          transform: translate(-50%, -50%) !important;\n        }\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .fx-car {\n          animation: none;\n        }\n        .fx-dash {\n          animation: none;\n        }\n        .fx-camdot {\n          animation: none;\n          opacity: 1;\n        }\n        .fx-packet4 {\n          animation: none;\n        }\n      }\n      .fx-scene {\n        display: none;\n      }\n      .fx-scene.is-active {\n        display: block;\n      }\n      @keyframes fxFade {\n        from {\n          opacity: 0;\n        }\n        to {\n          opacity: 1;\n        }\n      }\n      .fx-scene.is-active {\n        animation: fxFade 0.35s var(--ease);\n      }\n      .fx-card {\n        display: none;\n      }\n      .fx-card.fx-card--active {\n        display: block;\n      }\n      .fx-card__bg {\n        fill: var(--ink-1);\n        stroke: var(--gold-line);\n        stroke-width: 2;\n      }\n      .fx-card__bar {\n        fill: var(--gold);\n      }\n      .fx-card__t {\n        font-family: var(--fhead);\n        font-weight: 800;\n        font-size: 22px;\n        fill: var(--paper);\n      }\n      .fx-card__b {\n        font-family: var(--fbody);\n        font-size: 18px;\n        fill: var(--muted);\n      }\n      .fx-card__n {\n        font-family: var(--fbody);\n        font-size: 18px;\n        fill: var(--faint);\n      }\n      .fx-hot {\n        cursor: pointer;\n      }\n      .fx-hot__ring {\n        fill: rgba(243, 185, 55, 0.18);\n        stroke: var(--gold);\n        stroke-width: 2.5;\n        animation: fxPulse 2.4s var(--ease) infinite;\n      }\n      .fx-hot__dot {\n        fill: var(--gold);\n      }\n      .fx-hot[aria-pressed=\"true\"] .fx-hot__ring {\n        fill: rgba(243, 185, 55, 0.4);\n        stroke-width: 3;\n      }\n      @keyframes fxPulse {\n        0% {\n          opacity: 0.9;\n          transform: scale(1);\n        }\n        70% {\n          opacity: 0;\n          transform: scale(1.7);\n        }\n        100% {\n          opacity: 0;\n          transform: scale(1.7);\n        }\n      }\n      .fx-svg-label {\n        font-family: var(--fbody);\n        font-size: 20px;\n        fill: var(--muted);\n      }\n      .fx-svg-label--sm {\n        font-family: var(--fbody);\n        font-size: 18px;\n        fill: var(--faint);\n      }\n      .fx-svg-label--lg {\n        font-family: var(--fhead);\n        font-size: 28px;\n        fill: var(--paper);\n        font-weight: 700;\n      }\n      .fx-svg-title {\n        font-family: var(--fhead);\n        font-size: 30px;\n        fill: var(--paper);\n        font-weight: 800;\n      }\n      .fx-svg-gold {\n        fill: var(--gold);\n      }\n      .fx-svg-line {\n        stroke: var(--line-2);\n        fill: none;\n      }\n      .fx-svg-goldline {\n        stroke: var(--gold);\n        fill: none;\n      }\n      .fx-stagectl {\n        display: none;\n        margin-top: 1.1rem;\n      }\n      .fx-stagectl.is-active {\n        display: block;\n      }\n      .fx-panels {\n        overflow-y: auto;\n      }\n      .fx-panel {\n        display: none;\n      }\n      .fx-panel.is-active {\n        display: block;\n        animation: fxFade 0.35s var(--ease);\n      }\n      .jca-flock ul.fx-panel__list {\n        list-style: disc;\n        margin: 0.1rem 0 1.1rem 0;\n        padding: 0 0 0 1.25rem;\n        display: grid;\n        gap: 0.35rem;\n      }\n      .jca-flock ul.fx-panel__list li {\n        display: list-item;\n        list-style: disc;\n        font-size: 16px;\n        line-height: 1.55;\n        color: var(--muted);\n        font-weight: 400;\n        padding-left: 0.15rem;\n      }\n      .jca-flock ul.fx-panel__list li::marker {\n        color: var(--gold);\n      }\n      .jca-flock .fx-callout ul.fx-panel__list {\n        margin-bottom: 0.9rem;\n      }\n      .jca-flock .fx-callout ul.fx-panel__list li {\n        color: var(--muted);\n        font-size: 15px;\n      }\n      .fx-panel__eyebrow {\n        font-family: var(--fhead);\n        font-weight: 800;\n        font-size: 0.72rem;\n        letter-spacing: 0.14em;\n        text-transform: uppercase;\n        color: var(--faint);\n        margin: 0 0 0.5rem;\n      }\n      .fx-panel h2 {\n        font-size: 1.4rem;\n        margin: 0 0 0.8rem;\n      }\n      .fx-panel p {\n        color: var(--muted);\n        font-size: 1rem;\n        line-height: 1.7;\n        margin: 0 0 0.9rem;\n      }\n      .fx-storynav {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: 1rem;\n        margin-top: 1.8rem;\n        flex-wrap: wrap;\n      }\n      .fx-storynav__mid {\n        font-size: 0.85rem;\n        color: var(--faint);\n      }\n      .fx-flash {\n        opacity: 0;\n      }\n      .fx-flash.is-on {\n        animation: fxFlash 0.5s var(--ease);\n      }\n      @keyframes fxFlash {\n        0% {\n          opacity: 0;\n        }\n        30% {\n          opacity: 0.9;\n        }\n        100% {\n          opacity: 0;\n        }\n      }\n      .fx-packet {\n        animation: fxPacket 2.6s var(--ease) infinite;\n      }\n      @keyframes fxPacket {\n        0% {\n          offset-distance: 0%;\n          opacity: 0;\n        }\n        8% {\n          opacity: 1;\n        }\n        92% {\n          opacity: 1;\n        }\n        100% {\n          offset-distance: 100%;\n          opacity: 0;\n        }\n      }\n      @supports not (offset-distance: 0%) {\n        .fx-packet {\n          animation: none;\n        }\n      }\n      .fx-toggle-row {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 0.6rem;\n        margin-top: 1rem;\n      }\n      .fx-radio-row {\n        display: flex;\n        flex-direction: column;\n        gap: 0.6rem;\n        margin-top: 1.2rem;\n      }\n      .fx-radio {\n        display: flex;\n        align-items: center;\n        gap: 0.6rem;\n        font-size: 0.92rem;\n        color: var(--muted);\n      }\n      .fx-radio input[type=\"radio\"] {\n        accent-color: var(--gold);\n        width: 16px;\n        height: 16px;\n      }\n      .fx-radio input[type=\"number\"] {\n        width: 70px;\n        background: var(--ink-2);\n        border: 1px solid var(--line-2);\n        color: var(--paper);\n        border-radius: var(--r);\n        padding: 0.3rem 0.5rem;\n        font-family: inherit;\n      }\n      .fx-count {\n        font-family: var(--fhead);\n        font-weight: 900;\n        font-size: 2rem;\n        color: var(--paper);\n      }\n      .fx-portals {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 0.5rem;\n        margin-top: 1rem;\n        padding: 0;\n      }\n      .fx-portals li {\n        display: inline-flex;\n      }\n      .fx-portals a {\n        font-size: 0.82rem;\n        color: var(--gold);\n        font-weight: 700;\n        border: 1px solid var(--gold-line);\n        border-radius: var(--r-lg);\n        padding: 0.4rem 0.8rem;\n        min-height: 44px;\n        display: inline-flex;\n        align-items: center;\n      }\n      .fx-portals a {\n        transition:\n          background 0.2s var(--ease),\n          border-color 0.2s var(--ease);\n      }\n      .fx-portals a:hover {\n        background: var(--gold-soft);\n        border-color: var(--gold);\n      }\n      .fx-tablewrap {\n        overflow-x: auto;\n        border: 1px solid var(--line);\n        border-radius: var(--r-lg);\n      }\n      .fx-table {\n        width: 100%;\n        border-collapse: collapse;\n        min-width: 640px;\n      }\n      .fx-table--2col {\n        min-width: 560px;\n      }\n      .fx-table th,\n      .fx-table td {\n        text-align: left;\n        padding: 16px 18px;\n        font-size: 0.92rem;\n        color: var(--muted);\n        border-bottom: 1px solid var(--line);\n        vertical-align: top;\n        font-variant-numeric: tabular-nums;\n      }\n      .fx-table th {\n        font-family: var(--fhead);\n        font-weight: 700;\n        color: var(--paper);\n        font-size: 11px;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n        background: var(--ink-3);\n      }\n      .fx-table tr:last-child td {\n        border-bottom: 0;\n      }\n      .fx-table td b,\n      .fx-table td strong {\n        color: var(--paper);\n      }\n      .fx-table td:first-child {\n        font-weight: 600;\n      }\n      .fx-w22 {\n        width: 22%;\n      }\n      .fx-w30 {\n        width: 30%;\n      }\n      .fx-w48 {\n        width: 48%;\n      }\n      .fx-livefoot {\n        font-size: 0.82rem;\n        color: var(--faint);\n        margin-top: 1rem;\n        line-height: 1.6;\n      }\n      .fx-liverow {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n        gap: 1rem;\n        justify-content: space-between;\n        margin: 1.4rem 0 0.8rem;\n      }\n      .fx-citysel {\n        background: transparent;\n        border: 2px solid var(--line-2);\n        color: var(--paper);\n        border-radius: var(--r);\n        padding: 0.6rem 1rem;\n        font-family: inherit;\n        font-size: 0.92rem;\n        min-height: 45px;\n      }\n      .fx-mapwrap {\n        position: relative;\n        margin-top: 1rem;\n      }\n      #fx-map {\n        height: 420px;\n        border: 1px solid var(--line-2);\n        border-radius: var(--r-lg);\n        background: var(--ink-1);\n      }\n      .fx-map-note {\n        position: absolute;\n        left: 50%;\n        top: 50%;\n        transform: translate(-50%, -50%);\n        background: rgba(0, 0, 0, 0.72);\n        border: 1px solid var(--line-2);\n        border-radius: var(--r);\n        padding: 0.6rem 1rem;\n        color: var(--muted);\n        font-size: 0.8rem;\n        text-align: center;\n        max-width: 80%;\n        display: flex;\n        align-items: center;\n        gap: 0.5rem;\n        justify-content: center;\n        pointer-events: none;\n      }\n      .fx-map-note::before {\n        content: \"\";\n        display: inline-block;\n        width: 6px;\n        height: 6px;\n        border-radius: 50%;\n        background: var(--gold);\n        flex: none;\n      }\n      .fx-courtcard {\n        margin-top: 1.2rem;\n        background: var(--ink-3);\n        border: 1px solid var(--line);\n        border-radius: var(--r-lg);\n        padding: 22px 24px;\n        font-size: 0.9rem;\n        color: var(--muted);\n      }\n      .fx-courtcard a {\n        color: var(--gold);\n        font-weight: 700;\n      }\n      .fx-livetable th:nth-child(1),\n      .fx-livetable td:nth-child(1) {\n        width: 26%;\n      }\n      .fx-livetable th:nth-child(2),\n      .fx-livetable td:nth-child(2) {\n        width: 20%;\n      }\n      .fx-livetable th:nth-child(3),\n      .fx-livetable td:nth-child(3) {\n        width: 20%;\n      }\n      .fx-livetable th:nth-child(4),\n      .fx-livetable td:nth-child(4) {\n        width: 34%;\n      }\n      .fx-livetable th:nth-child(2),\n      .fx-livetable th:nth-child(3),\n      .fx-livetable td.fx-cell-mapped,\n      .fx-livetable td.fx-cell-flock {\n        text-align: right;\n      }\n      .fx-statuscell {\n        display: flex;\n        align-items: center;\n        justify-content: flex-end;\n        gap: 0.6rem;\n        flex-wrap: wrap;\n      }\n      .fx-status {\n        font-size: 0.76rem;\n        color: var(--faint);\n        background: var(--ink-3);\n        border: 1px solid var(--line);\n        border-radius: var(--r);\n        padding: 0.3rem 0.7rem;\n        white-space: nowrap;\n      }\n      .fx-status--live {\n        color: var(--gold);\n        border-color: var(--gold-line);\n      }\n      .fx-status--live::before {\n        content: \"\";\n        display: inline-block;\n        width: 6px;\n        height: 6px;\n        border-radius: 50%;\n        background: var(--gold);\n        margin-right: 0.4em;\n        vertical-align: middle;\n      }\n      .fx-clockgrid {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n        gap: 1.1rem;\n        margin-top: 1.4rem;\n      }\n      .fx-clockcard {\n        background: var(--ink-3);\n        border: 1px solid var(--line);\n        border-radius: var(--r-lg);\n        padding: 22px 24px;\n      }\n      .fx-clockcard .lbl {\n        font-size: 0.74rem;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n        color: var(--faint);\n        font-weight: 700;\n      }\n      .fx-clockcard .val {\n        font-family: var(--fhead);\n        font-weight: 800;\n        font-size: 1.5rem;\n        color: var(--paper);\n        margin: 0.4rem 0;\n      }\n      .fx-clockcard .sub {\n        font-size: 0.85rem;\n        color: var(--muted);\n      }\n      .fx-daterow {\n        display: flex;\n        align-items: center;\n        gap: 1rem;\n        flex-wrap: wrap;\n        margin-top: 1rem;\n      }\n      .fx-daterow__label {\n        margin-top: 0;\n      }\n      .fx-dateinput {\n        background: var(--ink-2);\n        border: 1px solid var(--line-2);\n        color: var(--paper);\n        border-radius: var(--r);\n        padding: 0.7rem 0.9rem;\n        font-family: inherit;\n        font-size: 0.95rem;\n        width: 220px;\n        min-height: 45px;\n        box-sizing: border-box;\n      }\n      .fx-note {\n        font-size: 0.86rem;\n        color: var(--muted);\n        margin-top: 1rem;\n      }\n      .fx-tl {\n        display: flex;\n        flex-direction: column;\n        gap: 1.1rem;\n        margin-top: 1.6rem;\n      }\n      .fx-tlrow {\n        display: grid;\n        grid-template-columns: 180px 1fr;\n        gap: 1.2rem;\n        padding: 1rem 0;\n        border-bottom: 1px solid var(--line);\n      }\n      .fx-tlrow:last-child {\n        border-bottom: 0;\n      }\n      .fx-tlrow time {\n        font-family: var(--fhead);\n        font-weight: 800;\n        color: var(--gold);\n        font-size: 0.86rem;\n      }\n      .fx-tlrow p {\n        margin: 0;\n        color: var(--muted);\n        font-size: 0.95rem;\n        line-height: 1.6;\n      }\n      .fx-tlrow .outlet {\n        font-family: var(--fhead);\n        font-size: 11px;\n        font-weight: 700;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n        color: var(--gold);\n        margin-top: 0.5rem;\n      }\n      .fx-tlrow .outlet a {\n        color: var(--gold);\n        font-weight: 700;\n      }\n      @media (max-width: 640px) {\n        .fx-tlrow {\n          grid-template-columns: 1fr;\n        }\n      }\n      .fx-srclist {\n        display: flex;\n        flex-direction: column;\n        gap: 0.6rem;\n        margin-top: 1.4rem;\n      }\n      .fx-srclist li {\n        font-size: 0.86rem;\n        color: var(--muted);\n        border-bottom: 1px solid var(--line);\n        padding-bottom: 0.6rem;\n      }\n      .fx-srclist a {\n        color: var(--gold);\n        font-weight: 700;\n        word-break: break-word;\n      }\n      .fx-srclist .arch {\n        color: var(--faint);\n        font-weight: 400;\n      }\n      .fx-methgrid {\n        display: grid;\n        grid-template-columns: 1fr 1fr;\n        gap: 40px;\n        margin-top: 1.6rem;\n      }\n      @media (max-width: 900px) {\n        .fx-methgrid {\n          grid-template-columns: 1fr;\n        }\n      }\n      .fx-meth {\n        color: var(--muted);\n        font-size: 17px;\n        line-height: 1.7;\n        margin-top: 0;\n        max-width: none;\n      }\n      .fx-meth b {\n        color: var(--paper);\n      }\n      .fx-faq {\n        border-top: 1px solid var(--line);\n      }\n      .fx-faq__item {\n        border-bottom: 1px solid var(--line);\n      }\n      .fx-faq__q {\n        width: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: 1rem;\n        padding: 1.3rem 0;\n        cursor: pointer;\n        font-family: var(--fhead);\n        font-weight: 700;\n        font-size: 1.04rem;\n        color: var(--paper);\n        list-style: none;\n        transition: color 0.2s var(--ease);\n      }\n      .fx-faq__q:hover {\n        color: var(--gold);\n      }\n      .fx-faq__q::-webkit-details-marker {\n        display: none;\n      }\n      .fx-faq__q {\n        list-style: none;\n      }\n      .fx-faq__ic {\n        width: 26px;\n        height: 26px;\n        border-radius: var(--r);\n        border: 1.5px solid var(--line-2);\n        flex: none;\n        display: grid;\n        place-items: center;\n        position: relative;\n        transition: 0.25s var(--ease);\n      }\n      .fx-faq__ic::before,\n      .fx-faq__ic::after {\n        content: \"\";\n        position: absolute;\n        width: 11px;\n        height: 2px;\n        background: var(--paper);\n        transition: 0.25s var(--ease);\n      }\n      .fx-faq__ic::after {\n        transform: rotate(90deg);\n      }\n      .fx-faq__item[open] .fx-faq__ic {\n        background: var(--gold);\n        border-color: var(--gold);\n      }\n      .fx-faq__item[open] .fx-faq__ic::before,\n      .fx-faq__item[open] .fx-faq__ic::after {\n        background: var(--ink);\n      }\n      .fx-faq__item[open] .fx-faq__ic::after {\n        transform: rotate(0);\n      }\n      .fx-faq__a {\n        color: var(--muted);\n        padding: 0 0 1.3rem;\n        max-width: 68ch;\n      }\n      .fx-faq__a p {\n        margin: 0 0 0.6rem;\n        color: var(--muted);\n      }\n      .fx-faq__a p:last-child {\n        margin-bottom: 0;\n      }\n      .fx-embedbox {\n        background: var(--ink-3);\n        border: 1px solid var(--line);\n        border-radius: var(--r-lg);\n        padding: 22px 24px;\n        margin-top: 1.2rem;\n      }\n      .fx-embedbox textarea {\n        width: 100%;\n        min-height: 96px;\n        background: var(--ink-1);\n        color: var(--muted);\n        border: 1px solid var(--line);\n        border-radius: var(--r);\n        padding: 0.8rem;\n        font-family: ui-monospace, Consolas, monospace;\n        font-size: 0.8rem;\n        resize: vertical;\n      }\n      .fx-embedbox .row {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        gap: 1rem;\n        margin-top: 0.8rem;\n        flex-wrap: wrap;\n      }\n      .fx-embedbox .attrib {\n        font-size: 0.85rem;\n        color: var(--muted);\n      }\n      .fx-embedbox .attrib a {\n        color: var(--gold);\n        font-weight: 700;\n      }\n      .fx-copied {\n        color: var(--gold);\n        font-size: 0.82rem;\n        font-weight: 700;\n        margin-left: 0.6rem;\n      }\n      .fx-disclaimer {\n        color: var(--faint);\n        font-size: 15px;\n        line-height: 1.7;\n        max-width: 80ch;\n        width: 100%;\n      }\n      .fx-disclaimer b {\n        color: var(--muted);\n      }\n      .fx-final {\n        position: relative;\n        background-color: var(--ink);\n        background-image: radial-gradient(closest-side at 50% 0, rgba(243, 185, 55, 0.16), transparent 60%);\n        border-top: 1px solid var(--line);\n      }\n      .fx-final__grid {\n        display: grid;\n        grid-template-columns: 1.1fr 0.9fr;\n        gap: clamp(2rem, 4vw, 3.4rem);\n        align-items: start;\n      }\n      .fx-final__grid > div:first-child {\n        padding-top: 22px;\n      }\n      @media (max-width: 860px) {\n        .fx-final__grid {\n          grid-template-columns: 1fr;\n        }\n      }\n      .fx-final h2 {\n        max-width: 20ch;\n        margin: 0 0 1rem;\n      }\n      .fx-final p {\n        color: var(--muted);\n        font-size: 1.02rem;\n        line-height: 1.7;\n        margin: 0 0 0.8rem;\n      }\n      .fx-final__card {\n        background: var(--ink-3);\n        border: 1px solid var(--line);\n        border-radius: var(--r-lg);\n        padding: 22px 24px;\n        box-shadow: var(--sh);\n      }\n      .fx-final__phone {\n        display: block;\n        font-family: var(--fhead);\n        font-size: clamp(1.7rem, 3vw, 2.2rem);\n        font-weight: 800;\n        color: var(--paper);\n        margin: 0.2rem 0 1rem;\n      }\n      .fx-final__phone:hover {\n        color: var(--gold);\n      }\n      .fx-final__card .fx-btn {\n        width: 100%;\n        justify-content: center;\n        margin-top: 0.7rem;\n      }\n      .fx-final__note {\n        color: var(--faint);\n        font-size: 0.82rem;\n        margin-top: 0.9rem;\n        line-height: 1.5;\n      }\n      .fx-legal {\n        background: var(--ink);\n        border-top: 1px solid var(--line);\n        padding-block: 26px;\n      }\n      .fx-legal p {\n        max-width: var(--maxw);\n        margin: 0 auto;\n        font-size: 0.75rem;\n        color: var(--faint);\n        line-height: 1.65;\n      }\n      .fx-mobilecall {\n        position: fixed;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        z-index: 70;\n        display: none;\n        padding: 0.6rem 0.9rem calc(0.6rem + env(safe-area-inset-bottom, 0px));\n        background: rgba(5, 5, 5, 0.94);\n        -webkit-backdrop-filter: blur(8px);\n        backdrop-filter: blur(8px);\n        border-top: 1px solid var(--gold-line);\n      }\n      .fx-mobilecall__btn {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 0.55rem;\n        width: 100%;\n        min-height: 50px;\n        background: var(--gold);\n        color: var(--ink);\n        font-family: var(--fhead);\n        font-weight: 800;\n        font-size: 1rem;\n        border-radius: var(--r);\n      }\n      @media (max-width: 767px) {\n        .fx-mobilecall {\n          display: block;\n        }\n        .jca-flock {\n          padding-bottom: 80px;\n        }\n      }\n      @media (prefers-reduced-motion: reduce) {\n        .jca-flock * {\n          animation: none !important;\n          transition: none !important;\n        }\n      }\n      @media (max-width: 390px) {\n        .fx-h1 {\n          font-size: 1.9rem;\n        }\n      }\n\n      .fx-eyebrow--embed {\n        display: none;\n      }\n      .is-embed .fx-eyebrow--embed {\n        display: inline-flex;\n      }\n      .is-embed .fx-hero__intro > .fx-eyebrow:not(.fx-eyebrow--embed) {\n        display: none;\n      }\n      .is-embed .fx-hero__lede {\n        display: none;\n      }\n      .is-embed .fx-h1 {\n        font-size: 24px;\n        max-width: none;\n        text-wrap: initial;\n        margin-inline: 0;\n      }\n      .is-embed #live,\n      .is-embed #clock,\n      .is-embed #checklist,\n      .is-embed #governance,\n      .is-embed #texas,\n      .is-embed #sources,\n      .is-embed #faq,\n      .is-embed #embed,\n      .is-embed #contact,\n      .is-embed #legal,\n      .is-embed section[aria-label=\"About this page\"],\n      .is-embed .fx-mobilecall,\n      .is-embed .fx-chips,\n      .is-embed .fx-cta-row {\n        display: none !important;\n      }\n      html.fx-embed-doc,\n      html.fx-embed-doc body {\n        margin: 0 !important;\n        padding: 0 !important;\n        min-height: 0 !important;\n        height: auto !important;\n        background: #000 !important;\n      }\n      .jca-flock.is-embed {\n        margin-inline: 0;\n        max-width: none;\n        padding-bottom: 0;\n      }\n      .is-embed {\n        --wp-head: 0px;\n        background: var(--ink);\n      }\n      .is-embed .fx-wrap {\n        padding-inline: 16px;\n      }\n      .is-embed #hero {\n        padding-block: 20px;\n        background-image: none;\n      }\n      .fx-embedfooter {\n        display: none;\n      }\n      .is-embed .fx-embedfooter {\n        display: block;\n        font-size: 13px;\n        color: var(--muted);\n        background: var(--ink-3);\n        border-top: 1px solid var(--line);\n        padding: 14px 16px;\n        margin-top: 20px;\n      }\n      .fx-embedfooter a {\n        color: var(--gold);\n        font-weight: 700;\n      }\n      .fx-seeall {\n        display: none;\n        font-size: 13px;\n        color: var(--faint);\n        margin-top: 0.8rem;\n        text-align: center;\n      }\n      .is-only-step .fx-seeall {\n        display: block;\n      }\n      .fx-seeall a {\n        color: var(--gold);\n        font-weight: 700;\n      }\n      .is-only-step .fx-rail,\n      .is-only-step .fx-progress,\n      .is-only-step .fx-storynav {\n        display: none;\n      }\n      .fx-embedconf {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: flex-end;\n        gap: 1.4rem;\n        margin-bottom: 1rem;\n      }\n      .fx-embedconf .fx-radio-row {\n        margin-top: 0;\n        flex-direction: row;\n        gap: 1rem;\n      }\n      .fx-embedconf select {\n        background: var(--ink-2);\n        border: 2px solid var(--line-2);\n        color: var(--paper);\n        border-radius: var(--r);\n        padding: 0.6rem 1rem;\n        font-family: inherit;\n        font-size: 0.92rem;\n        min-height: 45px;\n      }\n      .jca-flock .fx-embedconf select {\n        color-scheme: dark;\n      }\n      .jca-flock .fx-embedconf select option {\n        color: var(--paper);\n        background-color: var(--ink-2);\n      }\n      #fx-embedpreview {\n        border: 1px solid var(--line-2);\n        border-radius: var(--r-lg);\n        background: var(--ink-1);\n        margin-top: 1rem;\n      }\n      \/* fx-compact:start (embed only; .fx-canvas = scaled scene canvas at every embed width, .fx-compact = side-by-side layout at 680px and up; JS sets both and --fx-k) *\/\n      .jca-flock.fx-compact #hero { padding-block: 12px 10px; }\n      .jca-flock.fx-compact #hero > .fx-wrap { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 16px; align-items: center; padding-inline: 14px; }\n      .jca-flock.fx-compact #hero > .fx-wrap > * { grid-column: 1 \/ -1; }\n      .jca-flock.fx-compact #hero > .fx-wrap > .fx-hero__intro { grid-column: 1; text-align: left; }\n      .jca-flock.fx-compact #hero > .fx-wrap > .fx-rail { grid-column: 2; margin: 0; display: flex; flex-wrap: nowrap; gap: 4px; }\n      .jca-flock.fx-compact .fx-eyebrow--embed { margin: 0 0 2px; font-size: 10px; }\n      .jca-flock.fx-compact .fx-h1 { font-size: 17px; line-height: 1.2; letter-spacing: -0.01em; max-width: none; margin: 0; }\n      .jca-flock.fx-compact .fx-h1-br { display: none; }\n      .jca-flock.fx-compact .fx-rail__btn { width: 30px; height: 30px; font-size: 13px; }\n      .jca-flock.fx-compact .fx-progress { margin: 10px 0 12px; }\n      .jca-flock.fx-compact .fx-storygrid { grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); gap: 18px; align-items: stretch; }\n      .jca-flock.fx-compact .fx-storygrid.is-wide { grid-template-columns: minmax(0, 1fr); }\n      .jca-flock.fx-compact .fx-storygrid.is-wide > div:first-child { display: none; }\n      .jca-flock.fx-compact .fx-panels { min-height: 0; overflow-y: auto; padding-right: 6px; scrollbar-width: thin; scrollbar-color: var(--line-2) transparent; }\n      .jca-flock.fx-canvas .fx-stage { aspect-ratio: auto; height: calc(300px * var(--fx-k, 1)); }\n      .jca-flock.fx-canvas .fx-stage-svg { inset: auto; left: 50%; top: 0; width: 400px; height: 300px; transform: translateX(-50%) scale(var(--fx-k, 1)); transform-origin: 50% 0; }\n      .jca-flock.fx-canvas .fx-tt-stagewrap { width: calc(300px * var(--fx-k, 1)); max-width: 100%; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-glass { padding: 6px 8px; font-size: 12px; line-height: 1.35; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-glass p { font-size: 12px; line-height: 1.35; margin: 0 0 2px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-glass__eyebrow { font-size: 10.5px; letter-spacing: 0.06em; margin-bottom: 3px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-glass__lead { font-size: 13px; line-height: 1.3; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-glass__note { font-size: 11px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-bignum { font-size: 22px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-bignum small { font-size: 10.5px; margin-top: 1px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-tag { font-size: 11px; padding: 3px 7px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-tag b { font-size: 11.5px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-scene-caption { font-size: 11px; line-height: 1.35; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-platechip { font-size: 15px; padding: 2px 6px; letter-spacing: 1px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-stripcard { padding: 5px 8px; row-gap: 2px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-strip-item { font-size: 11px; padding-left: 5px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-stripcard .fx-glass__eyebrow { padding-right: 5px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-track { height: 6px; margin-top: 2px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-tlpoint b { font-size: 11px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-tlpoint span { font-size: 10.5px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-retticks { font-size: 11px; }\n      .jca-flock.fx-canvas .fx-stage-svg .fx-chip-sm { font-size: 10.5px; padding: 2px 6px; }\n      .jca-flock.fx-canvas #fx-s2-cam { right: 0 !important; bottom: 16% !important; height: 62% !important; width: auto !important; }\n      .jca-flock.fx-canvas #fx-car { left: 34% !important; top: 84% !important; width: 50% !important; }\n      .jca-flock.fx-canvas #fx-flash { left: 77% !important; top: 61% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"2\"] .fx-floorline { top: 84% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"2\"] .fx-stripcard { left: 0 !important; top: 0 !important; width: 100% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"2\"] .fx-scene-caption { left: 3%; right: 3%; bottom: 2%; }\n      .jca-flock.fx-canvas #fx-s3-img { left: 30% !important; top: 40% !important; width: 58% !important; transform: translate(-50%, -50%) !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"3\"] .fx-platechip { left: 31% !important; top: 36.2% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"3\"] .fx-goldbox { x: 22px !important; y: 32.4px !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"3\"] .fx-confwrap.fx-normal,\n      .jca-flock.fx-canvas .fx-scene[data-step=\"3\"] .fx-confwrap.fx-hard { left: 3% !important; top: 75% !important; width: 44% !important; }\n      .jca-flock.fx-canvas #fx-s3-attrcard { left: 62% !important; top: 3% !important; width: 36% !important; bottom: auto !important; }\n      .jca-flock.fx-canvas #fx-s3-attrcard p { font-size: 11.5px; line-height: 1.35; }\n      .jca-flock.fx-canvas #fx-s3-leadcard { left: 62% !important; top: auto !important; bottom: 3% !important; width: 36% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"3\"] .fx-scene-caption { display: none; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"4\"] > .fx-objwrap:nth-child(1) { left: 14% !important; top: 34% !important; width: 26% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"4\"] > .fx-objwrap:nth-child(2) { left: 79% !important; top: 34% !important; width: 38% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"4\"] .fx-packet4 { left: 43% !important; top: 15% !important; width: 40% !important; max-width: none !important; transform: translate(-50%, -50%) !important; padding: 6px 8px !important; }\n      .jca-flock.fx-canvas #fx-s4-tag1 { left: 50% !important; top: 50% !important; width: 23% !important; }\n      .jca-flock.fx-canvas #fx-s4-tag2 { left: 75% !important; top: 50% !important; width: 23% !important; }\n      .jca-flock.fx-canvas #fx-s4-whocard { left: 3% !important; top: auto !important; bottom: 2% !important; width: 94% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"5\"] > .fx-objwrap:nth-child(1) { left: 13% !important; top: 55% !important; height: 58% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"5\"] > .fx-bignum { position: absolute; left: 30% !important; top: 6% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"5\"] > .fx-tag:nth-child(2) { left: 44.5% !important; top: 40% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"5\"] > .fx-tag:nth-child(3) { left: 93% !important; top: 40% !important; transform: translate(-100%, -100%); }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"5\"] .fx-rettrack { left: 30% !important; top: 52% !important; width: 62% !important; height: 12px; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"5\"] .fx-retticks { left: 30% !important; top: 59% !important; width: 62% !important; }\n      .jca-flock.fx-canvas #fx-retmarker { left: 30% !important; right: 3% !important; bottom: 8% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"6\"] .fx-dashpanel { left: 1.5% !important; top: 2% !important; width: 60% !important; height: 96% !important; padding: 8px 9px !important; display: flex !important; flex-direction: column !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"6\"] .fx-chiprow { gap: 3px; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"6\"] .fx-resultrows { margin-top: 6px !important; gap: 4px !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"6\"] .fx-resultrow { flex-direction: column !important; padding: 3px 6px !important; gap: 0 !important; font-size: 11px; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"6\"] .fx-resultrow b { font-size: 11.5px; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"6\"] .fx-searchcounts--row { margin-top: auto !important; padding-top: 4px !important; gap: 18px !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"6\"] .fx-searchcounts--row .fx-bignum { font-size: 24px !important; }\n      .jca-flock.fx-canvas #fx-s6-hotcard { left: 64% !important; top: 3% !important; width: 34.5% !important; }\n      .jca-flock.fx-canvas #fx-s6-alertcap { left: 64% !important; top: 49% !important; width: 34.5% !important; right: auto !important; bottom: auto !important; font-size: 11px !important; }\n      .jca-flock.fx-canvas #fx-s6-phone { left: 81% !important; top: 77% !important; width: 32% !important; transform: translate(-50%, -50%) !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"7\"] > .fx-objwrap:nth-child(1) { left: 0 !important; top: 0 !important; width: 53% !important; height: 100% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"7\"] .fx-connectors { display: none; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"7\"] .fx-tlrail { left: 56% !important; right: 3% !important; top: 9% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"7\"] .fx-glass--gold { left: 56% !important; top: 22% !important; width: 41% !important; }\n      .jca-flock.fx-canvas .fx-scene[data-step=\"7\"] .fx-glass--muted { left: 56% !important; top: auto !important; bottom: 4% !important; width: 41% !important; }\n      .jca-flock.fx-compact .fx-stagectl { margin-top: 8px; }\n      .jca-flock.fx-compact .fx-stagectl .fx-btn { min-height: 34px; padding: 6px 12px; font-size: 13px; }\n      .jca-flock.fx-compact .fx-stagectl .fx-note { font-size: 12px; margin-top: 4px; }\n      .jca-flock.fx-compact .fx-toggle-row { margin-top: 0; gap: 6px; flex-wrap: nowrap; }\n      .jca-flock.fx-compact .fx-toggle-row .fx-btn { flex: 1 1 0; min-width: 0; white-space: nowrap; padding: 6px 8px; font-size: 12px; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"5\"] .fx-radio-row { flex-direction: row; flex-wrap: wrap; gap: 4px 14px; margin-top: 0; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"5\"] .fx-radio { font-size: 12.5px; gap: 5px; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"5\"] .fx-radio input[type=\"number\"] { width: 56px; padding: 1px 4px; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"5\"] .fx-portals { display: none; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"].is-active { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 8px; row-gap: 6px; align-items: center; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"] > label { grid-column: 1; grid-row: 1; font-size: 12px; margin: 0; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"] > br { display: none; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"] .fx-dateinput { grid-column: 2; grid-row: 1; justify-self: start; width: 150px; min-height: 0; padding: 5px 8px; font-size: 13px; background: var(--ink-2); color: var(--paper); border: 1px solid var(--line-2); border-radius: var(--r); color-scheme: dark; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"] .fx-clockgrid { grid-column: 1 \/ -1; grid-row: 2; margin: 0; grid-template-columns: 1fr 1fr; gap: 6px; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"] .fx-clockcard { padding: 5px 9px; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"] .fx-clockcard .lbl { display: block; font-size: 10px; letter-spacing: 0.03em; line-height: 1.3; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"] .fx-clockcard .val { font-size: 14px; line-height: 1.25; margin: 2px 0 0; white-space: nowrap; }\n      .jca-flock.fx-compact .fx-stagectl[data-step=\"7\"] .fx-clockcard .sub { font-size: 11px; line-height: 1.3; }\n      .jca-flock.fx-canvas .fx-tt-hot { width: 22px; height: 22px; font-size: 11px; }\n      .jca-flock.fx-compact .fx-tt-controls { margin-top: 6px; gap: 10px; }\n      .jca-flock.fx-compact .fx-tt-arrow { width: 30px; height: 30px; font-size: 1rem; }\n      .jca-flock.fx-compact .fx-tt-viewcol { min-width: 120px; gap: 0; }\n      .jca-flock.fx-compact .fx-tt-viewname { font-size: 12.5px; }\n      .jca-flock.fx-compact .fx-tt-hint { font-size: 10.5px; }\n      .jca-flock.fx-compact .fx-tt-parts { display: flex; flex-wrap: nowrap; overflow-x: auto; justify-content: flex-start; gap: 5px; margin: 8px 0 0; max-width: 100%; padding-bottom: 3px; scrollbar-width: thin; }\n      .jca-flock.fx-compact .fx-tt-part { border-bottom: 0; flex: none; white-space: nowrap; border-radius: var(--r); background: var(--ink-1); border: 1px solid var(--line); padding: 3px 9px; min-height: 28px; font-size: 12px; display: inline-flex; align-items: center; gap: 5px; }\n      .jca-flock.fx-compact .fx-tt-part.is-active { background: var(--gold-soft); box-shadow: inset 0 -2px 0 var(--gold); }\n      .jca-flock.fx-compact .fx-tt-cardslot { padding: 10px 12px; min-height: 0; margin-bottom: 10px; }\n      .jca-flock.fx-compact .fx-tt-cardslot.is-active { min-height: 0; }\n      .jca-flock.fx-compact .fx-tt-cardslot p,\n      .jca-flock.fx-compact .fx-tt-cardslot__prompt { font-size: 13px; }\n      .jca-flock.fx-compact .fx-tt-card__title { font-size: 14px; }\n      .jca-flock.fx-compact .fx-panel__eyebrow { font-size: 10px; margin-bottom: 4px; }\n      .jca-flock.fx-compact .fx-panel h2 { font-size: 17px; margin-bottom: 8px; }\n      .jca-flock.fx-compact .fx-panel p { font-size: 14px; line-height: 1.55; margin-bottom: 8px; }\n      .jca-flock.fx-compact .fx-callout { padding: 8px 10px; margin: 10px 0; }\n      .jca-flock.fx-compact .fx-callout b { font-size: 10px; margin-bottom: 3px; }\n      .jca-flock.fx-compact .fx-callout p { font-size: 13.5px; line-height: 1.5; margin: 0; }\n      .jca-flock.fx-compact .fx-src-line { font-size: 12px; margin-top: 6px; }\n      .jca-flock.fx-compact .fx-storynav { margin-top: 12px; gap: 8px; flex-wrap: nowrap; }\n      .jca-flock.fx-compact .fx-storynav .fx-btn { min-height: 34px; padding: 6px 14px; font-size: 13px; }\n      .jca-flock.fx-compact .fx-storynav__mid { font-size: 12px; }\n      .jca-flock.fx-compact .fx-embedfooter { margin-top: 10px; padding: 8px 12px; font-size: 12px; }\n      .jca-flock.fx-compact .fx-embedfooter p { margin: 0; }\n      \/* fx-compact:end *\/\n      \/* fx-simple:start (embed only: read-and-click version, no controls, no footnotes, seven steps) *\/\n      .jca-flock.is-embed .fx-stagectl,\n      .jca-flock.is-embed .fx-tt-cardslot,\n      .jca-flock.is-embed .fx-tt-hot,\n      .jca-flock.is-embed #fx-copystep,\n      .jca-flock.is-embed .fx-rail__btn[data-step=\"8\"],\n      .jca-flock.is-embed #fx-s3-attrcard,\n      .jca-flock.is-embed .fx-scene[data-step=\"3\"] .fx-confwrap,\n      .jca-flock.is-embed #fx-s4-tag1,\n      .jca-flock.is-embed #fx-s4-tag2,\n      .jca-flock.is-embed .fx-scene[data-step=\"5\"] .fx-retticks,\n      .jca-flock.is-embed .fx-scene[data-step=\"5\"] > .fx-bignum,\n      .jca-flock.is-embed .fx-scene[data-step=\"6\"] .fx-searchcounts--row { display: none !important; }\n      .jca-flock.is-embed #fx-s3-leadcard { top: 50% !important; bottom: auto !important; transform: translateY(-50%); }\n      .jca-flock.is-embed .fx-scene[data-step=\"5\"] .fx-rettrack { top: 46% !important; }\n      .jca-flock.is-embed .fx-scene[data-step=\"5\"] > .fx-tag { top: 36% !important; }\n      .jca-flock.is-embed .fx-tt-stage { cursor: default; }\n      .jca-flock.is-embed .fx-panel h2 { font-size: 19px; line-height: 1.25; margin-bottom: 8px; }\n      .jca-flock.is-embed .fx-panel p { font-size: 15px; line-height: 1.6; margin: 0; }\n      .jca-flock.is-embed.fx-compact .fx-panels { display: flex; flex-direction: column; justify-content: center; overflow: visible; }\n      .jca-flock.is-embed.fx-compact .fx-panel h2 { font-size: 20px; }\n      .jca-flock.is-embed.fx-compact .fx-panel p { font-size: 15.5px; }\n      .jca-flock.is-embed .fx-storynav { justify-content: space-between; }\n      \/* fx-simple:end *\/\n    <\/style>\n  <\/head>\n  <body>\n    <main id=\"main\">\n      <div class=\"jca-flock\">\n        <section id=\"hero\" aria-labelledby=\"hero-h1\" class=\"fx-hero fx-section\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-hero__intro\">\n              <p class=\"fx-eyebrow fx-eyebrow--embed\">J. Alexander Law Firm<\/p>\n              <p class=\"fx-eyebrow\">For reporters and editors. Texas. Updated September 2026<\/p>\n              <h1 class=\"fx-h1\" id=\"hero-h1\">\n                Flock Cameras: How They Work,<br class=\"fx-h1-br\" \/>\n                From the Pole to the Case File\n              <\/h1>\n              <p class=\"fx-hero__lede\">\n                See every part of the camera that captures a plate, in an interactive 360 degree view.\n              <\/p>\n            <\/div>\n            <div class=\"fx-rail\" id=\"fx-rail\" role=\"group\" aria-label=\"Story steps\">\n              <button type=\"button\" class=\"fx-rail__btn\" data-step=\"1\" aria-current=\"step\">1<\/button\n              ><button type=\"button\" class=\"fx-rail__btn\" data-step=\"2\">2<\/button\n              ><button type=\"button\" class=\"fx-rail__btn\" data-step=\"3\">3<\/button\n              ><button type=\"button\" class=\"fx-rail__btn\" data-step=\"4\">4<\/button\n              ><button type=\"button\" class=\"fx-rail__btn\" data-step=\"5\">5<\/button\n              ><button type=\"button\" class=\"fx-rail__btn\" data-step=\"6\">6<\/button\n              ><button type=\"button\" class=\"fx-rail__btn\" data-step=\"7\">7<\/button\n              ><button type=\"button\" class=\"fx-rail__btn\" data-step=\"8\">8<\/button>\n            <\/div>\n            <div class=\"fx-progress\"><div class=\"fx-progress__bar\" id=\"fx-progressbar\"><\/div><\/div>\n            <div class=\"fx-storygrid\">\n              <div>\n                <div class=\"fx-stage\">\n                  <div class=\"fx-tt fx-scene is-active\" id=\"fx-tt\" data-step=\"1\">\n                    <div class=\"fx-tt-stagewrap\" id=\"fx-tt-stagewrap\">\n                      <div\n                        class=\"fx-tt-stage\"\n                        id=\"fx-tt-stage\"\n                        tabindex=\"0\"\n                        role=\"group\"\n                        aria-label=\"Interactive 360 degree view of the Flock camera. Drag, or use the left and right arrow keys, to rotate. Six numbered points open a detail card.\"\n                      >\n                        <div class=\"fx-tt-imgwrap\" id=\"fx-tt-imgwrap\"><\/div>\n                        <div class=\"fx-tt-hotlayer\" id=\"fx-tt-hotlayer\"><\/div>\n                        <div class=\"fx-tt-reflection\"><\/div>\n                      <\/div>\n                    <\/div>\n                  <\/div>\n                  <div class=\"fx-stage-svg\" id=\"fx-stage-svg\">\n                    <div class=\"fx-scene\" data-step=\"2\">\n                      <div class=\"fx-floorline\" style=\"top: 90%\"><\/div>\n                      <div class=\"fx-objwrap\" id=\"fx-s2-cam\" style=\"right: 2%; bottom: 5%; height: 74%\">\n                        <img decoding=\"async\"\n                          class=\"fx-obj\"\n                          src=\"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/flock-360-04.webp\"\n                          alt=\"Flock camera, left profile, studio render, illustrative\"\n                          draggable=\"false\"\n                          loading=\"lazy\"\n                          onerror=\"fxImgFail(this)\"\n                        \/>\n                      <\/div>\n                      <div id=\"fx-flash\" class=\"fx-flash\" style=\"left: 75%; top: 68%\"><\/div>\n                      <div\n                        class=\"fx-objwrap fx-car\"\n                        id=\"fx-car\"\n                        style=\"left: 32%; top: 92%; width: 44%; transform: translate(-50%, -100%)\"\n                      >\n                        <img decoding=\"async\"\n                          class=\"fx-obj\"\n                          src=\"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/scene-sedan-rear34.webp\"\n                          alt=\"Sedan, rear three quarter view, studio render, illustrative\"\n                          draggable=\"false\"\n                          loading=\"lazy\"\n                          onerror=\"fxImgFail(this)\"\n                        \/>\n                      <\/div>\n                      <svg aria-hidden=\"true\" class=\"fx-connectors\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n                        <polygon points=\"75,68 5,90 50,92\" class=\"fx-cone\" \/>\n                      <\/svg>\n                      <div class=\"fx-glass fx-stripcard\" style=\"left: 0; top: 0; width: 100%\">\n                        <span class=\"fx-glass__eyebrow\">Frame captured (example)<\/span\n                        ><span class=\"fx-strip-item\">2026-09-14 14:32:07<\/span\n                        ><span class=\"fx-strip-item\">TX-EX-0142<\/span><span class=\"fx-strip-item\">32.781, -96.798<\/span\n                        ><span class=\"fx-strip-item\">passenger sedan<\/span\n                        ><span class=\"fx-strip-item fx-strip-muted\">illustrative<\/span>\n                      <\/div>\n                      <div class=\"fx-pending\" hidden>Render pending.<\/div>\n                      <p class=\"fx-scene-caption\">\n                        Every vehicle that crosses the cone is captured, whether or not it is on any list.\n                      <\/p>\n                    <\/div>\n                    <div class=\"fx-scene\" data-step=\"3\">\n                      <div\n                        class=\"fx-objwrap\"\n                        id=\"fx-s3-img\"\n                        style=\"left: 28%; top: 50%; width: 58%; transform: translate(-50%, -50%)\"\n                      >\n                        <img decoding=\"async\"\n                          class=\"fx-obj\"\n                          src=\"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/scene-sedan-rear.webp\"\n                          alt=\"Sedan, straight rear view, studio render, illustrative\"\n                          draggable=\"false\"\n                          loading=\"lazy\"\n                          onerror=\"fxImgFail(this)\"\n                        \/>\n                      <\/div>\n                      <div class=\"fx-night-overlay\"><\/div>\n                      <svg aria-hidden=\"true\" class=\"fx-connectors\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n                        <rect x=\"20\" y=\"42\" width=\"18\" height=\"7.5\" class=\"fx-goldbox fx-dash\" \/>\n                      <\/svg>\n                      <div class=\"fx-platechip fx-normal\" style=\"left: 29%; top: 45.5%\">LBK8427<\/div>\n                      <div class=\"fx-platechip fx-hard\" style=\"left: 29%; top: 45.5%\">L?K?427<\/div>\n                      <div class=\"fx-confwrap fx-normal\" style=\"left: 4%; top: 62%\">\n                        <span class=\"fx-glass__eyebrow\">Read confidence (example)<\/span>\n                        <div class=\"fx-bignum\" style=\"position: static\">0.97<\/div>\n                        <div class=\"fx-track\"><div class=\"fx-track__fill\" style=\"width: 97%\"><\/div><\/div>\n                      <\/div>\n                      <div class=\"fx-confwrap fx-hard\" style=\"left: 4%; top: 62%\">\n                        <span class=\"fx-glass__eyebrow\">Read confidence (example)<\/span>\n                        <div class=\"fx-bignum\" style=\"position: static\">0.58<\/div>\n                        <div class=\"fx-track\">\n                          <div class=\"fx-track__fill fx-track__fill--muted\" style=\"width: 58%\"><\/div>\n                        <\/div>\n                        <p class=\"fx-glass__note\">Partial plate, 5 of 7 characters<\/p>\n                      <\/div>\n                      <div class=\"fx-glass\" id=\"fx-s3-attrcard\" style=\"left: 62%; top: 6%; width: 34%\">\n                        <span class=\"fx-glass__eyebrow\">Vehicle Fingerprint&reg; attributes<\/span>\n                        <p>\n                          Colour, make, body type and visible features such as a roof rack or a missing hubcap, per\n                          Flock&#8217;s published search fields.\n                        <\/p>\n                      <\/div>\n                      <div class=\"fx-glass\" id=\"fx-s3-leadcard\" style=\"left: 62%; top: 62%; width: 34%\">\n                        <p class=\"fx-glass__lead\">A probabilistic read is a lead, not proof.<\/p>\n                      <\/div>\n                      <div class=\"fx-pending\" hidden>Render pending.<\/div>\n                      <p class=\"fx-scene-caption\">\n                        Plates can be stolen, obscured, temporary, altered, or on a car someone else is driving.\n                      <\/p>\n                    <\/div>\n                    <div class=\"fx-scene\" data-step=\"4\">\n                      <div class=\"fx-objwrap\" style=\"left: 12%; top: 38%; width: 22%; transform: translate(-50%, -50%)\">\n                        <img decoding=\"async\"\n                          class=\"fx-obj\"\n                          src=\"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/flock-360-04.webp\"\n                          alt=\"Flock camera, left profile, studio render, illustrative\"\n                          draggable=\"false\"\n                          loading=\"lazy\"\n                          onerror=\"fxImgFail(this)\"\n                        \/>\n                      <\/div>\n                      <div class=\"fx-objwrap\" style=\"left: 76%; top: 36%; width: 32%; transform: translate(-50%, -50%)\">\n                        <img decoding=\"async\"\n                          class=\"fx-obj\"\n                          src=\"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/scene-cloud.webp\"\n                          alt=\"Chrome cloud with a padlock, studio render, illustrative\"\n                          draggable=\"false\"\n                          loading=\"lazy\"\n                          onerror=\"fxImgFail(this)\"\n                        \/>\n                      <\/div>\n                      <svg aria-hidden=\"true\" class=\"fx-connectors\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n                        <path id=\"fx-arc4\" d=\"M14,33 C30,14 46,14 62,34\" class=\"fx-goldline fx-dash\" \/>\n                      <\/svg>\n                      <div class=\"fx-glass fx-packet4\" style=\"width: 44%\">\n                        <span class=\"fx-glass__eyebrow\">Data packet<\/span>\n                        <p>Plate text, attributes, time and location, image.<\/p>\n                      <\/div>\n                      <div class=\"fx-glass\" id=\"fx-s4-tag1\" style=\"left: 78%; top: 6%; width: 20%\">\n                        <p>Encrypted at rest, KMS keys<\/p>\n                      <\/div>\n                      <div class=\"fx-glass\" id=\"fx-s4-tag2\" style=\"left: 78%; top: 58%; width: 20%\">\n                        <p>GovCloud for CJIS data<\/p>\n                      <\/div>\n                      <div class=\"fx-glass\" id=\"fx-s4-whocard\" style=\"left: 6%; top: 76%; width: 88%\">\n                        <span class=\"fx-glass__eyebrow\">Who controls this record<\/span>\n                        <p>\n                          The customer, a city, county, HOA or business, sets access and sharing rules and owns the\n                          data. Flock hosts it.\n                        <\/p>\n                      <\/div>\n                      <div class=\"fx-pending\" hidden>Render pending.<\/div>\n                    <\/div>\n                    <div class=\"fx-scene\" data-step=\"5\">\n                      <div\n                        class=\"fx-objwrap\"\n                        style=\"left: 14%; top: 52%; height: 62%; transform: translate(-50%, -50%)\"\n                      >\n                        <img decoding=\"async\"\n                          class=\"fx-obj\"\n                          src=\"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/scene-hourglass.webp\"\n                          alt=\"Chrome hourglass, studio render, illustrative\"\n                          draggable=\"false\"\n                          loading=\"lazy\"\n                          onerror=\"fxImgFail(this)\"\n                        \/>\n                      <\/div>\n                      <div class=\"fx-tag\" style=\"left: 39%; top: 24%\"><b>Day 7<\/b><span>Flock 2026 default<\/span><\/div>\n                      <div class=\"fx-tag\" style=\"left: 78%; top: 24%\"><b>Day 30<\/b><span>older contracts<\/span><\/div>\n                      <div class=\"fx-bignum\" style=\"left: 32%; top: 34%\">\n                        Selected: <span id=\"fx-retlabel\">7 days<\/span>\n                      <\/div>\n                      <div class=\"fx-rettrack\" style=\"left: 32%; top: 52%; width: 60%\">\n                        <div id=\"fx-retfill\" class=\"fx-rettrack__fill\" style=\"width: 23.3%\"><\/div>\n                        <div class=\"fx-rettrack__evidence\" id=\"fx-retevidence\"><\/div>\n                        <div class=\"fx-rettrack__tick\" style=\"left: 23.3%\"><\/div>\n                        <div class=\"fx-rettrack__tick\" style=\"left: 100%\"><\/div>\n                      <\/div>\n                      <div class=\"fx-retticks\" style=\"left: 32%; top: 57%; width: 60%\">\n                        <span style=\"left: 0%\">0<\/span><span style=\"left: 16.67%\">5<\/span\n                        ><span style=\"left: 33.33%\">10<\/span><span style=\"left: 50%\">15<\/span\n                        ><span style=\"left: 66.67%\">20<\/span><span style=\"left: 83.33%\">25<\/span\n                        ><span style=\"left: 100%\">30<\/span>\n                      <\/div>\n                      <p class=\"fx-scene-caption\" id=\"fx-retmarker\" style=\"display: none\">\n                        Evidence Mode: cold storage held for an active case, beyond day 30.\n                      <\/p>\n                      <div class=\"fx-pending\" hidden>Render pending.<\/div>\n                    <\/div>\n                    <div class=\"fx-scene fx-search-scene\" id=\"fx-search-scene\" data-step=\"6\">\n                      <div class=\"fx-dashpanel\" style=\"left: 2%; top: 0%; width: 56%; height: 99%\">\n                        <svg\n                          aria-hidden=\"true\"\n                          class=\"fx-connectors fx-fan-bg\"\n                          viewBox=\"0 0 100 100\"\n                          preserveAspectRatio=\"none\"\n                          id=\"fx-fansvg\"\n                        >\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"54.00\" y2=\"55.00\" class=\"fx-fanline\" \/>\n                          <circle cx=\"54.00\" cy=\"55.00\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"42.92\" y2=\"59.02\" class=\"fx-fanline\" \/>\n                          <circle cx=\"42.92\" cy=\"59.02\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"51.04\" y2=\"47.64\" class=\"fx-fanline\" \/>\n                          <circle cx=\"51.04\" cy=\"47.64\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"58.34\" y2=\"61.74\" class=\"fx-fanline\" \/>\n                          <circle cx=\"58.34\" cy=\"61.74\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"35.03\" y2=\"53.36\" class=\"fx-fanline\" \/>\n                          <circle cx=\"35.03\" cy=\"53.36\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"63.94\" y2=\"49.50\" class=\"fx-fanline\" \/>\n                          <circle cx=\"63.94\" cy=\"49.50\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"45.40\" y2=\"65.61\" class=\"fx-fanline\" \/>\n                          <circle cx=\"45.40\" cy=\"65.61\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"41.33\" y2=\"44.65\" class=\"fx-fanline\" \/>\n                          <circle cx=\"41.33\" cy=\"44.65\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"68.64\" y2=\"59.22\" class=\"fx-fanline\" \/>\n                          <circle cx=\"68.64\" cy=\"59.22\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"30.77\" y2=\"59.92\" class=\"fx-fanline\" \/>\n                          <circle cx=\"30.77\" cy=\"59.92\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"59.20\" y2=\"42.81\" class=\"fx-fanline\" \/>\n                          <circle cx=\"59.20\" cy=\"42.81\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"56.76\" y2=\"68.35\" class=\"fx-fanline\" \/>\n                          <circle cx=\"56.76\" cy=\"68.35\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"29.75\" y2=\"47.73\" class=\"fx-fanline\" \/>\n                          <circle cx=\"29.75\" cy=\"47.73\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"73.63\" y2=\"51.78\" class=\"fx-fanline\" \/>\n                          <circle cx=\"73.63\" cy=\"51.78\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"35.65\" y2=\"67.66\" class=\"fx-fanline\" \/>\n                          <circle cx=\"35.65\" cy=\"67.66\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"46.70\" y2=\"39.21\" class=\"fx-fanline\" \/>\n                          <circle cx=\"46.70\" cy=\"39.21\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"70.19\" y2=\"65.55\" class=\"fx-fanline\" \/>\n                          <circle cx=\"70.19\" cy=\"65.55\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"22.93\" y2=\"55.69\" class=\"fx-fanline\" \/>\n                          <circle cx=\"22.93\" cy=\"55.69\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"69.68\" y2=\"42.86\" class=\"fx-fanline\" \/>\n                          <circle cx=\"69.68\" cy=\"42.86\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"48.69\" y2=\"72.60\" class=\"fx-fanline\" \/>\n                          <circle cx=\"48.69\" cy=\"72.60\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"31.39\" y2=\"41.17\" class=\"fx-fanline\" \/>\n                          <circle cx=\"31.39\" cy=\"41.17\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"79.40\" y2=\"57.45\" class=\"fx-fanline\" \/>\n                          <circle cx=\"79.40\" cy=\"57.45\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"25.16\" y2=\"65.72\" class=\"fx-fanline\" \/>\n                          <circle cx=\"25.16\" cy=\"65.72\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"56.77\" y2=\"36.34\" class=\"fx-fanline\" \/>\n                          <circle cx=\"56.77\" cy=\"36.34\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"65.63\" y2=\"71.91\" class=\"fx-fanline\" \/>\n                          <circle cx=\"65.63\" cy=\"71.91\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"19.51\" y2=\"48.97\" class=\"fx-fanline\" \/>\n                          <circle cx=\"19.51\" cy=\"48.97\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"79.55\" y2=\"46.53\" class=\"fx-fanline\" \/>\n                          <circle cx=\"79.55\" cy=\"46.53\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"37.22\" y2=\"73.93\" class=\"fx-fanline\" \/>\n                          <circle cx=\"37.22\" cy=\"73.93\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"38.62\" y2=\"35.38\" class=\"fx-fanline\" \/>\n                          <circle cx=\"38.62\" cy=\"35.38\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"80.24\" y2=\"64.85\" class=\"fx-fanline\" \/>\n                          <circle cx=\"80.24\" cy=\"64.85\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"16.47\" y2=\"60.48\" class=\"fx-fanline\" \/>\n                          <circle cx=\"16.47\" cy=\"60.48\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"69.03\" y2=\"36.65\" class=\"fx-fanline\" \/>\n                          <circle cx=\"69.03\" cy=\"36.65\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"56.04\" y2=\"76.80\" class=\"fx-fanline\" \/>\n                          <circle cx=\"56.04\" cy=\"76.80\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"21.40\" y2=\"41.27\" class=\"fx-fanline\" \/>\n                          <circle cx=\"21.40\" cy=\"41.27\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"86.53\" y2=\"53.12\" class=\"fx-fanline\" \/>\n                          <circle cx=\"86.53\" cy=\"53.12\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"24.79\" y2=\"71.90\" class=\"fx-fanline\" \/>\n                          <circle cx=\"24.79\" cy=\"71.90\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"50.18\" y2=\"31.69\" class=\"fx-fanline\" \/>\n                          <circle cx=\"50.18\" cy=\"31.69\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"75.57\" y2=\"72.48\" class=\"fx-fanline\" \/>\n                          <circle cx=\"75.57\" cy=\"72.48\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"11.64\" y2=\"52.80\" class=\"fx-fanline\" \/>\n                          <circle cx=\"11.64\" cy=\"52.80\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"81.04\" y2=\"40.39\" class=\"fx-fanline\" \/>\n                          <circle cx=\"81.04\" cy=\"40.39\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"42.94\" y2=\"79.04\" class=\"fx-fanline\" \/>\n                          <circle cx=\"42.94\" cy=\"79.04\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"28.77\" y2=\"34.08\" class=\"fx-fanline\" \/>\n                          <circle cx=\"28.77\" cy=\"34.08\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"88.86\" y2=\"61.60\" class=\"fx-fanline\" \/>\n                          <circle cx=\"88.86\" cy=\"61.60\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"13.77\" y2=\"66.53\" class=\"fx-fanline\" \/>\n                          <circle cx=\"13.77\" cy=\"66.53\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"64.30\" y2=\"31.08\" class=\"fx-fanline\" \/>\n                          <circle cx=\"64.30\" cy=\"31.08\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"65.67\" y2=\"78.87\" class=\"fx-fanline\" \/>\n                          <circle cx=\"65.67\" cy=\"78.87\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"12.06\" y2=\"43.85\" class=\"fx-fanline\" \/>\n                          <circle cx=\"12.06\" cy=\"43.85\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"90.51\" y2=\"47.26\" class=\"fx-fanline\" \/>\n                          <circle cx=\"90.51\" cy=\"47.26\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"28.36\" y2=\"77.89\" class=\"fx-fanline\" \/>\n                          <circle cx=\"28.36\" cy=\"77.89\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"40.93\" y2=\"28.81\" class=\"fx-fanline\" \/>\n                          <circle cx=\"40.93\" cy=\"28.81\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"85.54\" y2=\"70.65\" class=\"fx-fanline\" \/>\n                          <circle cx=\"85.54\" cy=\"70.65\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"6.35\" y2=\"58.37\" class=\"fx-fanline\" \/>\n                          <circle cx=\"6.35\" cy=\"58.37\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"78.77\" y2=\"34.05\" class=\"fx-fanline\" \/>\n                          <circle cx=\"78.77\" cy=\"34.05\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"51.63\" y2=\"82.74\" class=\"fx-fanline\" \/>\n                          <circle cx=\"51.63\" cy=\"82.74\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"18.31\" y2=\"35.06\" class=\"fx-fanline\" \/>\n                          <circle cx=\"18.31\" cy=\"35.06\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"95.47\" y2=\"56.44\" class=\"fx-fanline\" \/>\n                          <circle cx=\"95.47\" cy=\"56.44\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"14.61\" y2=\"73.13\" class=\"fx-fanline\" \/>\n                          <circle cx=\"14.61\" cy=\"73.13\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"56.39\" y2=\"26.58\" class=\"fx-fanline\" \/>\n                          <circle cx=\"56.39\" cy=\"26.58\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"76.46\" y2=\"78.82\" class=\"fx-fanline\" \/>\n                          <circle cx=\"76.46\" cy=\"78.82\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <line x1=\"50.00\" y1=\"55.00\" x2=\"4.18\" y2=\"48.46\" class=\"fx-fanline\" \/>\n                          <circle cx=\"4.18\" cy=\"48.46\" r=\"0.9\" class=\"fx-fandot\" \/>\n                          <circle cx=\"50\" cy=\"55\" r=\"1.6\" class=\"fx-fannode\" \/>\n                        <\/svg>\n                        <div class=\"fx-chiprow\">\n                          <span class=\"fx-chip-sm\">Plate<\/span><span class=\"fx-chip-sm\">Partial plate<\/span\n                          ><span class=\"fx-chip-sm\">Time window<\/span><span class=\"fx-chip-sm\">Colour<\/span\n                          ><span class=\"fx-chip-sm\">Make<\/span><span class=\"fx-chip-sm\">Body type<\/span\n                          ><span class=\"fx-chip-sm\">Features<\/span>\n                        <\/div>\n                        <div class=\"fx-resultrows\">\n                          <div class=\"fx-resultrow\"><b>LBK8427 (example)<\/b><span>2026-09-01, Dallas metro<\/span><\/div>\n                          <div class=\"fx-resultrow\">\n                            <b>Partial: L?K84?? (example)<\/b><span>2026-08-14, Austin metro<\/span>\n                          <\/div>\n                          <div class=\"fx-resultrow\">\n                            <b>Silver sedan, no plate (example)<\/b><span>2026-07-30, Houston metro<\/span>\n                          <\/div>\n                        <\/div>\n                        <div class=\"fx-searchcounts fx-searchcounts--row\">\n                          <div class=\"fx-bignum\"><span id=\"fx-cam-count\">0<\/span><small>Cameras<\/small><\/div>\n                          <div class=\"fx-bignum\"><span id=\"fx-net-count\">0<\/span><small>Networks<\/small><\/div>\n                        <\/div>\n                      <\/div>\n                      <div\n                        class=\"fx-objwrap\"\n                        id=\"fx-s6-phone\"\n                        style=\"left: 79%; top: 74%; width: 30%; transform: translate(-50%, -50%)\"\n                      >\n                        <img decoding=\"async\"\n                          class=\"fx-obj\"\n                          src=\"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/scene-phone.webp\"\n                          alt=\"Chrome phone, dark screen, studio render, illustrative\"\n                          draggable=\"false\"\n                          loading=\"lazy\"\n                          onerror=\"fxImgFail(this)\"\n                        \/>\n                      <\/div>\n                      <div class=\"fx-glass\" id=\"fx-s6-hotcard\" style=\"left: 60%; top: 4%; width: 38%\">\n                        <span class=\"fx-glass__eyebrow\">Hot list match (example)<\/span>\n                        <p>A plate on an agency hot list matches a camera read.<\/p>\n                      <\/div>\n                      <svg aria-hidden=\"true\" class=\"fx-connectors\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n                        <line x1=\"79\" y1=\"39\" x2=\"79\" y2=\"48\" class=\"fx-goldline\" \/>\n                      <\/svg>\n                      <p\n                        class=\"fx-scene-caption\"\n                        id=\"fx-s6-alertcap\"\n                        style=\"\n                          left: 60%;\n                          top: 31%;\n                          right: auto;\n                          width: 38%;\n                          bottom: auto;\n                          font-size: 14px;\n                          text-align: center;\n                        \"\n                      >\n                        Alert to officer\n                      <\/p>\n                      <div class=\"fx-pending\" hidden>Render pending.<\/div>\n                    <\/div>\n                    <div class=\"fx-scene\" data-step=\"7\">\n                      <div class=\"fx-objwrap fx-masked\" style=\"left: 0; top: 0; width: 56%; height: 100%\">\n                        <img decoding=\"async\"\n                          class=\"fx-obj\"\n                          src=\"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/scene-collision.webp\"\n                          alt=\"Two sedans, rear end collision at an intersection, studio render, illustrative\"\n                          draggable=\"false\"\n                          loading=\"lazy\"\n                          onerror=\"fxImgFail(this)\"\n                        \/>\n                      <\/div>\n                      <svg aria-hidden=\"true\" class=\"fx-connectors\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\">\n                        <line x1=\"58\" y1=\"50\" x2=\"76\" y2=\"50\" class=\"fx-svgline-muted\" \/>\n                      <\/svg>\n                      <div class=\"fx-tlrail\">\n                        <div class=\"fx-tlpoint\" style=\"left: 10%\"><b>T+0<\/b><span>Crash<\/span><\/div>\n                        <div class=\"fx-tlpoint\" style=\"left: 65%\">\n                          <b>T+hours<\/b><span>Police search, case code<\/span>\n                        <\/div>\n                      <\/div>\n                      <div class=\"fx-glass fx-glass--gold\" style=\"left: 58%; top: 18%; width: 38%\">\n                        <span class=\"fx-glass__eyebrow\" style=\"color: var(--gold)\">Preserved<\/span>\n                        <p>Evidence Mode or a written hold request keeps the record.<\/p>\n                      <\/div>\n                      <div class=\"fx-glass fx-glass--muted\" style=\"left: 58%; top: 66%; width: 38%\">\n                        <span class=\"fx-glass__eyebrow\" style=\"color: var(--muted)\">Deleted, day 7 or 30<\/span>\n                        <p>Nobody asks. The record is hard deleted on the default schedule.<\/p>\n                      <\/div>\n                      <div class=\"fx-pending\" hidden>Render pending.<\/div>\n                    <\/div>\n                    <div class=\"fx-scene\" data-step=\"8\"><div class=\"fx-pending\" hidden>Render pending.<\/div><\/div>\n                  <\/div>\n                <\/div>\n                <div class=\"fx-stagectl is-active\" data-step=\"1\">\n                  <div class=\"fx-tt-controls\">\n                    <button type=\"button\" class=\"fx-tt-arrow\" id=\"fx-tt-prev\" aria-label=\"Previous view\">\n                      &#8249;\n                    <\/button>\n                    <div class=\"fx-tt-viewcol\">\n                      <span class=\"fx-tt-viewname\" id=\"fx-tt-viewname\"\n                        >Front, <span class=\"fx-tt-angle\">0<\/span>&deg;<\/span\n                      ><span class=\"fx-tt-hint\" id=\"fx-tt-hint\">Drag to rotate<\/span>\n                    <\/div>\n                    <button type=\"button\" class=\"fx-tt-arrow\" id=\"fx-tt-next\" aria-label=\"Next view\">&#8250;<\/button>\n                  <\/div>\n                  <ol class=\"fx-tt-parts\" id=\"fx-tt-parts\" role=\"list\">\n                    <li>\n                      <button type=\"button\" class=\"fx-tt-part\" data-part=\"lens\" aria-expanded=\"false\">\n                        <b>1<\/b> <span>Lens<\/span>\n                      <\/button>\n                    <\/li>\n                    <li>\n                      <button type=\"button\" class=\"fx-tt-part\" data-part=\"ir\" aria-expanded=\"false\">\n                        <b>2<\/b> <span>Infrared illuminator ring<\/span>\n                      <\/button>\n                    <\/li>\n                    <li>\n                      <button type=\"button\" class=\"fx-tt-part\" data-part=\"housing\" aria-expanded=\"false\">\n                        <b>3<\/b> <span>Housing<\/span>\n                      <\/button>\n                    <\/li>\n                    <li>\n                      <button type=\"button\" class=\"fx-tt-part\" data-part=\"antenna\" aria-expanded=\"false\">\n                        <b>4<\/b> <span>Antenna<\/span>\n                      <\/button>\n                    <\/li>\n                    <li>\n                      <button type=\"button\" class=\"fx-tt-part\" data-part=\"solar\" aria-expanded=\"false\">\n                        <b>5<\/b> <span>Solar panel<\/span>\n                      <\/button>\n                    <\/li>\n                    <li>\n                      <button type=\"button\" class=\"fx-tt-part\" data-part=\"mount\" aria-expanded=\"false\">\n                        <b>6<\/b> <span>Mount bracket and pole<\/span>\n                      <\/button>\n                    <\/li>\n                  <\/ol>\n                <\/div>\n                <div class=\"fx-stagectl\" data-step=\"2\">\n                  <button id=\"fx-replay2\" type=\"button\" class=\"fx-btn fx-btn--line\">Replay the capture<\/button>\n                <\/div>\n                <div class=\"fx-stagectl\" data-step=\"3\">\n                  <button id=\"fx-hardread\" type=\"button\" class=\"fx-btn fx-btn--line\">Show a hard read<\/button>\n                <\/div>\n                <div class=\"fx-stagectl\" data-step=\"5\">\n                  <fieldset class=\"fx-radio-row\">\n                    <legend class=\"fx-sr-only\">Retention period<\/legend>\n                    <label class=\"fx-radio\"\n                      ><input type=\"radio\" name=\"fx-ret\" value=\"7\" checked \/> Flock 2026 default (7 days)<\/label\n                    ><label class=\"fx-radio\"\n                      ><input type=\"radio\" name=\"fx-ret\" value=\"30\" \/> Legacy contract (30 days)<\/label\n                    ><span class=\"fx-radio\"\n                      ><input type=\"radio\" name=\"fx-ret\" value=\"custom\" id=\"fx-ret-custom\" \/><label\n                        for=\"fx-ret-custom\"\n                        id=\"fx-ret-custom-lbl\"\n                        >Local policy, enter days<\/label\n                      ><input\n                        type=\"number\"\n                        id=\"fx-retcustom\"\n                        min=\"1\"\n                        max=\"365\"\n                        value=\"14\"\n                        aria-labelledby=\"fx-ret-custom-lbl\"\n                    \/><\/span>\n                  <\/fieldset>\n                  <p class=\"fx-note\">\n                    Check an agency&#8217;s real number on its\n                    <a href=\"https:\/\/transparency.flocksafety.com\/\" target=\"_blank\" rel=\"noopener\"\n                      >Flock transparency portal<\/a\n                    >.\n                  <\/p>\n                  <ul class=\"fx-portals\" role=\"list\">\n                    <li>\n                      <a href=\"https:\/\/transparency.flocksafety.com\/dallas-tx-pd\" target=\"_blank\" rel=\"noopener\"\n                        >Dallas PD<\/a\n                      >\n                    <\/li>\n                    <li>\n                      <a href=\"https:\/\/transparency.flocksafety.com\/austin-tx-pd\" target=\"_blank\" rel=\"noopener\"\n                        >Austin PD<\/a\n                      >\n                    <\/li>\n                    <li>\n                      <a href=\"https:\/\/transparency.flocksafety.com\/arlington-tx-pd\" target=\"_blank\" rel=\"noopener\"\n                        >Arlington PD<\/a\n                      >\n                    <\/li>\n                    <li>\n                      <a href=\"https:\/\/transparency.flocksafety.com\/frisco-tx-pd\" target=\"_blank\" rel=\"noopener\"\n                        >Frisco PD<\/a\n                      >\n                    <\/li>\n                    <li>\n                      <a href=\"https:\/\/transparency.flocksafety.com\/denton-tx-pd\" target=\"_blank\" rel=\"noopener\"\n                        >Denton PD<\/a\n                      >\n                    <\/li>\n                    <li>\n                      <a href=\"https:\/\/transparency.flocksafety.com\/pflugerville-tx-pd\" target=\"_blank\" rel=\"noopener\"\n                        >Pflugerville PD<\/a\n                      >\n                    <\/li>\n                  <\/ul>\n                <\/div>\n                <div class=\"fx-stagectl\" data-step=\"6\">\n                  <div class=\"fx-toggle-row\">\n                    <button id=\"fx-search-week\" type=\"button\" class=\"fx-btn fx-btn--line\">\n                      Click for example: one week<\/button\n                    ><button id=\"fx-search-month\" type=\"button\" class=\"fx-btn fx-btn--line\">\n                      Click for example: one month\n                    <\/button>\n                  <\/div>\n                  <p class=\"fx-note\" id=\"fx-search-caption\">Choose an example search below.<\/p>\n                <\/div>\n                <div class=\"fx-stagectl\" data-step=\"7\">\n                  <label class=\"fx-note\" for=\"fx-crashdate\">Crash date<\/label><br \/><input\n                    type=\"date\"\n                    id=\"fx-crashdate\"\n                    class=\"fx-dateinput\"\n                  \/>\n                  <div class=\"fx-clockgrid\">\n                    <div class=\"fx-clockcard\">\n                      <span class=\"lbl\">Default deletion, 7-day rule<\/span>\n                      <div class=\"val\" id=\"fx-crash7\">&#8211;<\/div>\n                      <div class=\"sub\" id=\"fx-crashleft7\">&#8211;<\/div>\n                    <\/div>\n                    <div class=\"fx-clockcard\">\n                      <span class=\"lbl\">Default deletion, 30-day rule<\/span>\n                      <div class=\"val\" id=\"fx-crash30\">&#8211;<\/div>\n                      <div class=\"sub\" id=\"fx-crashleft30\">&#8211;<\/div>\n                    <\/div>\n                  <\/div>\n                <\/div>\n                <div class=\"fx-stagectl\" data-step=\"8\"><\/div>\n                <p class=\"fx-seeall\" id=\"fx-seeall\">\n                  <a\n                    href=\"https:\/\/severeinjurylawyers.com\/tools\/how-flock-cameras-work\/#story-1\"\n                    id=\"fx-seeall-link\"\n                    target=\"_blank\"\n                    rel=\"noopener\"\n                    >See all eight steps<\/a\n                  >\n                <\/p>\n              <\/div>\n              <div class=\"fx-panels\">\n                <div class=\"fx-panel is-active\" data-step=\"1\">\n                  <div class=\"fx-tt-cardslot\" id=\"fx-tt-cardslot\">\n                    <p class=\"fx-tt-cardslot__prompt\">Hover a numbered point, or pick a part below the model.<\/p>\n                  <\/div>\n                  <p class=\"fx-panel__eyebrow\">Step 1 of 8<\/p>\n                  <h2>The device on the pole<\/h2>\n                  <p>\n                    A Flock camera sits on a pole at a fixed angle over a lane or a driveway. It runs on solar power and\n                    a battery, with a cellular modem that sends each capture out over LTE. An independent hardware\n                    teardown of a Flock camera found a lithium ion battery pack and an LTE modem inside the housing\n                    <a class=\"fx-fn\" href=\"#src-4\">[4]<\/a>.\n                  <\/p>\n                  <p>\n                    The unit is a fixed still camera, not a pan tilt zoom camera, and Flock frames its product around\n                    images and vehicle data, not a continuous video feed. Flock states its cameras carry no facial\n                    recognition and are built to read vehicle information, not a person&#8217;s face\n                    <a class=\"fx-fn\" href=\"#src-7\">[7]<\/a>.\n                  <\/p>\n                  <div class=\"fx-callout\">\n                    <b>Get it right<\/b>\n                    <p>\n                      Call it a still image camera, not a video camera, and note that Flock says the product does not\n                      perform facial recognition <a class=\"fx-fn\" href=\"#src-7\">[7]<\/a>.\n                    <\/p>\n                  <\/div>\n                  <p class=\"fx-src-line\">\n                    Sources: <a class=\"fx-fn\" href=\"#src-4\">[4]<\/a> <a class=\"fx-fn\" href=\"#src-7\">[7]<\/a>\n                  <\/p>\n                <\/div>\n                <div class=\"fx-panel\" data-step=\"2\">\n                  <p class=\"fx-panel__eyebrow\">Step 2 of 8<\/p>\n                  <h2>A vehicle passes: the capture<\/h2>\n                  <p>\n                    Every vehicle that crosses the camera&#8217;s field of view is captured. A vehicle does not need to be on\n                    a hot list first. The camera records a still image at that moment, along with a timestamp and the\n                    camera&#8217;s location.\n                  <\/p>\n                  <p>\n                    Flock&#8217;s own materials describe the product around images and metadata, not a continuous video\n                    stream. The example card shows the kind of fields attached to one capture; the values shown are\n                    illustrative, not a real vehicle.\n                  <\/p>\n                  <div class=\"fx-callout\">\n                    <b>Get it right<\/b>\n                    <p>\n                      Every passing plate is captured. A capture is not the same claim as a search or a match; those\n                      come later in this walkthrough.\n                    <\/p>\n                  <\/div>\n                <\/div>\n                <div class=\"fx-panel\" data-step=\"3\">\n                  <p class=\"fx-panel__eyebrow\">Step 3 of 8<\/p>\n                  <h2>Detection: reading the plate and the vehicle<\/h2>\n                  <p>\n                    A gold box draws around the plate and the system resolves the characters against Flock&#8217;s database.\n                    The platform classifies the vehicle itself: colour, make, model or body type, and visible features,\n                    what Flock calls Vehicle Fingerprint technology <a class=\"fx-fn\" href=\"#src-6\">[6]<\/a>.\n                  <\/p>\n                  <p>\n                    A probabilistic read is a lead, not proof. Plates can be misread, stolen, obscured, temporary,\n                    altered, or mounted on a car someone else is driving at the time. The toggle below shows what a\n                    harder read looks like next to a clean one.\n                  <\/p>\n                  <div class=\"fx-callout\">\n                    <b>Get it right<\/b>\n                    <p>\n                      Do not treat a license plate reading as certain if the system is not confident. If the reading is\n                      incomplete or has a low confidence score, a person should check it before using it to identify a\n                      vehicle.\n                    <\/p>\n                  <\/div>\n                  <p class=\"fx-src-line\">Sources: <a class=\"fx-fn\" href=\"#src-6\">[6]<\/a><\/p>\n                <\/div>\n                <div class=\"fx-panel\" data-step=\"4\">\n                  <p class=\"fx-panel__eyebrow\">Step 4 of 8<\/p>\n                  <h2>The record leaves the pole<\/h2>\n                  <p>\n                    The capture and its metadata travel over the cellular link to cloud storage. Flock says footage and\n                    metadata are encrypted through the entire lifecycle, from the device to the cloud, using Amazon Web\n                    Services storage and KMS-based encryption, and that CJIS-relevant data stays inside AWS GovCloud,\n                    limited to law-enforcement customers <a class=\"fx-fn\" href=\"#src-5\">[5]<\/a>.\n                  <\/p>\n                  <p>\n                    The customer, not Flock, is the party that sets access and sharing rules. A city, a county, an HOA,\n                    a school or a business can each be the customer on a given camera, and each can set its own rules\n                    for who sees the data and who it is shared with <a class=\"fx-fn\" href=\"#src-5\">[5]<\/a>.\n                  <\/p>\n                  <div class=\"fx-callout\">\n                    <b>Get it right<\/b>\n                    <p>\n                      Ask who the customer is on this specific camera before writing &#8220;Flock&#8217;s data.&#8221; A private owner\n                      sets different rules than a police department.\n                    <\/p>\n                  <\/div>\n                  <p class=\"fx-src-line\">Sources: <a class=\"fx-fn\" href=\"#src-5\">[5]<\/a><\/p>\n                <\/div>\n                <div class=\"fx-panel\" data-step=\"5\">\n                  <p class=\"fx-panel__eyebrow\">Step 5 of 8<\/p>\n                  <h2>How long the photo lasts<\/h2>\n                  <p>\n                    Flock&#8217;s default is now 7 days from the date of capture. Before an August 2026 policy update, the\n                    default was 30 days, and data is described as hard deleted from the cloud once the window closes\n                    <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a><a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>.\n                  <\/p>\n                  <p>\n                    Existing customers can keep a longer period they already had approved, and Evidence Mode lets a\n                    detective preserve specific records in cold storage for an active investigation, offered free to\n                    agencies on the new default; extended retention beyond that needs approval from an elected official\n                    <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a><a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>.\n                  <\/p>\n                  <div class=\"fx-callout\">\n                    <b>Get it right<\/b>\n                    <p>\n                      To find the actual data-retention period, check the agency&#8217;s contract or its public transparency\n                      website. Do not rely only on a press release.\n                    <\/p>\n                    <p>\n                      For example, Dallas keeps its data for 365 days under its own agreement\n                      <a class=\"fx-fn\" href=\"#src-10\">[10]<\/a>.\n                    <\/p>\n                  <\/div>\n                  <p class=\"fx-src-line\">\n                    Sources: <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a> <a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>\n                    <a class=\"fx-fn\" href=\"#src-10\">[10]<\/a>\n                  <\/p>\n                <\/div>\n                <div class=\"fx-panel\" data-step=\"6\">\n                  <p class=\"fx-panel__eyebrow\">Step 6 of 8<\/p>\n                  <h2>Search and hot lists<\/h2>\n                  <p>\n                    A Flock search can be narrowed by a full or partial plate number, a date and time range, the\n                    vehicle&#8217;s color, its make, model or body type, and other visible details such as roof racks, bumper\n                    stickers or damage. Flock calls those extra vehicle details &#8220;Vehicle Fingerprint&#8221; attributes\n                    <a class=\"fx-fn\" href=\"#src-6\">[6]<\/a>.\n                  <\/p>\n                  <p>\n                    A hot-list alert is only a possible lead. It does not automatically prove that a vehicle is\n                    connected to a crime or give an officer legal grounds to take action. Flock says officers should\n                    confirm that the vehicle truly matches before acting on an alert.\n                  <\/p>\n                  <div class=\"fx-callout\">\n                    <b>Get it right<\/b>\n                    <p>\n                      If an agency says it &#8220;searched Flock,&#8221; ask who ran the search, for which agency, with what case\n                      number or reason, and how many camera networks it reached. One search can reach far beyond one\n                      city: in a Texas case EFF reviewed, single searches reached thousands of networks\n                      <a class=\"fx-fn\" href=\"#src-20\">[20]<\/a>.\n                    <\/p>\n                  <\/div>\n                  <p class=\"fx-src-line\">\n                    Sources: <a class=\"fx-fn\" href=\"#src-6\">[6]<\/a> <a class=\"fx-fn\" href=\"#src-20\">[20]<\/a>\n                  <\/p>\n                <\/div>\n                <div class=\"fx-panel\" data-step=\"7\">\n                  <p class=\"fx-panel__eyebrow\">Step 7 of 8<\/p>\n                  <h2>After a crash<\/h2>\n                  <p>\n                    Cameras near the crash may have already captured a plate record, just as they capture every vehicle\n                    that passes. To keep that record, send a written preservation request to the agency or private owner\n                    that controls the cameras, not Flock. Flock stores the data for its customer, but the customer\n                    controls it <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a><a class=\"fx-fn\" href=\"#src-2\">[2]<\/a\n                    ><a class=\"fx-fn\" href=\"#src-5\">[5]<\/a>.\n                  <\/p>\n                  <p>\n                    An injured person and the police are working against the same deadline. If no one asks to preserve\n                    the record before it is deleted, usually after 7 days under newer contracts or 30 days under older\n                    ones, it may be gone for good <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a\n                    ><a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>.\n                  <\/p>\n                  <div class=\"fx-callout\">\n                    <b>Get it right<\/b>\n                    <p>\n                      Send a written preservation request during the same week as the crash. Address it to the camera\n                      owner, not Flock. Use the date tool below to check the usual deletion dates.\n                    <\/p>\n                  <\/div>\n                  <p class=\"fx-src-line\">\n                    Sources: <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a> <a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>\n                    <a class=\"fx-fn\" href=\"#src-5\">[5]<\/a>\n                  <\/p>\n                <\/div>\n                <div class=\"fx-panel\" data-step=\"8\">\n                  <p class=\"fx-panel__eyebrow\">Step 8 of 8<\/p>\n                  <h2>Oversight and Texas<\/h2>\n                  <p>\n                    Texas has no statute written for automatic license plate readers. Two 2025 bills, HB 961 and HB\n                    2083, would have created one; both were referred to committee and got no further vote\n                    <a class=\"fx-fn\" href=\"#src-15\">[15]<\/a><a class=\"fx-fn\" href=\"#src-16\">[16]<\/a\n                    ><a class=\"fx-fn\" href=\"#src-17\">[17]<\/a><a class=\"fx-fn\" href=\"#src-18\">[18]<\/a>.\n                  <\/p>\n                  <p>\n                    Governor Greg Abbott barred state agencies from spending further money on Flock cameras starting\n                    August 27, 2026, citing misuse concerns, though existing equipment does not have to come down. Texas\n                    DPS still runs more than 940 of its own cameras, queried about 615,000 times in June 2026, with 48\n                    percent of those queries coming from outside Texas <a class=\"fx-fn\" href=\"#src-9\">[9]<\/a>.\n                  <\/p>\n                  <div class=\"fx-callout\">\n                    <b>Get it right<\/b>\n                    <p>\n                      Dallas deactivated 321 state-funded cameras, reported effective September 15, 2026, while its\n                      city-funded cameras kept running <a class=\"fx-fn\" href=\"#src-11\">[11]<\/a>. Ask a department which\n                      pool of cameras it means before printing a single count <a class=\"fx-fn\" href=\"#src-9\">[9]<\/a>.\n                    <\/p>\n                  <\/div>\n                  <p class=\"fx-src-line\">\n                    Sources: <a class=\"fx-fn\" href=\"#src-9\">[9]<\/a> <a class=\"fx-fn\" href=\"#src-11\">[11]<\/a>\n                    <a class=\"fx-fn\" href=\"#src-15\">[15]<\/a> <a class=\"fx-fn\" href=\"#src-16\">[16]<\/a>\n                    <a class=\"fx-fn\" href=\"#src-17\">[17]<\/a> <a class=\"fx-fn\" href=\"#src-18\">[18]<\/a>\n                  <\/p>\n                <\/div>\n              <\/div>\n            <\/div>\n            <div class=\"fx-storynav\">\n              <button id=\"fx-prev\" type=\"button\" class=\"fx-btn fx-btn--line\">Previous step<\/button>\n              <span class=\"fx-storynav__mid\" id=\"fx-stepmid\">Step 1 of 8<\/span>\n              <button id=\"fx-copystep\" type=\"button\" class=\"fx-btn fx-btn--line fx-btn--sm\">\n                Copy link to this step\n              <\/button>\n              <button id=\"fx-next\" type=\"button\" class=\"fx-btn fx-btn--gold\">Next step<\/button>\n            <\/div>\n            <div aria-live=\"polite\" class=\"fx-sr-only\" id=\"fx-tt-live\"><\/div>\n            <script type=\"application\/json\" id=\"fx-embed-copy\">\n              [\n                {\n                  \"title\": \"The camera on the pole\",\n                  \"text\": \"A Flock camera is a fixed still camera mounted on a pole over one lane or driveway, powered by a solar panel and a battery. It photographs vehicles, not faces, and sends each capture out over a cellular connection.\"\n                },\n                {\n                  \"title\": \"Every passing car is captured\",\n                  \"text\": \"Each vehicle that crosses the camera's view is photographed with a timestamp and a location, whether or not it is on any list. The camera stores still images and data, not a video stream.\"\n                },\n                {\n                  \"title\": \"The plate is read\",\n                  \"text\": \"Software draws a box around the plate, reads the characters and notes the vehicle's color, make and body type. A read is a lead, not proof: plates can be misread, stolen, covered or on a car someone else is driving.\"\n                },\n                {\n                  \"title\": \"The record goes to the cloud\",\n                  \"text\": \"The photo and its data travel over the cellular link to encrypted cloud storage. The city, county, HOA or business that owns the camera controls who can see the record; Flock hosts it.\"\n                },\n                {\n                  \"title\": \"It is deleted after a set time\",\n                  \"text\": \"Flock's default is now 7 days, and older contracts kept records for 30 days. Some agencies keep data much longer under their own contracts, so the real number is in the local agreement.\"\n                },\n                {\n                  \"title\": \"Police search it\",\n                  \"text\": \"An officer can search by plate, partial plate, time window, color, make or body type, and a hot list can send an alert when a listed plate passes. An alert is a possible match that an officer still has to confirm.\"\n                },\n                {\n                  \"title\": \"After a crash\",\n                  \"text\": \"Cameras near a crash may already hold a plate record of the other driver, and it deletes on the same schedule as everything else. A written request to the camera's owner, sent within days, is what keeps it.\"\n                }\n              ]\n            <\/script>\n            <script type=\"application\/json\" id=\"fx-turntable-manifest\">\n              {\n                \"frames\": [\n                  {\n                    \"src\": \"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/flock-360-01.webp\",\n                    \"angle\": 0,\n                    \"name\": \"Front\",\n                    \"alt\": \"Flock camera, front view, lens facing the viewer\"\n                  },\n                  {\n                    \"src\": \"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/flock-360-02.webp\",\n                    \"angle\": 90,\n                    \"name\": \"Right profile\",\n                    \"alt\": \"Flock camera, right profile view\"\n                  },\n                  {\n                    \"src\": \"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/flock-360-03.webp\",\n                    \"angle\": 180,\n                    \"name\": \"Back\",\n                    \"alt\": \"Flock camera, back view, mount bracket and pole clamp facing the viewer\"\n                  },\n                  {\n                    \"src\": \"https:\/\/severeinjurylawyers.com\/wp-content\/uploads\/2026\/09\/flock-360-04.webp\",\n                    \"angle\": 270,\n                    \"name\": \"Left profile\",\n                    \"alt\": \"Flock camera, left profile view\"\n                  }\n                ],\n                \"hotspots\": [\n                  {\n                    \"id\": \"lens\",\n                    \"number\": 1,\n                    \"title\": \"Lens\",\n                    \"src\": \"src-7\",\n                    \"lines\": [\"A fixed still camera, not pan-tilt.\", \"Not a continuous video recorder.\"],\n                    \"points\": [\n                      {\n                        \"frame\": 0,\n                        \"x\": 0.501,\n                        \"y\": 0.433\n                      }\n                    ]\n                  },\n                  {\n                    \"id\": \"ir\",\n                    \"number\": 2,\n                    \"title\": \"Infrared illuminator ring\",\n                    \"src\": \"src-4\",\n                    \"lines\": [\"A ring around the lens.\", \"Helps resolve a plate after dark.\"],\n                    \"points\": [\n                      {\n                        \"frame\": 0,\n                        \"x\": 0.415,\n                        \"y\": 0.433\n                      }\n                    ]\n                  },\n                  {\n                    \"id\": \"housing\",\n                    \"number\": 3,\n                    \"title\": \"Housing\",\n                    \"src\": \"src-4\",\n                    \"lines\": [\"Holds the computer and the LTE modem.\", \"No local recorder; each capture uploads.\"],\n                    \"points\": [\n                      {\n                        \"frame\": 0,\n                        \"x\": 0.547,\n                        \"y\": 0.527\n                      },\n                      {\n                        \"frame\": 1,\n                        \"x\": 0.62,\n                        \"y\": 0.439\n                      },\n                      {\n                        \"frame\": 3,\n                        \"x\": 0.381,\n                        \"y\": 0.43\n                      }\n                    ]\n                  },\n                  {\n                    \"id\": \"antenna\",\n                    \"number\": 4,\n                    \"title\": \"Antenna\",\n                    \"src\": \"src-4\",\n                    \"lines\": [\"Carries the LTE cellular link.\", \"Sends each capture out over the network.\"],\n                    \"points\": [\n                      {\n                        \"frame\": 0,\n                        \"x\": 0.51,\n                        \"y\": 0.288\n                      },\n                      {\n                        \"frame\": 1,\n                        \"x\": 0.664,\n                        \"y\": 0.283\n                      },\n                      {\n                        \"frame\": 3,\n                        \"x\": 0.332,\n                        \"y\": 0.293\n                      }\n                    ]\n                  },\n                  {\n                    \"id\": \"solar\",\n                    \"number\": 5,\n                    \"title\": \"Solar panel\",\n                    \"src\": \"src-4\",\n                    \"lines\": [\"Solar power and a battery.\", \"No wired connection to the pole site.\"],\n                    \"points\": [\n                      {\n                        \"frame\": 0,\n                        \"x\": 0.503,\n                        \"y\": 0.112\n                      },\n                      {\n                        \"frame\": 1,\n                        \"x\": 0.508,\n                        \"y\": 0.107\n                      },\n                      {\n                        \"frame\": 3,\n                        \"x\": 0.498,\n                        \"y\": 0.107\n                      }\n                    ]\n                  },\n                  {\n                    \"id\": \"mount\",\n                    \"number\": 6,\n                    \"title\": \"Mount bracket and pole\",\n                    \"src\": \"src-4\",\n                    \"lines\": [\"Fixes the housing to the pole.\", \"A fixed angle over one lane or driveway.\"],\n                    \"points\": [\n                      {\n                        \"frame\": 1,\n                        \"x\": 0.488,\n                        \"y\": 0.43\n                      },\n                      {\n                        \"frame\": 2,\n                        \"x\": 0.503,\n                        \"y\": 0.43\n                      },\n                      {\n                        \"frame\": 3,\n                        \"x\": 0.498,\n                        \"y\": 0.43\n                      }\n                    ]\n                  }\n                ]\n              }\n            <\/script>\n            <ul class=\"fx-chips\" role=\"list\">\n              <li class=\"fx-chip\">\n                <b>7 days<\/b><span>Flock&#8217;s 2026 default retention<\/span><a class=\"fx-fn\" href=\"#src-1\">[1]<\/a>\n              <\/li>\n              <li class=\"fx-chip\">\n                <b>13,000+<\/b><span>Flock devices reported statewide in Texas<\/span\n                ><a class=\"fx-fn\" href=\"#src-9\">[9]<\/a>\n              <\/li>\n              <li class=\"fx-chip\">\n                <b>about 1 million<\/b><span>cases Flock says its technology supported nationwide in 2025<\/span\n                ><a class=\"fx-fn\" href=\"#src-8\">[8]<\/a>\n              <\/li>\n            <\/ul>\n            <div class=\"fx-cta-row\">\n              <a href=\"#checklist\" class=\"fx-btn fx-btn--line\">Jump to the accuracy checklist<\/a>\n            <\/div>\n            <div class=\"fx-embedfooter\" id=\"fx-embedfooter\">\n              <p>\n                How a Flock Camera Works. Sources on the full page.\n                <a href=\"https:\/\/severeinjurylawyers.com\/tools\/how-flock-cameras-work\/\" target=\"_blank\" rel=\"noopener\"\n                  >Open the full explainer<\/a\n                >. Data by\n                <a href=\"https:\/\/severeinjurylawyers.com\" target=\"_blank\" rel=\"noopener\">J. Alexander Law Firm<\/a>.\n              <\/p>\n            <\/div>\n          <\/div>\n        <\/section>\n\n\n        <section id=\"clock\" aria-labelledby=\"clock-h2\" class=\"fx-section fx-section--2\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-head\">\n              <p class=\"fx-eyebrow\">Calculator<\/p>\n              <h2 class=\"fx-h2\" id=\"clock-h2\">After a crash: retention dates<\/h2>\n              <p>Enter the date of the crash to calculate the default deletion date under each published retention policy. The applicable retention period for a specific camera depends on the agency or private owner&#8217;s contract, written policy, and any evidence-preservation request. Check the owner&#8217;s transparency portal or public records for the local rule.<\/p>\n            <\/div>\n            <div class=\"fx-daterow\">\n              <label class=\"fx-note fx-daterow__label\" for=\"fx-clock-date\">Crash date, or any date to check<\/label\n              ><input type=\"date\" id=\"fx-clock-date\" class=\"fx-dateinput\" \/>\n            <\/div>\n            <div class=\"fx-clockgrid\">\n              <div class=\"fx-clockcard\">\n                <span class=\"lbl\">Default deletion, Flock&#8217;s 2026 policy<\/span>\n                <div class=\"val\" id=\"fx-clock7\">&#8211;<\/div>\n                <div class=\"sub\" id=\"fx-clockleft7\">&#8211;<\/div>\n              <\/div>\n              <div class=\"fx-clockcard\">\n                <span class=\"lbl\">Default deletion, 30-day legacy setting<\/span>\n                <div class=\"val\" id=\"fx-clock30\">&#8211;<\/div>\n                <div class=\"sub\" id=\"fx-clockleft30\">&#8211;<\/div>\n              <\/div>\n            <\/div>\n            <p class=\"fx-note\">The real number is in the agency&#8217;s contract or transparency portal.<\/p>\n            <ul class=\"fx-portals\" role=\"list\">\n              <li>\n                <a href=\"https:\/\/transparency.flocksafety.com\/dallas-tx-pd\" target=\"_blank\" rel=\"noopener\">Dallas PD<\/a>\n              <\/li>\n              <li>\n                <a href=\"https:\/\/transparency.flocksafety.com\/austin-tx-pd\" target=\"_blank\" rel=\"noopener\">Austin PD<\/a>\n              <\/li>\n              <li>\n                <a href=\"https:\/\/transparency.flocksafety.com\/arlington-tx-pd\" target=\"_blank\" rel=\"noopener\"\n                  >Arlington PD<\/a\n                >\n              <\/li>\n              <li>\n                <a href=\"https:\/\/transparency.flocksafety.com\/frisco-tx-pd\" target=\"_blank\" rel=\"noopener\">Frisco PD<\/a>\n              <\/li>\n              <li>\n                <a href=\"https:\/\/transparency.flocksafety.com\/denton-tx-pd\" target=\"_blank\" rel=\"noopener\">Denton PD<\/a>\n              <\/li>\n              <li>\n                <a href=\"https:\/\/transparency.flocksafety.com\/pflugerville-tx-pd\" target=\"_blank\" rel=\"noopener\"\n                  >Pflugerville PD<\/a\n                >\n              <\/li>\n            <\/ul>\n            <p class=\"fx-note fx-note--links\">\n              Our <a class=\"fx-inlink\" href=\"https:\/\/severeinjurylawyers.com\/practice-areas\/car-accident-lawyers\/dallas\/\">Dallas car accident lawyers<\/a> send the preservation request to the camera owner in the same week as the crash. After a <a class=\"fx-inlink\" href=\"https:\/\/severeinjurylawyers.com\/practice-areas\/car-accident-lawyers\/rear-end-accidents\/dallas\/\">rear-end collision in Dallas<\/a>, it is the first request we send.\n            <\/p>\n          <\/div>\n        <\/section>\n\n        <section id=\"checklist\" aria-labelledby=\"checklist-h2\" class=\"fx-section fx-section--1\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-head\">\n              <p class=\"fx-eyebrow\">For reporters<\/p>\n              <h2 class=\"fx-h2\" id=\"checklist-h2\">Accurate terms<\/h2>\n              <p>Ten common descriptions that need correction.<\/p>\n            <\/div>\n            <div class=\"fx-tablewrap\">\n              <table class=\"fx-table\" aria-labelledby=\"checklist-h2\">\n                <thead>\n                  <tr>\n                    <th scope=\"col\" class=\"fx-w22\">Common wording<\/th>\n                    <th scope=\"col\" class=\"fx-w30\">More accurate wording<\/th>\n                    <th scope=\"col\" class=\"fx-w48\">Why it matters<\/th>\n                  <\/tr>\n                <\/thead>\n                <tbody>\n                  <tr>\n                    <td>&#8220;Flock records video.&#8221;<\/td>\n                    <td>&#8220;Flock captures still images of passing vehicles and stores associated metadata.&#8221;<\/td>\n                    <td>Flock describes its LPR product as capturing vehicle images and metadata at each passage, rather than continuously recording video <a class=\"fx-fn\" href=\"#src-2\">[2]<\/a><a class=\"fx-fn\" href=\"#src-5\">[5]<\/a>.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;Flock uses facial recognition.&#8221;<\/td>\n                    <td>&#8220;Flock states that its LPR product does not use facial recognition. It classifies vehicle characteristics through its Vehicle Fingerprint feature.&#8221;<\/td>\n                    <td>Flock says its cameras do not use facial recognition <a class=\"fx-fn\" href=\"#src-7\">[7]<\/a>. Vehicle Fingerprint can identify attributes such as color, make, body type, and visible vehicle features <a class=\"fx-fn\" href=\"#src-6\">[6]<\/a>.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;Flock keeps data for 7 days.&#8221;<\/td>\n                    <td>&#8220;Flock&#8217;s 2026 default retention period is 7 days, but a local contract or policy may require a different period.&#8221;<\/td>\n                    <td>The company changed its default to 7 days in August 2026 <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a><a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>. Older contracts may use 30 days. Dallas reportedly retains its own Flock data for 365 days <a class=\"fx-fn\" href=\"#src-10\">[10]<\/a>. Evidence Mode may retain records connected to an active investigation.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;Flock owns the data.&#8221;<\/td>\n                    <td>&#8220;The agency or private customer controls the data. Flock hosts the platform.&#8221;<\/td>\n                    <td>Flock states that its customers set access, sharing, and retention rules for their data <a class=\"fx-fn\" href=\"#src-5\">[5]<\/a>.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;The camera identified the driver.&#8221;<\/td>\n                    <td>&#8220;The camera read a license plate and recorded vehicle information. Investigators must identify the driver separately.&#8221;<\/td>\n                    <td>A license plate identifies a registered vehicle. It does not establish who was driving when the camera captured the image.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;An alert means police found a stolen car.&#8221;<\/td>\n                    <td>&#8220;A hot-list alert is a possible match that requires officer review.&#8221;<\/td>\n                    <td>An alert results from a match against a list entered or integrated by an agency. Officers must verify the plate, vehicle, and relevant circumstances before taking action.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;The city&#8217;s cameras.&#8221;<\/td>\n                    <td>&#8220;City-funded cameras and state-funded cameras may operate under separate funding and access arrangements.&#8221;<\/td>\n                    <td>In Dallas, police deactivated 321 state-grant-funded cameras after the state funding pause while more than 300 city-funded cameras remained active <a class=\"fx-fn\" href=\"#src-11\">[11]<\/a>.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;Texas has 13,000 Flock cameras.&#8221;<\/td>\n                    <td>&#8220;Texas Tribune reported that Texas had more than 13,000 Flock cameras, based on DPS data. OpenStreetMap counts show only cameras volunteers have mapped.&#8221;<\/td>\n                    <td>The reported statewide number <a class=\"fx-fn\" href=\"#src-9\">[9]<\/a> and the crowd-mapped OpenStreetMap count measure different things. OpenStreetMap provides a partial, volunteer-maintained map rather than a statewide inventory <a class=\"fx-fn\" href=\"#src-21\">[21]<\/a>.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;Flock searched the cameras.&#8221;<\/td>\n                    <td>&#8220;A user at a named agency searched data across a specified number of connected networks or cameras.&#8221;<\/td>\n                    <td>A person at an agency initiates a search. Search logs can identify the agency, user, query, date, stated purpose, and network scope. EFF reporting found searches that reached thousands of networks and cameras <a class=\"fx-fn\" href=\"#src-20\">[20]<\/a>.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>&#8220;Texas law limits ALPR retention.&#8221;<\/td>\n                    <td>&#8220;Texas has no statewide ALPR retention statute.&#8221;<\/td>\n                    <td>In the 2025 legislative session, HB 961 and HB 2083 were referred to committee and did not receive recorded floor votes <a class=\"fx-fn\" href=\"#src-15\">[15]<\/a><a class=\"fx-fn\" href=\"#src-16\">[16]<\/a><a class=\"fx-fn\" href=\"#src-17\">[17]<\/a><a class=\"fx-fn\" href=\"#src-18\">[18]<\/a>. Local contracts, agency policies, and public-records practices currently determine many retention rules.<\/td>\n                  <\/tr>\n                <\/tbody>\n              <\/table>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"governance\" aria-labelledby=\"governance-h2\" class=\"fx-section fx-section--2\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-head\">\n              <p class=\"fx-eyebrow\">For reporters<\/p>\n              <h2 class=\"fx-h2\" id=\"governance-h2\">Agency questions<\/h2>\n              <p>Ten questions for an agency interview or records request.<\/p>\n            <\/div>\n            <div class=\"fx-tablewrap\">\n              <table class=\"fx-table fx-table--2col\" aria-labelledby=\"governance-h2\">\n                <thead>\n                  <tr>\n                    <th scope=\"col\">Question<\/th>\n                    <th scope=\"col\">Why it matters<\/th>\n                  <\/tr>\n                <\/thead>\n                <tbody>\n                  <tr>\n                    <td>What retention period does the agency&#8217;s current contract with Flock require?<\/td>\n                    <td>Flock&#8217;s default is 7 days, but an agency contract or local policy may retain records longer. The written retention period determines whether crash-related records may still exist.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>Which employees can run searches?<\/td>\n                    <td>Role-based access rules determine how many people can view plate-history records.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>Can outside agencies search the agency&#8217;s cameras?<\/td>\n                    <td>Data-sharing settings determine whether agencies from another city, county, state, or federal jurisdiction can query local vehicle records.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>Does every search require a case number and written investigative purpose?<\/td>\n                    <td>A case number and stated purpose link a search to a defined investigation and allow later review.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>Who reviews search logs, and how frequently?<\/td>\n                    <td>Audit logs only identify misuse if an agency reviews them and documents follow-up.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>Does the policy restrict searches connected to protests, medical appointments, religious services, immigration matters, or other protected activity?<\/td>\n                    <td>Vehicle-location records can reveal where a person traveled and whom they may have visited.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>Does the agency publish a transparency report or public dashboard?<\/td>\n                    <td>A public report can identify camera locations, retention periods, searches, alerts, outside-agency access, and misuse investigations.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>Where should a person submit a complaint, correction request, preservation request, or public-information request?<\/td>\n                    <td>A crash victim, vehicle owner, or incorrectly identified person needs a named office and written procedure.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>What written purpose supports each camera location?<\/td>\n                    <td>Camera placement determines which streets, neighborhoods, entrances, and travel patterns the system captures.<\/td>\n                  <\/tr>\n                  <tr>\n                    <td>Are officers trained to treat a hot-list alert as an investigative lead rather than confirmation of a crime?<\/td>\n                    <td>A plate match does not confirm the driver&#8217;s identity, current vehicle status, or the facts surrounding the alert.<\/td>\n                  <\/tr>\n                <\/tbody>\n              <\/table>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"texas\" aria-labelledby=\"texas-h2\" class=\"fx-section fx-section--1\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-head\">\n              <p class=\"fx-eyebrow\">Timeline<\/p>\n              <h2 class=\"fx-h2\" id=\"texas-h2\">Texas ALPR developments<\/h2>\n              <p>Recent Texas developments, each linked to the outlet that reported it.<\/p>\n            <\/div>\n            <div class=\"fx-tl\">\n              <div class=\"fx-tlrow\">\n                <time datetime=\"2026-02-12\">February 12, 2026<\/time>\n                <div>\n                  <p>KUT reported that Austin ended its license-plate-reader program in 2025. The report said Austin police later accessed Flock data through cameras operated by neighboring agencies.<\/p>\n                  <p class=\"outlet\"><a href=\"https:\/\/www.kut.org\/crime-justice\/2026-02-12\/austin-tx-apd-flock-cameras-license-plate-readers\" target=\"_blank\" rel=\"noopener\">KUT reporting<\/a><\/p>\n                <\/div>\n              <\/div>\n              <div class=\"fx-tlrow\">\n                <time datetime=\"2026-08-03\">August 3, 2026<\/time>\n                <div>\n                  <p>The Texas Tribune reported increased use of Flock license-plate-reader cameras among Texas law-enforcement agencies.<\/p>\n                  <p class=\"outlet\"><a href=\"https:\/\/www.texastribune.org\/2026\/08\/03\/texas-flock-cameras-law-enforcement-license-plate-readers\/\" target=\"_blank\" rel=\"noopener\">Texas Tribune reporting<\/a><\/p>\n                <\/div>\n              <\/div>\n              <div class=\"fx-tlrow\">\n                <time datetime=\"2026-08-26\">August 26, 2026<\/time>\n                <div>\n                  <p>Houston police said the department was investigating certain officer use of the Flock system. The report also described scrutiny involving the Pasadena and Baytown police departments.<\/p>\n                  <p class=\"outlet\"><a href=\"https:\/\/www.click2houston.com\/news\/local\/2026\/08\/26\/houston-police-department-says-its-investigating-certain-officer-usage-of-flock-system\/\" target=\"_blank\" rel=\"noopener\">Click2Houston reporting<\/a><\/p>\n                <\/div>\n              <\/div>\n              <div class=\"fx-tlrow\">\n                <time datetime=\"2026-08-27\">August 27, 2026<\/time>\n                <div>\n                  <p>Governor Greg Abbott barred state agencies from spending additional money on Flock cameras, citing misuse concerns. The reported directive left decisions about existing local equipment to city officials.<\/p>\n                  <p class=\"outlet\"><a href=\"https:\/\/www.texastribune.org\/2026\/09\/04\/texas-flock-cameras-dps-network-search-abbott\/\" target=\"_blank\" rel=\"noopener\">Texas Tribune reporting<\/a><\/p>\n                <\/div>\n              <\/div>\n              <div class=\"fx-tlrow\">\n                <time datetime=\"2026-09-02\">September 2, 2026<\/time>\n                <div>\n                  <p>Dallas police said that 321 state-funded Flock cameras would be deactivated, with a reported effective date of September 15, 2026.<\/p>\n                  <p class=\"outlet\"><a href=\"https:\/\/www.officer.com\/command-hq\/technology\/traffic\/lpr-license-plate-recognition\/news\/55402633\/dallas-police-to-deactivate-321-flock-license-plate-cameras-after-abbott-funding-pause\" target=\"_blank\" rel=\"noopener\">Officer.com reporting<\/a><\/p>\n                <\/div>\n              <\/div>\n              <div class=\"fx-tlrow\">\n                <time datetime=\"2026-09-04\">September 4, 2026<\/time>\n                <div>\n                  <p>The Texas Tribune reported that Texas DPS would continue operating more than 940 ALPR cameras. The agency&#8217;s network was queried about 615,000 times in June 2026, with 48 percent of the searches coming from outside Texas.<\/p>\n                  <p class=\"outlet\"><a href=\"https:\/\/www.texastribune.org\/2026\/09\/04\/texas-flock-cameras-dps-network-search-abbott\/\" target=\"_blank\" rel=\"noopener\">Texas Tribune reporting<\/a><\/p>\n                <\/div>\n              <\/div>\n              <div class=\"fx-tlrow\">\n                <time datetime=\"2026-09-08\">September 8, 2026<\/time>\n                <div>\n                  <p>KEDT and Texas Public Radio reported that several Austin-area cities had reduced or ended Flock use, while Round Rock continued operating its cameras.<\/p>\n                  <p class=\"outlet\"><a href=\"https:\/\/www.kedt.org\/texas-news\/2026-09-08\/austin-area-cities-are-abandoning-their-flock-cameras-here-are-the-agencies-still-using-them\" target=\"_blank\" rel=\"noopener\">KEDT and Texas Public Radio reporting<\/a><\/p>\n                <\/div>\n              <\/div>\n              <div class=\"fx-tlrow\">\n                <time datetime=\"2026-09-14\">September 14, 2026<\/time>\n                <div>\n                  <p>KERA News reported that Dallas police retain Flock data for 365 days under the department&#8217;s agreement, longer than Flock&#8217;s new 7-day default.<\/p>\n                  <p class=\"outlet\"><a href=\"https:\/\/www.keranews.org\/government\/2026-09-14\/dallas-flock-cameras-are-here-to-stay-heres-what-data-dallas-police-collects-and-how-they-use-it\" target=\"_blank\" rel=\"noopener\">KERA News reporting<\/a><\/p>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"sources\" aria-labelledby=\"sources-h2\" class=\"fx-section fx-section--2\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-head\">\n              <p class=\"fx-eyebrow\">Sources<\/p>\n              <h2 class=\"fx-h2\" id=\"sources-h2\">Every number on this page, linked<\/h2>\n            <\/div>\n            <ol class=\"fx-srclist\" role=\"list\">\n              <li id=\"src-1\">\n                <a\n                  href=\"https:\/\/www.flocksafety.com\/blog\/flock-guardrails-address-lpr-privacy-concerns-and-police-transparency\"\n                  data-src-url=\"https:\/\/www.flocksafety.com\/blog\/flock-guardrails-address-lpr-privacy-concerns-and-police-transparency\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[1] Flock Safety blog, Flock Guardrails Address LPR Privacy Concerns and Police Transparency<\/a\n                >\n              <\/li>\n              <li id=\"src-2\">\n                <a\n                  href=\"https:\/\/www.flocksafety.com\/legal\/flock-evidence-policy\"\n                  data-src-url=\"https:\/\/www.flocksafety.com\/legal\/flock-evidence-policy\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[2] Flock Safety, Evidence Policy<\/a\n                >\n              <\/li>\n              <li id=\"src-3\">\n                <a\n                  href=\"https:\/\/therecord.media\/flock-safety-audit-assistance-police-departments\"\n                  data-src-url=\"https:\/\/therecord.media\/flock-safety-audit-assistance-police-departments\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[3] The Record, reporting on Flock Safety Audit Assistance<\/a\n                >\n              <\/li>\n              <li id=\"src-4\">\n                <a\n                  href=\"https:\/\/www.cehrp.org\/dissection-of-flock-safety-camera\/\"\n                  data-src-url=\"https:\/\/www.cehrp.org\/dissection-of-flock-safety-camera\/\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[4] Center for Human Rights and Privacy, hardware teardown of a Flock Safety camera<\/a\n                >\n              <\/li>\n              <li id=\"src-5\">\n                <a\n                  href=\"https:\/\/www.flocksafety.com\/blog\/privacy-and-access\"\n                  data-src-url=\"https:\/\/www.flocksafety.com\/blog\/privacy-and-access\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[5] Flock Safety blog, Privacy and Access<\/a\n                >\n              <\/li>\n              <li id=\"src-6\">\n                <a\n                  href=\"https:\/\/haveibeenflocked.com\/about\/search-types\"\n                  data-src-url=\"https:\/\/haveibeenflocked.com\/about\/search-types\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[6] haveibeenflocked.com, search types<\/a\n                >\n              <\/li>\n              <li id=\"src-7\">\n                <a\n                  href=\"https:\/\/www.flocksafety.com\/trust\/myths-facts\"\n                  data-src-url=\"https:\/\/www.flocksafety.com\/trust\/myths-facts\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[7] Flock Safety, Myths and Facts<\/a\n                >\n              <\/li>\n              <li id=\"src-8\">\n                <a\n                  href=\"https:\/\/www.flocksafety.com\/blog\/how-effective-is-flock\"\n                  data-src-url=\"https:\/\/www.flocksafety.com\/blog\/how-effective-is-flock\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[8] Flock Safety blog, How Effective Is Flock<\/a\n                >\n              <\/li>\n              <li id=\"src-9\">\n                <a\n                  href=\"https:\/\/www.texastribune.org\/2026\/09\/04\/texas-flock-cameras-dps-network-search-abbott\/\"\n                  data-src-url=\"https:\/\/www.texastribune.org\/2026\/09\/04\/texas-flock-cameras-dps-network-search-abbott\/\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[9] Texas Tribune, DPS will continue its vast Flock camera network in Texas, September 4, 2026<\/a\n                >\n              <\/li>\n              <li id=\"src-10\">\n                <a\n                  href=\"https:\/\/www.keranews.org\/government\/2026-09-14\/dallas-flock-cameras-are-here-to-stay-heres-what-data-dallas-police-collects-and-how-they-use-it\"\n                  data-src-url=\"https:\/\/www.keranews.org\/government\/2026-09-14\/dallas-flock-cameras-are-here-to-stay-heres-what-data-dallas-police-collects-and-how-they-use-it\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[10] KERA News, Dallas Flock cameras are here to stay, September 14, 2026<\/a\n                >\n              <\/li>\n              <li id=\"src-11\">\n                <a\n                  href=\"https:\/\/www.officer.com\/command-hq\/technology\/traffic\/lpr-license-plate-recognition\/news\/55402633\/dallas-police-to-deactivate-321-flock-license-plate-cameras-after-abbott-funding-pause\"\n                  data-src-url=\"https:\/\/www.officer.com\/command-hq\/technology\/traffic\/lpr-license-plate-recognition\/news\/55402633\/dallas-police-to-deactivate-321-flock-license-plate-cameras-after-abbott-funding-pause\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[11] officer.com, Dallas Police to Deactivate 321 Flock License Plate Cameras After Abbott Funding\n                  Pause, September 2, 2026<\/a\n                >\n              <\/li>\n              <li id=\"src-12\">\n                <a\n                  href=\"https:\/\/www.kut.org\/crime-justice\/2026-02-12\/austin-tx-apd-flock-cameras-license-plate-readers\"\n                  data-src-url=\"https:\/\/www.kut.org\/crime-justice\/2026-02-12\/austin-tx-apd-flock-cameras-license-plate-readers\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[12] KUT, Austin ended its license plate reader program, February 12, 2026<\/a\n                >\n              <\/li>\n              <li id=\"src-13\">\n                <a\n                  href=\"https:\/\/www.kedt.org\/texas-news\/2026-09-08\/austin-area-cities-are-abandoning-their-flock-cameras-here-are-the-agencies-still-using-them\"\n                  data-src-url=\"https:\/\/www.kedt.org\/texas-news\/2026-09-08\/austin-area-cities-are-abandoning-their-flock-cameras-here-are-the-agencies-still-using-them\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[13] KEDT and Texas Public Radio, Austin-area cities are abandoning their Flock cameras, September 8,\n                  2026<\/a\n                >\n              <\/li>\n              <li id=\"src-14\">\n                <a\n                  href=\"https:\/\/www.click2houston.com\/news\/local\/2026\/08\/26\/houston-police-department-says-its-investigating-certain-officer-usage-of-flock-system\/\"\n                  data-src-url=\"https:\/\/www.click2houston.com\/news\/local\/2026\/08\/26\/houston-police-department-says-its-investigating-certain-officer-usage-of-flock-system\/\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[14] Click2Houston, Houston Police Department says it is investigating certain officer usage of Flock\n                  system, August 26, 2026<\/a\n                >\n              <\/li>\n              <li id=\"src-15\">\n                <a\n                  href=\"https:\/\/capitol.texas.gov\/tlodocs\/89R\/billtext\/html\/HB00961I.htm\"\n                  data-src-url=\"https:\/\/capitol.texas.gov\/tlodocs\/89R\/billtext\/html\/HB00961I.htm\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[15] Texas Legislature, HB 961 bill text, 89th Regular Session<\/a\n                >\n              <\/li>\n              <li id=\"src-16\">\n                <a\n                  href=\"https:\/\/capitol.texas.gov\/BillLookup\/History.aspx?LegSess=89R&amp;Bill=HB961\"\n                  data-src-url=\"https:\/\/capitol.texas.gov\/BillLookup\/History.aspx?LegSess=89R&amp;Bill=HB961\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[16] Texas Legislature, HB 961 bill history, 89th Regular Session<\/a\n                >\n              <\/li>\n              <li id=\"src-17\">\n                <a\n                  href=\"https:\/\/capitol.texas.gov\/tlodocs\/89R\/billtext\/pdf\/HB02083I.pdf\"\n                  data-src-url=\"https:\/\/capitol.texas.gov\/tlodocs\/89R\/billtext\/pdf\/HB02083I.pdf\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[17] Texas Legislature, HB 2083 bill text, 89th Regular Session<\/a\n                >\n              <\/li>\n              <li id=\"src-18\">\n                <a\n                  href=\"https:\/\/capitol.texas.gov\/BillLookup\/History.aspx?LegSess=89R&amp;Bill=HB2083\"\n                  data-src-url=\"https:\/\/capitol.texas.gov\/BillLookup\/History.aspx?LegSess=89R&amp;Bill=HB2083\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[18] Texas Legislature, HB 2083 bill history, 89th Regular Session<\/a\n                >\n              <\/li>\n              <li id=\"src-19\">\n                <a\n                  href=\"https:\/\/www.eff.org\/deeplinks\/2025\/11\/license-plate-surveillance-logs-reveal-racist-policing-against-romani-people\"\n                  data-src-url=\"https:\/\/www.eff.org\/deeplinks\/2025\/11\/license-plate-surveillance-logs-reveal-racist-policing-against-romani-people\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[19] EFF, License Plate Surveillance Logs Reveal Racist Policing Against Romani People, November 3,\n                  2025<\/a\n                >\n              <\/li>\n              <li id=\"src-20\">\n                <a\n                  href=\"https:\/\/www.eff.org\/deeplinks\/2025\/10\/flock-safety-and-texas-sheriff-claimed-license-plate-search-was-missing-person-it\"\n                  data-src-url=\"https:\/\/www.eff.org\/deeplinks\/2025\/10\/flock-safety-and-texas-sheriff-claimed-license-plate-search-was-missing-person-it\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[20] EFF, Flock Safety and Texas Sheriff Claimed License Plate Search Was for a Missing Person,\n                  October 7, 2025<\/a\n                >\n              <\/li>\n              <li id=\"src-21\">\n                <a\n                  href=\"https:\/\/wiki.openstreetmap.org\/wiki\/Tag:surveillance:type=ALPR\"\n                  data-src-url=\"https:\/\/wiki.openstreetmap.org\/wiki\/Tag:surveillance:type=ALPR\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[21] OpenStreetMap wiki, surveillance:type=ALPR tag documentation<\/a\n                >\n              <\/li>\n              <li id=\"src-22\">\n                <a\n                  href=\"https:\/\/www.eff.org\/pages\/download-alpr-dataset\"\n                  data-src-url=\"https:\/\/www.eff.org\/pages\/download-alpr-dataset\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[22] EFF, Atlas of Surveillance ALPR dataset download<\/a\n                >\n              <\/li>\n              <li id=\"src-23\">\n                <a\n                  href=\"https:\/\/www.texastribune.org\/2026\/08\/03\/texas-flock-cameras-law-enforcement-license-plate-readers\/\"\n                  data-src-url=\"https:\/\/www.texastribune.org\/2026\/08\/03\/texas-flock-cameras-law-enforcement-license-plate-readers\/\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                  >[23] Texas Tribune, Use of Flock license plate reader cameras surges in Texas, August 3, 2026<\/a\n                >\n              <\/li>\n            <\/ol>\n          <\/div>\n        <\/section>\n\n        <section id=\"faq\" aria-labelledby=\"faq-h2\" class=\"fx-section fx-section--1\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-head\">\n              <p class=\"fx-eyebrow\">Questions<\/p>\n              <h2 class=\"fx-h2\" id=\"faq-h2\">Frequently asked questions<\/h2>\n            <\/div>\n            <div class=\"fx-faq\">\n              <details class=\"fx-faq__item\">\n                <summary class=\"fx-faq__q\">Does a Flock camera record video?<span class=\"fx-faq__ic\"><\/span><\/summary>\n                <div class=\"fx-faq__a\">\n                  <p>Flock describes its license-plate-reader product as capturing still images of vehicles as they pass the camera, along with related metadata. It does not describe the standard LPR product as a continuous video-recording system <a class=\"fx-fn\" href=\"#src-2\">[2]<\/a><a class=\"fx-fn\" href=\"#src-5\">[5]<\/a>.<\/p>\n                <\/div>\n              <\/details>\n              <details class=\"fx-faq__item\">\n                <summary class=\"fx-faq__q\">Can a Flock camera identify a face?<span class=\"fx-faq__ic\"><\/span><\/summary>\n                <div class=\"fx-faq__a\">\n                  <p>Flock states that its LPR cameras do not use facial recognition or collect biometric information <a class=\"fx-fn\" href=\"#src-7\">[7]<\/a>. The system reads license plates and classifies visible vehicle characteristics, including color, make, body type, and other exterior features <a class=\"fx-fn\" href=\"#src-6\">[6]<\/a>.<\/p>\n                  <p>A captured image may contain people incidentally, depending on the camera&#8217;s position. The product&#8217;s stated search function concerns the vehicle rather than facial identification.<\/p>\n                <\/div>\n              <\/details>\n              <details class=\"fx-faq__item\">\n                <summary class=\"fx-faq__q\">Who can search Flock data in Texas?<span class=\"fx-faq__ic\"><\/span><\/summary>\n                <div class=\"fx-faq__a\">\n                  <p>The customer that operates or funds the cameras controls access. A police department can authorize particular users under its own policy. A private owner, such as a homeowners association or business, can control access and choose whether to share records with police for a particular investigation or through an ongoing arrangement.<\/p>\n                  <p>Texas DPS operates a separate statewide ALPR network. Texas Tribune reporting stated that the agency restricted access to agencies with a signed agreement, totaling 206 Texas agencies as of July 2026 <a class=\"fx-fn\" href=\"#src-9\">[9]<\/a>.<\/p>\n                <\/div>\n              <\/details>\n              <details class=\"fx-faq__item\">\n                <summary class=\"fx-faq__q\">How long does Flock retain data?<span class=\"fx-faq__ic\"><\/span><\/summary>\n                <div class=\"fx-faq__a\">\n                  <p>Flock&#8217;s stated default retention period in 2026 is 7 days from the date of capture <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a><a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>. The owner&#8217;s contract or policy may require another retention period. Older contracts may retain records for 30 days. Dallas police reportedly retain Flock records for 365 days under their own agreement <a class=\"fx-fn\" href=\"#src-10\">[10]<\/a>.<\/p>\n                  <p>Flock&#8217;s Evidence Mode can preserve specified records in cold storage for an active investigation <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a><a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>. A preservation request should identify the camera location, date, time range, vehicle description, and reason the record may be relevant.<\/p>\n                <\/div>\n              <\/details>\n              <details class=\"fx-faq__item\">\n                <summary class=\"fx-faq__q\">Can a crash victim request Flock records?<span class=\"fx-faq__ic\"><\/span><\/summary>\n                <div class=\"fx-faq__a\">\n                  <p>A request should go to the agency or private entity that controls the camera, rather than Flock. Flock hosts the platform, while the customer controls access and disclosure decisions <a class=\"fx-fn\" href=\"#src-5\">[5]<\/a>.<\/p>\n                  <p>A written preservation request should identify the crash date, approximate time, location, travel direction, vehicle description, license plate if known, police report number, and the reason the images may relate to the crash. The owner&#8217;s retention policy determines how long records remain available <a class=\"fx-fn\" href=\"#src-1\">[1]<\/a><a class=\"fx-fn\" href=\"#src-2\">[2]<\/a>.<\/p>\n                <\/div>\n              <\/details>\n              <details class=\"fx-faq__item\">\n                <summary class=\"fx-faq__q\">Does a plate read prove who caused a crash?<span class=\"fx-faq__ic\"><\/span><\/summary>\n                <div class=\"fx-faq__a\">\n                  <p>No. A plate read can connect a vehicle to a location and time. It does not identify the driver at that moment or establish fault for a collision.<\/p>\n                  <p>Investigators should compare the plate record with crash reports, witness statements, vehicle damage, surveillance footage, phone records where lawfully available, and other evidence. License plates can be misread, stolen, obscured, altered, temporary, or attached to a vehicle driven by someone other than the registered owner.<\/p>\n                <\/div>\n              <\/details>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"embed\" aria-labelledby=\"embed-h2\" class=\"fx-section fx-section--2\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-head\">\n              <p class=\"fx-eyebrow\">For your site<\/p>\n              <h2 class=\"fx-h2\" id=\"embed-h2\">Embed this walkthrough<\/h2>\n              <p>\n                Choose the whole walkthrough or one step, then paste the generated snippet on another page. It\n                attributes the data back to this page.\n              <\/p>\n            <\/div>\n            <div class=\"fx-embedbox\">\n              <div class=\"fx-embedconf\">\n                <fieldset class=\"fx-radio-row\">\n                  <legend class=\"fx-sr-only\">Embed mode<\/legend>\n                  <label class=\"fx-radio\"\n                    ><input type=\"radio\" name=\"fx-embed-mode\" id=\"fx-embed-whole\" value=\"whole\" checked \/> Whole\n                    walkthrough<\/label\n                  >\n                  <label class=\"fx-radio\"\n                    ><input type=\"radio\" name=\"fx-embed-mode\" id=\"fx-embed-one\" value=\"one\" \/> One step<\/label\n                  >\n                <\/fieldset>\n                <div>\n                  <label class=\"fx-note\" for=\"fx-embed-step\">Step<\/label><br \/>\n                  <select id=\"fx-embed-step\" aria-label=\"Step\">\n                    <option value=\"1\">1. The device on the pole<\/option>\n                    <option value=\"2\">2. A vehicle passes: the capture<\/option>\n                    <option value=\"3\">3. Detection: reading the plate and the vehicle<\/option>\n                    <option value=\"4\">4. The record leaves the pole<\/option>\n                    <option value=\"5\">5. How long the photo lasts<\/option>\n                    <option value=\"6\">6. Search and hot lists<\/option>\n                    <option value=\"7\">7. After a crash<\/option>\n                    <option value=\"8\">8. Oversight and Texas<\/option>\n                  <\/select>\n                <\/div>\n              <\/div>\n              <label class=\"fx-sr-only\" for=\"fx-embedcode\">Embed code<\/label\n              ><textarea id=\"fx-embedcode\" readonly><\/textarea>\n              <div class=\"row\">\n                <span class=\"attrib\">Data by <a href=\"https:\/\/severeinjurylawyers.com\">J. Alexander Law Firm<\/a><\/span>\n                <span><button id=\"fx-copybtn\" type=\"button\" class=\"fx-btn fx-btn--line\">Copy embed code<\/button><\/span>\n              <\/div>\n              <iframe\n                id=\"fx-embedpreview\"\n                data-flock-embed\n                title=\"Live preview of the embed\"\n                width=\"100%\"\n                height=\"600\"\n                loading=\"lazy\"\n              ><\/iframe>\n            <\/div>\n            <p class=\"fx-note\">\n              Cite this page:\n              <span id=\"fx-cite-text\"\n                >How a Flock Camera Works, From the Pole to the Case File. J. Alexander Law Firm,\n                severeinjurylawyers.com, updated September 2026.<\/span\n              >\n              <button id=\"fx-citebtn\" type=\"button\" class=\"fx-btn fx-btn--line fx-btn--sm\">Copy citation<\/button>\n            <\/p>\n          <\/div>\n        <\/section>\n\n        <section class=\"fx-section fx-section--2\" aria-label=\"About this page\">\n          <div class=\"fx-wrap\">\n            <p class=\"fx-disclaimer\">\n              <b>About this page.<\/b> Facts are drawn from Flock Safety&#8217;s own published policy pages, independent\n              hardware review, EFF reporting, Texas news reporting and Texas legislative records, each linked in the\n              sources list above. This page is not legal advice and does not rate\n              any camera, agency or location.\n            <\/p>\n          <\/div>\n        <\/section>\n\n        <section id=\"contact\" aria-labelledby=\"contact-h2\" class=\"fx-section fx-final\">\n          <div class=\"fx-wrap\">\n            <div class=\"fx-final__grid\">\n              <div>\n                <p class=\"fx-eyebrow\">If this touched your case<\/p>\n                <h2 class=\"fx-h2\" id=\"contact-h2\">Hit by a driver who left the scene?<\/h2>\n                <p>A plate-reader record near a crash can exist for days, not months.<\/p>\n                <p>We send the preservation request to the agency or the private owner that controls the cameras.<\/p>\n              <\/div>\n              <div class=\"fx-final__card\">\n                <span class=\"lbl\">Call now<\/span>\n                <a href=\"tel:+14698307092\" class=\"fx-final__phone\">(469) 830-7092<\/a>\n                <a href=\"tel:+14698307092\" class=\"fx-btn fx-btn--gold\">Call (469) 830-7092<\/a>\n                <a href=\"https:\/\/severeinjurylawyers.com\/contact\/\" class=\"fx-btn fx-btn--line\">Free case review<\/a>\n                <p class=\"fx-final__note\">No fee unless we recover. Se habla espa&ntilde;ol.<\/p>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/section>\n\n        <section id=\"legal\" class=\"fx-legal\" aria-label=\"Legal disclosures\">\n          <div class=\"fx-wrap\">\n            <p>\n              <b>Attorney advertising.<\/b> J. Alexander Law Firm, <a href=\"https:\/\/www.google.com\/maps\/place\/J.+Alexander+Law+Firm\/@32.921569,-96.767208,17z\/data=!3m1!4b1!4m6!3m5!1s0x864c21b0c6eda625:0x13afdc7aa552836a!8m2!3d32.921569!4d-96.767208!16s%2Fg%2F11h1vb11br\" target=\"_blank\" rel=\"noopener\">12801 N Central Expy Ste 1100, Dallas, TX 75251<\/a>. This\n              page is not legal advice and does not create an attorney-client relationship. Prior results do not\n              guarantee a similar outcome. Facts about Flock Safety and Texas agencies are sourced and linked above;\n              verify current figures with the linked source before publication.\n            <\/p>\n<p class=\"fx-legal__build\">Build 2026-09-15 17:01, without the live data section; inline script hardened for TranslatePress.<\/p>\n          <\/div>\n        <\/section>\n\n        <div class=\"fx-mobilecall\">\n          <a href=\"tel:+14698307092\" class=\"fx-mobilecall__btn\">Call (469) 830-7092<\/a>\n        <\/div>\n      <\/div>\n      <script id=\"flock-snapshot\" nowprocket data-no-optimize=\"1\" data-no-minify=\"1\" data-cfasync=\"false\">\n        window.__FLOCK_SNAPSHOT = {\n  \"retrieved_utc\": \"2026-09-14T18:36:33Z\",\n  \"archives\": {\n    \"https:\/\/capitol.texas.gov\/BillLookup\/History.aspx?LegSess=89R\\u0026Bill=HB2083\": \"https:\/\/web.archive.org\/web\/20260625201124\/https:\/\/capitol.texas.gov\/BillLookup\/History.aspx?LegSess=89R\\u0026Bill=HB2083\",\n    \"https:\/\/capitol.texas.gov\/BillLookup\/History.aspx?LegSess=89R\\u0026Bill=HB961\": \"https:\/\/web.archive.org\/web\/20250812010143\/https:\/\/capitol.texas.gov\/BillLookup\/History.aspx?LegSess=89R\\u0026Bill=HB961\",\n    \"https:\/\/capitol.texas.gov\/tlodocs\/89R\/billtext\/pdf\/HB02083I.pdf\": \"https:\/\/web.archive.org\/web\/20260913191836\/https:\/\/capitol.texas.gov\/tlodocs\/89R\/billtext\/pdf\/HB02083I.pdf\",\n    \"https:\/\/deflockilm.org\/local-documents\/\": \"https:\/\/web.archive.org\/web\/20260827030026\/https:\/\/deflockilm.org\/local-documents\/\",\n    \"https:\/\/en.wikipedia.org\/wiki\/Carpenter_v._United_States\": \"https:\/\/web.archive.org\/web\/20260910104405\/https:\/\/en.wikipedia.org\/wiki\/Carpenter_v._United_States\",\n    \"https:\/\/haveibeenflocked.com\/\": \"https:\/\/web.archive.org\/web\/20260910044331\/https:\/\/haveibeenflocked.com\/\",\n    \"https:\/\/haveibeenflocked.com\/about\/search-types\": \"https:\/\/web.archive.org\/web\/20260906210752\/https:\/\/haveibeenflocked.com\/about\/search-types\",\n    \"https:\/\/stateline.org\/2025\/10\/10\/despite-widespread-interest-only-3-states-passed-license-plate-reader-laws-this-year\/\": \"https:\/\/web.archive.org\/web\/20260907021101\/https:\/\/stateline.org\/2025\/10\/10\/despite-widespread-interest-only-3-states-passed-license-plate-reader-laws-this-year\/\",\n    \"https:\/\/stateofsurveillance.org\/guides\/basic\/what-is-deflock\/\": \"https:\/\/web.archive.org\/web\/20260819170956\/https:\/\/stateofsurveillance.org\/guides\/basic\/what-is-deflock\/\",\n    \"https:\/\/therecord.media\/flock-safety-audit-assistance-police-departments\": \"https:\/\/web.archive.org\/web\/20260823184253\/https:\/\/therecord.media\/flock-safety-audit-assistance-police-departments\",\n    \"https:\/\/wiki.openstreetmap.org\/wiki\/Tag:surveillance:type=ALPR\": \"https:\/\/web.archive.org\/web\/20260910125114\/https:\/\/wiki.openstreetmap.org\/wiki\/Tag:surveillance:type%3DALPR\",\n    \"https:\/\/www.404media.co\/texas-police-used-ai-to-write-report-about-using-flock-to-search-for-woman-who-had-abortion\/\": \"https:\/\/web.archive.org\/web\/20260910215200\/https:\/\/www.404media.co\/texas-police-used-ai-to-write-report-about-using-flock-to-search-for-woman-who-had-abortion\/\",\n    \"https:\/\/www.aclu.org\/cases\/schmidt-v-norfolk\": \"https:\/\/web.archive.org\/web\/20260828181317\/https:\/\/www.aclu.org\/cases\/schmidt-v-norfolk\",\n    \"https:\/\/www.atlasofsurveillance.org\/data-library\": \"https:\/\/web.archive.org\/web\/20260803190124\/https:\/\/www.atlasofsurveillance.org\/data-library\",\n    \"https:\/\/www.atlasofsurveillance.org\/pages\/about\": \"https:\/\/web.archive.org\/web\/20260125063230\/https:\/\/www.atlasofsurveillance.org\/pages\/about\",\n    \"https:\/\/www.chron.com\/texas\/article\/flock-houston-area-misuse-22367312.php\": \"https:\/\/web.archive.org\/web\/20260905144936\/https:\/\/www.chron.com\/texas\/article\/flock-houston-area-misuse-22367312.php\",\n    \"https:\/\/www.courthousenews.com\/judge-holds-norfolks-license-plate-reader-use-constitutional\/\": \"https:\/\/web.archive.org\/web\/20260906085839\/https:\/\/www.courthousenews.com\/judge-holds-norfolks-license-plate-reader-use-constitutional\/\",\n    \"https:\/\/www.dallasnews.com\/news\/public-safety\/article\/dallas-police-flock-camera-retention-22389188.php\": \"https:\/\/web.archive.org\/web\/20260831075309\/https:\/\/www.dallasnews.com\/news\/public-safety\/article\/dallas-police-flock-camera-retention-22389188.php\",\n    \"https:\/\/www.deflockbcs.com\/post\/flock-safety-says-its-cameras-don-t-do-facial-recognition-so-why-does-its-patent-describe-it\": \"https:\/\/web.archive.org\/web\/20260821044006\/https:\/\/www.deflockbcs.com\/post\/flock-safety-says-its-cameras-don-t-do-facial-recognition-so-why-does-its-patent-describe-it\",\n    \"https:\/\/www.dps.texas.gov\/administration\/crime_records\/pages\/LPRP.pdf\": \"https:\/\/web.archive.org\/web\/20201016195639\/https:\/\/www.dps.texas.gov\/administration\/crime_records\/pages\/LPRP.pdf\",\n    \"https:\/\/www.eff.org\/deeplinks\/2025\/05\/she-got-abortion-so-texas-cop-used-83000-cameras-track-her-down\": \"https:\/\/web.archive.org\/web\/20260909103836\/https:\/\/www.eff.org\/deeplinks\/2025\/05\/she-got-abortion-so-texas-cop-used-83000-cameras-track-her-down\",\n    \"https:\/\/www.eff.org\/deeplinks\/2025\/10\/flock-safety-and-texas-sheriff-claimed-license-plate-search-was-missing-person-it\": \"https:\/\/web.archive.org\/web\/20260909103836\/https:\/\/www.eff.org\/deeplinks\/2025\/10\/flock-safety-and-texas-sheriff-claimed-license-plate-search-was-missing-person-it\",\n    \"https:\/\/www.eff.org\/deeplinks\/2025\/11\/license-plate-surveillance-logs-reveal-racist-policing-against-romani-people\": \"https:\/\/web.archive.org\/web\/20260905221639\/https:\/\/www.eff.org\/deeplinks\/2025\/11\/license-plate-surveillance-logs-reveal-racist-policing-against-romani-people\",\n    \"https:\/\/www.eff.org\/pages\/download-alpr-dataset\": \"https:\/\/web.archive.org\/web\/20260606055319\/https:\/\/www.eff.org\/pages\/download-alpr-dataset\",\n    \"https:\/\/www.rangemedia.co\/public-flock-data\/\": \"https:\/\/web.archive.org\/web\/20260517120243\/https:\/\/www.rangemedia.co\/public-flock-data\/\",\n    \"https:\/\/www.supremecourt.gov\/opinions\/17pdf\/16-402_h315.pdf\": \"https:\/\/web.archive.org\/web\/20260913104912\/https:\/\/www.supremecourt.gov\/opinions\/17pdf\/16-402_h315.pdf\",\n    \"https:\/\/www.valleynewslive.com\/2026\/07\/01\/fargo-police-department-debuts-flock-safety-transparency-portal\/\": \"https:\/\/web.archive.org\/web\/20260805215534\/https:\/\/www.valleynewslive.com\/2026\/07\/01\/fargo-police-department-debuts-flock-safety-transparency-portal\/\",\n    \"https:\/\/www.whro.org\/business-growth\/2026-02-11\/a-federal-judge-ruled-norfolks-flock-surveillance-cameras-dont-invade-peoples-privacy-yet\": \"https:\/\/web.archive.org\/web\/20260824151057\/https:\/\/www.whro.org\/business-growth\/2026-02-11\/a-federal-judge-ruled-norfolks-flock-surveillance-cameras-dont-invade-peoples-privacy-yet\"\n  }\n};\n      <\/script>\n      <script id=\"flock-inline-js\" nowprocket data-no-optimize=\"1\" data-no-minify=\"1\" data-cfasync=\"false\">\n        (function () {\n          \"use strict\";\n          var MONTHS = [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n          ];\n          function qs(s, c) {\n            return (c || document).querySelector(s);\n          }\n          function fxImgFail(el) {\n            el.style.display = \"none\";\n            var scene = el.closest ? el.closest(\".fx-scene\") : null;\n            var pend = scene ? scene.querySelector(\".fx-pending\") : null;\n            if (pend) pend.hidden = false;\n          }\n          function qsa(s, c) {\n            return Array.prototype.slice.call((c || document).querySelectorAll(s));\n          }\n          window.fxImgFail = fxImgFail;\n          function addDays(iso, days) {\n            var d = new Date(iso + \"T00:00:00\");\n            d.setDate(d.getDate() + days);\n            return d;\n          }\n          function fmtDate(d) {\n            return MONTHS[d.getMonth()] + \" \" + d.getDate() + \", \" + d.getFullYear();\n          }\n          function daysLeft(d) {\n            var t = new Date();\n            t.setHours(0, 0, 0, 0);\n            var x = new Date(d);\n            x.setHours(0, 0, 0, 0);\n            return Math.round((x - t) \/ 86400000);\n          }\n          function todayISO() {\n            var d = new Date();\n            var m = (\"0\" + (d.getMonth() + 1)).slice(-2);\n            var day = (\"0\" + d.getDate()).slice(-2);\n            return d.getFullYear() + \"-\" + m + \"-\" + day;\n          }\n          function leftLabel(n) {\n            if (n > 0) return n + \" days left\";\n            if (n === 0) return \"today\";\n            return n * -1 + \" days ago\";\n          }\n\n          var CANONICAL_URL = \"https:\/\/severeinjurylawyers.com\/tools\/how-flock-cameras-work\/\";\n          var QP = (function () {\n            try {\n              return new URLSearchParams(window.location.search);\n            } catch (e) {\n              return null;\n            }\n          })();\n          var isEmbed = !!((QP && QP.get(\"view\") === \"embed\") || window.self !== window.top);\n          var isOnlyStep = !!(QP && QP.get(\"only\") === \"1\");\n          function embedBaseHref() {\n            if (window.location.protocol === \"file:\") return window.location.href.split(\"?\")[0].split(\"#\")[0];\n            return CANONICAL_URL;\n          }\n          function fixEmbedFootnotes() {\n            qsa(\".fx-fn\").forEach(function (a) {\n              var href = a.getAttribute(\"href\");\n              if (href && href.charAt(0) === \"#\") {\n                a.setAttribute(\"href\", CANONICAL_URL + href);\n                a.setAttribute(\"target\", \"_blank\");\n                a.setAttribute(\"rel\", \"noopener\");\n              }\n            });\n          }\n          var embedHeightTimer = null;\n          function postEmbedHeight() {\n            if (!isEmbed) return;\n            var measureEl = document.querySelector(\".jca-flock\");\n            var __h = Math.ceil(measureEl ? measureEl.getBoundingClientRect().height : 0);\n\n            if (!__h || 200 > __h || __h === window.__fxLastH) return;\n            window.__fxLastH = __h;\n            try {\n              window.parent.postMessage({ type: \"flock-embed-height\", height: __h }, \"*\");\n            } catch (e) {}\n          }\n          function scheduleEmbedHeight() {\n            if (!isEmbed) return;\n            if (embedHeightTimer) return;\n            embedHeightTimer = setTimeout(function () {\n              embedHeightTimer = null;\n              postEmbedHeight();\n            }, 80);\n          }\n          function applyEmbedCopy() {\n            var src = document.getElementById(\"fx-embed-copy\");\n            if (!src) return;\n            var steps;\n            try {\n              steps = JSON.parse(src.textContent);\n            } catch (e) {\n              return;\n            }\n            steps.forEach(function (s, i) {\n              var panel = document.querySelector('.fx-panel[data-step=\"' + (i + 1) + '\"]');\n              if (!panel) return;\n              Array.prototype.slice.call(panel.children).forEach(function (c) {\n                if (!c.classList.contains(\"fx-tt-cardslot\")) panel.removeChild(c);\n              });\n              var eye = document.createElement(\"p\");\n              eye.className = \"fx-panel__eyebrow\";\n              eye.textContent = \"Step \" + (i + 1) + \" of \" + steps.length;\n              var h = document.createElement(\"h2\");\n              h.textContent = s.title;\n              var p = document.createElement(\"p\");\n              p.textContent = s.text;\n              panel.appendChild(eye);\n              panel.appendChild(h);\n              panel.appendChild(p);\n            });\n            var fan = document.querySelector(\"#fx-search-scene\");\n            if (fan) fan.classList.add(\"is-fanned\");\n          }\n          function isolateEmbed(root) {\n            document.documentElement.classList.add(\"fx-embed-doc\");\n            if (root.parentNode !== document.body) document.body.appendChild(root);\n            function hideOthers() {\n              var kids = document.body.children;\n              for (var i = kids.length - 1; i >= 0; i--) {\n                var k = kids[i];\n                if (k === root || k.tagName === \"SCRIPT\" || k.tagName === \"STYLE\" || k.tagName === \"LINK\") continue;\n                k.style.setProperty(\"display\", \"none\", \"important\");\n              }\n            }\n            hideOthers();\n            if (\"MutationObserver\" in window) {\n              new MutationObserver(hideOthers).observe(document.body, { childList: true });\n            }\n          }\n          function initEmbedMode() {\n            var root = document.querySelector(\".jca-flock\");\n            if (!root) return;\n            if (isEmbed) {\n              root.classList.add(\"is-embed\");\n              isolateEmbed(root);\n              applyEmbedCopy();\n              fitCompact();\n              if (compactMQ && compactMQ.addEventListener) {\n                compactMQ.addEventListener(\"change\", function () {\n                  fitCompact();\n                  if (lockStoryHeightRef) lockStoryHeightRef();\n                });\n              }\n              if (lockStoryHeightRef) lockStoryHeightRef();\n              fixEmbedFootnotes();\n              window.addEventListener(\"resize\", scheduleEmbedHeight);\n              if (\"ResizeObserver\" in window) {\n                new ResizeObserver(scheduleEmbedHeight).observe(root);\n              }\n              scheduleEmbedHeight();\n            }\n            if (isOnlyStep) root.classList.add(\"is-only-step\");\n          }\n          var compactMQ = window.matchMedia ? window.matchMedia(\"(min-width: 680px)\") : null;\n          function isCompactEmbed() {\n            return !!(isEmbed && compactMQ && compactMQ.matches);\n          }\n          function fitCompact() {\n            var root = document.querySelector(\".jca-flock\");\n            var grid = document.querySelector(\".fx-storygrid\");\n            var st = document.querySelector(\".fx-stage\");\n            if (!root || !grid || !st) return;\n            var on = isCompactEmbed();\n            root.classList.toggle(\"fx-compact\", on);\n            root.classList.toggle(\"fx-canvas\", !!isEmbed);\n            if (!isEmbed) {\n              st.style.removeProperty(\"--fx-k\");\n              return;\n            }\n            var colW = on ? ((grid.clientWidth - 18) * 1.4) \/ 2.4 : grid.clientWidth;\n            var k = Math.min(colW \/ 400, 1.08);\n            if (!(k > 0)) k = 1;\n            st.style.setProperty(\"--fx-k\", k.toFixed(4));\n          }\n          var currentStepGlobal = 1;\n          var lockStoryHeightRef = null;\n          var storyHeightResizeTimer = null;\n          window.addEventListener(\"resize\", function () {\n            if (storyHeightResizeTimer) clearTimeout(storyHeightResizeTimer);\n            storyHeightResizeTimer = setTimeout(function () {\n              storyHeightResizeTimer = null;\n              fitCompact();\n              if (lockStoryHeightRef) lockStoryHeightRef();\n            }, 150);\n          });\n          window.addEventListener(\"load\", function () {\n            if (lockStoryHeightRef) lockStoryHeightRef();\n          });\n\n          function initStory() {\n            var total = isEmbed ? 7 : 8;\n            var rail = qs(\"#fx-rail\");\n            var railBtns = qsa(\".fx-rail__btn\", rail);\n            var scenes = qsa(\".fx-scene\");\n            var panels = qsa(\".fx-panel\");\n            var stagectl = qsa(\".fx-stagectl\");\n            var bar = qs(\"#fx-progressbar\");\n            var section = qs(\"#hero\");\n            function currentStep() {\n              var h = window.location.hash;\n              var m = h.match(\/^#story-(\\d)$\/);\n              if (m) {\n                var n = parseInt(m[1], 10);\n                if (n >= 1 && total >= n) return n;\n              }\n              if (QP) {\n                var sp = parseInt(QP.get(\"step\") || \"\", 10);\n                if (sp >= 1 && total >= sp) return sp;\n              }\n              return 1;\n            }\n            function render(step, silent) {\n              var grid = qs(\".fx-storygrid\");\n              if (grid) grid.classList.toggle(\"is-wide\", step === 8);\n              scenes.forEach(function (s) {\n                s.classList.toggle(\"is-active\", parseInt(s.getAttribute(\"data-step\"), 10) === step);\n              });\n              panels.forEach(function (p) {\n                p.classList.toggle(\"is-active\", parseInt(p.getAttribute(\"data-step\"), 10) === step);\n              });\n              stagectl.forEach(function (c) {\n                c.classList.toggle(\"is-active\", parseInt(c.getAttribute(\"data-step\"), 10) === step);\n              });\n              var svgEl = qs(\"#fx-stage-svg\");\n              if (svgEl) svgEl.classList.toggle(\"is-active\", step !== 1);\n              var stageEl = qs(\".fx-stage\");\n              if (stageEl) stageEl.classList.toggle(\"fx-stage--tall\", step !== 1);\n              if (stageEl) stageEl.classList.toggle(\"fx-stage--xtall\", step === 6 || step === 8);\n              railBtns.forEach(function (b) {\n                var n = parseInt(b.getAttribute(\"data-step\"), 10);\n                if (n === step) {\n                  b.setAttribute(\"aria-current\", \"step\");\n                } else {\n                  b.removeAttribute(\"aria-current\");\n                }\n              });\n              if (bar) bar.style.width = (step \/ total) * 100 + \"%\";\n              var prev = qs(\"#fx-prev\"),\n                next = qs(\"#fx-next\");\n              if (prev) prev.disabled = step === 1;\n              if (next) next.textContent = step === total ? \"Restart\" : \"Next step\";\n              var mid = qs(\"#fx-stepmid\");\n              if (mid) mid.textContent = \"Step \" + step + \" of \" + total;\n              currentStepGlobal = step;\n              if (silent) return;\n              var pnl = qs(\".fx-panels\");\n              if (pnl) pnl.scrollTop = 0;\n              var seeAllLink = qs(\"#fx-seeall-link\");\n              if (seeAllLink) seeAllLink.href = embedBaseHref() + \"#story-\" + step;\n              scheduleEmbedHeight();\n            }\n            function goTo(step) {\n              if (1 > step) step = 1;\n              if (step > total) step = 1;\n              window.location.hash = \"story-\" + step;\n              if (isEmbed) {\n                try {\n                  window.parent.postMessage({ type: \"flock-embed-step\", step: step }, \"*\");\n                } catch (e) {}\n              }\n            }\n            window.addEventListener(\"hashchange\", function () {\n              render(currentStep());\n            });\n            if (rail)\n              rail.addEventListener(\"click\", function (e) {\n                var b = e.target.closest(\".fx-rail__btn\");\n                if (!b) return;\n                goTo(parseInt(b.getAttribute(\"data-step\"), 10));\n              });\n            var prevBtn = qs(\"#fx-prev\"),\n              nextBtn = qs(\"#fx-next\");\n            if (prevBtn)\n              prevBtn.addEventListener(\"click\", function () {\n                goTo(currentStep() - 1);\n              });\n            if (nextBtn)\n              nextBtn.addEventListener(\"click\", function () {\n                goTo(currentStep() + 1);\n              });\n            document.addEventListener(\"keydown\", function (e) {\n              var tag = document.activeElement ? document.activeElement.tagName : \"\";\n              if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return;\n              if (!section) return;\n              var r = section.getBoundingClientRect();\n              if (0 > r.bottom || r.top > window.innerHeight) return;\n              if (e.key === \"ArrowRight\") {\n                goTo(currentStep() + 1);\n              }\n              if (e.key === \"ArrowLeft\") {\n                goTo(currentStep() - 1);\n              }\n            });\n            function lockStoryHeight() {\n              var grid = qs(\".fx-storygrid\");\n              if (!grid) return;\n              var active = currentStepGlobal || currentStep();\n              var max = 0;\n              var compactNow = isCompactEmbed();\n              grid.style.alignItems = compactNow ? \"start\" : \"\";\n              for (var i = 1; total >= i; i++) {\n                render(i, true);\n                grid.style.height = \"auto\";\n                grid.style.minHeight = \"\";\n                var h = (compactNow ? grid.firstElementChild : grid).getBoundingClientRect().height;\n                if (h > max) max = h;\n              }\n              grid.style.alignItems = \"\";\n              render(active, true);\n              var px = Math.ceil(max) + \"px\";\n              grid.style.height = px;\n              grid.style.minHeight = px;\n              scheduleEmbedHeight();\n            }\n            lockStoryHeightRef = lockStoryHeight;\n            render(currentStep());\n            lockStoryHeight();\n\n            document.addEventListener(\"click\", function (e) {\n              var hot = e.target.closest(\".fx-hot\");\n              if (!hot) return;\n              var scene = hot.closest(\".fx-scene\");\n              var id = hot.getAttribute(\"data-card\");\n              var card = scene.querySelector('.fx-card[data-card=\"' + id + '\"]');\n              var wasOn = hot.getAttribute(\"aria-pressed\") === \"true\";\n              qsa(\".fx-hot\", scene).forEach(function (h) {\n                h.setAttribute(\"aria-pressed\", \"false\");\n              });\n              qsa(\".fx-card\", scene).forEach(function (c) {\n                c.classList.remove(\"fx-card--active\");\n              });\n              if (!wasOn && card) {\n                card.classList.add(\"fx-card--active\");\n                hot.setAttribute(\"aria-pressed\", \"true\");\n              }\n            });\n            document.addEventListener(\"keydown\", function (e) {\n              if (e.key !== \"Enter\" && e.key !== \" \") return;\n              var hot = e.target.closest ? e.target.closest(\".fx-hot\") : null;\n              if (!hot) return;\n              e.preventDefault();\n              hot.click();\n            });\n\n            var replay2 = qs(\"#fx-replay2\");\n            if (replay2)\n              replay2.addEventListener(\"click\", function () {\n                var car = qs(\"#fx-car\");\n                var flash = qs(\"#fx-flash\");\n                if (car) {\n                  car.style.animation = \"none\";\n                  void car.offsetWidth;\n                  car.style.animation = \"\";\n                }\n                if (flash) {\n                  flash.classList.remove(\"is-on\");\n                  void flash.offsetWidth;\n                  flash.classList.add(\"is-on\");\n                }\n              });\n\n            var hardBtn = qs(\"#fx-hardread\");\n            if (hardBtn)\n              hardBtn.addEventListener(\"click\", function () {\n                var scene = qs('.fx-scene[data-step=\"3\"]');\n                var on = scene.classList.toggle(\"is-hardread\");\n                hardBtn.textContent = on ? \"Show a clean read\" : \"Show a hard read\";\n              });\n\n            function step5Update() {\n              var scene = qs('.fx-scene[data-step=\"5\"]');\n              if (!scene) return;\n              var sel = qs('input[name=\"fx-ret\"]:checked');\n              var days = 7;\n              if (sel) {\n                if (sel.value === \"30\") days = 30;\n                else if (sel.value === \"custom\") {\n                  var n = qs(\"#fx-retcustom\");\n                  days = n ? parseInt(n.value || \"7\", 10) : 7;\n                }\n              }\n              if (isNaN(days) || 1 > days) days = 1;\n              var pct = (Math.min(days, 30) \/ 30) * 100;\n              var fill = qs(\"#fx-retfill\");\n              var label = qs(\"#fx-retlabel\");\n              var mark = qs(\"#fx-retmarker\");\n              if (fill) fill.style.width = pct.toFixed(1) + \"%\";\n              if (fill) fill.style.background = 7 >= days ? \"var(--gold)\" : \"var(--muted)\";\n              if (label) label.textContent = days + (days === 1 ? \" day\" : \" days\");\n              if (mark) mark.style.display = days > 30 ? \"block\" : \"none\";\n            }\n            qsa('input[name=\"fx-ret\"]').forEach(function (r) {\n              r.addEventListener(\"change\", step5Update);\n            });\n            var retcustom = qs(\"#fx-retcustom\");\n            if (retcustom)\n              retcustom.addEventListener(\"input\", function () {\n                var custom = qs('input[name=\"fx-ret\"][value=\"custom\"]');\n                if (custom) custom.checked = true;\n                step5Update();\n              });\n            step5Update();\n\n            function animateCount(el, target, ms) {\n              if (!el) return;\n              var start = 0,\n                t0 = null;\n              function tick(ts) {\n                if (!t0) t0 = ts;\n                var p = Math.min(1, (ts - t0) \/ ms);\n                var val = Math.round(start + (target - start) * (1 - Math.pow(1 - p, 3)));\n                el.textContent = val.toLocaleString(\"en-US\");\n                if (1 > p) requestAnimationFrame(tick);\n              }\n              requestAnimationFrame(tick);\n            }\n            var weekBtn = qs(\"#fx-search-week\"),\n              monthBtn = qs(\"#fx-search-month\");\n            if (weekBtn)\n              weekBtn.addEventListener(\"click\", function () {\n                qs(\"#fx-search-scene\").classList.add(\"is-fanned\");\n                animateCount(qs(\"#fx-cam-count\"), 17684, 900);\n                animateCount(qs(\"#fx-net-count\"), 1295, 900);\n                var cap = qs(\"#fx-search-caption\");\n                if (cap) cap.textContent = \"One week of search reach, per EFF's review of a Texas case.\";\n              });\n            if (monthBtn)\n              monthBtn.addEventListener(\"click\", function () {\n                qs(\"#fx-search-scene\").classList.add(\"is-fanned\");\n                animateCount(qs(\"#fx-cam-count\"), 83345, 1100);\n                animateCount(qs(\"#fx-net-count\"), 6809, 1100);\n                var cap = qs(\"#fx-search-caption\");\n                if (cap) cap.textContent = \"One month of search reach, per EFF's review of the same case.\";\n              });\n\n            function step7Update() {\n              var input = qs(\"#fx-crashdate\");\n              if (!input || !input.value) return;\n              var d7 = addDays(input.value, 7),\n                d30 = addDays(input.value, 30);\n              var o7 = qs(\"#fx-crash7\"),\n                o30 = qs(\"#fx-crash30\"),\n                l7 = qs(\"#fx-crashleft7\"),\n                l30 = qs(\"#fx-crashleft30\");\n              if (o7) o7.textContent = fmtDate(d7);\n              if (o30) o30.textContent = fmtDate(d30);\n              if (l7) l7.textContent = leftLabel(daysLeft(d7));\n              if (l30) l30.textContent = leftLabel(daysLeft(d30));\n            }\n            var crashInput = qs(\"#fx-crashdate\");\n            if (crashInput) {\n              crashInput.value = todayISO();\n              crashInput.addEventListener(\"input\", step7Update);\n              step7Update();\n            }\n          }\n\n          function clockUpdate() {\n            var input = qs(\"#fx-clock-date\");\n            if (!input || !input.value) return;\n            var d7 = addDays(input.value, 7),\n              d30 = addDays(input.value, 30);\n            var o7 = qs(\"#fx-clock7\"),\n              o30 = qs(\"#fx-clock30\"),\n              l7 = qs(\"#fx-clockleft7\"),\n              l30 = qs(\"#fx-clockleft30\");\n            if (o7) o7.textContent = fmtDate(d7);\n            if (o30) o30.textContent = fmtDate(d30);\n            if (l7) l7.textContent = leftLabel(daysLeft(d7));\n            if (l30) l30.textContent = leftLabel(daysLeft(d30));\n          }\n          function initClock() {\n            var input = qs(\"#fx-clock-date\");\n            if (!input) return;\n            input.value = todayISO();\n            input.addEventListener(\"input\", clockUpdate);\n            clockUpdate();\n          }\n\n          function copyText(text, btn, activeLabel) {\n            var old = btn.textContent;\n            function done() {\n              btn.textContent = activeLabel || \"Copied\";\n              setTimeout(function () {\n                btn.textContent = old;\n              }, 2000);\n            }\n            if (navigator.clipboard && navigator.clipboard.writeText) {\n              navigator.clipboard\n                .writeText(text)\n                .then(done)\n                .catch(function () {\n                  var ta = document.createElement(\"textarea\");\n                  ta.value = text;\n                  ta.style.position = \"fixed\";\n                  ta.style.opacity = \"0\";\n                  document.body.appendChild(ta);\n                  ta.select();\n                  try {\n                    document.execCommand(\"copy\");\n                  } catch (e) {}\n                  document.body.removeChild(ta);\n                  done();\n                });\n            } else {\n              var ta = document.createElement(\"textarea\");\n              ta.value = text;\n              ta.style.position = \"fixed\";\n              ta.style.opacity = \"0\";\n              document.body.appendChild(ta);\n              ta.select();\n              try {\n                document.execCommand(\"copy\");\n              } catch (e) {}\n              document.body.removeChild(ta);\n              done();\n            }\n          }\n          function initEmbedConfigurator() {\n            var wholeR = qs(\"#fx-embed-whole\"),\n              oneR = qs(\"#fx-embed-one\"),\n              stepSel = qs(\"#fx-embed-step\");\n            var ta = qs(\"#fx-embedcode\"),\n              copyBtn = qs(\"#fx-copybtn\"),\n              preview = qs(\"#fx-embedpreview\");\n            if (!wholeR || !oneR || !stepSel || !ta) return;\n            function buildSnippet() {\n              var only = oneR.checked;\n              var step = parseInt(stepSel.value, 10) || 1;\n              var base = embedBaseHref();\n              var qs2 = \"view=embed\" + (only ? \"\\u0026step=\" + step + \"\\u0026only=1\" : step !== 1 ? \"\\u0026step=\" + step : \"\");\n              var url = base + \"?\" + qs2;\n              var height = only ? 640 : 760;\n              var title = \"How a Flock Camera Works, an interactive walkthrough\";\n              var html =\n                '<iframe data-flock-embed src=\"' +\n                url +\n                '\" width=\"100%\" height=\"' +\n                height +\n                '\" style=\"border:0;width:100%;max-width:100%\" title=\"' +\n                title +\n                '\" loading=\"lazy\" allowfullscreen><\\\/iframe>\\n' +\n                '<script>window.addEventListener(\"message\",function(e){var d=e.data;if(!d||!d.type)return;document.querySelectorAll(\"iframe[data-flock-embed]\").forEach(function(f){if(f.contentWindow!==e.source)return;if(d.type===\"flock-embed-height\")f.style.height=d.height+\"px\";if(d.type===\"flock-embed-step\"){var r=f.getBoundingClientRect();if(0>r.top||r.bottom>window.innerHeight)f.scrollIntoView({behavior:\"smooth\",block:\"nearest\"});}});});<\\\/script>\\n' +\n                '<p style=\"font-size:.85em;margin-top:4px\">Data by <a href=\"' +\n                CANONICAL_URL +\n                '\">J. Alexander Law Firm<\\\/a>.<\\\/p>';\n              return { html: html, url: url, height: height };\n            }\n            function update() {\n              var built = buildSnippet();\n              ta.value = built.html;\n              if (preview && !isEmbed) {\n                preview.src = built.url;\n                preview.setAttribute(\"height\", String(built.height));\n              }\n            }\n            wholeR.addEventListener(\"change\", update);\n            oneR.addEventListener(\"change\", update);\n            stepSel.addEventListener(\"change\", update);\n            window.addEventListener(\"message\", function (e) {\n              if (!e.data || !preview || preview.contentWindow !== e.source) return;\n              if (e.data.type === \"flock-embed-height\") preview.style.height = e.data.height + \"px\";\n              if (e.data.type === \"flock-embed-step\") {\n                var pr = preview.getBoundingClientRect();\n                if (0 > pr.top || pr.bottom > window.innerHeight) preview.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n              }\n            });\n            update();\n            if (copyBtn)\n              copyBtn.addEventListener(\"click\", function () {\n                copyText(ta.value, copyBtn, \"Copied\");\n              });\n            var citeBtn = qs(\"#fx-citebtn\");\n            if (citeBtn)\n              citeBtn.addEventListener(\"click\", function () {\n                var el = qs(\"#fx-cite-text\");\n                copyText(el ? el.textContent : \"\", citeBtn, \"Copied\");\n              });\n            var copyStepBtn = qs(\"#fx-copystep\");\n            if (copyStepBtn)\n              copyStepBtn.addEventListener(\"click\", function () {\n                var url = embedBaseHref() + \"#story-\" + currentStepGlobal;\n                copyText(url, copyStepBtn, \"Link copied\");\n              });\n          }\n\n          function addArchiveLinks() {\n            var snap = window.__FLOCK_SNAPSHOT;\n            if (!snap || !snap.archives) return;\n            qsa(\"[data-src-url]\").forEach(function (a) {\n              var u = a.getAttribute(\"data-src-url\");\n              if (snap.archives[u]) {\n                var link = document.createElement(\"a\");\n                link.href = snap.archives[u];\n                link.className = \"arch\";\n                link.textContent = \" (archived copy)\";\n                a.insertAdjacentElement(\"afterend\", link);\n              }\n            });\n          }\n\n          function escHTML(s) {\n            return String(s).replace(\/\\u0026\/g, \"\\u0026amp;\").replace(\/\\u003c\/g, \"\\u0026lt;\").replace(\/>\/g, \"\\u0026gt;\");\n          }\n          function initTurntable() {\n            var root = qs(\"#fx-tt\");\n            var manifestEl = qs(\"#fx-turntable-manifest\");\n            if (!root || !manifestEl) return;\n            var manifest;\n            try {\n              manifest = JSON.parse(manifestEl.textContent);\n            } catch (e) {\n              return;\n            }\n            var frames = manifest.frames || [];\n            var hotspots = manifest.hotspots || [];\n            var N = frames.length;\n            if (!N) return;\n            var stage = qs(\"#fx-tt-stage\");\n            var imgwrap = qs(\"#fx-tt-imgwrap\");\n            var hotlayer = qs(\"#fx-tt-hotlayer\");\n            var partsList = qs(\"#fx-tt-parts\");\n            var cardEl = qs(\"#fx-tt-cardslot\");\n            var cardPrompt = \"Hover a numbered point, or pick a part below the model.\";\n            var liveEl = qs(\"#fx-tt-live\");\n            var prevBtn = qs(\"#fx-tt-prev\"),\n              nextBtn = qs(\"#fx-tt-next\");\n            var viewNameEl = qs(\"#fx-tt-viewname\");\n            var hintEl = qs(\"#fx-tt-hint\");\n            var reduced = window.matchMedia && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n            var step = 360 \/ N;\n\n            var imgs = frames.map(function (f, i) {\n              var im = document.createElement(\"img\");\n              im.src = f.src;\n              im.alt = f.alt || \"\";\n              im.className = \"fx-tt-img\";\n              im.draggable = false;\n              im.style.opacity = i === 0 ? \"1\" : \"0\";\n              imgwrap.appendChild(im);\n              return im;\n            });\n            frames.forEach(function (f) {\n              var pre = new Image();\n              pre.src = f.src;\n            });\n            var loadedCount = 0,\n              settleCalled = false;\n            function onFrameSettle() {\n              loadedCount++;\n              if (loadedCount >= imgs.length && !settleCalled) {\n                settleCalled = true;\n                if (lockStoryHeightRef) lockStoryHeightRef();\n              }\n            }\n            imgs.forEach(function (im) {\n              if (im.complete) {\n                onFrameSettle();\n              } else {\n                im.addEventListener(\"load\", onFrameSettle);\n                im.addEventListener(\"error\", onFrameSettle);\n              }\n            });\n\n            var hotEls = {};\n            hotspots.forEach(function (h) {\n              var btn = document.createElement(\"button\");\n              btn.type = \"button\";\n              btn.className = \"fx-tt-hot\";\n              btn.textContent = String(h.number);\n              btn.setAttribute(\"aria-label\", h.number + \". \" + h.title);\n              btn.setAttribute(\"aria-expanded\", \"false\");\n              hotlayer.appendChild(btn);\n              hotEls[h.id] = btn;\n              btn.addEventListener(\"click\", function (e) {\n                e.stopPropagation();\n                toggleCard(h.id, btn);\n              });\n              btn.addEventListener(\"mouseenter\", function () {\n                if (state === \"idle\" || state === \"presenting\") openCard(h.id, false);\n              });\n              btn.addEventListener(\"mouseleave\", function () {\n                if (!cardPinned) closeCard();\n              });\n              btn.addEventListener(\"focus\", function () {\n                if (suppressFocusOpen) return;\n                if (state === \"idle\" || state === \"presenting\") openCard(h.id, false);\n              });\n              btn.addEventListener(\"blur\", function () {\n                if (!cardPinned) closeCard();\n              });\n            });\n\n            var partLis = {};\n            if (partsList) {\n              partsList.addEventListener(\"keydown\", function (e) {\n                if (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\" && e.key !== \"Home\" && e.key !== \"End\") return;\n                e.stopPropagation();\n                if (e.key === \"ArrowRight\") {\n                  e.preventDefault();\n                  stepView(1);\n                } else if (e.key === \"ArrowLeft\") {\n                  e.preventDefault();\n                  stepView(-1);\n                } else if (e.key === \"Home\") {\n                  e.preventDefault();\n                  settleTo(0, true);\n                } else if (e.key === \"End\") {\n                  e.preventDefault();\n                  settleTo(N - 1, true);\n                }\n              });\n              qsa(\".fx-tt-part\", partsList).forEach(function (li) {\n                var id = li.getAttribute(\"data-part\");\n                partLis[id] = li;\n                li.addEventListener(\"click\", function () {\n                  selectPart(id);\n                });\n              });\n            }\n\n            var state = \"idle\",\n              angle = 0,\n              settledIndex = 0,\n              cardPinned = false,\n              openPartId = null,\n              suppressFocusOpen = false;\n\n            function normalize(a) {\n              a = a % 360;\n              if (0 > a) a += 360;\n              return a;\n            }\n            function nearestIndex(a) {\n              var idx = Math.round(a \/ step) % N;\n              if (0 > idx) idx += N;\n              return idx;\n            }\n            function frac(a) {\n              var raw = a \/ step;\n              var lower = Math.floor(raw) % N;\n              if (0 > lower) lower += N;\n              var upper = (lower + 1) % N;\n              return { lower: lower, upper: upper, f: raw - Math.floor(raw) };\n            }\n            function render() {\n              var ff = frac(angle);\n              for (var i = 0; N > i; i++) {\n                var op = 0;\n                if (i === ff.lower) op = 1 - ff.f;\n                else if (i === ff.upper) op = ff.f;\n                imgs[i].style.opacity = String(op);\n              }\n            }\n            function updateViewName(idx, ang) {\n              var f = frames[idx];\n              if (viewNameEl)\n                viewNameEl.innerHTML =\n                  escHTML(f.name) + ', <span class=\"fx-tt-angle\">' + Math.round(ang) + \"<\\\/span>\\u00b0\";\n            }\n            function showHotspotsFor(idx) {\n              hotspots.forEach(function (h) {\n                var pt = h.points.filter(function (p) {\n                  return p.frame === idx;\n                })[0];\n                var el = hotEls[h.id];\n                if (pt) {\n                  el.style.left = pt.x * 100 + \"%\";\n                  el.style.top = pt.y * 100 + \"%\";\n                  el.classList.add(\"is-visible\");\n                } else {\n                  el.classList.remove(\"is-visible\");\n                }\n              });\n            }\n            function hideAllHotspots() {\n              hotspots.forEach(function (h) {\n                hotEls[h.id].classList.remove(\"is-visible\");\n              });\n            }\n\n            function settleTo(targetIdx, animate, cb) {\n              var targetAngle = targetIdx * step;\n              var cur = angle;\n              var diff = targetAngle - cur;\n              while (diff > 180) diff -= 360;\n              while (-180 > diff) diff += 360;\n              var start = cur;\n              if (!animate || reduced) {\n                angle = normalize(targetAngle);\n                settledIndex = targetIdx;\n                render();\n                updateViewName(settledIndex, angle);\n                showHotspotsFor(settledIndex);\n                state = state === \"presenting\" ? \"presenting\" : \"idle\";\n                if (state !== \"presenting\") state = \"idle\";\n                if (cb) cb();\n                return;\n              }\n              state = \"settling\";\n              hideAllHotspots();\n              var dur = 420,\n                t0 = null;\n              function tick(ts) {\n                if (!t0) t0 = ts;\n                var p = Math.min(1, (ts - t0) \/ dur);\n                var eased = 1 - Math.pow(1 - p, 3);\n                angle = normalize(start + diff * eased);\n                render();\n                if (1 > p) {\n                  requestAnimationFrame(tick);\n                } else {\n                  angle = normalize(targetAngle);\n                  settledIndex = targetIdx;\n                  render();\n                  updateViewName(settledIndex, angle);\n                  showHotspotsFor(settledIndex);\n                  state = \"idle\";\n                  if (cb) cb();\n                }\n              }\n              requestAnimationFrame(tick);\n            }\n            function stepView(dir) {\n              var target = (settledIndex + dir + N) % N;\n              settleTo(target, true);\n            }\n            if (prevBtn)\n              prevBtn.addEventListener(\"click\", function () {\n                stepView(-1);\n              });\n            if (nextBtn)\n              nextBtn.addEventListener(\"click\", function () {\n                stepView(1);\n              });\n            if (stage)\n              stage.addEventListener(\"keydown\", function (e) {\n                if (e.key === \"ArrowRight\") {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  stepView(1);\n                }\n                if (e.key === \"ArrowLeft\") {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  stepView(-1);\n                }\n              });\n            if (root)\n              root.addEventListener(\"keydown\", function (e) {\n                if (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\" && e.key !== \"Home\" && e.key !== \"End\") return;\n                e.stopPropagation();\n                if (e.key === \"ArrowRight\") {\n                  e.preventDefault();\n                  stepView(1);\n                } else if (e.key === \"ArrowLeft\") {\n                  e.preventDefault();\n                  stepView(-1);\n                } else if (e.key === \"Home\") {\n                  e.preventDefault();\n                  settleTo(0, true);\n                } else if (e.key === \"End\") {\n                  e.preventDefault();\n                  settleTo(N - 1, true);\n                }\n              });\n\n            var dragging = false,\n              startX = 0,\n              startAngle = 0,\n              lastX = 0,\n              lastT = 0,\n              velocity = 0;\n            function firstDrag() {\n              if (hintEl) hintEl.classList.add(\"is-hidden\");\n            }\n            function pointerDown(e) {\n              if (e.button !== undefined && e.button !== 0) return;\n              dragging = true;\n              state = \"dragging\";\n              hideAllHotspots();\n              closeCard();\n              firstDrag();\n              if (stage) stage.classList.add(\"is-dragging\");\n              startX = e.clientX;\n              startAngle = angle;\n              lastX = e.clientX;\n              lastT = performance.now();\n              velocity = 0;\n              if (stage && stage.setPointerCapture && e.pointerId != null) {\n                try {\n                  stage.setPointerCapture(e.pointerId);\n                } catch (err) {}\n              }\n            }\n            function pointerMove(e) {\n              if (!dragging) return;\n              if (stage && stage.offsetParent === null) {\n                dragging = false;\n                return;\n              }\n              var x = e.clientX;\n              var dx = x - startX;\n              var stageW = (stage && stage.getBoundingClientRect().width) || 640;\n              var deltaAngle = (dx \/ stageW) * 360;\n              var now = performance.now();\n              var dt = now - lastT;\n              if (dt > 0) {\n                velocity = (((x - lastX) \/ stageW) * 360) \/ dt;\n              }\n              lastX = x;\n              lastT = now;\n              angle = normalize(startAngle + deltaAngle);\n              if (reduced) {\n                angle = nearestIndex(angle) * step;\n              }\n              render();\n            }\n            function pointerUp() {\n              if (!dragging) return;\n              dragging = false;\n              if (stage) stage.classList.remove(\"is-dragging\");\n              if (reduced) {\n                settleTo(nearestIndex(angle), false);\n                return;\n              }\n              var proj = angle + velocity * 80;\n              settleTo(nearestIndex(proj), true);\n            }\n            if (stage) {\n              stage.addEventListener(\"pointerdown\", pointerDown);\n              stage.addEventListener(\"dragstart\", function (e) {\n                e.preventDefault();\n              });\n            }\n            window.addEventListener(\"pointermove\", pointerMove);\n            window.addEventListener(\"pointerup\", pointerUp);\n\n            function cardHTML(h) {\n              var lines = h.lines\n                .map(function (l) {\n                  return \"<p>\" + escHTML(l) + \"<\\\/p>\";\n                })\n                .join(\"\");\n              var srcNum = (h.src || \"\").replace(\"src-\", \"\");\n              var fn = srcNum ? '<a class=\"fx-fn\" href=\"#' + escHTML(h.src) + '\">[' + escHTML(srcNum) + \"]<\\\/a>\" : \"\";\n              return (\n                '<span class=\"fx-tt-card__num\">' +\n                h.number +\n                \"<\\\/span>\" +\n                '<h3 class=\"fx-tt-card__title\">' +\n                escHTML(h.title) +\n                \"<\\\/h3>\" +\n                lines +\n                fn\n              );\n            }\n            function openCard(partId, pinned) {\n              var h = hotspots.filter(function (x) {\n                return x.id === partId;\n              })[0];\n              if (!h || !cardEl) return;\n              openPartId = partId;\n              cardEl.innerHTML = cardHTML(h);\n              cardEl.classList.add(\"is-active\");\n              if (pinned) cardPinned = true;\n              hotspots.forEach(function (x) {\n                hotEls[x.id].setAttribute(\"aria-expanded\", x.id === partId ? \"true\" : \"false\");\n              });\n              Object.keys(partLis).forEach(function (id) {\n                partLis[id].classList.toggle(\"is-active\", id === partId);\n                partLis[id].setAttribute(\"aria-expanded\", id === partId ? \"true\" : \"false\");\n              });\n              if (liveEl) liveEl.textContent = frames[settledIndex].name + \". \" + h.title;\n              scheduleEmbedHeight();\n            }\n            function closeCard() {\n              if (!cardEl) return;\n              cardEl.innerHTML = '<p class=\"fx-tt-cardslot__prompt\">' + escHTML(cardPrompt) + \"<\\\/p>\";\n              cardEl.classList.remove(\"is-active\");\n              openPartId = null;\n              cardPinned = false;\n              hotspots.forEach(function (x) {\n                hotEls[x.id].setAttribute(\"aria-expanded\", \"false\");\n              });\n              Object.keys(partLis).forEach(function (id) {\n                partLis[id].classList.remove(\"is-active\");\n                partLis[id].setAttribute(\"aria-expanded\", \"false\");\n              });\n              scheduleEmbedHeight();\n            }\n            function toggleCard(partId) {\n              if (openPartId === partId && cardPinned) {\n                var t = hotEls[partId];\n                closeCard();\n                if (t) t.focus();\n                return;\n              }\n              openCard(partId, true);\n            }\n            function selectPart(partId) {\n              var h = hotspots.filter(function (x) {\n                return x.id === partId;\n              })[0];\n              if (!h) return;\n              var visibleHere = h.points.filter(function (p) {\n                return p.frame === settledIndex;\n              })[0];\n              var targetFrame = visibleHere ? settledIndex : h.points[0].frame;\n              state = \"presenting\";\n              settleTo(targetFrame, true, function () {\n                openCard(partId, true);\n              });\n            }\n            document.addEventListener(\"keydown\", function (e) {\n              if (e.key === \"Escape\" && openPartId) {\n                var t = hotEls[openPartId];\n                closeCard();\n                suppressFocusOpen = true;\n                if (t) t.focus();\n                setTimeout(function () {\n                  suppressFocusOpen = false;\n                }, 0);\n              }\n            });\n            document.addEventListener(\"click\", function (e) {\n              var inStage = root && root.contains(e.target);\n              var inCard = cardEl && cardEl.contains(e.target);\n              var inParts = partsList && partsList.contains(e.target);\n              if (cardPinned && !inStage && !inCard && !inParts) closeCard();\n            });\n\n            if (isEmbed && !reduced) {\n              var spinTimer = setInterval(function () {\n                if (dragging || state !== \"idle\") return;\n                if (!root.classList.contains(\"is-active\")) return;\n                stepView(1);\n              }, 2600);\n              if (stage)\n                stage.addEventListener(\"pointerdown\", function () {\n                  clearInterval(spinTimer);\n                });\n            }\n            render();\n            updateViewName(0, angle);\n            showHotspotsFor(0);\n            root.classList.add(\"is-introducing\");\n            setTimeout(function () {\n              root.classList.remove(\"is-introducing\");\n            }, 3000);\n          }\n\n          function boot() {\n            var rootEl = document.querySelector(\".jca-flock\");\n            if (rootEl) rootEl.classList.add(\"is-ready\");\n            initStory();\n            initTurntable();\n            initClock();\n            initEmbedMode();\n            initEmbedConfigurator();\n            addArchiveLinks();\n          }\n          if (document.readyState === \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", boot);\n          } else {\n            boot();\n          }\n        })();\n      <\/script>\n    <\/main>\n  <\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>How a Flock Camera Works: Texas Explainer | J. Alexander Law J. Alexander Law Firm For reporters and editors. Texas. Updated September 2026 Flock Cameras: How They Work, From the Pole to the Case File See every part of the camera that captures a plate, in an interactive 360 degree view. 12345678 Frame captured (example)2026-09-14 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1711,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/full-width.php","meta":{"_seopress_titles_title":"How Flock Cameras Work, Step by Step | J. Alexander Law","_seopress_titles_desc":"Flock cameras photograph every passing car, read its plate, make and color, and send the record to the cloud. It deletes after 7 days by default.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"_gspb_post_css":"","footnotes":""},"class_list":["post-4728","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/pages\/4728","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/comments?post=4728"}],"version-history":[{"count":7,"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/pages\/4728\/revisions"}],"predecessor-version":[{"id":4796,"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/pages\/4728\/revisions\/4796"}],"up":[{"embeddable":true,"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/pages\/1711"}],"wp:attachment":[{"href":"https:\/\/severeinjurylawyers.com\/es\/wp-json\/wp\/v2\/media?parent=4728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}