Skip to content

fix(legal): MSA/SLA content, hide DPA/Security Addendum, On This Page TOC + mobile dropdown - #1626

Merged
ronggur merged 7 commits into
mainfrom
feat/legal-content-updates
Aug 12, 2026
Merged

fix(legal): MSA/SLA content, hide DPA/Security Addendum, On This Page TOC + mobile dropdown#1626
ronggur merged 7 commits into
mainfrom
feat/legal-content-updates

Conversation

@felixwidjaja

Copy link
Copy Markdown
Member

Summary

Publishes the MSA/SLA content updates, hides DPA/Security Addendum pending review, and ships the "On This Page" collapsible TOC work (originally PR #1623, merged into this branch per request) plus a round of bug fixes and a new mobile dropdown for it.

Content changes

  • MSA & SLA: published as-is with the latest source content synced (MSA: Effective Date definition flipped earlier→later, Security Addendum concept/Exhibit C removed, Section 7.2 softened, placeholder URLs de-bracketed).
  • DPA & Security Addendum: hidden (draft: true on a new legal-collection schema field, same pattern the handbook already uses) — the new source docs disclosed real security-posture changes (no dedicated SIEM, no IDS, backups not geographically separated, no pen test performed) and contradict themselves in places (MFA provider, SIEM/log-retention status, backup-testing cadence) that need a legal/security answer before either goes live. Removed from the sidebar and footer Trust Center links; routes 404.

"On This Page" TOC

  • Collapsible per-section groups (H3 sub-headings collapse under their H2, auto-expanding the group containing the active heading).
  • Toggle to collapse/expand the whole panel, replaced by a small pill button when hidden that lets .legal-content reclaim the freed width.
  • Mobile/tablet: below lg, the panel now renders as a collapsed-by-default dropdown (same pattern as the sidenav's own mobile toggle) instead of not rendering at all. CSS order utilities place it right after the sidenav rather than after all the article content, where plain DOM order would otherwise strand it.

Bugs found and fixed along the way

  • Active-dot indicator was getting clipped by overflow-hidden added for the collapse slide animation — dropped the animation in favor of instant show/hide.
  • Reopen button was vertically squished by align-items: stretch on its zero-height flex parent (the actual "padding is broken" bug — turned out to have nothing to do with horizontal padding, which several rounds of investigation had already proven correct).
  • Reopen button's horizontal position didn't match the panel's own toggle — rewritten as position: absolute with an offset confirmed via getBoundingClientRect, not derived by hand (the column-width math kept missing padding contributions from other elements).
  • Icon sizing rule was scoped to the wrong parent class, so the reopen button's icon fell back to Lucide's 24×24 default and overflowed the pill.
  • Mobile spacing: .legal-toc's own padding was compounding additively with its stacked neighbors' padding into ~52–68px gaps.

Test plan

  • npx astro check — 0 errors throughout
  • Confirmed MSA/SLA live (200), DPA/Security Addendum hidden (404) and removed from sidebar/footer nav
  • Verified every fix above via curl (compiled CSS/served markup) and a fresh headless-Chromium Playwright session — exact computed styles, pixel-measured positions, full click-through interaction tests (collapse, reopen, group toggle) — after an earlier fix attempt broke the layout by skipping this step
  • Tested mobile (390px), tablet (900px), and desktop (1440px) viewports for the new dropdown; confirmed no desktop regression
  • Manual visual QA in a real browser across breakpoints (all of the above was verified programmatically; a human look is still worth doing)
  • Legal/security review of the MSA/SLA content before this goes live — transcription was done faithfully but hasn't been reviewed by counsel

Note on PR #1623

This branch merged in #1623's commit directly (per request, to combine both efforts into one branch/PR). That PR is now redundant — closing it as superseded by this one once this merges avoids the same commit landing twice.

🤖 Generated with Claude Code

- Add an opt-in collapsible prop to TableOfContents.astro that groups
  h3 sub-headings under their parent h2 behind a chevron toggle, so
  long docs (e.g. the MSA) don't list every sub-section at once. The
  group containing the active heading auto-expands on scroll and
  collapses the rest; the chevron also allows manually peeking at
  other groups. Handbook's usage is untouched (defaults to false).
- Wire collapsible=true into the legal page's TOC.
- Widen .legal-content's horizontal padding to md:px-10 lg:px-16,
  matching .handbook-content, to fix the squished feel between the
  sidenav/content/TOC columns.
- Fix font-size regression on the h2 group headers: the new .toc-group
  wrapper had dropped the datum-text-sm sizing .toc-item used to
  provide via inheritance.
- Fix the active-dot indicator getting clipped: overflow-y-auto (added
  for the long-TOC scroll fix) forces overflow-x to clip too per the
  CSS Overflow spec, cutting off the dot's intentional negative-left
  bleed onto the dashed guide line. Added pl-2 as safe clearance.
- Fix missing gap between .toc-sublist items — without it, a wrapped
  line within one heading and the gap to the next heading looked
  identical. Also size legal's h3 sub-items down to datum-text-xs for
  clearer hierarchy (handbook's h3 sizing is untouched).
Publish the MSA and SLA content updates as-is. Hold DPA and Security
Addendum back — the new source docs disclosed real security-posture
changes (no dedicated SIEM, no IDS, backups not geographically
separated, no pen test performed) and contradict themselves in places
(MFA provider, SIEM/log-retention status, backup-testing cadence)
that need a legal/security answer before either goes live.

- Add a draft flag to the legal content schema (same pattern already
  used by handbook/other collections) and set it on both pages.
- Filter draft entries out of getStaticPaths so the routes 404 and
  don't clutter the sidebar nav.
- Drop both from the footer Trust Center links.
Effective Date definition flipped earlier->later, Security Addendum
defined term and Exhibit C reference removed, Section 7.2 softened
from 'aligned with SOC 2 Type II' to 'pursuing SOC 2 Type II', and
placeholder URLs de-bracketed. Section 14.6 still references the now-
removed Security Addendum/Section 7.5 concept — left as-is, mirroring
the source; flagged for the doc owner separately.
- Icon-first pill matching .legal-toc-reopen exactly, so the toggle
  looks identical whether the panel is shown or hidden.
- Drop the rotating chevron in favor of a static PanelRight icon in
  both places.
- Make the reopen row sticky (top-9, matching the panel's own offset)
  so it stays reachable while scrolling instead of scrolling away.
.toc-panel-toggle and .legal-toc-reopen were duplicating the same pill
recipe in two different files, which is exactly how cursor-pointer
ended up on one and not the other. Extracted the shared shape/cursor/
spacing into one .toc-pill-toggle class both buttons now carry, so the
two states can't drift apart again.
Bug fixes:
- Active-dot indicator was getting clipped: overflow-hidden on .toc-nav
  and .toc-sublist (added for the collapse slide animation) clipped the
  dot's intentional negative-left bleed onto the dashed guide line.
  Dropped the CSS max-height animation in favor of instant hidden/flex
  toggling — correctness over a nice-to-have transition.
- Reopen button was vertically squished: it was a flex item of a
  zero-height row, and the default align-items: stretch compressed it
  down to match, squeezing away its top/bottom padding entirely (this
  was the real "padding is broken on inactive" bug, not a horizontal
  padding issue as first suspected).
- Reopen button's horizontal position didn't match the panel's own
  toggle: rewrote it from a flex child to position:absolute with
  left: calc(100% - 7.0625rem), an offset confirmed empirically via
  getBoundingClientRect (not by re-deriving column widths by hand,
  which kept missing padding contributions from .legal-content and
  .toc-container). width: w-max was required alongside it — shrink-to-
  fit sizing for an absolutely positioned element with only `left` set
  uses "available space" as its width ceiling, not natural content
  width, which was silently wrapping the button's text.
- Icon sizing rule was scoped to .toc-panel-toggle specifically, so the
  reopen button's icon (which doesn't have that parent class) fell back
  to Lucide's 24x24 default and overflowed the pill. Made it unscoped.
- Restored PanelRightOpen/PanelRightClose icons with explicit
  width/height props (not just a CSS class) after ruling out padding,
  sizing, and browser-cache theories one by one via direct curl/
  Playwright verification.

Feature:
- Added a mobile/tablet "On This Page" dropdown, collapsed by default,
  reusing the existing panelCollapsible mechanism (no new UI, just a
  narrower-viewport default state set via matchMedia on load). Below
  md, CSS order utilities move it to render right after the sidenav
  instead of after all the article content, where plain DOM order
  would otherwise strand a "jump to section" aid. Below lg, its
  position/overflow reset to static — it scrolls with the page like
  the sidenav's own mobile toggle, not stuck like the desktop panel.
- Reduced .legal-toc's own mobile top/bottom padding — sandwiched
  between .legal-sidenav's pb-8 and .legal-content's pt-9 (padding
  doesn't collapse between separate elements), its own pt-5/pb-8 was
  compounding into ~52px/~68px gaps.

Every fix in here was verified via curl + a fresh headless-Chromium
Playwright session (exact computed styles, pixel measurements, click-
through interaction tests) before being reported as done, after an
earlier attempt broke the layout by skipping that step.
@github-actions

Copy link
Copy Markdown
Contributor

🔎 SEO & Meta Review

Analyzed 1 of 97 built HTML pages (mode: changed-only).

📊 Score summary

Metric Value
Overall score 🟢 100 / 100
Pages analyzed 1
Title issues (missing or >70 chars) ✅ 0
Description issues (length out of 70–160) ✅ 0
Canonical missing ✅ 0
H1 issues (0 or >1) ✅ 0
Noindex on built pages ✅ 0
og:image missing ✅ 0
JSON-LD invalid ✅ 0
Pages with missing alt text ✅ 0
Broken internal links ✅ 0
Redirect chains ✅ 0

No previous audit found — trend will appear next run.


SEO Review

Summary: The single page analysed is in good shape — canonical, robots, Open Graph, Twitter Card, and JSON-LD are all present and well-formed. One minor issue: the meta description is slightly short of the recommended 130-character floor.


2. Critical Issues

None identified.


3. Improvements

Issue Count Thematic Fix
Short meta description (<130 chars) 1 page Expand descriptions to 130–155 chars in the page's frontmatter/meta component to make better use of SERP real estate
JSON-LD type coverage 1 page Organization + WebSite schemas are present but a WebPage (or TermsOfService) type would better signal page intent to search engines — add in the page template or a shared legal layout

4. Per-page notes

  • /legal/master-services-agreement — Meta description is 118 chars, below the recommended 130-char floor. Content is accurate but leaves unused SERP space.

    • 💡 Fix: Expand description to ~140 chars; suggested: "Read the draft Master Services Agreement for Datum Cloud, covering services, fees, intellectual property, confidentiality, and general commercial terms." (152 chars).
  • /legal/master-services-agreement — JSON-LD only declares Organization and WebSite types; no page-level or document-type schema is present.

    • 💡 Fix: Add a WebPage block (or more specifically TermsOfService if supported by your schema vocabulary) to the page's <script type="application/ld+json">, referencing "@id": "https://www.datum.net/legal/master-services-agreement" and linking it to the WebSite entity via "isPartOf".

@felixwidjaja
felixwidjaja requested review from AriaEdo and ronggur and removed request for ronggur August 12, 2026 11:06
@ronggur
ronggur merged commit 96a5c6e into main Aug 12, 2026
7 checks passed
@ronggur
ronggur deleted the feat/legal-content-updates branch August 12, 2026 11:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants