diff --git a/api/app/static/css/style.css b/api/app/static/css/style.css
index a28e86b..622883c 100644
--- a/api/app/static/css/style.css
+++ b/api/app/static/css/style.css
@@ -158,6 +158,12 @@ h1, h2, h3, h4, h5, h6 {
text-wrap: balance;
}
+/* Page titles — DESIGN.md: 18px/600 Display */
+h4 {
+ font-size: 18px;
+ font-weight: 600;
+}
+
/* Data font — selective: codes, numbers, sums, dates. NOT text names. */
.font-data, code, .dif-sku, .detail-item-card .card-sku {
font-family: var(--font-data);
@@ -1054,6 +1060,7 @@ tr.mapping-deleted td {
border: 1px solid var(--border);
color: var(--text-secondary);
padding: 3px 10px;
+ min-height: 32px;
font-size: 0.78rem;
cursor: pointer;
transition: all 0.15s;
@@ -1252,3 +1259,10 @@ tr.mapping-deleted td {
.addr-card-text { font-family: var(--font-body); font-size: 13px; }
.addr-card.mismatch { background: var(--warning-light); }
.addr-card.match .addr-match-label { font-size: 11px; color: var(--success-text); }
+
+/* ── Mobile touch targets (must be AFTER base rules for cascade) ── */
+@media (max-width: 767.98px) {
+ .preset-btn { min-height: 44px; padding: 8px 12px; }
+ .btn-sm { min-height: 44px; }
+ input[type="checkbox"] { min-width: 20px; min-height: 20px; }
+}
diff --git a/api/app/templates/base.html b/api/app/templates/base.html
index 6572094..c4e7cab 100644
--- a/api/app/templates/base.html
+++ b/api/app/templates/base.html
@@ -19,7 +19,7 @@
{% set rp = request.scope.get('root_path', '') %}
-
+