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.
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 54b9c9d7fdc2b68029ce2e57
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.
src/styles.css
/* Feedback. Shared look comes from /kit.css; this is the app's own layout. */
html:not(.app-route) #app:empty { display: none; }
.page-pad { padding-block: 56px 80px; }
.narrow { max-width: 640px; }
.loading { display: flex; align-items: center; gap: 12px; color: var(--muted); }
.link-btn { justify-self: start; padding: 2px 0; border: 0; background: none; color: var(--cobalt); font: 600 14px/1.4 var(--sans); cursor: pointer; text-align: left; }
.link-btn:hover { color: var(--cobalt-ink); }
.link-btn:disabled { color: var(--muted); cursor: default; }
.optional { margin-left: 4px; font-weight: 400; color: var(--faint); }
.select-inline { width: auto; min-height: 40px; padding: 7px 30px 7px 12px; font-size: 14.5px; font-weight: 600; }
.input-sm { min-height: 38px; padding: 7px 10px; font-size: 15px; }
.input-lg { min-height: 52px; font-size: 16.5px; }
.icon-btn { display: grid; place-items: center; width: 38px; height: 38px; border: 0; border-radius: 10px; background: none; cursor: pointer; color: var(--muted); }
.icon-btn:hover:not(:disabled) { background: #0000000a; color: var(--ink); }
.inline-code { font: 500 .86em/1 var(--mono); padding: .15em .38em; border-radius: 5px; background: var(--panel); border: 1px solid var(--panel-line); }
.check-sm { font-size: 14px; color: #3c4048; }
.check-sm input { width: 16px; height: 16px; }
.site-nav a { white-space: nowrap; }
@media (max-width: 420px) { .site-nav a { padding: 0 8px; } }
/* Landing hero with the board maker */
.app-hero { padding: 44px 0 72px; background: linear-gradient(180deg, #faf6ee 0%, #fdfdfc 100%); border-bottom: 1px solid #f0ebe1; }
.app-hero-grid { display: grid; grid-template-columns: minmax(0, 1fr) 440px; gap: 56px; align-items: start; }
.app-hero-copy { padding-top: 8px; }
.app-hero .display { margin-top: 14px; }
.app-hero .lede { margin-top: 18px; }
.hero-art { width: 180px; height: auto; margin-bottom: -4px; }
.create { display: grid; gap: 12px; margin-top: 26px; padding: 20px; max-width: 520px; }
.create .hint { text-align: center; }
.hero-points { list-style: none; padding: 0; margin-top: 24px; 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); }
.hero-example { padding-top: 56px; }
.example-card { padding: 22px 22px 10px; }
.example-title { margin-top: 8px; font: 380 28px/1.1 var(--serif); letter-spacing: -.02em; }
.example-list { margin-top: 12px; }
@media (max-width: 960px) {
.app-hero-grid { grid-template-columns: minmax(0, 1fr); gap: 36px; }
.hero-example { padding-top: 0; max-width: 520px; }
}
@media (max-width: 600px) { .app-hero { padding: 20px 0 48px; } .hero-art { width: 112px; } .create { padding: 16px; margin-top: 22px; } }
.your-boards { margin-top: 22px; display: grid; gap: 10px; max-width: 520px; }
.your-title { font: 650 12px/1 var(--sans); letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.your-list { list-style: none; padding: 0; display: grid; gap: 8px; }
.your-list a { display: grid; gap: 2px; padding: 11px 14px; border: 1px solid var(--line); border-radius: 12px; background: #fff; color: var(--ink); }
.your-list a:hover { border-color: var(--line-strong); box-shadow: var(--shadow); color: var(--ink); }
.your-list strong { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.your-list span { font-size: 13px; color: var(--muted); }
/* Landing sections */
.steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px; margin-top: 28px; padding: 0; counter-reset: step; }
.steps li { list-style: none; counter-increment: step; }
.steps li::before { content: counter(step); display: grid; place-items: center; width: 34px; height: 34px; margin-bottom: 14px; border-radius: 50%; background: var(--ink-solid); color: #fff; font: 650 15px var(--sans); }
.steps h3, .features h3 { font: 600 18px/1.3 var(--sans); }
.steps p, .features p { margin-top: 8px; color: #4a4e56; }
.features { list-style: none; padding: 0; margin-top: 26px; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.features li { padding: 20px 22px; border: 1px solid var(--line); border-radius: 16px; background: #fff; }
@media (max-width: 900px) { .features { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 760px) { .steps, .features { grid-template-columns: minmax(0, 1fr); } }
.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; }
@media (max-width: 760px) {
.compare { min-width: 720px; font-size: 14px; }
.compare th, .compare td { padding: 11px 12px; }
}
/* Board page */
.board-head { border-bottom: 1px solid var(--line); background: linear-gradient(180deg, #faf6ee, #fdfdfc); }
.board-head-inner { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px 20px; flex-wrap: wrap; padding: 30px 0 18px; }
.board-title-block { min-width: 0; max-width: 760px; }
.board-title { margin-top: 8px; font: 360 clamp(32px, 4vw, 46px)/1.08 var(--serif); letter-spacing: -.03em; overflow-wrap: anywhere; }
.board-intro { margin-top: 10px; max-width: 70ch; color: #3d4148; white-space: pre-wrap; overflow-wrap: anywhere; }
.board-actions { --gap: 8px; }
.tabs { display: flex; gap: 4px; overflow-x: auto; scrollbar-width: none; }
.tabs::-webkit-scrollbar { display: none; }
.tab { display: inline-flex; align-items: center; gap: 8px; min-height: 46px; padding: 0 14px; border-bottom: 2px solid transparent; color: var(--muted); font: 600 14.5px/1 var(--sans); white-space: nowrap; }
.tab:hover { color: var(--ink-solid); }
.tab.on { color: var(--ink-solid); border-bottom-color: var(--ink-solid); }
.tab-count { min-width: 22px; padding: 3px 7px; border-radius: 999px; background: var(--panel); color: #3c4048; font-size: 12px; text-align: center; }
.board-body { display: grid; gap: 18px; padding-top: 24px; padding-bottom: 40px; }
.invite { position: relative; display: flex; align-items: center; gap: 12px 16px; flex-wrap: wrap; padding-right: 52px; }
.invite-text { flex: 1 1 320px; }
.invite-actions { --gap: 8px; }
.invite-close { position: absolute; top: 6px; right: 6px; color: #2f5a3c; }
@media (max-width: 600px) { .board-head-inner { padding-top: 22px; } .board-actions .btn { flex: 1 1 auto; } .board-actions { width: 100%; } }
/* Ideas: composer beside the list on wide screens, above it on phones */
.ideas { display: grid; grid-template-columns: minmax(0, 1fr) 340px; grid-template-rows: auto 1fr; gap: 14px 28px; align-items: start; }
.ideas-main { grid-column: 1; grid-row: 1 / span 2; min-width: 0; display: grid; gap: 14px; }
.ideas-side { grid-column: 2; grid-row: 1; display: grid; gap: 14px; }
.ideas-account { grid-column: 2; grid-row: 2; }
@media (max-width: 900px) {
.ideas { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; gap: 18px; }
.ideas-main, .ideas-side, .ideas-account { grid-column: 1; grid-row: auto; }
}
.composer { display: grid; gap: 12px; padding: 18px; }
.composer-title { font: 600 16px/1.3 var(--sans); }
.composer-actions { --gap: 8px; }
.tag-pick { --gap: 6px; }
.chip-btn { cursor: pointer; font-size: 13px; min-height: 32px; padding: 0 12px; }
.chip-btn:hover { border-color: var(--line-strong); }
.chip-btn.on { background: var(--ink-solid); border-color: var(--ink-solid); color: #fff; }
.similar { padding: 10px 12px; border-radius: 12px; background: var(--paper-warm); border: 1px solid #ece2cf; }
.similar ul { list-style: none; padding: 0; margin-top: 8px; display: grid; gap: 8px; }
.similar li { display: flex; align-items: center; gap: 10px; min-width: 0; font-size: 14.5px; }
.similar li a { min-width: 0; overflow-wrap: anywhere; color: var(--ink); font-weight: 600; }
.account { display: grid; gap: 6px; padding: 12px 14px; border: 1px solid var(--line); border-radius: 14px; font-size: 14px; color: #3d4148; }
.account strong { font-weight: 600; overflow-wrap: anywhere; }
.toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.search { position: relative; flex: 1 1 220px; min-width: 0; }
.search svg { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--faint); pointer-events: none; }
.search .input { min-height: 40px; padding: 8px 12px 8px 36px; font-size: 15px; }
.seg { display: inline-flex; padding: 3px; border: 1px solid var(--line-strong); border-radius: 10px; background: #fff; }
.seg button { min-height: 32px; padding: 0 12px; border: 0; border-radius: 7px; background: none; color: #3c4048; font: 600 14px/1 var(--sans); cursor: pointer; }
.seg button.on { background: var(--ink-solid); color: #fff; }
.tag-filter { display: flex; gap: 6px; flex-wrap: wrap; }
@media (max-width: 600px) {
.toolbar .search { flex-basis: 100%; }
.toolbar .seg { flex: 1 1 auto; }
.toolbar .seg button { flex: 1; }
.toolbar .select-inline { flex: 1 1 auto; }
}
.post-list { list-style: none; padding: 0; display: grid; border: 1px solid var(--line); border-radius: 16px; background: #fff; }
.post-row { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 14px; align-items: start; padding: 14px 16px; }
.post-row + .post-row { border-top: 1px solid var(--line); }
.post-row-body { min-width: 0; display: grid; gap: 4px; }
.post-row-title { color: var(--ink-solid); font: 600 16px/1.35 var(--sans); overflow-wrap: anywhere; }
a.post-row-title:hover { color: var(--cobalt-ink); }
.post-row-snippet { color: #4a4e56; font-size: 14.5px; line-height: 1.5; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow-wrap: anywhere; }
.post-row-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; margin-top: 2px; font-size: 13px; color: var(--muted); }
.meta-link { display: inline-flex; align-items: center; gap: 4px; color: var(--muted); }
.meta-link:hover { color: var(--ink); }
.list-foot { font-size: 13px; color: var(--faint); }
.example-list { border: 0; border-radius: 0; background: none; }
.example-list .post-row { padding: 12px 0; }
.vote { display: inline-grid; justify-items: center; align-content: center; gap: 1px; width: 48px; min-height: 52px; padding: 6px 0; border: 1px solid var(--line-strong); border-radius: 10px; background: #fff; color: #3c4048; font: 650 15px/1 var(--sans); cursor: pointer; transition: background .12s, border-color .12s; }
.vote:hover:not(:disabled) { border-color: var(--ink-solid); }
.vote.on { background: var(--ink-solid); border-color: var(--ink-solid); color: #fff; }
.vote:disabled { cursor: default; opacity: .6; }
.vote-lg { grid-auto-flow: row; width: 64px; min-height: 72px; font-size: 18px; }
.vote-word { font: 600 11px/1 var(--sans); letter-spacing: .04em; text-transform: uppercase; }
.similar .vote, .road-card .vote { width: 42px; min-height: 44px; font-size: 14px; }
.status { display: inline-flex; align-items: center; min-height: 22px; padding: 0 8px; border-radius: 6px; font: 650 11.5px/1 var(--sans); letter-spacing: .04em; text-transform: uppercase; white-space: nowrap; }
.status-new { background: var(--panel); color: #4a4e56; }
.status-review { background: #f6eedb; color: #7a5a17; }
.status-planned { background: var(--cobalt-wash); color: var(--cobalt-ink); }
.status-progress { background: #ece6f6; color: #57407f; }
.status-done { background: var(--sage-wash); color: #2f5a3c; }
.status-closed { background: #eceef1; color: #6b6f77; }
.tag { display: inline-flex; align-items: center; min-height: 22px; padding: 0 8px; border-radius: 999px; border: 1px solid var(--line); color: #4a4e56; font: 600 12px/1 var(--sans); }
.flag { font: 650 11.5px/1 var(--sans); letter-spacing: .04em; text-transform: uppercase; color: var(--cobalt-ink); }
.flag-hidden { color: var(--brick); }
.empty { display: grid; justify-items: center; gap: 10px; padding: 40px 20px; border: 1px dashed var(--line-strong); border-radius: 16px; text-align: center; }
.empty-small { padding: 28px 20px; }
.empty .link-btn { justify-self: center; }
.empty .art { width: 160px; height: auto; }
/* One idea */
.post-page { display: grid; gap: 18px; max-width: 820px; }
.back { justify-self: start; font: 600 14px/1 var(--sans); }
.back::before { content: "\2190 "; }
.post-head { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 18px; align-items: start; }
.post-head-text { min-width: 0; display: grid; gap: 8px; }
.post-title { font: 380 clamp(28px, 3.4vw, 38px)/1.12 var(--serif); letter-spacing: -.025em; overflow-wrap: anywhere; }
.post-details { font-size: 16.5px; }
.shipped strong { font-weight: 650; }
.merged-in { font-size: 14.5px; }
.owner-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px 14px; flex-wrap: wrap; padding: 10px 12px 10px 16px; border: 1px solid var(--panel-line); border-radius: 14px; background: var(--panel); }
.owner-status { display: flex; align-items: center; gap: 10px; font: 600 14.5px/1.3 var(--sans); }
.owner-actions { --gap: 6px; }
@media (max-width: 600px) {
.owner-bar { padding: 12px; }
.owner-status { width: 100%; justify-content: space-between; }
.owner-actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); width: 100%; }
.owner-actions .btn { padding: 0 8px; }
.post-head { gap: 14px; }
}
.md { line-height: 1.65; color: #24272d; overflow-wrap: anywhere; }
.md > * + * { margin-top: .8em; }
.md.plain { white-space: pre-wrap; }
.md ul, .md ol { padding-left: 1.3em; }
.md a { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; text-decoration-color: #2e5ec466; }
.md code { font: 500 .88em/1 var(--mono); padding: .12em .35em; border-radius: 5px; background: var(--panel); border: 1px solid var(--panel-line); }
.md pre { max-width: 100%; overflow-x: auto; padding: 14px 16px; border-radius: 12px; background: #16181d; color: #e8eaee; font: 13px/1.6 var(--mono); }
.md pre code { padding: 0; background: none; border: 0; color: inherit; }
.md blockquote { padding-left: 14px; border-left: 3px solid var(--line-strong); color: #4a4e56; }
.md h1, .md h2, .md h3 { font: 600 17px/1.35 var(--sans); }
.md table { display: block; overflow-x: auto; border-collapse: collapse; }
.md th, .md td { padding: 6px 10px; border: 1px solid var(--line); }
.md hr { border: 0; border-top: 1px solid var(--line); }
.comments { display: grid; gap: 14px; padding-top: 10px; border-top: 1px solid var(--line); }
.comment-list { list-style: none; padding: 0; display: grid; gap: 10px; }
.comment { padding: 12px 14px; border: 1px solid var(--line); border-radius: 14px; background: #fff; }
.comment-team { border-color: #d1ddf5; background: #fafcff; }
.comment-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; font-size: 14px; }
.comment-meta strong { font-weight: 600; }
.comment-meta .chip { min-height: 22px; font-size: 11.5px; }
.comment-delete { margin-left: auto; font-size: 13px; color: var(--muted); }
.comment-body { margin-top: 6px; font-size: 15.5px; }
.comment-form { display: grid; gap: 10px; }
.comment-form-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.comment-name { flex: 1 1 200px; }
.comment-name .input { min-height: 46px; }
/* Roadmap */
.roadmap { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; align-items: start; }
@media (max-width: 1000px) { .roadmap { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px) { .roadmap { grid-template-columns: minmax(0, 1fr); } }
.road-col { display: grid; gap: 10px; padding: 14px; border: 1px solid var(--line); border-radius: 16px; background: #fbfaf7; }
.road-head { display: flex; align-items: center; gap: 8px; font: 650 14px/1.2 var(--sans); }
.road-count { margin-left: auto; color: var(--muted); font-weight: 600; }
.dot { width: 9px; height: 9px; border-radius: 50%; }
.dot-review { background: var(--gold); }
.dot-planned { background: var(--cobalt); }
.dot-progress { background: #7a5fb0; }
.dot-done { background: var(--sage); }
.road-list { list-style: none; padding: 0; display: grid; gap: 8px; }
.road-card { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 10px; align-items: start; padding: 10px; border: 1px solid var(--line); border-radius: 12px; background: #fff; }
.road-card-body { min-width: 0; display: grid; gap: 6px; }
.road-card-body a { color: var(--ink-solid); font: 600 14.5px/1.35 var(--sans); overflow-wrap: anywhere; }
.road-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.road-empty { font-size: 14px; color: var(--faint); }
/* Changelog */
.changelog { display: grid; gap: 22px; max-width: 860px; }
.changelog-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px 18px; flex-wrap: wrap; padding: 14px 16px; border: 1px solid var(--panel-line); border-radius: 14px; background: var(--panel); }
.changelog-bar p { flex: 1 1 280px; font-size: 14.5px; }
.entries { list-style: none; padding: 0; display: grid; gap: 30px; }
.entry { display: grid; grid-template-columns: 130px minmax(0, 1fr); gap: 20px; scroll-margin-top: 90px; }
.entry-date { padding-top: 6px; font: 600 13.5px/1.3 var(--sans); color: var(--muted); }
.entry-main { min-width: 0; display: grid; gap: 12px; }
.entry-title { font: 380 clamp(24px, 2.6vw, 30px)/1.15 var(--serif); letter-spacing: -.02em; overflow-wrap: anywhere; }
.entry-shipped { padding: 12px 14px; border-radius: 12px; background: var(--sage-wash); border: 1px solid #cfe2d4; }
.entry-shipped ul { list-style: none; padding: 0; margin-top: 8px; display: grid; gap: 6px; font-size: 15px; }
.entry-shipped a { color: var(--ink-solid); font-weight: 600; }
.entry-actions { --gap: 8px; }
@media (max-width: 640px) { .entry { grid-template-columns: minmax(0, 1fr); gap: 4px; } .entry-date { padding-top: 0; } }
/* Owner sheets */
.tag-edit { list-style: none; padding: 0; display: grid; gap: 6px; }
.tag-edit li { display: flex; gap: 6px; align-items: center; }
.tag-add { --gap: 6px; flex-wrap: nowrap; }
.tag-add .input { flex: 1; min-width: 0; }
.pick-list { list-style: none; padding: 0; display: grid; gap: 4px; max-height: 300px; overflow-y: auto; }
.pick-list button, .pick-list label { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 44px; padding: 6px 10px; border: 1px solid var(--line); border-radius: 10px; background: #fff; text-align: left; cursor: pointer; font-size: 14.5px; }
.pick-list button.on, .pick-list label.on { border-color: var(--ink-solid); box-shadow: inset 0 0 0 1px var(--ink-solid); }
.pick-list input { width: 16px; height: 16px; flex: none; accent-color: var(--ink-solid); }
.pick-votes { flex: none; min-width: 32px; padding: 3px 6px; border-radius: 6px; background: var(--panel); font: 650 12.5px/1 var(--sans); text-align: center; }
.pick-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pick-empty { padding: 10px; font-size: 14px; }
.codebox { min-width: 0; border-radius: 12px; overflow: hidden; background: #16181d; }
.codebox-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 10px 8px 18px; border-bottom: 1px solid #2a2d34; color: #a3aab8; font: 600 12.5px var(--sans); }
.codebox-bar .btn { min-height: 30px; background: #fff; }
.codebox .code { max-height: 260px; border-radius: 0; font-size: 12px; }
/* Modal sheet */
.modal-backdrop { position: fixed; inset: 0; z-index: 40; display: grid; place-items: center; padding: 20px; background: #0b0b0c66; overflow-y: auto; }
.modal { width: min(560px, 100%); max-height: calc(100dvh - 40px); display: grid; grid-template-rows: auto minmax(0, 1fr) auto; background: #fff; border-radius: 18px; box-shadow: 0 24px 60px #0004; }
.modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 16px 8px 22px; }
.modal-title { font: 400 24px/1.2 var(--serif); letter-spacing: -.015em; }
.modal-body { min-height: 0; overflow-y: auto; padding: 6px 22px 18px; }
.modal-foot { display: flex; justify-content: flex-end; gap: 8px; padding: 14px 22px 18px; border-top: 1px solid var(--line); }
@media (max-width: 600px) {
.modal-backdrop { padding: 0; place-items: end stretch; overflow: hidden; }
.modal { width: 100%; max-height: 92dvh; border-radius: 18px 18px 0 0; }
.modal-body { padding: 6px 16px 16px; }
.modal-head { padding-left: 16px; }
.modal-foot { padding: 12px 16px 16px; }
.modal-foot .btn { flex: 1; }
}
/* Embed: the compact board a website opens in a small window */
body.embed-mode .site-head, body.embed-mode .site-foot { display: none; }
.embed { padding: 16px; display: grid; gap: 14px; }
.embed-head { display: flex; align-items: baseline; justify-content: space-between; gap: 6px 12px; flex-wrap: wrap; }
.embed-title { font: 380 26px/1.15 var(--serif); letter-spacing: -.02em; overflow-wrap: anywhere; }
.embed-open { font: 600 14px/1.3 var(--sans); }
.embed-foot { font-size: 13px; color: var(--faint); text-align: center; }
.ideas-compact { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; gap: 14px; }
.ideas-compact .ideas-main, .ideas-compact .ideas-side { grid-column: 1; grid-row: auto; }
.ideas-compact .post-row { padding: 12px; }
Change history
Point store links to openapps.free
Release with preview
Retry release
Bind app agent address in policy
Use OpenApps service URLs and add contribution strip
Bounded source sync
Bounded source sync
Bounded source sync
Bounded source sync
Bounded source sync