@uplift-beyond/upgo 0.0.0-stage → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/skill/SKILL.md ADDED
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: upgo
3
+ description: Use whenever a project's goals or roadmap come up in a folder managed by upgo (it has a goals.json), to read, pick up, add, finish, drop or reorder goals, and when the user says "migrate goals" in a repo that still has a hand-written goals.md. Never edit goals.json or goals.md by hand.
4
+ ---
5
+
6
+ # upgo
7
+
8
+ Goals live in `goals.json`, managed by the `upgo` CLI. `goals.md` is generated from it and is what CLAUDE.md auto-loads: open items only, one line each. Run `upgo help` for every command. If `upgo` is not on PATH, ask the user to install it (`npm i -g @uplift-beyond/upgo`); in a source checkout, `node <upgo folder>/cli.ts` works too.
9
+
10
+ ## Rules
11
+
12
+ - Never Edit, Write or sed `goals.json` or `goals.md`. A hook blocks it; the CLI validates every write and regenerates `goals.md`.
13
+ - Before working on an item, read it in full: `upgo show <id>`.
14
+ - Anything not in `goals.md`: `upgo list --phase later,wayLater,maybe`, `--status done,dropped`, `--section N`, `--search text`, `--all`.
15
+ - Finished: `upgo done <id> --note "<one line on what shipped>"`. Half done: `upgo edit <id> --status partial`.
16
+ - Found a new bug or gap: `upgo add "<title>" --section N --phase now|next|later --body "<why>" --files <path>` (also `--seam`, `--depends`, `--trap`, `--how`, `--check`, `--size S|M|L`, `--scope a,b`, `--detail docs/goalsDetails/x.md`).
17
+ - Not doing it: `upgo drop <id> --reason "<why>"`, kept so nobody proposes it again. `upgo delete <id>` only for mistakes and duplicates.
18
+ - Only when the user asks for suggestions or ideas: `upgo suggestion add "<title>" --body "<why>"` (one per idea). They land in `suggestions.json` and the dashboard's Suggestions panel, where the user copies them back to an agent or adds them to goals. `upgo suggestion list | delete <id...>`. When the user picks one to do: `upgo suggestion promote <id> --section N [--phase next]` adds it as a goal and removes the suggestion.
19
+ - Something every agent must know before touching an area: `upgo trap add "<title>" --body "<detail>"`.
20
+ - Long-form detail for an open item stays in `docs/goalsDetails/*.md`, linked with `--detail`.
21
+ - `upgo check` must pass; the git pre-commit hook runs it. Commit `goals.json` and `goals.md` together.
22
+
23
+ ## Migrate goals
24
+
25
+ When the user says "migrate goals" in a repo with a hand-written `goals.md`:
26
+
27
+ 1. Read `goals.md`, `goals-completed.md` and the repo's CLAUDE.md roadmap rules.
28
+ 2. Dry run outside the repo: `upgo import goals.md --out <scratchpad>/goals.json`. Read the report: open count matches the old file, sections and traps look right, nothing important in `skipped`.
29
+ 3. Ask the user about anything skipped or ambiguous before writing into the repo.
30
+ 4. In the repo: `upgo import goals.md`, then `upgo init` (registers it, installs the git and Claude hooks), `upgo render` (replaces `goals.md` with the generated one), `upgo check`.
31
+ 5. Delete `goals-completed.md` (its entries are now done and dropped items in `goals.json`) and reword references to "`goals-completed.md` §N" in docs, comments and open goals as "done goals §N". Keep `docs/goalsDetails/`.
32
+ 6. Replace the repo's roadmap rules in CLAUDE.md with one line: "Goals live in goals.json, managed by upgo; goals.md is generated and auto-loaded. Use the upgo CLI (see the upgo skill), never edit either file." Keep the `@goals.md` import.
33
+ 7. Summarize what changed. Commit only when asked.
@@ -0,0 +1 @@
1
+ :root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-muted:#494b50;--color-border:#1f2937;--color-success:#22c55e;--color-danger:#ef4444;--color-warning:#f97316;--color-caution:#eab308;--color-accent:#cc1aec4e;--color-accent-solid:#cc1aec;--color-accent-strong:color-mix(in oklab, var(--color-accent-solid) 72%, black);--color-accent-secondary:#2b7fd6;--color-focus-ring:color-mix(in srgb, var(--color-accent-solid) 25%, transparent);--color-background:#0b0a0d;--stage-wash:linear-gradient(180deg, color-mix(in oklab, var(--color-accent-solid) 20%, var(--surface-bg)), color-mix(in oklab, var(--color-accent-solid) 7%, var(--surface-bg)) 70%);--tone-accent:color-mix(in oklab, var(--color-accent-solid) 70%, white);--tone-blue:oklch(78% .12 255);--tone-sky:oklch(80% .1 225);--tone-teal:oklch(80% .12 185);--tone-periwinkle:oklch(78% .1 285);--tone-green:oklch(80% .15 150);--tone-amber:oklch(83% .14 85);--tone-orange:oklch(78% .14 55);--tone-rose:oklch(75% .13 15);--tone-grey:oklch(62% .015 300);--phase-now:var(--color-accent-solid);--phase-next:var(--tone-blue);--phase-later:var(--tone-teal);--phase-wayLater:var(--tone-periwinkle);--phase-maybe:var(--tone-grey);--phase-done:color-mix(in srgb, var(--color-white) 78%, transparent);--color-ui:#111c;--color-white:#f4f1f6;--color-pure-white:white;--color-pure-black:black;--color-scrim-weak:#00000040;--color-scrim-media:#0006;--color-scrim:#00000080;--color-scrim-strong:#000000bf;--color-on-scrim:#f8fafc;--fill-subtle:color-mix(in srgb, var(--color-white) 5%, transparent);--fill-subtle-hover:color-mix(in srgb, var(--color-white) 9%, transparent);--color-border-subtle:color-mix(in srgb, var(--color-white) 8%, transparent);--color-border-subtle-hover:color-mix(in srgb, var(--color-white) 15%, transparent);--radius-2xs:2px;--radius-xs:4px;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:24px;--radius-full:50%;--radius-pill:999px;--float-radius:8px;--shadow-md:0 4px 8px #10182814, 0 2px 4px #1018280f;--shadow-lg:0 12px 20px #1018281f, 0 6px 8px #10182814;--ease-default:cubic-bezier(.4, 0, .2, 1);--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-out-strong:cubic-bezier(.22, 1, .36, 1);--duration-default:.2s;--duration-instant:50ms;--duration-fast:.15s;--duration-medium:.3s;--duration-slow:.45s;--duration-verySlow:.5s;--hoverScale-default:1.03;--ui-density:1;--padding-default:calc(12px * var(--ui-density));--padding-2xs:calc(2px * var(--ui-density));--padding-xs:calc(5px * var(--ui-density));--padding-sm:calc(8px * var(--ui-density));--padding-md:calc(12px * var(--ui-density));--padding-lg:calc(16px * var(--ui-density));--padding-xl:calc(24px * var(--ui-density));--gap-default:calc(16px * var(--ui-density));--gap-2xs:calc(2px * var(--ui-density));--gap-xs:calc(4px * var(--ui-density));--gap-sm:calc(8px * var(--ui-density));--gap-md:calc(12px * var(--ui-density));--gap-lg:calc(16px * var(--ui-density));--gap-xl:calc(24px * var(--ui-density));--icon-brightness:brightness(100);--color-icon:var(--color-white);--surface-bg:#141217;--surface-raised:#1d1a21;--surface-rail:#100e13;--surface-border:#ffffff0f;--surface-border-width:1px;--surface-paint:var(--surface-bg);--font-sans:"Outfit";--font-mono:"Inconsolata";--text-control:.875rem;--text-input:.95rem;--z-background:0;--z-card:10;--z-dropdown:20;--z-modal:9200;--z-tooltip:9300;--z-overlay:9500;--topbar-offset:0px;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px);--safe-right:env(safe-area-inset-right,0px)}html[data-reduce-motion]{--duration-default:1ms;--duration-instant:1ms;--duration-fast:1ms;--duration-medium:1ms;--duration-slow:1ms;--duration-verySlow:1ms}body{background-color:var(--color-background);caret-color:var(--color-accent-solid);-webkit-tap-highlight-color:transparent;margin:0;padding:0}::selection{background-color:color-mix(in srgb, var(--color-accent-solid) 45%, transparent);color:var(--color-white)}.tabular{font-variant-numeric:tabular-nums}figure,nav,button{all:unset}img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none}button{cursor:pointer;transition:var(--ease-default)}*{scrollbar-width:none}::-webkit-scrollbar{display:none}.divider{width:100%;height:var(--gap-default);justify-content:center;align-items:center;display:flex}.divider:after{content:"";background-color:var(--color-white);opacity:.2;width:100%;height:1px;position:relative}.divider-Vertical{background-color:var(--color-white);opacity:.2;align-self:stretch;width:1px}.op-0{opacity:0}.op-30{opacity:.3}.op-40{opacity:.4}.op-50{opacity:.5!important}.op-60{opacity:.6}.op-70{opacity:.7}.op-80{opacity:.8}.op-100{opacity:1}.deactive{cursor:not-allowed!important;filter:grayscale()!important;opacity:.5!important}.iconImg{filter:var(--icon-brightness)}.iconMask{width:1em;height:1em;-webkit-mask-image:var(--icon-mask);mask-image:var(--icon-mask);-webkit-mask-image:var(--icon-mask);display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.dropTargetOver{background-color:var(--color-accent);outline:2px dashed var(--color-accent-solid);outline-offset:-2px}@keyframes notchEnter{0%{opacity:0;transform:translateY(-12px)scale(.6)}}.fade-in{animation:fadeIn var(--duration-medium) var(--ease-default) forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes shimmer{0%{transform:translate(0)}to{transform:translate(-66.6667%)}}.skeletonPulse{border-radius:var(--radius-xs);background-color:var(--fill-subtle);position:relative;overflow:hidden}.skeletonPulse:after{content:"";width:600%;animation:shimmer calc(var(--duration-verySlow) * 3.2) ease-in-out infinite;background:linear-gradient(90deg,#ffffff0a 0%,#ffffff1a 50%,#ffffff0a 100%) 0 0/33.3333% 100%;position:absolute;top:0;bottom:0;left:0}html[data-reduce-motion] .skeletonPulse:after{animation:none}.flex{display:flex}.grid{display:grid}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.flex_center{justify-content:center;align-items:center}.gap-sm{gap:var(--gap-sm)}.gap-md{gap:var(--gap-md)}.gap-lg{gap:var(--gap-lg)}.relative{position:relative}.hidden{display:none}@font-face{font-family:Outfit;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/outfit-variable.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.outfit{color:var(--color-white);font-family:Outfit,sans-serif}.Inconsolata{font-family:var(--font-mono), monospace;color:var(--color-white)}.font-bold{font-weight:700}.font-semiBold{font-weight:550}.font-normal{font-weight:400}.text_left{text-align:left}.srOnly{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.heading{font-size:2rem}.size-0_8{font-size:.8rem}.size-1{font-size:1rem}.size-1_2{font-size:1.2rem}.size-1_5{font-size:1.5rem}.caption-small,.caption,.caption-large,span{letter-spacing:.03em}.caption-small{font-size:.7rem}.caption{font-size:.85rem}.caption-large{font-size:.89rem}.microLabel{text-transform:uppercase;letter-spacing:.09em;opacity:.6;font-size:.68rem;font-weight:500}span{font-size:.9rem}.uppercase{text-transform:uppercase;letter-spacing:.08em}.truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.no-wrap{white-space:nowrap}.break-words{word-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;hyphens:auto}.z-card{z-index:var(--z-card)}.z-dropdown{z-index:var(--z-dropdown)}.z-modal{z-index:var(--z-modal)}.z-overlay{z-index:var(--z-overlay)}@media (forced-colors:active){:focus-visible{outline-offset:2px!important;outline:2px solid highlight!important}.uiContentContainer{--surface-paint:Canvas!important;border:1px solid canvastext!important}}.uiContainer{box-sizing:border-box;height:100%}:where(.uiContentContainer){border-radius:var(--radius-sm)}:where(.uiContainer>.uiContentContainer){border-radius:var(--float-radius)}.uiContentContainer{background:var(--surface-paint);border:var(--surface-border-width) solid var(--surface-border);padding:var(--padding-default);box-sizing:border-box;contain:layout paint;overflow:hidden}.appShell{gap:var(--gap-sm);height:100dvh;padding:max(var(--gap-sm), var(--safe-top)) max(var(--gap-sm), var(--safe-right)) max(var(--gap-sm), var(--safe-bottom)) max(var(--gap-sm), var(--safe-left));box-sizing:border-box;grid-template-columns:clamp(220px,22vw,290px) minmax(0,1fr);display:grid}.appSidebarContent{--surface-paint:var(--surface-rail);gap:var(--gap-md);height:100%;padding:var(--padding-sm);flex-direction:column;display:flex}.appBrand{padding:var(--padding-xs) var(--padding-sm) 0;letter-spacing:-.02em}.appBrand:after{content:".";color:var(--color-accent-solid)}.appMain{overscroll-behavior:contain;flex-direction:column;min-width:0;min-height:0;display:flex;overflow-y:auto}.appEmpty code{font-size:inherit}@media (width<=767px){.appShell{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.appSidebar{height:auto}.appSidebarContent{flex-direction:row;align-items:center;height:auto}.appSidebarContent .projectListLabel{display:none}.appSidebarContent .projectList{flex:1;min-width:0}}.projectList{gap:var(--gap-sm);flex-direction:column;min-height:0;display:flex}.projectListLabel,.projectListEmpty{padding:var(--padding-sm) var(--padding-sm) 0}.projectListItems{gap:var(--gap-2xs);flex-direction:column;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.projectButton{gap:var(--gap-xs);width:100%;min-height:44px;padding:var(--padding-sm);box-sizing:border-box;border-radius:var(--radius-sm);transition:background-color var(--duration-instant) var(--ease-default);flex-direction:column;justify-content:center;display:flex}.projectButton:hover{background-color:var(--fill-subtle-hover)}.projectButton:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.projectButton--active,.projectButton--active:hover{background:var(--stage-wash);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--color-accent-solid) 35%, transparent)}.projectButton--active:focus-visible{box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--color-accent-solid) 35%, transparent), 0 0 0 3px var(--color-focus-ring)}.projectButtonRow{align-items:baseline;gap:var(--gap-sm);min-width:0;display:flex}.projectName{opacity:.8;flex:1;min-width:0}.projectButton:hover .projectName,.projectButton--active .projectName{opacity:1}.projectNow{color:var(--tone-accent);flex-shrink:0;font-weight:600}.projectCount{text-align:right;opacity:.55;flex-shrink:0;min-width:2ch;font-weight:550}.projectMeta{opacity:.55}.projectTour{border:1px solid var(--color-border-subtle)}.projectError{color:var(--color-danger)}@media (width<=767px){.projectList{flex-direction:row;align-items:stretch}.projectTour{flex:none;width:auto}.projectTour .projectMeta{display:none}.projectListItems{flex-direction:row;overflow:auto hidden}.projectListItems li{flex:none;min-width:140px;max-width:70vw}}html[data-reduce-motion] .projectButton{transition:none}.projectFinished{flex-shrink:0;align-self:center}.countBar{border-radius:var(--radius-2xs);background-color:var(--fill-subtle);gap:2px;width:100%;height:8px;display:flex;overflow:hidden}.countBar--thin{gap:1px;height:4px}.countBarPart{flex-basis:0;min-width:2px}.phaseSwatch{border-radius:var(--radius-2xs);flex-shrink:0;width:8px;height:8px}.projectPageContainer{gap:var(--gap-sm);box-sizing:border-box;flex-direction:column;flex-shrink:0;min-height:100%;display:flex}.skeletonBar{height:.9rem;display:block}.foldPanel{padding:var(--padding-xs) var(--padding-md)}.foldToggle{align-items:center;gap:var(--gap-sm);box-sizing:border-box;border-radius:var(--radius-sm);width:100%;min-height:44px;display:flex}.foldToggle:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.foldIcon{font-size:1.1rem}.foldChevron{opacity:.6;width:20px;height:20px;transition:transform var(--duration-fast) var(--ease-default);margin-left:auto}.foldChevron--open{transform:rotate(180deg)}.foldList{padding:0 0 var(--padding-sm);gap:var(--gap-md);flex-direction:column;margin:0;list-style:none;display:flex}.foldItem{gap:var(--gap-2xs);flex-direction:column;display:flex}.foldBody{margin:0;line-height:1.5}.projectTabs{gap:var(--gap-xs);display:flex}.projectTabPanel{gap:var(--gap-sm);flex-direction:column;display:flex}@media not (pointer:coarse){.itemRow.suggestionRow{--row-lead:calc(16px + var(--gap-sm))}}.suggestionAdopt{padding:var(--padding-2xs) var(--padding-sm);font-size:var(--text-control);flex-shrink:0}@media (width<=767px){.suggestionAdoptLabel{display:none}}.filterBar{gap:var(--gap-sm);padding:var(--padding-sm);flex-direction:column;display:flex}.filterButtons{align-items:center;gap:var(--gap-xs);flex-wrap:wrap;display:flex}.filterClear{padding:0 var(--padding-sm);font-size:var(--text-control)}.sectionBlock{gap:var(--gap-xs);padding:var(--padding-sm);transition:opacity var(--duration-fast) var(--ease-default);flex-direction:column;display:flex}.sectionBlock--closed{opacity:.55}.sectionBlock--closed:hover,.sectionBlock--closed:focus-within{opacity:.8}.sectionHeader{align-items:center;gap:var(--gap-md);min-height:36px;padding:var(--padding-xs) var(--padding-xs) var(--padding-sm);display:flex}.sectionTape{align-items:baseline;gap:var(--gap-sm);min-width:0;display:inline-flex}.sectionNumber{color:var(--tone-accent);flex-shrink:0;font-size:.8rem;font-weight:600}.sectionTitle{text-transform:uppercase;letter-spacing:.06em;min-width:0;margin:0;font-size:.95rem;font-weight:700}.sectionProgress{border-radius:var(--radius-2xs);background-color:var(--fill-subtle-hover);flex:0 120px;min-width:48px;height:4px;overflow:hidden}.sectionProgress span{background-color:var(--phase-done);height:100%;display:block}.sectionMore{opacity:.55;margin-left:auto}.sectionMore:hover{opacity:1}@media (pointer:coarse){.filterClear{min-height:44px}}html[data-reduce-motion] .foldChevron,html[data-reduce-motion] .sectionBlock{transition:none}.defaultButton{gap:var(--gap-sm);padding:var(--padding-md);box-sizing:border-box;border-radius:var(--radius-sm);opacity:.8;transition-property:filter,opacity,transform,background-color;transition-duration:var(--duration-fast);transition-timing-function:var(--ease-default);-webkit-user-select:none;user-select:none;flex-direction:row;justify-content:center;align-items:center;display:flex}.defaultButton img{aspect-ratio:1;height:1rem}.defaultButton:hover{filter:brightness(120%);opacity:1}.defaultButton:active{transform:scale(.9)}.defaultButton:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.defaultButton:disabled{cursor:not-allowed;filter:grayscale();opacity:.5;transform:none}.buttonPrimary{background-color:var(--color-accent-strong);opacity:1}.buttonSecondary{background-color:var(--fill-subtle);border:1px solid var(--color-border-subtle-hover)}.buttonDestructive{border:1px var(--color-danger) solid;background-color:#0000}.buttonDestructive:hover{background-color:var(--color-danger)}.buttonIcon{aspect-ratio:1;box-sizing:border-box;background-color:#0000;border:none;height:20px;padding:unset!important}.buttonIcon img{aspect-ratio:1;height:20px}@media (pointer:coarse){.buttonIcon{justify-content:center;align-items:center;min-width:44px;height:auto;min-height:44px;display:inline-flex}.buttonSwitcherOption{min-height:44px}}.buttonSwitcherOption{background:var(--fill-subtle);border:1px solid var(--color-border-subtle-hover);padding:var(--padding-xs) var(--padding-md);font-size:var(--text-control);font-weight:400}.buttonSwitcherOption:focus-visible{border-color:color-mix(in srgb, var(--color-accent-solid) 60%, transparent);box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.buttonSwitcherOption--active{border-color:var(--color-accent-solid);background-color:color-mix(in srgb, var(--color-accent-solid) 14%, transparent);opacity:1}.textHyperLink{opacity:.5;transition:color var(--duration-fast) var(--ease-default), opacity var(--duration-fast) var(--ease-default);justify-content:flex-start;padding:0}.textHyperLink:hover{color:var(--color-white);opacity:1;transform:scale(1)}.textHyperLink--inline{opacity:1;width:auto;color:var(--color-accent-solid);font-weight:600;display:inline-flex}.textHyperLink--inline:hover{opacity:.8;color:var(--color-accent-solid)}html[data-reduce-motion] .defaultButton:active{transform:none}.dropdownBackdrop{pointer-events:none;background:0 0;position:fixed;inset:0}.dropdownPanel{min-width:200px;max-width:min(280px,92vw);max-height:calc(100dvh - var(--gap-lg));box-shadow:var(--shadow-lg);box-sizing:border-box;overscroll-behavior:contain;pointer-events:auto;--surface-paint:var(--surface-raised);position:fixed;padding:var(--padding-2xs) 0!important;border-radius:var(--radius-sm)!important;overflow:hidden auto!important}.dropdownList{flex-direction:column;display:flex}.dropdownLabel{padding:var(--padding-xs) var(--padding-md);letter-spacing:.05em}.dropdownDivider{height:var(--gap-sm)}.dropdownItem{align-items:center;gap:var(--gap-sm);width:100%;min-height:44px;padding:var(--padding-xs) var(--padding-md);box-sizing:border-box;text-align:left;cursor:pointer;display:flex}.dropdownItem:hover,.dropdownItem:focus-visible{background-color:var(--fill-subtle-hover)}.dropdownItem:focus-visible{outline:none}.dropdownItem.deactive{cursor:not-allowed}.dropdownItemDanger{color:var(--color-danger)}.dropdownItemActive{background-color:var(--color-accent)}.dropdownItemActive:hover,.dropdownItemActive:focus-visible{background-color:color-mix(in srgb, var(--color-accent-solid) 22%, transparent)}.dropdownItemIcon{flex-shrink:0;width:1rem;height:1rem}.dropdownItemLabel{flex:1;min-width:0}.dropdownItemChevron{opacity:.6;flex-shrink:0;width:1rem;height:1rem}.dropdownBackRow{border-bottom:1px solid var(--color-border)}.emptyState,.errorState{justify-content:center;align-items:center;gap:var(--gap-md);padding:var(--padding-xl);text-align:center;flex-direction:column;display:flex}.selectionBar{bottom:calc(var(--padding-md) + var(--safe-bottom));max-width:calc(100% - 2 * var(--padding-md));animation:selectionBarIn var(--duration-default) var(--ease-out);align-self:center;position:sticky}@keyframes selectionBarIn{0%{opacity:0;transform:translateY(8px)}}html[data-reduce-motion] .selectionBar{animation:none}.selectionBar .selectionBarContent{justify-content:center;align-items:center;gap:var(--gap-sm);padding:var(--padding-sm) var(--padding-md);border-radius:var(--radius-md);box-shadow:var(--shadow-md);--surface-paint:var(--surface-raised);flex-wrap:wrap;display:flex}.searchInputField{align-items:center;gap:var(--gap-sm);min-height:44px;padding:var(--padding-sm) var(--padding-md);box-sizing:border-box;border-radius:var(--radius-sm);cursor:text;transition:border-color var(--duration-fast) var(--ease-default), box-shadow var(--duration-fast) var(--ease-default);display:flex}.searchInputField--flat{background-color:var(--fill-subtle);border:1px solid var(--color-border-subtle)}.searchInputField--flat:hover{background-color:var(--fill-subtle-hover)}.searchInputField:focus-within{border-color:var(--color-accent-solid)}.searchInputIcon{opacity:.6;flex-shrink:0;height:1.1rem}.searchInputField__input{min-width:0;color:var(--color-white);background:0 0;border:none;outline:none;flex:1;font-family:inherit;font-size:.95rem}@media (pointer:coarse){.searchInputField__input{font-size:max(16px,.95rem)}}.searchInputField__input::placeholder{color:var(--color-white);opacity:.4}.searchInputClear{opacity:.6;transition:opacity var(--duration-fast) var(--ease-default);flex-shrink:0}.searchInputClear:hover{opacity:1}html[data-reduce-motion] .searchInputField,html[data-reduce-motion] .searchInputClear{transition:none}.modalCard.itemModal{max-width:720px}.itemForm{gap:var(--gap-md);flex-direction:column;flex:1;min-height:0;display:flex}.itemFormBody{gap:var(--gap-md);overscroll-behavior:contain;flex-direction:column;flex:1;min-height:0;margin:-3px;padding:3px;display:flex;overflow-y:auto}.itemFormRow{gap:var(--gap-sm);grid-template-columns:repeat(auto-fit,minmax(140px,1fr));display:grid}.itemFormRow--two{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.itemFormActions{justify-content:flex-end;gap:var(--gap-sm);flex-shrink:0;display:flex}@media (width<=479px){.itemFormRow--two{grid-template-columns:1fr}.itemFormActions button{flex:1 1 0}}@media (pointer:coarse){.itemFormActions button{min-height:44px}}.field{gap:var(--gap-xs);flex-direction:column;min-width:0;display:flex}.fieldLabel{opacity:.6}.fieldControl{box-sizing:border-box;background-color:var(--fill-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);min-height:44px;padding:var(--padding-xs) var(--padding-md);cursor:text;transition:border-color var(--duration-fast) var(--ease-default), background-color var(--duration-fast) var(--ease-default);align-items:center;display:flex}.fieldControl:hover{background-color:var(--fill-subtle-hover);border-color:var(--color-border-subtle-hover)}.fieldControl:focus-within{border-color:var(--color-accent-solid)}.fieldInput{min-width:0;color:var(--color-white);font-family:inherit;font-size:var(--text-input);padding:var(--padding-xs) 0;background:0 0;border:none;outline:none;flex:1}textarea.fieldInput{resize:vertical;min-height:3lh;line-height:1.4}select.fieldInput{cursor:pointer}.fieldInput option{background-color:var(--color-background);color:var(--color-white)}.fieldInput::placeholder{color:var(--color-white);opacity:.4}@media (pointer:coarse){.fieldInput{font-size:max(16px, var(--text-input))}}html[data-reduce-motion] .fieldControl{transition:none}.modalBackdrop{background:var(--color-scrim);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:var(--padding-md);padding-top:max(var(--padding-md), var(--safe-top));padding-bottom:max(var(--padding-md), var(--safe-bottom));box-sizing:border-box;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modalCard{gap:var(--gap-md);width:100%;max-width:640px;max-height:100%;padding:var(--padding-lg);box-sizing:border-box;box-shadow:var(--shadow-lg);border-radius:var(--radius-lg);--surface-paint:var(--surface-raised);animation:modalEnter var(--duration-medium) var(--ease-out-strong) both;flex-direction:column;display:flex}@keyframes modalEnter{0%{opacity:0;transform:translateY(16px)scale(.94)}}.modalHeader{justify-content:space-between;align-items:flex-start;gap:var(--gap-sm);flex-shrink:0;display:flex}.modalTitle{color:var(--color-white);margin:0}.modalClose{flex-shrink:0}@media (width<=479px){.modalCard{padding:var(--padding-md);border-radius:var(--radius-md)}}html[data-reduce-motion] .modalCard{animation:none}.itemList{gap:var(--gap-2xs);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.itemRow{--row-lead:calc(20px + 16px + 2 * var(--gap-sm));border-radius:var(--radius-xs);transition:background-color var(--duration-instant) var(--ease-default), border-color var(--duration-instant) var(--ease-default);border:1px solid #0000}.itemRow:not(.itemRow--open):hover{background-color:var(--fill-subtle-hover)}.itemRow--open{background-color:var(--fill-subtle);border-color:var(--color-border-subtle)}.itemRow--open:hover{border-color:var(--color-border-subtle-hover)}.itemRow--selected{border-color:var(--color-accent-solid)}.itemRow:has(.itemRowToggle:focus-visible){box-shadow:0 0 0 3px var(--color-focus-ring)}.itemRow--dropBefore{box-shadow:inset 0 2px 0 var(--color-accent-solid)}.itemRowHead{align-items:center;gap:var(--gap-sm);min-height:44px;padding:0 var(--padding-xs);display:flex}.itemDrag{cursor:grab;opacity:.35;transition:opacity var(--duration-fast) var(--ease-default);flex-shrink:0;display:flex}.itemDrag img{width:20px;height:20px}.itemRow:hover .itemDrag{opacity:.8}.itemCheck{cursor:pointer;width:16px;height:16px;accent-color:var(--color-accent-solid);flex-shrink:0;margin:0}.itemCheck:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.itemRowToggle{align-items:baseline;gap:var(--gap-sm);min-width:0;padding:var(--padding-xs) 0;outline:none;flex:auto;display:flex}.itemTitle{opacity:.8;min-width:0}.itemRow:hover .itemTitle,.itemRow--open .itemTitle{opacity:1}.itemId{opacity:.5;flex-shrink:1;min-width:3ch}.itemRow--done .itemTitle,.itemRow--dropped .itemTitle{opacity:.5;text-decoration:line-through;text-decoration-thickness:2px;-webkit-text-decoration-color:color-mix(in srgb, var(--color-white) 55%, transparent);text-decoration-color:color-mix(in srgb, var(--color-white) 55%, transparent)}.itemRow--dropped .itemTitle{-webkit-text-decoration-color:color-mix(in srgb, var(--tone-rose) 70%, transparent);text-decoration-color:color-mix(in srgb, var(--tone-rose) 70%, transparent)}.itemChips{justify-content:flex-end;gap:var(--gap-xs);flex-wrap:wrap;display:flex}.itemMore{opacity:.55;flex-shrink:0}.itemMore:hover{opacity:1}.itemDetail{align-items:flex-start;gap:var(--gap-sm);padding:var(--padding-xs) var(--padding-md) var(--padding-md) calc(var(--padding-xs) + var(--row-lead));flex-direction:column;display:flex}.itemBody{opacity:.8;margin:0;font-size:.9rem;line-height:1.5}.itemPointers{gap:var(--gap-xs);flex-direction:column;max-width:100%;margin:0;display:flex}.itemPointer{column-gap:var(--gap-sm);row-gap:var(--gap-2xs);grid-template-columns:4.5rem minmax(0,1fr);align-items:baseline;display:grid}.itemPointer dt{grid-column:1}.itemPointer dd{opacity:.8;-webkit-user-select:text;user-select:text;grid-column:2;margin:0}.itemMeta{align-items:center;gap:var(--gap-sm);flex-wrap:wrap;display:flex}.itemDetailButton{padding:var(--padding-xs) var(--padding-sm);font-size:var(--text-control)}.detailText{overscroll-behavior:contain;max-height:50dvh;padding:var(--padding-md);background-color:var(--fill-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);-webkit-user-select:text;user-select:text;font-size:.9rem;line-height:1.5;overflow:auto}.detailText:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}@media (width<=767px){.itemRowHead{flex-wrap:wrap;row-gap:0}.itemChips{padding:0 0 var(--padding-xs) var(--row-lead);flex-basis:100%;order:5;justify-content:flex-start}.itemDetail{padding-left:var(--padding-md)}}@media (pointer:coarse){.itemRow{--row-lead:calc(44px + var(--gap-sm))}.itemDrag{display:none}.itemCheck{width:22px;height:22px;margin:11px}.itemRowToggle{align-items:center;min-height:44px}}html[data-reduce-motion] .itemRow,html[data-reduce-motion] .itemDrag{transition:none}.chip{--chip-tone:var(--color-white);padding:var(--padding-2xs) var(--padding-sm);border-radius:var(--radius-md);border:1px solid color-mix(in srgb, var(--chip-tone) 22%, transparent);background-color:color-mix(in srgb, var(--chip-tone) 8%, transparent);color:var(--chip-tone);white-space:nowrap;flex-shrink:0;align-items:center;font-size:.7rem;font-weight:550;line-height:1.5;display:inline-flex}.chip--neutral{opacity:.8}.chip--muted{opacity:.5}.chip--accent{--chip-tone:var(--tone-accent)}.chip--blue{--chip-tone:var(--tone-blue)}.chip--sky{--chip-tone:var(--tone-sky)}.chip--teal{--chip-tone:var(--tone-teal)}.chip--periwinkle{--chip-tone:var(--tone-periwinkle)}.chip--green{--chip-tone:var(--tone-green)}.chip--amber{--chip-tone:var(--tone-amber)}.chip--orange{--chip-tone:var(--tone-orange)}.chip--rose{--chip-tone:var(--tone-rose)}.chip--stamp{border-width:1.5px;border-color:color-mix(in srgb, var(--chip-tone) 70%, transparent);text-transform:uppercase;letter-spacing:.1em;background-color:#0000;font-weight:700}.chip--button:hover{background-color:color-mix(in srgb, var(--chip-tone) 18%, transparent)}.chip--button:focus-visible{outline:2px solid var(--chip-tone);outline-offset:2px}.markdown{gap:var(--gap-sm);overflow-wrap:anywhere;-webkit-user-select:text;user-select:text;flex-direction:column;align-self:stretch;min-width:0;display:flex}.markdown :is(p,ul,ol,pre,blockquote,h3,h4,h5,h6){margin:0}.markdown :is(h3,h4,h5,h6){font-size:1em;font-weight:700}.markdown h3{font-size:1.15em}.markdown :is(ul,ol){padding-left:1.4em}.markdown li+li,.markdown li>:is(p,ul,ol,pre,blockquote)+*{margin-top:.25em}.markdown code{font-family:var(--font-mono), monospace;background-color:var(--fill-subtle);border-radius:var(--radius-sm);padding:.05em .3em;font-size:.92em}.markdown pre{padding:var(--padding-sm) var(--padding-md);background-color:var(--fill-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);overflow-wrap:normal;flex-shrink:0;overflow:auto}.markdown pre code{background:0 0;padding:0}.markdown blockquote{gap:var(--gap-sm);padding-left:var(--padding-md);border-left:3px solid var(--color-border-subtle-hover);flex-direction:column;display:flex}.markdown hr{border:none;border-top:1px solid var(--color-border-subtle);width:100%;margin:0}.markdown a{color:var(--tone-accent);text-underline-offset:2px}.markdown a:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);border-radius:2px;outline:none}.stage{gap:var(--gap-md);padding:var(--padding-lg);flex-direction:column;display:flex}.stage--lit{--surface-paint:var(--stage-wash);border-color:color-mix(in srgb, var(--color-accent-solid) 28%, transparent)}.stageTop{justify-content:space-between;align-items:flex-start;gap:var(--gap-md);flex-wrap:wrap;display:flex}.stageTitle{gap:var(--gap-2xs);flex-direction:column;flex:260px;min-width:0;display:flex}.stageHeading{letter-spacing:-.02em;margin:0;font-size:1.75rem;font-weight:700;line-height:1.1}.stageActions{gap:var(--gap-sm);flex-wrap:wrap;display:flex}.stageNow{gap:var(--gap-xs);flex-direction:column;min-width:0;display:flex}.stageLabel{text-transform:uppercase;letter-spacing:.1em;color:var(--tone-accent);font-size:.8rem;font-weight:700}.stageLabel .tabular{margin-left:var(--gap-xs);opacity:.7}.setlist{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.setlistSong{align-items:baseline;gap:var(--gap-md);box-sizing:border-box;width:100%;padding:var(--padding-2xs) var(--padding-sm);margin-left:calc(-1 * var(--padding-sm));border-radius:var(--radius-xs);transition:background-color var(--duration-instant) var(--ease-default);grid-template-columns:2.25ch minmax(0,1fr) auto;font-size:1.15rem;font-weight:650;line-height:1.3;display:grid}.setlistSong:hover{background-color:var(--fill-subtle-hover)}.setlistSong:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.setlistNum{text-align:right;opacity:.5;font-size:1rem;font-weight:500}.setlistTitle{overflow-wrap:anywhere;min-width:0}.setlistTags{align-items:center;gap:var(--gap-xs);align-self:center;display:inline-flex}.setlistTags:empty{display:none}.setlistUpNext{gap:var(--gap-2xs);flex-direction:column;display:flex}.setlistNextRow{align-items:center;gap:var(--gap-xs);display:flex}.setlistNextRow .setlistSong{opacity:.8;flex:1;min-width:0}.setlistNextRow .buttonIcon{opacity:.55;flex-shrink:0}.setlistNextRow .buttonIcon:hover,.setlistNextRow .buttonIcon:focus-visible{opacity:1}.setlistPartial{color:var(--tone-amber);font-weight:600}.setlistMore{padding:var(--padding-xs) 0 0 calc(2.25ch + var(--gap-md));opacity:.55}.setlistEmpty{padding:var(--padding-xs) 0;opacity:.6;margin:0}.countTable{gap:var(--gap-xs) var(--gap-lg);flex-wrap:wrap;margin:0;display:flex}.countRow{align-items:center;gap:var(--gap-xs);font-size:.85rem;display:flex}.countRow dt{align-items:center;gap:var(--gap-sm);display:flex}.countRow dd{opacity:.7;margin:0}.countValue{font-weight:650}.phaseSwatch--dropped{background:repeating-linear-gradient(135deg, var(--tone-rose) 0 2px, transparent 2px 4px)}.stageProgress{align-items:center;gap:var(--gap-md);display:flex}.stageProgressText{opacity:.7;flex-shrink:0}html[data-reduce-motion] .setlistSong{transition:none}@media (width<=767px){.stage{padding:var(--padding-md)}.setlistSong{font-size:1.05rem}}.tourPage{gap:var(--gap-sm);flex-direction:column;flex-shrink:0;display:flex}.tourHeader{align-items:baseline;gap:var(--gap-xs) var(--gap-lg);padding:var(--padding-lg) var(--padding-sm) var(--padding-md);flex-wrap:wrap;display:flex}.tourGrid{columns:320px;column-gap:var(--gap-sm);margin:0;padding:0;list-style:none}.tourProject{gap:var(--gap-sm);padding:var(--padding-lg);margin-bottom:var(--gap-sm);break-inside:avoid;flex-direction:column;display:flex}.tourHeading{font:inherit;margin:0}.tourName{justify-content:space-between;align-items:baseline;gap:var(--gap-md);box-sizing:border-box;border-radius:var(--radius-xs);width:100%;display:flex}.tourName:hover .size-1_2{text-underline-offset:4px;text-decoration:underline;text-decoration-thickness:2px;-webkit-text-decoration-color:var(--color-accent-solid);text-decoration-color:var(--color-accent-solid)}.tourName:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.tourPurpose{line-height:1.4}.tourProject .setlist{margin-top:var(--gap-xs)}.tourProject .setlistSong{font-size:1rem}.tourDone{align-items:center;gap:var(--gap-2xs);color:var(--tone-green);opacity:1;display:inline-flex}.tourTop{align-items:center;gap:var(--gap-xs);display:flex}.tourTop .tourHeading{flex:1;min-width:0}.tourTop .buttonIcon{opacity:.6;flex-shrink:0}.tourTop .buttonIcon:hover,.tourTop .buttonIcon:focus-visible{opacity:1}.tourStale{color:var(--tone-amber)}.tourRecent{gap:var(--gap-xs);padding:var(--padding-md) var(--padding-lg);flex-direction:column;display:flex}.tourRecentList{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.tourRecentItem{align-items:baseline;gap:var(--gap-sm);box-sizing:border-box;width:100%;padding:var(--padding-2xs) var(--padding-sm);margin-left:calc(-1 * var(--padding-sm));border-radius:var(--radius-xs);text-align:left;transition:background-color var(--duration-instant) var(--ease-default);grid-template-columns:auto minmax(0,1fr) auto;display:grid}.tourRecentItem:hover{background-color:var(--fill-subtle-hover)}.tourRecentItem:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.tourRecentIcon{align-self:center;width:16px;height:16px}.tourRecentText{align-items:baseline;gap:0 var(--gap-sm);overflow-wrap:anywhere;flex-wrap:wrap;min-width:0;display:flex}html[data-reduce-motion] .tourRecentItem{transition:none}.dialogCatcher{background:0 0;position:fixed;inset:0}.dialogPosition{top:calc(var(--topbar-offset,0px) + var(--safe-top) + var(--gap-sm));padding:0 var(--padding-md);box-sizing:border-box;pointer-events:none;justify-content:center;display:flex;position:fixed;left:0;right:0}.dialogPill{align-items:center;gap:var(--gap-sm);width:max-content;max-width:min(92vw,460px);min-height:44px;padding:var(--padding-sm) var(--padding-md);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);box-sizing:border-box;pointer-events:auto;--surface-paint:var(--surface-raised);animation:notchEnter var(--duration-medium) var(--ease-out-strong) both;flex-wrap:wrap;display:flex}.dialogHead{align-items:center;gap:var(--gap-sm);flex:auto;min-width:180px;display:flex}.dialogIconWrap{border-radius:var(--radius-sm);background-color:color-mix(in srgb, var(--dialog-accent,var(--color-accent-solid)) 18%, transparent);flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:flex}.dialogPill--alert .dialogIconWrap{animation:dialogIconBeat var(--duration-medium) var(--ease-out-strong) var(--duration-instant) both}@keyframes dialogIconBeat{0%{transform:scale(.55)}45%{transform:scale(1.16)}70%{transform:scale(.95)}88%{transform:scale(1.04)}to{transform:scale(1)}}html[data-reduce-motion] .dialogPill,html[data-reduce-motion] .dialogPill--alert .dialogIconWrap{animation:none}.dialogIcon{width:18px;height:18px;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.dialogHeadText{gap:var(--gap-2xs);overscroll-behavior:contain;flex-direction:column;min-width:0;max-height:40dvh;display:flex;overflow-y:auto}.dialogTitle,.dialogDescription{overflow-wrap:anywhere}.dialogActions{gap:var(--gap-sm);flex-shrink:0;margin-left:auto;display:flex}.dialogActions button{padding:var(--padding-xs) var(--padding-sm)}@media (width<=479px){.dialogPill{border-radius:var(--radius-lg);width:100%}.dialogActions{flex:100%;margin-left:0}.dialogActions button{flex:1 1 0;justify-content:center}}@media (pointer:coarse){.dialogActions button{min-height:44px}}.dialogPill.promptPill{border-radius:var(--radius-lg)}@media (width<=479px){.dialogPill.promptPill{border-radius:var(--radius-md)}}.promptForm{align-items:center;gap:var(--gap-sm);flex-wrap:wrap;flex:100%;min-width:min(320px,100%);display:flex}.promptField{box-sizing:border-box;cursor:text;background-color:var(--fill-subtle);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);min-height:44px;padding:var(--padding-sm) var(--padding-md);transition:border-color var(--duration-fast) var(--ease-default), background-color var(--duration-fast) var(--ease-default);flex:200px;align-items:center;display:flex}.promptField:hover{background-color:var(--fill-subtle-hover);border-color:var(--color-border-subtle-hover)}.promptField:focus-within{border-color:var(--color-accent-solid)}.promptInput{min-width:0;color:var(--color-white);background:0 0;border:none;outline:none;flex:1;font-family:inherit;font-size:1rem}.promptInput::placeholder{color:var(--color-white);opacity:.4;font-weight:400}@media (pointer:coarse){.promptInput{font-size:max(16px,1rem)}}html[data-reduce-motion] .promptField{transition:none}.toastViewport{top:calc(var(--topbar-offset,0px) + var(--safe-top) + var(--gap-sm));pointer-events:none;justify-content:center;display:flex;position:fixed;left:0;right:0}.toastPill{width:max-content;max-width:min(92vw,420px);min-height:44px;padding:var(--padding-sm) var(--padding-md);border-radius:var(--radius-xl);pointer-events:auto;--surface-paint:var(--surface-raised);cursor:pointer;animation:notchEnter var(--duration-medium) var(--ease-out-strong) both;justify-content:center;align-items:center;display:flex;overflow:hidden}.toastPill:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}html[data-reduce-motion] .toastPill{animation:none}.toastContent{align-items:center;gap:var(--gap-sm);white-space:nowrap;min-width:0;display:flex}.toastIconWrap{border-radius:var(--radius-sm);background-color:color-mix(in srgb, var(--toast-variant-color,var(--color-accent-solid)) 18%, transparent);flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;display:flex}.toastIcon{flex-shrink:0;width:18px;height:18px;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.toastMessage{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--color-white);flex:1;font-size:.8rem;overflow:hidden}.toastBadge{color:var(--color-white);background:color-mix(in srgb, var(--color-white) 10%, transparent);border-radius:var(--radius-xs);flex-shrink:0;padding:2px 6px;font-size:.5rem;font-weight:600;line-height:1.6}.toastAction{margin-left:var(--gap-xs);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--color-white) 12%, transparent);color:var(--color-white);font:inherit;cursor:pointer;border:none;flex-shrink:0;padding:4px 10px;font-size:.8rem;font-weight:600}.toastAction:hover{background:color-mix(in srgb, var(--color-white) 20%, transparent)}.toastAction:focus-visible{box-shadow:0 0 0 2px var(--color-focus-ring);outline:none}