feat: v4.0.2 — qualité & robustesse (session expiry UX, validation, mobile, tests)
- Session expiry: redirects ajoutent ?expired=1 → bannière "Session expired" sur login - Page titles: titre vide → 'Untitled' par défaut (au lieu de chaîne vide) - Error handling: try/catch dans create_page avec message user-friendly (500) - Mobile responsive: sidebar slide-in, modales centrées, landing page adaptative - 10 nouveaux tests de non-régression: landing, register, 404, validation, duplicate - 143 tests passent (133 + 10)
This commit is contained in:
@@ -6,6 +6,89 @@
|
||||
<title>FlowDeck — {% block title_prefix %}Home{% endblock %}</title>
|
||||
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
|
||||
<link rel="stylesheet" href="/static/css/app.css?v=3.0.0">
|
||||
<style>
|
||||
/* ── Mobile responsive (v4.0.2) ── */
|
||||
@media (max-width: 768px) {
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
z-index: 100;
|
||||
width: 280px;
|
||||
transform: translateX(-100%);
|
||||
transition: transform .2s ease;
|
||||
}
|
||||
.sidebar.mobile-open {
|
||||
transform: translateX(0);
|
||||
box-shadow: 4px 0 24px rgba(0,0,0,.5);
|
||||
}
|
||||
.sidebar-overlay.visible {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: rgba(0,0,0,.5);
|
||||
z-index: 99;
|
||||
}
|
||||
.main-wrapper {
|
||||
margin-left: 0 !important;
|
||||
width: 100%;
|
||||
}
|
||||
.unified-header {
|
||||
padding: 8px 12px;
|
||||
}
|
||||
.page-editor-wrapper {
|
||||
padding: 16px 8px;
|
||||
}
|
||||
.page-title-block {
|
||||
padding: 16px 8px;
|
||||
}
|
||||
.blocks-container {
|
||||
padding: 0 4px;
|
||||
}
|
||||
.share-dialog, .more-menu, .activity-popover {
|
||||
position: fixed !important;
|
||||
top: 50% !important;
|
||||
left: 50% !important;
|
||||
transform: translate(-50%, -50%) !important;
|
||||
width: 92vw;
|
||||
max-width: 400px;
|
||||
max-height: 80vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.landing-nav {
|
||||
padding: 12px 16px;
|
||||
}
|
||||
.hero {
|
||||
padding: 40px 16px 30px;
|
||||
}
|
||||
.hero h1 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
.features {
|
||||
grid-template-columns: 1fr;
|
||||
padding: 0 16px 30px;
|
||||
}
|
||||
.library-card-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.view-tabs {
|
||||
overflow-x: auto;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
}
|
||||
@media (max-width: 480px) {
|
||||
.hero h1 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
.hero p {
|
||||
font-size: 15px;
|
||||
}
|
||||
.btn {
|
||||
padding: 8px 16px;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script src="/static/js/htmx.min.js"></script>
|
||||
<script src="/static/js/alpine.min.js" defer></script>
|
||||
<script src="/static/js/sortable.min.js" defer></script>
|
||||
|
||||
Reference in New Issue
Block a user