Cookies

Farah here. Storage on Pen Swift stays minimal — a morning notebook, not a vendor hall.

Required memory keeps your banner answer — accept, reject, or customised. Cookie name sg_blog_consent; payload JSON {essential, functional, analytics, ts, v:1}; lifespan roughly 180 days; Path=/; SameSite=Lax; Secure on HTTPS. Key cookie_consent_v1 in localStorage duplicates the value if cookies are blocked.

Functional category equals map tiles. Fourteen pages embed one Queenstown neighbourhood frame each — broad area, not my unit. Allow functional → iframes load. Deny → placeholder card plus Load map control, same box size, no layout shift.

Analytics switch is inert here — no GA4, heatmaps, or ad pixels attach to it. Stays off.

Bottom strip leaves pages readable. Accept all turns maps on. Reject all hides them. Customise shows button toggles with aria-pressed — never form fields — and Save writes instantly.

Refresh, navigation, hard reload: choice should stick until expiry. Manage cookies below reopens controls after deciding.

Iframe loads may send technical identifiers to Google; I do not broker or resell that traffic. See /privacy.php for map notes.

Beyond maps: no video players, social timelines, or comment engines.

Keyboard users reach every control; Escape dismisses the sheet without trapping focus.

Banner motion honours reduced-motion settings when available.

Broken controls? [email protected] with browser details.

Audit — sg_blog_consent · choice JSON · ~6 months · essential. cookie_consent_v1 · mirror. Analytics executables: zero.

Audit line — sg_blog_consent stores JSON choices ~180 days; cookie_consent_v1 mirrors when cookies blocked; zero analytics executables ship.

Why mention cookies on a one-author site? Because remembering consent and loading maps still touches storage, and readers deserve clarity.

Essential storage always runs — it remembers banner decisions so the strip does not nag each visit inside the six-month window.

Functional storage governs fourteen single-map regions, each titled uniquely for screen readers.

Declining functional shows a card matching map height plus a Load map control that enables embeds for that session while updating stored consent.

Customise reveals button toggles with aria-pressed states; Save commits instantly without form submission.

Forced reload should not resurrect the banner inside the retention period — report failures if it does.

Manage cookies on this page reopens controls after a decision so functional can flip without hunting settings.

Keyboard paths reach every control; Enter and Space flip switches; Escape closes the sheet without trapping focus.

Banner motion honours prefers-reduced-motion when the browser exposes that preference.

Beyond maps, no video players, comment engines, social timelines, or heatmap scripts load.

sg_blog_consent value is URL-encoded JSON; localStorage mirror uses cookie_consent_v1 when cookies fail.

Version integer 1 inside JSON reserves room for future migrations without silent wipes.

SameSite=Lax plus Secure on HTTPS limits cross-site leakage; Path=/ covers the whole domain.

Analytics toggle adjusts stored preference only — no GA4, Meta, or ad network tags accompany it.

Privacy page points here for map mechanics; both documents name Google Maps explicitly.

Deploy checks: Accept persists, Reject persists, Customise partial save works, Manage reopens, maps obey choice.

Clearing site data manually will show the banner again — expected browser behaviour.

Broken banner buttons? Email [email protected] with browser name and cookie settings.

Auditor summary: one consent cookie, optional maps, no analytics executables, no visitor forms.

Map tiles originate from Google; blocking third-party cookies may still allow first-party consent storage.

Private browsing may shorten persistence — banner may return next session per browser design.

Screen magnifiers and high-contrast modes should remain usable because consent UI uses text buttons, not mystery icons.

Third-party cookie blocking in strict browsers may still permit first-party consent storage on penswift.life itself.

If you export a saved page, map placeholders will look empty offline — load maps once online after consent if needed.

Consent JSON stores ISO timestamps in SGT context at save time so you can audit when a choice was made.

Load map buttons on placeholders set functional true for the session and rewrite sg_blog_consent without reloading unrelated pages.

Cookie panel labels name Essential, Functional, and Analytics in that order on every page for predictable scanning.

Farah voice note: I would rather explain storage plainly than hide behind a single Accept wall.

Reject-all still allows essential consent memory so the banner does not loop endlessly while maps stay off.

Customise sheet never posts to a server — choices stay in your browser storage only.

This is a personal blog. Everything here reflects my own experiences, opinions, memories and impressions. Notes are personal reflections, not professional, medical, legal, financial or news-reporting advice. Where a note touches a serious event nearby, I only describe what I heard or saw from my end of the street — never as reporting. If I have got something wrong, please tell me and I will fix it.

Map waiting until functional cookies are allowed or you tap once below.

Approximate neighbourhood — not the flat door.