still-free.openapps.xyz

Source

This app’s code and revision history are public. Download a copy or explore the files below.

Public
The app’s code and revision history are public.
Owned app · rev 0fa0e84d537b
Run it yourself
Take the whole tree and run it on your own machine. The download needs no account. Cloning needs a sign-in.
Download .zip
bounded clone a8c677472ab5691741798a3d
A copy you download is not bounded. The guarantees this app runs under - declared egress, proven invariants, writes that fail closed - live in the runtime serving this page, not in the files. What you get is auditable source you can read and run, with no runtime guarantees attached.
← All files
src/styles.css
/* Still. Shared look comes from /kit.css; this is the app's own layout, and its night look. */
body.app-mode .landing-only { display: none !important; }
body:not(.app-mode) #app:empty { display: none; }
body:not(.app-mode) .app-nav, body.app-mode .landing-nav { display: none; }
body.playing, body.dimmed { overflow: hidden; }
/* Behind a player, the tabs and mini player are hidden, so floating host badges settle low instead of over the controls. */
body.playing .tabbar, body.playing .mini { display: none; }
.muted { color: var(--muted); }
.hint.fine { margin-top: 28px; max-width: 70ch; }
.spread { display: flex; align-items: center; justify-content: space-between; gap: 12px; }

/* Landing */
.app-hero { padding: 40px 0 72px; background: var(--paper-warm); border-bottom: 1px solid #efe6d6; }
.app-hero-grid { display: grid; grid-template-columns: minmax(0, 1fr) 420px; gap: 56px; align-items: center; }
.app-hero h1 { margin-top: 14px; }
.app-hero .lede { margin-top: 18px; }
.hero-art { width: 240px; height: auto; margin: 0 0 6px -14px; -webkit-mask-image: radial-gradient(closest-side, #000 72%, transparent); mask-image: radial-gradient(closest-side, #000 72%, transparent); }
.hero-points { list-style: none; padding: 0; margin-top: 26px; display: grid; gap: 10px; font-size: 15.5px; color: #3c4048; }
.hero-points li { display: flex; gap: 10px; align-items: baseline; }
.hero-points li::before { content: ""; flex: 0 0 8px; height: 8px; border-radius: 50%; background: var(--cobalt); transform: translateY(-2px); }
@media (max-width: 900px) { .app-hero-grid { grid-template-columns: minmax(0, 1fr); gap: 32px; } .app-hero { padding-top: 24px; } .hero-art { width: 190px; } }
.start { padding: 22px; display: grid; gap: 16px; }
.start-list { list-style: none; padding: 0; display: grid; gap: 8px; }
.start-list a { display: flex; align-items: center; gap: 14px; min-height: 64px; padding: 10px 14px; border: 1px solid var(--line); border-radius: 14px; color: var(--ink); background: #fff; transition: border-color .2s, background .2s; }
.start-list a:hover { border-color: var(--line-strong); background: #fcfbf8; color: var(--ink); }
.start-list svg { flex: 0 0 auto; color: var(--cobalt); }
.start-list span { display: grid; gap: 1px; }
.start-list strong { font: 600 15.5px/1.3 var(--sans); }
.start-list small { font-size: 13.5px; color: var(--muted); }
.features { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 28px 36px; margin-top: 32px; }
.features h3 { font: 380 26px/1.15 var(--serif); letter-spacing: -.015em; }
.features p { margin-top: 10px; color: #43474e; }
.two-up { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 48px; }
@media (max-width: 860px) { .two-up { grid-template-columns: minmax(0, 1fr); gap: 36px; } }
.prose-list { margin-top: 16px; padding-left: 1.3em; display: grid; gap: 8px; font-size: 17px; color: #2c2f35; }
.api-grid { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 40px; align-items: start; }
.api-grid .code { font-size: 12.5px; }
@media (max-width: 900px) { .api-grid { grid-template-columns: minmax(0, 1fr); } }
.more-apps { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; list-style: none; padding: 0; margin-top: 22px; }
.more-apps a { display: grid; gap: 4px; padding: 16px 18px; border: 1px solid var(--line); border-radius: 14px; background: #fff; color: var(--ink); }
.more-apps a:hover { border-color: var(--line-strong); box-shadow: var(--shadow); color: var(--ink); }
.more-apps strong { font: 400 22px/1.1 var(--serif); }
.more-apps span { color: var(--muted); font-size: 14px; }
.compare td:first-child { font-weight: 600; }

/* App frame: tabs in the header on wide screens, at the bottom on phones */
.app-nav { gap: 2px; }
.app-nav a[aria-current="page"] { background: #0000000a; }
.nav-progress svg { display: none; }
.page { padding-block: 28px 120px; }
.page.narrow, .narrow { max-width: 680px; }
.page-head { margin-bottom: 22px; }
.page-head .eyebrow { margin-bottom: 10px; }
.page-title { font: 330 clamp(36px, 5vw, 52px)/1.06 var(--serif); letter-spacing: -.03em; text-wrap: balance; }
.page-lede { margin-top: 10px; font-size: 17px; color: #4a4e56; max-width: 54ch; }
.section-title { margin: 36px 0 14px; font: 380 26px/1.2 var(--serif); letter-spacing: -.015em; }
.card-title { margin-bottom: 12px; font: 380 24px/1.2 var(--serif); letter-spacing: -.015em; }
.card.pad { padding: 20px; display: grid; gap: 18px; align-content: start; }
.back-link { display: inline-flex; align-items: center; gap: 4px; min-height: 44px; margin: -6px 0 6px -4px; color: var(--muted); font: 600 14.5px var(--sans); }
.back-link:hover { color: var(--ink); }
.tabbar { display: none; }
.mini, .story-bar { position: fixed; z-index: 30; right: 16px; bottom: 16px; width: min(380px, calc(100% - 32px)); display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 16px; background: #fffffff2; -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); box-shadow: 0 12px 32px -14px #1a1d2440; }
.mini-play { display: grid; place-items: center; flex: 0 0 44px; width: 44px; height: 44px; border: 0; border-radius: 50%; background: var(--ink-solid); color: #fff; cursor: pointer; }
.mini-text { display: grid; min-width: 0; color: var(--ink); }
.mini-text strong, .story-bar-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 600 14.5px/1.3 var(--sans); }
.mini-text span { font-size: 13px; color: var(--muted); }
.story-bar-text { flex: 1; min-width: 0; }

@media (max-width: 760px) {
  body.app-mode .site-head .wrap { min-height: 56px; }
  .app-nav .nav-tab { display: none; }
  .app-nav .nav-progress { padding: 0 10px; }
  .app-nav .nav-progress svg { display: block; }
  .app-nav .nav-progress span { display: none; }
  .tabbar { position: fixed; z-index: 30; left: 0; right: 0; bottom: 0; display: grid; grid-template-columns: repeat(5, 1fr); padding: 6px 4px calc(6px + env(safe-area-inset-bottom)); border-top: 1px solid var(--line); background: #fdfdfcf2; -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); }
  .tab { display: grid; justify-items: center; gap: 3px; min-height: 52px; padding-top: 5px; border-radius: 12px; color: var(--faint); font: 600 11.5px/1 var(--sans); }
  .tab[aria-current="page"] { color: var(--ink-solid); }
  .tab:hover { color: var(--ink); }
  .page { padding-block: 18px 168px; }
  .mini, .story-bar { left: 12px; right: 12px; width: auto; bottom: calc(72px + env(safe-area-inset-bottom)); }
}

/* Lists of sessions and patterns */
.card-list { list-style: none; padding: 0; display: grid; gap: 10px; }
.card-list.two-col { grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); }
.item-card { display: flex; align-items: center; gap: 16px; height: 100%; padding: 16px 16px 16px 18px; border: 1px solid var(--line); border-radius: 16px; background: #fff; color: var(--ink); transition: border-color .25s, box-shadow .25s; }
.item-card:hover { border-color: var(--line-strong); box-shadow: var(--shadow); color: var(--ink); }
.item-main { display: grid; gap: 3px; flex: 1; min-width: 0; }
.item-title { font: 400 22px/1.2 var(--serif); letter-spacing: -.012em; }
.item-meta { font: 600 12px/1.4 var(--sans); letter-spacing: .06em; text-transform: uppercase; color: var(--faint); }
.item-text { font-size: 14.5px; line-height: 1.5; color: #4a4e56; }
.item-go { display: grid; place-items: center; flex: 0 0 40px; width: 40px; height: 40px; border-radius: 50%; background: var(--paper-warm); color: var(--ink); }
.timer-card { margin-bottom: 8px; background: var(--paper-warm); border-color: #ece2cf; }
.timer-card .item-go { background: #fff; }
.night-card { background: #151922; border-color: #151922; color: #e4dfd3; }
.night-card:hover { color: #e4dfd3; border-color: #2b3240; }
.night-card .item-text { color: #a9a59c; }
.night-card .item-meta { color: #8a8780; }
.night-card .item-go { background: #222837; color: #e4dfd3; }

/* Today */
.stats-strip { display: grid; grid-template-columns: repeat(3, 1fr); margin-bottom: 22px; border: 1px solid var(--line); border-radius: 16px; background: #fff; color: var(--muted); font-size: 13.5px; }
.stats-strip span { display: grid; gap: 2px; padding: 14px 16px; }
.stats-strip span + span { border-left: 1px solid var(--line); }
.stats-strip strong { font: 400 28px/1.1 var(--serif); color: var(--ink); }
.stats-strip:hover { color: var(--muted); border-color: var(--line-strong); }
.today-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); gap: 24px; align-items: start; }
@media (max-width: 860px) { .today-grid { grid-template-columns: minmax(0, 1fr); } }
.breath-card { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 18px 20px; padding: 22px; background: var(--paper-warm); border-color: #ece2cf; box-shadow: none; }
.breath-card .card-title { margin-bottom: 6px; }
.breath-card .btn { grid-column: 1 / -1; }
.orb { width: 96px; height: 96px; border-radius: 50%; background: #dfe7f7; box-shadow: inset 0 0 0 1.5px #2e5ec433; animation: orb 8s ease-in-out infinite; }
@keyframes orb { 0%, 100% { transform: scale(.72); } 50% { transform: scale(1); } }
.tiles { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.tile { display: grid; gap: 6px; height: 100%; padding: 16px; border: 1px solid var(--line); border-radius: 16px; background: #fff; color: var(--ink); }
.tile svg { color: var(--cobalt); margin-bottom: 4px; }
.tile strong { font: 400 21px/1.15 var(--serif); }
.tile span { font-size: 13.5px; color: var(--muted); line-height: 1.45; }
.tile:hover { border-color: var(--line-strong); color: var(--ink); }
@media (max-width: 760px) { .tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Setup forms */
.setup { display: grid; gap: 22px; padding: 22px; }
.field > span { font: 600 13.5px/1.2 var(--sans); }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chip-btn { min-height: 44px; padding: 0 16px; border: 1px solid var(--line-strong); border-radius: 999px; background: #fff; color: var(--ink); font: 600 14.5px/1 var(--sans); cursor: pointer; transition: background .2s, color .2s, border-color .2s; }
.chip-btn:hover { border-color: #b5bdc8; }
.chip-btn[aria-checked="true"], .chip-btn[aria-pressed="true"] { background: var(--ink-solid); border-color: var(--ink-solid); color: #fff; }
.chip-custom .input { width: 92px; min-height: 44px; border-radius: 999px; padding: 0 16px; font-weight: 600; font-size: 14.5px; }
.toggle { display: flex; align-items: center; gap: 14px; min-height: 48px; cursor: pointer; }
.toggle-text { display: grid; gap: 2px; flex: 1; font: 600 15px/1.3 var(--sans); }
.toggle-text small { font: 400 13px/1.4 var(--sans); color: var(--muted); }
.toggle input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.toggle-track { position: relative; flex: 0 0 48px; height: 28px; border-radius: 999px; background: var(--line-strong); transition: background .25s; }
.toggle-track::after { content: ""; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px #0003; transition: transform .25s; }
.toggle input:checked + .toggle-track { background: var(--ink-solid); }
.toggle input:checked + .toggle-track::after { transform: translateX(20px); }
.toggle input:focus-visible + .toggle-track { outline: 2px solid var(--cobalt); outline-offset: 3px; }
.mood { border: 0; padding: 0; margin: 0; min-width: 0; }
.mood legend { padding: 0; margin-bottom: 10px; font: 600 13.5px/1.2 var(--sans); }
.mood-row { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 4px; }
.mood-dot { display: grid; justify-items: center; align-content: start; gap: 7px; min-height: 64px; padding: 6px 2px; border: 0; border-radius: 12px; background: none; cursor: pointer; color: var(--muted); }
.mood-dot:hover { background: #00000006; }
.mood-mark { width: calc(32px * var(--s)); height: calc(32px * var(--s)); margin-top: calc(16px * (1 - var(--s))); border-radius: 50%; border: 1.5px solid var(--line-strong); transition: background .2s, border-color .2s; }
.mood-word { font: 600 11.5px/1.2 var(--sans); text-align: center; }
.mood-dot[aria-pressed="true"] { color: var(--ink-solid); }
.mood-dot[aria-pressed="true"] .mood-mark { background: var(--ink-solid); border-color: var(--ink-solid); }
.steppers { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.stepper { display: grid; justify-items: center; gap: 6px; padding: 12px 4px; border-radius: 14px; background: var(--paper-warm); }
.stepper-label { font: 600 12.5px/1.2 var(--sans); color: var(--muted); text-align: center; }
.stepper-row { display: flex; align-items: center; gap: 2px; }
.stepper-value { min-width: 42px; text-align: center; font: 400 26px/1 var(--serif); }
.stepper-value small { font: 600 12px var(--sans); color: var(--muted); margin-left: 1px; }
.stepper .round-btn { width: 36px; height: 36px; border-color: transparent; }
@media (max-width: 520px) { .steppers { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.range { width: 100%; height: 36px; accent-color: var(--ink-solid); cursor: pointer; }
.voice { display: grid; gap: 14px; justify-items: start; }
.voice .field { width: 100%; }
details.more summary { cursor: pointer; min-height: 44px; display: flex; align-items: center; font: 600 14.5px var(--sans); color: var(--muted); }
details.more[open] summary { margin-bottom: 8px; }

/* Player */
.player { position: fixed; inset: 0; z-index: 50; display: flex; flex-direction: column; align-items: center; padding: max(10px, env(safe-area-inset-top)) 16px max(18px, env(safe-area-inset-bottom)); overflow-y: auto; background: var(--paper-warm); animation: fade .6s ease; }
@media (max-width: 760px) { .player { padding-bottom: max(96px, env(safe-area-inset-bottom)); } }
.player-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; max-width: 720px; }
.player-title { font: 600 14.5px/1.3 var(--sans); color: var(--muted); text-align: center; }
.round-btn { display: grid; place-items: center; flex: 0 0 auto; width: 48px; height: 48px; border: 1px solid var(--line-strong); border-radius: 50%; background: transparent; color: var(--ink); cursor: pointer; transition: background .2s; }
.round-btn:hover { background: #0000000a; }
.round-btn:disabled { opacity: .35; cursor: default; }
.round-btn.flip svg { transform: scaleX(-1); }
.round-spacer { width: 48px; flex: 0 0 48px; }
.play-btn { display: grid; place-items: center; width: 76px; height: 76px; flex: 0 0 76px; border: 0; border-radius: 50%; background: var(--ink-solid); color: #fff; cursor: pointer; transition: transform .2s, opacity .2s; }
.play-btn:active { transform: scale(.97); }
.play-btn:disabled { opacity: .35; cursor: default; }
.controls { display: flex; align-items: center; justify-content: center; gap: 28px; margin-top: 18px; }
.player-time { margin-top: 14px; font: 600 14px var(--sans); color: var(--muted); font-variant-numeric: tabular-nums; }
.end-btn { margin-top: 8px; color: var(--muted); }
.player-extra { display: flex; gap: 6px; margin-top: 8px; }
.player-extra .btn { color: var(--muted); }
@keyframes fade { from { opacity: 0; } }

.breath-stage { position: relative; display: grid; place-items: center; width: min(78vw, 380px, 52vh); aspect-ratio: 1; margin: auto 0 8px; }
.breath-guide { position: absolute; inset: 0; border-radius: 50%; border: 1px dashed #2e5ec433; }
.breath-disc { position: absolute; inset: 0; border-radius: 50%; background: #dfe7f7; box-shadow: inset 0 0 0 1.5px #2e5ec440, 0 20px 60px -30px #2e5ec466; transform: scale(.42); will-change: transform; }
.breath-ring { position: absolute; inset: -10px; width: calc(100% + 20px); height: calc(100% + 20px); transform: rotate(-90deg); }
.breath-ring circle { fill: none; stroke: var(--cobalt); stroke-width: 1.2; stroke-linecap: round; opacity: .6; }
.breath-words { position: relative; display: grid; justify-items: center; gap: 4px; text-align: center; }
.breath-label { font: 340 clamp(28px, 7vw, 38px)/1.1 var(--serif); letter-spacing: -.02em; color: var(--ink-solid); }
.breath-count { font: 500 16px var(--sans); color: var(--muted); font-variant-numeric: tabular-nums; }

.guided-stage { position: relative; display: grid; place-items: center; width: 100%; max-width: 640px; min-height: 46vh; margin: auto 0 8px; }
.glow { position: absolute; width: min(70vw, 320px); aspect-ratio: 1; border-radius: 50%; background: #e4ebf8; opacity: .8; animation: glow 10s ease-in-out infinite; }
.glow.still { animation-play-state: paused; }
@keyframes glow { 0%, 100% { transform: scale(.86); opacity: .55; } 50% { transform: scale(1); opacity: .9; } }
.guided-words { position: relative; max-width: 30ch; padding: 0 8px; text-align: center; font: 360 clamp(22px, 5.4vw, 30px)/1.42 var(--serif); letter-spacing: -.01em; color: var(--ink-solid); text-wrap: balance; animation: fade 1.2s ease; }
.progress { width: min(100%, 420px); height: 4px; border-radius: 999px; background: #0000000f; overflow: hidden; }
.progress span { display: block; height: 100%; background: var(--ink-solid); border-radius: inherit; transition: width .5s linear; }

.timer-stage { position: relative; display: grid; place-items: center; width: min(76vw, 360px, 50vh); aspect-ratio: 1; margin: auto 0 8px; }
.timer-ring { position: absolute; inset: 0; transform: rotate(-90deg); }
.timer-ring circle { fill: none; stroke-width: 1.4; }
.timer-track { stroke: #0000001a; }
.timer-fill { stroke: var(--ink-solid); stroke-linecap: round; transition: stroke-dashoffset .25s linear; }
.timer-words { display: grid; justify-items: center; gap: 6px; }
.timer-clock { font: 300 clamp(52px, 14vw, 76px)/1 var(--serif); letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.timer-note { font: 600 13.5px var(--sans); color: var(--muted); }

.done { display: grid; justify-items: center; gap: 14px; width: 100%; max-width: 440px; margin: auto 0; text-align: center; animation: fade .8s ease; }
.done-title { font: 330 clamp(40px, 9vw, 56px)/1 var(--serif); letter-spacing: -.03em; }
.done-sub { font-size: 17px; color: #4a4e56; }
.done .mood { width: 100%; margin-top: 12px; }
.done .mood legend { width: 100%; text-align: center; }
.done-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; width: 100%; margin-top: 10px; }
.done-actions .btn:only-child { grid-column: 1 / -1; }

/* Sounds */
.now { display: flex; align-items: center; gap: 16px; padding: 14px 16px; margin-bottom: 16px; }
.now .play-btn { width: 60px; height: 60px; flex-basis: 60px; }
.now-text { display: grid; flex: 1; min-width: 0; }
.now-title { font: 400 22px/1.25 var(--serif); letter-spacing: -.01em; }
.now-sub { font-size: 13.5px; color: var(--muted); }
.sound-grid { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; }
@media (max-width: 1000px) { .sound-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 640px) { .sound-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.sound { display: grid; align-content: start; border: 1px solid var(--line); border-radius: 16px; background: #fff; transition: border-color .25s, background .25s; }
.sound.on { border-color: var(--ink-solid); background: var(--paper-warm); }
.sound-btn { display: grid; gap: 4px; align-content: start; min-height: 88px; padding: 14px 14px 10px; border: 0; background: none; text-align: left; cursor: pointer; color: var(--ink); }
.sound-name { font: 400 21px/1.15 var(--serif); letter-spacing: -.01em; }
.sound-hint { font-size: 13px; line-height: 1.4; color: var(--muted); }
.sound .range { width: auto; margin: 0 14px 8px; }
.sounds-lower { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; margin-top: 16px; }
@media (max-width: 860px) { .sounds-lower { grid-template-columns: minmax(0, 1fr); } }
.saved { list-style: none; padding: 0; display: grid; gap: 6px; }
.saved li { display: flex; align-items: center; gap: 6px; }
.saved-play { display: grid; flex: 1; min-width: 0; min-height: 52px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 12px; background: #fff; text-align: left; cursor: pointer; color: var(--ink); }
.saved-play[aria-pressed="true"] { border-color: var(--ink-solid); }
.saved-play strong { font: 600 14.5px/1.3 var(--sans); }
.saved-play span { font-size: 13px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.icon-x { display: grid; place-items: center; width: 44px; height: 44px; border: 0; border-radius: 50%; background: none; color: var(--muted); cursor: pointer; }
.icon-x:hover { background: #0000000a; }

/* Sleep */
.sleep-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); gap: 24px; align-items: start; }
@media (max-width: 860px) { .sleep-grid { grid-template-columns: minmax(0, 1fr); } }
.dim { position: fixed; inset: 0; z-index: 90; display: grid; place-items: end center; padding-bottom: max(40px, env(safe-area-inset-bottom)); border: 0; background: #000; cursor: pointer; }
.dim span { font: 500 13px var(--sans); color: #3a3a3a; }
.page.story { max-width: 760px; }
.story-setup { margin-bottom: 28px; }
.story-text { max-width: 36em; font: 380 clamp(19px, 2.4vw, 21px)/1.8 var(--serif); color: #2b2e34; }
.story-text p + p { margin-top: 1.05em; }
.story-text p { transition: opacity .8s, color .8s; }
.story-text p.now { color: var(--ink-solid); }
.story-text:has(p.now) p:not(.now) { opacity: .5; }
.story-end { margin-top: 2em !important; font-style: italic; color: var(--muted); }

/* Progress */
.stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin: 0 0 20px; }
.stats div { padding: 16px; border: 1px solid var(--line); border-radius: 16px; background: #fff; }
.stats dt { font: 600 12px/1.3 var(--sans); letter-spacing: .06em; text-transform: uppercase; color: var(--faint); }
.stats dd { margin: 6px 0 0; font: 380 30px/1.1 var(--serif); letter-spacing: -.015em; }
@media (max-width: 760px) { .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.progress-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; align-items: start; }
@media (max-width: 860px) { .progress-grid { grid-template-columns: minmax(0, 1fr); } }
.calendar-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.calendar-head p { display: grid; text-align: center; }
.calendar-head strong { font: 400 22px/1.2 var(--serif); }
.calendar-head span { font-size: 13px; color: var(--muted); }
.calendar-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; text-align: center; }
.calendar-wd { font: 600 11.5px/2 var(--sans); color: var(--faint); }
.calendar-day { display: grid; place-items: center; justify-self: center; width: min(40px, 100%); aspect-ratio: 1; border-radius: 50%; font: 500 14px var(--sans); color: #4a4e56; font-variant-numeric: tabular-nums; }
.calendar-day.did { background: var(--ink-solid); color: #fff; }
.calendar-day.today { box-shadow: 0 0 0 1.5px var(--cobalt); }
.mood-summary { font-size: 16px; }
.history { list-style: none; padding: 0; margin-top: 8px; display: grid; }
.history li { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 10px 0; border-top: 1px solid var(--line); }
.history-main { display: grid; min-width: 0; }
.history-main strong { font: 600 14.5px/1.3 var(--sans); }
.history-main span, .history-mood { font-size: 13px; color: var(--muted); }
.history-mood { text-align: right; flex: 0 0 auto; max-width: 45%; }
.settings { gap: 20px; max-width: 680px; }

/* Night: deep ink and low light for sleep screens */
body.night { background: #10131a; color: #d8d2c5; }
body.night .site-head { background: #10131aee; }
body.night .site-head.scrolled { border-bottom-color: #232936; }
body.night .brand, body.night .brand:hover { color: #d8d2c5; }
body.night .brand img { filter: invert(.86); }
body.night .brand-app { color: #8c887f; }
body.night .site-nav a { color: #b9b4a8; }
body.night .site-nav a:hover, body.night .app-nav a[aria-current="page"] { background: #ffffff0d; color: #e6e1d5; }
body.night .eyebrow, body.night .muted, body.night .page-lede, body.night .item-text, body.night .hint, body.night .field small, body.night .back-link, body.night .toggle-text small { color: #8f8b83; }
body.night .item-meta { color: #77746d; }
body.night .page-title, body.night .section-title, body.night .card-title, body.night .item-title { color: #e6e1d5; }
body.night .card, body.night .item-card { background: #161a23; border-color: #232936; box-shadow: none; color: #d8d2c5; }
body.night .item-card:hover { border-color: #323a4a; }
body.night .item-go { background: #222837; color: #d8d2c5; }
body.night .field > span, body.night .mood legend, body.night .toggle-text { color: #c9c3b6; }
body.night .chip-btn { background: transparent; border-color: #323a4a; color: #c9c3b6; }
body.night .chip-btn[aria-checked="true"], body.night .chip-btn[aria-pressed="true"] { background: #d8d2c5; border-color: #d8d2c5; color: #10131a; }
body.night .btn { background: #d8d2c5; border-color: #d8d2c5; color: #10131a; }
body.night .btn:hover { background: #ebe6da; }
body.night .btn-line, body.night .btn-quiet { background: transparent; color: #d8d2c5; border-color: #323a4a; }
body.night .btn-quiet { border-color: transparent; }
body.night .btn-line:hover, body.night .btn-quiet:hover { background: #ffffff0d; }
body.night .input, body.night .select { background: #10131a; border-color: #323a4a; color: #d8d2c5; }
body.night .range { accent-color: #b8c6e6; }
body.night .notice { background: #161a23; border-color: #232936; color: #c9c3b6; }
body.night .toggle-track { background: #323a4a; }
body.night .toggle input:checked + .toggle-track { background: #b8c6e6; }
body.night .mood-dot { color: #8f8b83; }
body.night .mood-mark { border-color: #3a4252; }
body.night .mood-dot[aria-pressed="true"] { color: #e6e1d5; }
body.night .mood-dot[aria-pressed="true"] .mood-mark { background: #d8d2c5; border-color: #d8d2c5; }
body.night .tabbar, body.night .mini, body.night .story-bar { background: #10131af2; border-color: #232936; }
body.night .tab { color: #6f6c66; }
body.night .tab[aria-current="page"] { color: #e6e1d5; }
body.night .mini-play { background: #d8d2c5; color: #10131a; }
body.night .mini-text strong, body.night .mini-text, body.night .story-bar-text { color: #d8d2c5; }
body.night .player { background: #0c0f14; }
body.night .player-title, body.night .player-time, body.night .player-extra .btn, body.night .end-btn { color: #7f7b74; }
body.night .round-btn { border-color: #2a303c; color: #c9c3b6; }
body.night .round-btn:hover { background: #ffffff0a; }
body.night .play-btn { background: #c9c3b6; color: #0c0f14; }
body.night .breath-label, body.night .guided-words, body.night .done-title { color: #ddd7ca; }
body.night .breath-disc { background: #182033; box-shadow: inset 0 0 0 1.5px #7d99d640; }
body.night .breath-guide { border-color: #7d99d62a; }
body.night .glow { background: #151d2d; }
body.night .progress { background: #ffffff12; }
body.night .progress span { background: #9aa9c9; }
body.night .done-sub { color: #9a968e; }
body.night .story-text { color: #b9b3a6; }
body.night .story-text p.now { color: #ece6d9; }
body.night .night-card { background: #161a23; border-color: #232936; }
body.night .stats-strip, body.night .stats div, body.night .sound, body.night .saved-play, body.night .tile { background: #161a23; border-color: #232936; color: #d8d2c5; }
body.night .spinner { border-color: #ffffff1f; border-top-color: #d8d2c5; }
body.night ::selection { background: #2c3a5a; }

Change history

Link to OpenApps pages and add a contribution strip
0fa0e84d53 · 19 hours ago
Bind the agent address in the policy
6f3baa1c72 · 1 day ago
Add favicon.ico so browsers that ask for it stop getting a 404
1a004fe0e3 · 1 day ago
Bounded source sync
afe642fe50 · 2 days ago
Bounded source sync
2c581f55ea · 2 days ago
Bounded source sync
375934c28b · 2 days ago
Bounded source sync
74ff37d51a · 2 days ago