Fix SSL SAN cert + React hydration #423

- SAN cert covers all 5 PWA domains (tasks,cal,plans,goals,chat)
- i18n hydration: SSR uses cs default, localStorage after mount
- Matches ThemeProvider pattern

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-29 14:56:25 +00:00
parent 565e72927d
commit b3c6999218
15 changed files with 125 additions and 43 deletions

View File

@@ -48,7 +48,7 @@ export default function Header() {
<path strokeLinecap="round" strokeLinejoin="round" d="M5 13l4 4L19 7" />
</svg>
</div>
<span className="text-lg font-bold tracking-tight hidden sm:inline">Task Team</span>
<span className="text-lg font-bold tracking-tight hidden sm:inline">{t("common.appName")}</span>
</Link>
{/* Right: Desktop controls */}

View File

@@ -170,7 +170,7 @@ export default function TaskForm({
</div>
</div>
<div className="flex gap-3 pt-2">
<div className="flex gap-3 pt-2 sticky bottom-0 bg-white dark:bg-gray-900 pb-4 -mb-4 z-10">
<button
type="submit"
disabled={loading}

View File

@@ -55,11 +55,12 @@ export default function TaskModal({ groups, onSubmit, onClose }: TaskModalProps)
{/* Modal panel with slide-up animation */}
<div
className={`relative w-full sm:max-w-lg bg-white dark:bg-gray-900 rounded-t-2xl sm:rounded-2xl shadow-2xl p-6 transition-all duration-200 ease-out ${
className={`relative w-full sm:max-w-lg bg-white dark:bg-gray-900 rounded-t-2xl sm:rounded-2xl shadow-2xl transition-all duration-200 ease-out modal-content flex flex-col px-6 pt-6 ${
visible
? "translate-y-0 opacity-100"
: "translate-y-8 opacity-0"
}`}
style={{ maxHeight: '90dvh', overscrollBehavior: 'contain' }}
>
{/* Drag handle for mobile */}
<div className="flex justify-center mb-3 sm:hidden">
@@ -88,11 +89,13 @@ export default function TaskModal({ groups, onSubmit, onClose }: TaskModalProps)
</button>
</div>
<TaskForm
groups={groups}
onSubmit={onSubmit}
onCancel={handleClose}
/>
<div className="overflow-y-auto flex-1 px-6 pb-20 -mx-6" style={{ WebkitOverflowScrolling: 'touch' }}>
<TaskForm
groups={groups}
onSubmit={onSubmit}
onCancel={handleClose}
/>
</div>
</div>
</div>
);