// ════════════════════════════════════════════════════════════ // Caulis — screens + bottom navigation // ════════════════════════════════════════════════════════════ const PRINT_SIZES = [['S', 30], ['M', 40], ['L', 55]]; // device-local persistence for view prefs (never synced to a garden node) const GS = { get: (k, f) => { try { const v = localStorage.getItem(k); return v != null ? JSON.parse(v) : f; } catch(e) { return f; } }, set: (k, v) => { try { localStorage.setItem(k, JSON.stringify(v)); } catch(e) {} }, }; // collapsible settings category — module-level so children keep identity (no remount) function SettingsSection({ title, open, onToggle, children }) { return (