[Mappe·Shared] Card primitive with mint accent variants (§7) #858
Open
opened 2026-06-16 10:53:47 +02:00 by marcel
·
0 comments
No Branch/Tag Specified
main
feat/issue-856-page-header
feat/issue-859-meta-line
feat/issue-858-card
feat/issue-860-empty-state
feat/issue-861-status-dot
feat/issue-855-avatar
feat/issue-857-segmented-control
feat/issue-850-inline-event-clustering
devops/issue-848-fork-exit-timeout
feat/issue-827-zeitstrahl-grouping
feat/issue-837-relationship-edit-dates
feat/issue-818-renovate-nightly-audit
feat/issue-803-geschichten-document-filter-chip
worktree-feat+issue-738-nl-search-backend
feat/issue-286-notification-bell-form-actions
feat/issue-580-sentry-backend
fix/issue-593-management-port-zero
worktree-feat+issue-557-upload-artifact-v3-pin
worktree-chore+issue-556-drop-client-branches-coverage-gate
fix/issue-514-prerender-crawl-bakes-redirects
fix/issue-472-prerender-entries
feat/issue-395-readme
feat/issue-345-bulk-mark-reviewed
feat/issue-344-bell-tooltip
feat/issue-341-annotieren-contrast
feat/issue-225-bulk-metadata-edit
feat/issue-317-bulk-upload
feat/issue-271-dashboard-redesign
docs/issue-240-mission-control-spec
refactor/issues-193-200
feat/issue-162-korrespondenz-redesign
feature/68-new-document-file-first
feat/81-discussion-discoverability
feat/62-document-bottom-panel
feature/56-backfill-file-hashes
feat/38-document-edit-history
fix/svelte5-test-delegation-and-login-auth
No results found.
Labels
Clear labels
P0-critical
P1-high
P2-medium
P3-later
audit
bug
cleanup
collaboration
conversation
descoped
devops
documentation
epic
feature
file-upload
legibility
needs-discussion
needs-review
notification
person
phase-1: security
phase-2: container-images
phase-3: prod-compose
phase-4: spring-prod-profile
phase-5: backups
phase-6: deployment-docs
phase-7: monitoring
redesign-mappe
refactor
security
spec-required
test
ui
user
Blocks a core user journey, causes data loss, or is a security/accessibility barrier. Work on this before P1+.
Significant friction on a main user journey; workaround exists but is non-obvious. Next up after P0.
Noticeable improvement; doesn't block anything; schedule opportunistically.
Cosmetic or parking-lot work; fine to stay open indefinitely.
Read-only audit / assessment work; produces a report rather than changing code
Something isn't working
Removal of dead code, vague comments, naming violations, and scratch artifacts
We want to extend the family archive to have more collaboration tools
We will do that later
README, ARCHITECTURE, GLOSSARY, CONTRIBUTING, per-domain docs
Marker for epic-level issues that group multiple child issues
Codebase Legibility Refactor — preparing the codebase for human evaluation and bus-factor reduction
Has an open decision or design question that must be resolved before implementation can start.
Spec is drafted and awaiting the multi-persona /review-issue gate.
Security hygiene — must be done first
Production-ready multi-stage Docker images
Production compose overlay + Caddy reverse proxy
Spring Boot production configuration profile
Database and object storage backup strategy
.env.example, DEPLOYMENT.md, runbook
Prometheus, Loki, Grafana, Alertmanager
Mappe visual redesign — consistency alignment across the app (shared components + pages). See the design_handoff bundle.
Code restructuring without behaviour change
Feature whose contract is its issue body (EARS REQ-NNN); the spec must pass review before implementation.
UI/UX and accessibility issues
Milestone
No items
No Milestone
Mappe Visual Redesign
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: marcel/familienarchiv#858
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Shared component · Story 4. Part of #853.
Context
The card pattern (
rounded-sm border border-line bg-surface shadow-sm) is re-implemented inline across domains, and zero cards use the 3px mint top-border archival signature the system calls for. 73 inline call-sites exist — well past the rule-of-three threshold, so extracting a primitive is justified.Scope
$lib/shared/primitives/Card.svelte. Props:accent: 'top' | 'left' | 'none'(default'top'),padding: 'sm' | 'md'(default'md', mapping to §7padding: 20–24 px). Basebg-surface border border-line shadow-sm rounded-sm;topadds a 3px top border;leftadds a 3px left border (inline/resume strips);noneadds no accent.var(--c-accent)only (i.e.border-top: 3px solid var(--c-accent)) — never a raw hex or inline style. This ensures the dark-mode token flip (navy-mint → turquoise) that the epic gates on works automatically. Raw inline borders break the dark-mode token flip and the epic's "zero raw color" gate.{@render children()}(Svelte 5 snippet slot). It never applies{@html}to passed content. All content flows through Svelte's default escaping. This is a hard rule per §2.5 of the constitution; document it in the component's JSDoc so downstream adopters in PII-bearing domains (person/document/transcription) inherit the safe default.StatusDot+ label, not the border color.Acceptance
top/left/none) render per §7;rounded-sm(2px) default radius; accent driven byvar(--c-accent)token only (no raw hex/inline).12emUPPERCASEtext-ink-3); any caption text is supplied by adopters as Paraglide i18n keyspaddingvariant does not force a fixed width on mobile (Critical reader path)Card.svelte.spec.ts(vitest-browser-svelte) written red-first before implementation; asserts all three accent variants,paddingvalues, 2px radius, section-caption helper; invalid/unknownaccentfalls back to'top'; dark-mode token correctness verifiedSecurity note (implementer)
The primitive renders children via
{@render children()}with Svelte's default escaping.{@html}must never appear in this component. Cards wrap user/import-derived content (names, transcription excerpts, story intros) — the safe-rendering contract must hold for all adopters.Out of Scope
Depends on: token close-out for
--c-accent/--radius-sm(already present inlayout.css— unblocked). Refs:DESIGN_RULES §1/§2/§7,_AUTHORING_KIT.md §4.marcel referenced this issue2026-06-16 13:43:30 +02:00
marcel referenced this issue2026-06-16 13:49:00 +02:00
marcel referenced this issue2026-06-16 13:49:13 +02:00
marcel referenced this issue2026-06-16 13:49:43 +02:00
marcel referenced this issue2026-06-16 13:49:51 +02:00
marcel referenced this issue2026-06-16 13:59:16 +02:00
marcel referenced this issue2026-06-16 14:00:02 +02:00
marcel referenced this issue2026-06-16 14:00:04 +02:00
marcel referenced this issue2026-06-16 14:00:06 +02:00
marcel referenced this issue2026-06-16 14:00:10 +02:00
marcel referenced this issue2026-06-16 14:00:14 +02:00
marcel referenced this issue2026-06-16 14:00:18 +02:00
marcel referenced this issue2026-06-16 14:00:26 +02:00
marcel referenced this issue2026-06-16 14:01:06 +02:00
marcel referenced this issue2026-06-16 14:01:12 +02:00
marcel referenced this issue2026-06-16 14:01:13 +02:00
marcel referenced this issue2026-06-16 14:01:28 +02:00
marcel referenced this issue2026-06-16 14:01:36 +02:00
marcel referenced this issue2026-06-16 14:02:31 +02:00
marcel referenced this issue2026-06-16 14:02:43 +02:00
marcel referenced this issue2026-06-16 14:03:06 +02:00
marcel referenced this issue2026-06-16 14:03:34 +02:00
marcel referenced this issue2026-06-16 14:04:55 +02:00
marcel referenced this issue2026-06-16 14:04:56 +02:00
marcel referenced this issue2026-06-16 14:05:21 +02:00
marcel referenced this issue2026-06-16 14:06:07 +02:00
marcel referenced this issue2026-06-16 14:06:49 +02:00
marcel referenced this issue2026-06-16 14:07:16 +02:00