Feb 27 2026: optimize for iPad

This commit is contained in:
2026-02-27 10:49:59 -05:00
parent e68202135a
commit 0ff27f2b06
7 changed files with 440 additions and 2 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
{% block content %}
<div class="row justify-content-center mt-5">
<div class="col-md-5 col-lg-4">
<div class="col-10 col-sm-8 col-md-5 col-lg-4">
<div class="card shadow-lg">
<div class="card-header bg-primary text-white text-center py-4">
<h3><i class="bi bi-clipboard-check-fill"></i> Janitorial QC</h3>
+6 -1
View File
@@ -2,10 +2,15 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<!-- iOS / iPadOS web app meta tags -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="mobile-web-app-capable" content="yes">
<title>{% block title %}Janitorial QC System{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
<link rel="stylesheet" href="{{ url_for('static', filename='css/ipad_responsive.css') }}">
{% block extra_css %}{% endblock %}
</head>
<body>
+42
View File
@@ -24,6 +24,7 @@
.insp-body {
background:#fff; border:1px solid #e2e8f0; border-top:none;
border-radius: 0 0 12px 12px; padding:1.75rem; overflow-x:auto;
-webkit-overflow-scrolling: touch;
}
/* ── 12-col grid (matches form editor exactly) ── */
@@ -34,6 +35,18 @@
gap: 4px 8px;
width: max-content;
}
/* ── iPad / touch-device fluid grid override ── */
@media (max-width: 1194px) {
.form-grid {
--_gap: 8px;
--_cell: calc((min(calc(100vw - 2rem), 900px) - 11 * 8px) / 12);
grid-template-columns: repeat(12, var(--_cell));
grid-auto-rows: calc(var(--_cell) * 0.72);
width: 100%;
}
.insp-body { padding: 1rem; }
}
.fg-cell {
overflow:hidden; display:flex; flex-direction:column; padding:.18rem .45rem;
}
@@ -120,6 +133,35 @@
}
.insp-footer .meta { color:#94a3b8; font-size:.8rem; }
.insp-footer .meta strong { color:#e2e8f0; }
/* iPad: footer stacks vertically, full-width buttons */
@media (max-width: 1024px) {
.insp-footer {
flex-direction: column;
align-items: stretch;
padding: .75rem 1rem;
gap: .5rem;
}
.insp-footer .btn { width: 100%; justify-content: center; }
.insp-footer .meta { text-align: center; }
/* Header: stack on narrow screens */
.insp-header {
flex-direction: column;
align-items: flex-start;
gap: .75rem;
padding: 1rem;
}
.insp-header .d-flex.gap-2 { width: 100%; flex-wrap: wrap; }
.insp-header .btn { flex: 1; justify-content: center; }
.insp-wrap { padding: 0 .5rem 5rem; }
}
/* Touch: ensure 44px tap targets on footer buttons */
@media (pointer: coarse) {
.insp-footer .btn { min-height: 48px; font-size: 1rem; }
}
</style>
{% endblock %}
+12
View File
@@ -20,6 +20,7 @@
.insp-body {
background:#fff; border:1px solid #e2e8f0; border-top:none;
border-radius:0 0 12px 12px; padding:1.75rem; overflow-x:auto;
-webkit-overflow-scrolling: touch;
}
.meta-row { display:flex; flex-wrap:wrap; gap:1.5rem; margin-bottom:1.5rem; padding-bottom:1rem; border-bottom:1px solid #e2e8f0; }
.meta-item { display:flex; flex-direction:column; }
@@ -34,6 +35,17 @@
gap: 3px 8px;
width: max-content;
}
/* iPad fluid grid override */
@media (max-width: 1194px) {
.form-grid {
--_cell: calc((min(calc(100vw - 2rem), 900px) - 11 * 8px) / 12);
grid-template-columns: repeat(12, var(--_cell));
grid-auto-rows: calc(var(--_cell) * 0.5);
width: 100%;
}
.insp-body { padding: 1rem; }
}
.fg-cell {
overflow:hidden; display:flex; flex-direction:column;
padding:.1rem .4rem;
+59
View File
@@ -294,6 +294,65 @@
transform: rotate(-2deg); white-space: nowrap; display: none;
}
/* ── iPad / touch-device overrides for the form editor ── */
@media (max-width: 1194px) {
/* Collapse 3-column layout: stack palette / canvas / props vertically */
.editor-shell {
grid-template-columns: 1fr !important;
grid-template-rows: 52px auto auto auto !important;
height: auto !important;
}
/* Palette becomes a horizontal scrollable strip */
.palette {
grid-column: 1 !important;
display: flex;
flex-wrap: nowrap;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
padding: .5rem .6rem;
gap: .3rem;
max-height: 60px;
align-items: center;
}
.pal-head { display: none; } /* hide category headers in horizontal mode */
.pal-item { flex-shrink: 0; padding: .35rem .6rem; }
/* Canvas takes full width */
.canvas-wrap {
grid-column: 1 !important;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
/* Props panel full width below canvas */
.props-panel {
grid-column: 1 !important;
max-height: 50vh;
overflow-y: auto;
}
/* Topbar wraps */
.topbar {
flex-wrap: wrap;
height: auto !important;
padding: .5rem;
gap: .4rem;
}
/* Touch-friendly palette items */
.pal-item {
min-height: 44px;
}
/* Touch-friendly toolbar buttons */
.tbtn {
min-height: 44px;
padding: .45rem .85rem;
}
}
/* scrollbars */
.palette::-webkit-scrollbar,
.canvas-wrap::-webkit-scrollbar,
+11
View File
@@ -37,6 +37,7 @@
border-radius: 0 0 12px 12px;
padding: 1.75rem;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
/* 12-col grid — same columns as editor, rows shrink to content in preview */
@@ -48,6 +49,16 @@
width: max-content;
}
/* —— iPad / touch-device fluid grid override —— */
@media (max-width: 1194px) {
.form-grid {
--_cell: calc((min(calc(100vw - 2rem), 900px) - 11 * 8px) / 12);
grid-template-columns: repeat(12, var(--_cell));
width: 100%;
}
.preview-body { padding: 1rem; }
}
/* ── Cell ── */
.fg-cell {
overflow: hidden;