"The building or town will only be alive to the extent that it is governed by the timeless way."
—Christopher Alexander
Navigation is not wayfinding. It is presence made interactive—the delicate negotiation between appearing when needed and vanishing when not. After inordinate amount of time wrestling with iOS Safari's peculiar refusal to honor the simplest gesture, I learned what Alexander knew: sometimes the solution isn't clever code but patient observation of what wants to happen.
This page maps one small victory in the eternal struggle between human intention and machine interpretation. Take what serves. Leave what doesn't. The best interface is the one you forget exists.
The Problem of Presence
The avatar floats in the lower right corner—a dodecahedron, crystalline and patient. On desktop it behaves beautifully: scroll down, it appears; click, the menu blooms. A simple contract between gesture and response.
On iOS Safari, that contract breaks. The avatar receives the tap—you can see it respond, the visual feedback perfect—but nothing happens. No menu. No navigation. Just the small defeat of expectation meeting indifference.
I spent much time in the debugging dark. Console logs. Touch event listeners. Z-index archaeology. Everything correct, nothing working. The dodecahedron—that most perfect of Platonic solids—sitting there, receiving taps, returning nothing. The kind of problem that makes you question whether you understand anything at all.
The Discovery
Then, cleaning up the CSS, I removed a transform. Suddenly, on desktop Safari's mobile view, everything worked. The menu appeared, responsive and immediate.
But on the actual iPhone—still nothing.
This is when you learn the difference between simulation and reality. Desktop Safari's mobile view is a well-meaning lie. It shows you what should happen, not what does happen. The real device has its own opinions.
The revelation came through elimination: iOS Safari's touch events break when CSS transforms exist on fixed-position elements. Not sometimes. Always. A bug so consistent it feels like policy.
The Dodecahedron's Teaching
Why a dodecahedron? The question arrived only after solving the technical problem—as if the form had been waiting to reveal its purpose. In Plato's Timaeus, the dodecahedron represents the cosmos itself—the shape that encompasses all others. Twelve pentagonal faces, each a golden portal. And within each pentagon lives a five-pointed star—the pentagram that ancients saw as human form (head, two arms, two legs) and golden proportion made manifest. For a site exploring our capacity for rationality rather than our possession of it, this geometrical form becomes philosophy made visible: the human inscribed within the cosmic, capability nested within structure. The twelve faces echo the chromatic scale—that musical democracy where every tone has equal weight. But look closer: each pentagonal face contains its own five-pointed star, the golden ratio spiraling inward. As a violist, I recognize this: the overtone series made geometry, the human proportion (that Vitruvian reach) repeated twelve times around a perfect solid. The avatar doesn't just mark a location; it suggests a tuning between human measure and cosmic order. Alexander would approve. In The Timeless Way of Building, he writes of forms that feel inevitable rather than imposed. The dodecahedron carries this quality—appearing in Islamic tile work, Renaissance drawings, molecular diagrams. A pattern that transcends its instances. That this perfect Platonic solid refused iOS touch events becomes its own teaching. Even the most elegant abstractions must negotiate with stubborn material reality. The gap between intention and reception. Between capability and achievement. The dodecahedron, patient and crystalline, waiting for touch that cannot register—a koan in code. Now it rotates gently in the corner, accessible at last through the humblest of solutions: a checkbox. Sacred geometry meeting HTML form elements. This is what "rationis capax" means—not choosing between the ideal and the real, but finding where they dance.
Three Distances, Three Presences
Just as typography adapts to reading distance, navigation must honor the fundamental differences in how we hold devices:
Mobile: The Intimate Device
In hand, natural arm's length
The phone is personal, immediate, often consulted in fragments—waiting for coffee, between meetings, before sleep. The navigation acknowledges this intimacy:
- Translucent header: Always present but gossamer-thin, using backdrop blur to suggest rather than impose
- Dodecahedron as anchor: Twelve pentagonal faces catching light—geometry as invitation
- Checkbox hack: Pure HTML form behavior, no JavaScript needed
- Essential paths only: Recognition that thumb reach and divided attention create natural constraints
The solution emerged from desperation: if touch events won't work, what will? The answer was almost embarrassingly simple—a hidden checkbox and visible label. The oldest trick in the CSS book. But it works, everywhere, always. The dodecahedron rotates gently, a small cosmos awaiting touch.
<input type="checkbox" id="nav-toggle-checkbox" />
<label for="nav-toggle-checkbox">
<div class="dodecahedron-avatar"></div>
</label>
Tablet: The Bridge Device
At lap distance
Tablets occupy the liminal space between phone and computer. Neither fully intimate nor wholly formal. The navigation splits the difference:
- Contextual appearance: Visible when scrolling, invisible when reading
- Moderate complexity: More options than mobile, more restraint than desktop
- The middle way: Neither demanding constant presence nor hiding completely
Desktop: The Workspace
At desk distance, sustained attention
Here, with proper distance and dedicated attention, the full navigation can breathe:
- Avatar emergence: Appears only on scroll, honoring the primacy of content
- Expanded options: Room for nuance, for secondary paths
- Spatial memory: Always lower right, creating a consistent home
Technical Honesty
The solutions that survived:
No CSS transforms on fixed elements. iOS Safari simply cannot handle them. Accept this limitation rather than fighting it.
Proper touch targets. Apple demands 44×44 pixels minimum. Anything smaller is hope, not design.
Native form elements for interaction. When JavaScript touch events fail, HTML form elements still work. The platform wants to help—let it.
Opacity and visibility, not display. Showing and hiding through opacity preserves the element in the DOM, preventing the reflow jarring that iOS particularly dislikes.
What This Teaches
Every debugging journey carries lessons beyond the technical:
-
Platform constraints are teachers. iOS Safari's limitations forced a simpler, more robust solution.
-
Testing environments lie. Always verify on actual devices. Simulators show intention, not reality.
-
Old solutions often beat new cleverness. The checkbox hack predates the iPhone. Still works perfectly.
-
Presence requires absence. Good navigation knows when to disappear completely.
The Larger Pattern
This isn't just about fixing a menu. It's about recognizing that each device creates its own phenomenology:
- Phones are held close, consulted briefly, touched with thumbs
- Tablets rest on laps or tables, invite longer engagement, mix touch and sight
- Computers maintain distance, assume sustained attention, privilege precision
The navigation must honor these different modes of being. Not responsive design—responsive presence.
Alexander would recognize this: form following not function but life. The navigation wants to support the reader's attention, not dominate it. When it works, you don't notice it. When it fails, you can't ignore it.
For Fellow Builders
If you're fighting similar battles:
Test on real devices early. Simulators are hypotheses, not conclusions.
When JavaScript fails, try HTML. The platform has opinions—sometimes they're right.
Document the journey. Future you will thank present you.
Simple survives clever. Every time.
The code lives in the repository. Take what helps. Leave what doesn't. Share what you learn.
True navigation, like true teaching, knows when to appear and when to vanish. The best interface is the one you never notice—until you need it, and it's exactly where your hand expects it to be.
Written after too many hours debugging iOS Safari, Barcelona, 2025</document_content> </invoke>