# responsive-layout Specification
## Purpose
TBD - created by archiving change admin-responsive-adaptation. Update Purpose after archive.
## Requirements
### Requirement: Three-breakpoint responsive system
The admin frontend SHALL adapt its layout to three device tiers: mobile (< 768px), tablet (768-1024px), and desktop (> 1024px). All pages and components MUST render without text overflow, forced line wrapping, or content clipping at any breakpoint.
#### Scenario: Mobile layout (< 768px)
- **WHEN** viewport width is less than 768px
- **THEN** sidebar is replaced by a Drawer triggered via hamburger button
- **AND** content area padding reduces to 12px
- **AND** tables scroll horizontally with touch gesture
- **AND** dashboard stat cards display in 2-column grid
#### Scenario: Tablet layout (768-1024px)
- **WHEN** viewport width is between 768px and 1024px
- **THEN** sidebar defaults to collapsed state
- **AND** content area padding is 16px
- **AND** dashboard stat cards display in 2-column grid
- **AND** chart cards display side-by-side
#### Scenario: Desktop layout (> 1024px)
- **WHEN** viewport width is greater than 1024px
- **THEN** sidebar is fully visible and collapsible
- **AND** content area padding is 24px
- **AND** dashboard stat cards display in 4-column grid
- **AND** chart cards display side-by-side
### Requirement: Table horizontal scroll on narrow screens
All `
` components SHALL support horizontal scrolling when content exceeds viewport width. The scroll behavior MUST be enabled via scroll={{ x }} prop, and all table columns MUST remain visible (no responsive column hiding).
#### Scenario: Wide table on mobile
- **WHEN** a table has more columns than fit within the viewport width
- **THEN** the table container renders a horizontal scrollbar
- **AND** users can scroll horizontally to view all columns
- **AND** action column (if present) remains accessible without scrolling via fixed position
### Requirement: Login page responsiveness
The login page card SHALL not overflow the viewport on any screen size. On mobile devices, the card MUST fit within the screen with comfortable margins.
#### Scenario: Login on small mobile screen (320px)
- **WHEN** viewport width is 320px
- **THEN** login card width does not exceed `calc(100vw - 32px)`
- **AND** the login form remains fully visible and usable
### Requirement: Dashboard responsive grid
Dashboard stat cards and chart cards SHALL use antd responsive Col breakpoints (xs/sm/md) instead of fixed span values. Charts SHALL re-render to fit container width on window resize.
#### Scenario: Dashboard on tablet
- **WHEN** viewing dashboard on a 800px wide tablet
- **THEN** stat cards render 2 per row
- **AND** pie chart and bar chart render side by side
- **AND** gantt chart fits within the content area width
### Requirement: Modal responsiveness
All Modal dialogs SHALL have a max-width constraint preventing overflow beyond the viewport on small screens.
#### Scenario: Modal on mobile
- **WHEN** a modal is opened on a viewport < 768px wide
- **THEN** the modal width does not exceed `calc(100vw - 24px)`
- **AND** the modal body has a max-height of 60vh with vertical scroll
- **AND** modal mask covers the full viewport
### Requirement: Page toolbar responsive wrapping
All page-level toolbars with search/filter/action controls SHALL wrap gracefully on narrow screens using flexWrap and gap spacing, preventing button group clipping or overlap.
#### Scenario: Toolbar with search and action buttons on tablet
- **WHEN** a page toolbar contains a search input group and action button group
- **AND** viewport width is 800px
- **THEN** toolbar items wrap to multiple lines without overflow
- **AND** all buttons remain clickable with adequate spacing
### Requirement: Student fields separation
The Students page SHALL display "学号" (student ID) and "身份证" (ID card number) as two separate table columns instead of a single combined column. Both columns SHALL support ellipsis truncation for long values.
#### Scenario: Student table column display
- **WHEN** viewing the student list
- **THEN** the table includes a "学号" column and a "身份证" column as separate headers
- **AND** long ID numbers are truncated with ellipsis and tooltip on hover
### Requirement: Classroom schedule table scrolling
The classroom schedule grid table SHALL support horizontal scrolling with a sticky first column (classroom name) to aid navigation when viewing beyond the visible date range.
#### Scenario: Schedule table on month with 31 days
- **WHEN** viewing a month schedule on a tablet (800px)
- **THEN** the classroom name column remains fixed on the left
- **AND** date columns scroll horizontally
- **AND** no text overflows or wraps within date cells