Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions reports/completion/TSK-012-06-app-shell-css-offset-cleanup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# TSK-012-06 App Shell CSS Offset Cleanup Completion

## Scope

- Scope-ID: `TSK-012-06`
- Issue: `#410`
- Parent Issue: `#404`
- Branch: `app-shell-css-offset-cleanup`
- Status: local validation complete, PR pending

## Responsibility Map

- `src/index.css`: app-shell map flow canonical rules and active layout ownership.
- `src/styles/refinements.css`: legacy visual refinements only; no longer owns map filter/surface/back-button layout overrides.
- `src/hooks/map/useTourismMapState.ts`: map-owner hook locality for KTO tourism UI state.
- `test/unit/second-uiux-audit-baseline.test.ts`: source guard for the removed legacy override selectors.

## Dependency Direction

- App shell owns header/subnav/body slots.
- Map stage owns map content flow inside the app-shell body.
- `refinements.css` may style residual visual details but must not override app-shell map flow with `!important`.
- Map domain hooks remain owner-local instead of increasing root `src/hooks` sprawl.

## Test Seam

- Source-quality unit test verifies that removed utility/back-button selectors do not return.
- E2E app-shell and critical UI flows verify map filters, drawer, bottom navigation, and KTO toggle positioning.

## Scope Map

- Included: CSS offset cleanup, legacy app back/utility selector removal, map-surface canonical flow, hook locality correction triggered by #409.
- Excluded: UI copy changes, API/DB/OAuth changes, new KTO provider behavior, broad visual redesign.

## Architecture Risk

- `src/styles/refinements.css` still contains unrelated historical `!important` refinements outside this child scope.
- This PR removes only the app-shell map/back-button/utility overlap covered by #410 and leaves unrelated visual debt for separate issues.

## Validation

- `npm.cmd run check:numeric-literals`: passed
- `npm.cmd run lint`: passed
- `npm.cmd run typecheck`: passed
- `npm.cmd run test:unit`: passed
- `npm.cmd run test:integration`: passed
- `npm.cmd run test:regression`: passed
- `npm.cmd run test:e2e`: passed
- `npm.cmd run build`: passed
- `git diff --check`: passed, CRLF warnings only

## Remote Evidence

- PR: pending
- Merge SHA: pending
- CI URL: pending
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* File: useTourismMapState.ts
* File: hooks/map/useTourismMapState.ts
* Purpose: Store map-local KTO tourism overlay UI state.
* Primary Responsibility: Own the tourism visibility toggle, selected tourism item id, and sheet expansion state.
* Design Intent: Keep KTO map overlay state local to map domain instead of encoding it in route URLs before the flow is proven stable.
Expand Down
2 changes: 1 addition & 1 deletion src/hooks/useMapDomainState.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useMapCategoryState } from './useMapCategoryState';
import { useRoutePreviewState } from './useRoutePreviewState';
import { useTourismMapState } from './useTourismMapState';
import { useTourismMapState } from './map/useTourismMapState';

export function useMapDomainState() {
return {
Expand Down
44 changes: 33 additions & 11 deletions src/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -161,17 +161,6 @@ textarea {
pointer-events: none;
}

.phone-shell__utility-slot {
position: absolute;
top: var(--utility-slot-top);
right: var(--utility-slot-right);
z-index: var(--layer-utility);
display: inline-flex;
align-items: flex-start;
gap: var(--utility-gap);
pointer-events: auto;
}

.phone-shell__body {
position: absolute;
inset: var(--app-header-height) 0 0 0;
Expand Down Expand Up @@ -2576,6 +2565,39 @@ textarea {
width: 100%;
height: 1px;
}

/* TSK-012 app-shell map flow canonical rules */
.phone-shell--map .map-stage {
position: relative;
display: flex;
flex-direction: column;
gap: 8px;
width: 100%;
height: 100%;
min-height: 0;
padding: 12px 12px calc(78px + env(safe-area-inset-bottom));
}

.phone-shell--map .map-stage .map-surface-frame {
position: relative;
inset: auto;
flex: 1 1 auto;
min-height: 0;
height: auto;
margin: 0 0 6px;
border-radius: 24px;
}

.app-shell__sub-nav-slot .map-stage-subnav,
.app-shell__sub-nav-slot .map-filter-strip,
.app-shell__sub-nav-slot .map-filter-strip .chip-row {
min-width: 0;
}

.app-shell__sub-nav-slot .map-filter-strip {
position: relative;
inset: auto;
}
@font-face {
font-family: 'Pretendard';
src: url('./assets/fonts/Pretendard-Regular.woff2') format('woff2');
Expand Down
Loading
Loading