{
  "schemaVersion": 1,
  "capturedAt": "2026-08-07T00:00:00Z",
  "task": "Task 13 — consolidate motion and prove cleanup inventory",
  "consolidatedKeyframes": {
    "location": "admin/src/styles/_animations.scss",
    "count": 24,
    "migratedFrom": [
      { "keyframe": "presszone-international-float", "movedFrom": "admin/src/styles/_dashboard-shared.scss", "renamed": false },
      { "keyframe": "presszone-international-tooltip-fade-in", "movedFrom": "admin/src/styles/_forms.scss", "renamed": true, "originalName": "tooltipFadeIn" },
      { "keyframe": "presszone-international-tab-panel-fade-in", "movedFrom": "admin/src/styles/components/_tabs.scss", "renamed": true, "originalName": "fadeIn" },
      { "keyframe": "presszone-international-modal-in", "movedFrom": "admin/src/styles/_utilities.scss", "renamed": false },
      { "keyframe": "presszone-international-modal-premium-in", "movedFrom": "admin/src/styles/_utilities.scss", "renamed": false },
      { "keyframe": "presszone-international-modal-premium-out", "movedFrom": "admin/src/styles/_utilities.scss", "renamed": false },
      { "keyframe": "presszone-international-success-pulse", "movedFrom": "admin/src/styles/_utilities.scss", "renamed": false },
      { "keyframe": "presszone-international-error-shake", "movedFrom": "admin/src/styles/_utilities.scss", "renamed": false },
      { "keyframe": "presszone-international-progress-stripes", "movedFrom": "admin/src/styles/components/_progress-bar.scss", "renamed": true, "originalName": "ipz-progress-stripes" },
      { "keyframe": "presszone-international-progress-indeterminate", "movedFrom": "admin/src/styles/components/_progress-bar.scss", "renamed": true, "originalName": "ipz-progress-indeterminate", "note": "Renaming also eliminated a global keyframe-name collision with pages/_translations.scss's own (differently-bodied) ipz-progress-indeterminate, which previously shadowed this component's animation in the compiled cascade." },
      { "keyframe": "presszone-international-progress-complete", "movedFrom": "admin/src/styles/components/_progress-bar.scss", "renamed": true, "originalName": "ipz-progress-complete" },
      { "keyframe": "presszone-international-skeleton-shimmer", "movedFrom": "admin/src/styles/components/_flag-picker.scss", "renamed": true, "originalName": "skeleton-loading" }
    ],
    "dedupedInPlace": [
      "presszone-international-slide-in-left/right/top/bottom, fade-in/out, scale-in/out, rotate-in/out, bounce-in/out were each declared three times verbatim inside _animations.scss itself; reduced to one declaration each."
    ],
    "reuseNotDuplication": [
      {
        "keyframe": "presszone-international-spin",
        "declaredIn": "admin/src/styles/_base.scss",
        "reusedBy": ["admin/src/styles/components/_spinner.scss", "admin/src/styles/_utilities.scss"],
        "note": "_base.scss is out of Task 13's edit scope (owned by another agent). Rather than declare a second presszone-international-spin in _animations.scss (which would be a duplicate name), both owned usages now reference the existing canonical keyframe. Full consolidation into _animations.scss is blocked on _base.scss ownership and is left for whichever task next touches that file."
      }
    ]
  },
  "bugsFixedInOwnedFiles": [
    {
      "file": "admin/src/styles/_utilities.scss",
      "selector": ".presszone-international-form-group--animated",
      "description": "Referenced a keyframe name (`presszone-international-slide-in-up`) that never existed anywhere in the codebase. Per CSS semantics an animation-name that resolves to no @keyframes rule never renders, so the element stayed at its static `opacity: 0` permanently. Repointed at the canonical `presszone-international-slide-in-bottom` keyframe, which is the correct bottom-origin motion for this class's intent."
    },
    {
      "file": "admin/src/styles/_utilities.scss",
      "selector": "reduced-motion block",
      "description": "Listed `.presszone-international-skeleton`, a class no skeleton markup actually emits (Skeleton.js emits `.international-skeleton`), so skeleton loading animation was never disabled under prefers-reduced-motion. Added `.international-skeleton` alongside the pre-existing (harmless but non-matching) selector."
    }
  ],
  "outOfScopeDanglingAnimationNameInventory": {
    "note": "Tree-wide compiled-CSS scan (added to motion-contract.test.js after review) found pre-existing dangling animation-name references — same defect class as the presszone-international-slide-in-up bug this task fixed in its own _utilities.scss — in a file outside this task's edit scope. Not fixed; recorded here and excepted in the test so the test still catches any NEW dangling name.",
    "file": "admin/src/styles/_settings-shared.scss",
    "items": [
      { "keyframe": "presszone-international-slide-in-up", "line": 138 },
      { "keyframe": "presszone-international-pop-in", "line": 442 },
      { "keyframe": "presszone-international-slide-in-down", "line": 602 }
    ],
    "issue": "None of these three names resolve to any @keyframes rule anywhere in the compiled admin stylesheet. Each usage is a permanent no-op; any static (non-animated) properties on the affected elements stay in their initial state forever."
  },
  "outOfScopeDuplicateKeyframeInventory": {
    "note": "Found by repository search. All of these live in files this task is not permitted to edit (owned by other in-flight agents per the dispatch file allowlist). Recorded here, not fixed, not deleted.",
    "items": [
      { "keyframe": "spin", "locations": ["admin/src/styles/components/_sortable-list.scss:282", "admin/src/styles/pages/_settings.scss:221"], "issue": "Two more near-duplicates of the rotate-360 spin animation beyond the ones this task already resolved (presszone-international-spin in _base.scss; components/_spinner.scss now reuses it)." },
      { "keyframe": "ipz-spin", "locations": ["admin/src/styles/pages/_languages.scss:293", "admin/src/styles/pages/_dashboard.scss:268", "admin/src/styles/pages/_translations.scss:1129", "admin/src/styles/pages/_dashboard.scss.backup:266 (as mpz-spin)"], "issue": "Same rotate-360 spin animation declared independently per page instead of reusing presszone-international-spin." },
      { "keyframe": "ipz-progress-indeterminate", "locations": ["admin/src/styles/pages/_translations.scss:1124"], "issue": "Local redeclaration with a different (2-step) body than the canonical progress-bar animation. No longer collides with the component's keyframe (which this task renamed), but remains a redundant local definition." },
      { "keyframe": "ipz-modal-enter", "locations": ["admin/src/styles/pages/_languages.scss:403"], "issue": "Overlaps in purpose with presszone-international-modal-in but not consolidated." },
      { "keyframe": "presszone-international-tab-slide-in-from-right/-from-left/-out-left/-out-right", "locations": ["admin/src/styles/_tab-animations.scss"], "issue": "A whole parallel motion partial for directional tab sliding; semantically related to the slide-in-* set in _animations.scss but not folded in." },
      { "keyframe": "mpzToastIn / mpzToastOut", "locations": ["admin/src/styles/components/_toast.scss"], "issue": "Legacy `mpz` prefix, never migrated to the presszone-international-* naming convention or to _animations.scss." },
      { "keyframe": "ghostFloat / placeholderPulse", "locations": ["admin/src/styles/components/_sortable-list.scss"], "issue": "Unprefixed keyframe names outside _animations.scss." },
      { "keyframe": "ipz-badge-pulse", "locations": ["admin/src/styles/components/_badge.scss"], "issue": "Not migrated to _animations.scss." },
      { "keyframe": "ipz-exceptions-pulse", "locations": ["admin/src/styles/pages/_exceptions.scss"], "issue": "Not migrated to _animations.scss." }
    ]
  },
  "obsoleteLoadingModuleInventory": {
    "method": "For every admin/src/**/*.js file, grepped the rest of admin/src for its basename as an import/route target; cross-checked zero-reference candidates against admin/webpack.config.js entries and admin/src/main.js's dynamic-import route table; then git-log --follow'd each survivor to determine whether it predates docs/plans/2026-08-04-admin-snappy.md.",
    "cacheJs": {
      "file": "admin/src/utils/Cache.js",
      "status": "deleted in 9f5d447c after zero-reference checks across source, tests, Webpack entries, dynamic imports, and built runtime."
    },
    "preExistingDeadCode": {
      "note": "All items below first appear in commit c87a0ded ('feat: add international-press-zone plugin and backend support'), the original plugin scaffold — they predate the admin-snappy plan and were not created or orphaned by Tasks 1-12. None were deleted; DO NOT delete without an explicit owner decision.",
      "items": [
        { "file": "admin/src/pages/translate-posts.js", "reason": "No import, no route registration in main.js's dynamic-import table." },
        { "file": "admin/src/pages/WorkflowDashboard.js", "reason": "No import, no 'workflow' route in main.js." },
        { "file": "admin/src/pages/TeamDashboard.js", "reason": "No import, no 'team' route in main.js." },
        { "file": "admin/src/pages/my-assignments.js", "reason": "No import, no 'assignments' route in main.js." },
        { "file": "admin/src/components/TranslationProgress.js", "reason": "Zero references anywhere in admin/src." },
        { "file": "admin/src/components/StateTransitionButton.js", "reason": "Zero references anywhere in admin/src." }
      ]
    },
    "obsoleteFilesCreatedByThisPlan": {
      "found": false,
      "note": "No admin/src production file introduced or left orphaned by Tasks 1-12 of the admin-snappy plan was found with zero references. Acceptance is not blocked on this ground."
    }
  }
}
