diff --git a/app/static/css/mobile_phone.css b/app/static/css/mobile_phone.css
new file mode 100644
index 0000000..3dc393f
--- /dev/null
+++ b/app/static/css/mobile_phone.css
@@ -0,0 +1,82 @@
+/* ════════════════════════════════════════════════════════════════════════
+ mobile_phone.css — phone-width (<768px) responsive polish.
+
+ Layered ON TOP of ipad_responsive.css (which handles iPad/tablet widths
+ 1024/820/768) and Bootstrap 5 (whose grid already stacks col-md-* below
+ 768px). These rules refine the patterns Bootstrap doesn't: page-header
+ rows, action toolbars, oversized headings, table density, and tap targets
+ on small phones.
+ ════════════════════════════════════════════════════════════════════════ */
+
+/* ── Proper .table-responsive wrappers win over the iPad catch-all ──
+ ipad_responsive.css turns bare tables into `display:block` scroll blocks at
+ ≤1024px. Tables we explicitly wrap in .table-responsive should keep true
+ table layout INSIDE the scroll container (cleaner columns + header align). */
+.table-responsive > table,
+.table-responsive table {
+ display: table !important;
+ width: 100%;
+}
+
+/* ── Phone layout (≤576px) ── */
+@media (max-width: 576px) {
+ /* Tighter page gutters so content isn't cramped by container padding. */
+ .container-fluid.mt-4 {
+ padding-left: 0.75rem;
+ padding-right: 0.75rem;
+ }
+
+ /* Page-header rows: title + action button stack instead of squeezing.
+ Scoped to DIRECT children of the content container, so the navbar, card
+ headers, dropdown headers, and in-table flex rows are all untouched. */
+ .container-fluid.mt-4 > .d-flex.justify-content-between {
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ }
+ /* A single action button in that header grows to full width under the title. */
+ .container-fluid.mt-4 > .d-flex.justify-content-between > .btn,
+ .container-fluid.mt-4 > .d-flex.justify-content-between > a.btn {
+ width: 100%;
+ }
+
+ /* Softer headings so long titles don't wrap awkwardly on narrow screens. */
+ h1, .h1 { font-size: 1.5rem; }
+ h2, .h2 { font-size: 1.3rem; }
+ h3, .h3 { font-size: 1.15rem; }
+
+ /* Toolbars / explicit button rows wrap rather than overflow. */
+ .btn-toolbar { flex-wrap: wrap; }
+
+ /* Denser tables so more columns fit before horizontal scroll kicks in. */
+ .table { font-size: 0.875rem; }
+ .table > :not(caption) > * > * { padding: 0.4rem 0.5rem; }
+
+ /* Card padding a touch tighter than the 820px iPad rule. */
+ .card-body { padding: 0.85rem; }
+
+ /* Pagination wraps instead of overflowing the viewport. */
+ .pagination { flex-wrap: wrap; row-gap: 0.25rem; }
+
+ /* Near-full-width modal dialogs on phones. */
+ .modal-dialog:not(.modal-fullscreen) { margin: 0.5rem; }
+
+ /* Large stat/KPI numbers scale down so cards don't overflow. */
+ .display-1, .display-2, .display-3 { font-size: 2.25rem; }
+ .display-4 { font-size: 2rem; }
+ .display-5 { font-size: 1.6rem; }
+ .display-6 { font-size: 1.4rem; }
+
+ /* Comfortable tap target for icon-only action buttons in table rows. */
+ td .btn-sm { min-height: 38px; }
+}
+
+/* ── Very small phones (≤380px) ── */
+@media (max-width: 380px) {
+ .container-fluid.mt-4 {
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+ }
+ h2, .h2 { font-size: 1.2rem; }
+ .btn { font-size: 0.9rem; }
+ .table { font-size: 0.82rem; }
+}
diff --git a/app/templates/base.html b/app/templates/base.html
index d8a6e39..96bdacc 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -13,6 +13,7 @@
+
{% if tenant_branding %}
diff --git a/app/templates/reports/scorecard.html b/app/templates/reports/scorecard.html
index 4912b00..7e3087a 100644
--- a/app/templates/reports/scorecard.html
+++ b/app/templates/reports/scorecard.html
@@ -138,7 +138,7 @@
-
+
| Area | Avg Score | Inspections |
@@ -169,7 +169,7 @@
-
+
| Inspection | Date | Score | |
@@ -206,7 +206,7 @@
-
+
| ID | Severity | Area | Description | Status | Reported | |