fix(mobile): address iPhone layout issues across rankings, detail, compare
Build and Push Docker Images / Build Backend (FastAPI) (push) Successful in 14s
Build and Push Docker Images / Build Frontend (Next.js) (push) Successful in 45s
Build and Push Docker Images / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 11s
Build and Push Docker Images / Trigger Portainer Update (push) Successful in 1s
Build and Push Docker Images / Build Backend (FastAPI) (push) Successful in 14s
Build and Push Docker Images / Build Frontend (Next.js) (push) Successful in 45s
Build and Push Docker Images / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 11s
Build and Push Docker Images / Trigger Portainer Update (push) Successful in 1s
- rankings: hide Type/Action columns on mobile so metric value stays visible; ensure filter selects and table wrapper stay within viewport - school detail: add min-width:0 / max-width:100% containment so internal overflow-x wrappers actually clip rather than pushing the page wider; explicit line-height on Ofsted grade badges to fix glyph clipping - compare: sticky first column on the Detailed Comparison table so the Year labels remain visible while horizontally scrolling school columns - search: shorten placeholder to "School name or postcode" so it fits mobile input width - globals: overflow-x:clip safety net on .main wrapper Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -291,6 +291,8 @@ body {
|
|||||||
max-width: 1400px;
|
max-width: 1400px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 1.25rem 1.5rem;
|
padding: 1.25rem 1.5rem;
|
||||||
|
min-width: 0;
|
||||||
|
overflow-x: clip;
|
||||||
}
|
}
|
||||||
|
|
||||||
.view {
|
.view {
|
||||||
|
|||||||
@@ -301,12 +301,15 @@
|
|||||||
|
|
||||||
.tableWrapper {
|
.tableWrapper {
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
|
max-width: 100%;
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
|
|
||||||
.comparisonTable {
|
.comparisonTable {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-collapse: collapse;
|
border-collapse: separate;
|
||||||
|
border-spacing: 0;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,6 +323,7 @@
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: var(--text-primary, #1a1612);
|
color: var(--text-primary, #1a1612);
|
||||||
border-bottom: 2px solid var(--border-color, #e5dfd5);
|
border-bottom: 2px solid var(--border-color, #e5dfd5);
|
||||||
|
background: var(--bg-secondary, #f3ede4);
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
@@ -331,6 +335,24 @@
|
|||||||
border-bottom: 1px solid var(--border-color, #e5dfd5);
|
border-bottom: 1px solid var(--border-color, #e5dfd5);
|
||||||
color: var(--text-secondary, #5c564d);
|
color: var(--text-secondary, #5c564d);
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
background: var(--bg-card, white);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sticky first column (Year) so labels remain visible while scrolling */
|
||||||
|
.comparisonTable th:first-child,
|
||||||
|
.comparisonTable td:first-child {
|
||||||
|
position: sticky;
|
||||||
|
left: 0;
|
||||||
|
z-index: 1;
|
||||||
|
box-shadow: 2px 0 4px -2px rgba(26, 22, 18, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.comparisonTable thead th:first-child {
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comparisonTable tbody tr:hover td:first-child {
|
||||||
|
background: var(--bg-secondary, #f3ede4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.comparisonTable tbody tr:last-child td {
|
.comparisonTable tbody tr:last-child td {
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ export function FilterBar({ filters, isHero, resultFilters }: FilterBarProps) {
|
|||||||
type="search"
|
type="search"
|
||||||
value={omniValue}
|
value={omniValue}
|
||||||
onChange={(e) => setOmniValue(e.target.value)}
|
onChange={(e) => setOmniValue(e.target.value)}
|
||||||
placeholder="Search by school or postcode ..."
|
placeholder="School name or postcode"
|
||||||
className={styles.omniInput}
|
className={styles.omniInput}
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
.container {
|
.container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
min-width: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Header */
|
/* Header */
|
||||||
@@ -93,6 +94,8 @@
|
|||||||
|
|
||||||
.filterSelect {
|
.filterSelect {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
max-width: 100%;
|
||||||
padding: 0.625rem 1rem;
|
padding: 0.625rem 1rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
border: 1px solid var(--border-color, #e5dfd5);
|
border: 1px solid var(--border-color, #e5dfd5);
|
||||||
@@ -137,6 +140,8 @@
|
|||||||
|
|
||||||
.tableWrapper {
|
.tableWrapper {
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rankingsTable {
|
.rankingsTable {
|
||||||
@@ -345,7 +350,8 @@
|
|||||||
.filterGroup {
|
.filterGroup {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
min-width: 100%;
|
min-width: 0;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rankingsSection {
|
.rankingsSection {
|
||||||
@@ -368,13 +374,30 @@
|
|||||||
font-size: 0.875rem;
|
font-size: 0.875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.schoolHeader {
|
/* Hide less-critical columns on mobile so the metric value stays visible */
|
||||||
min-width: 180px;
|
.typeHeader,
|
||||||
|
.typeCell,
|
||||||
|
.actionHeader,
|
||||||
|
.actionCell {
|
||||||
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.areaHeader,
|
.schoolHeader {
|
||||||
.typeHeader {
|
min-width: 140px;
|
||||||
min-width: 100px;
|
}
|
||||||
|
|
||||||
|
.areaHeader {
|
||||||
|
min-width: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.valueHeader,
|
||||||
|
.valueCell {
|
||||||
|
width: auto;
|
||||||
|
min-width: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rankHeader {
|
||||||
|
width: 40px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
.container {
|
.container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
min-width: 0;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Header Section */
|
/* Header Section */
|
||||||
@@ -200,6 +202,8 @@
|
|||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
box-shadow: var(--shadow-soft);
|
box-shadow: var(--shadow-soft);
|
||||||
scroll-margin-top: 6rem;
|
scroll-margin-top: 6rem;
|
||||||
|
min-width: 0;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Section Title */
|
/* Section Title */
|
||||||
@@ -403,7 +407,9 @@
|
|||||||
/* History Table */
|
/* History Table */
|
||||||
.tableWrapper {
|
.tableWrapper {
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
|
max-width: 100%;
|
||||||
margin-top: 0.5rem;
|
margin-top: 0.5rem;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
|
|
||||||
.historicalSubtitle {
|
.historicalSubtitle {
|
||||||
@@ -463,8 +469,9 @@
|
|||||||
|
|
||||||
.ofstedGrade {
|
.ofstedGrade {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0.3rem 0.75rem;
|
padding: 0.35rem 0.75rem;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
|
line-height: 1.4;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ export function SchoolSearchModal({ isOpen, onClose }: SchoolSearchModalProps) {
|
|||||||
type="text"
|
type="text"
|
||||||
value={searchTerm}
|
value={searchTerm}
|
||||||
onChange={(e) => handleSearchChange(e.target.value)}
|
onChange={(e) => handleSearchChange(e.target.value)}
|
||||||
placeholder="Search by school or postcode ..."
|
placeholder="School name or postcode"
|
||||||
className={styles.searchInput}
|
className={styles.searchInput}
|
||||||
autoFocus
|
autoFocus
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -450,8 +450,9 @@
|
|||||||
|
|
||||||
.ofstedGrade {
|
.ofstedGrade {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0.3rem 0.75rem;
|
padding: 0.35rem 0.75rem;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
|
line-height: 1.4;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|||||||
Reference in New Issue
Block a user