gitoria
All repositories: gitoria
14.8 KB
// styles.hl — ALL of the app's CSS, served as /__hl/app.css. Components carry no Style blocks:// markup is domain tags (<repo-page>, <repo-meta>, …), this file lays them out. Tokens: shared/tokens.hl// (verbatim copy of loreana worldapi-tokens/tokens.hl); the app sets only its accent (blue).// In a styles file a bare name is a TAG (camelCase → kebab), a quoted name is a selector written// verbatim. MOBILE FIRST: every rule is the phone's; the one min-width block adds the wide layout.import { var } from 'hl:web/css'import { blueDark, colorText, colorBackground, colorTextStrong, colorTextMuted, colorBackgroundSunken, colorAccentText, colorSurface, colorBorder, colorDanger, colorSuccess } from './shared/tokens.hl'colorAccent = var(blueDark) // the app's accent: the only token this app sets'*,*::before,*::after' { boxSizing = 'border-box' }html { colorScheme = 'dark' }body { margin = '0' font = '16px/1.5 system-ui, sans-serif' color = colorText background = colorBackground }a { color = colorAccent textDecoration = 'none' }'a:hover' { textDecoration = 'underline' }h1 { margin = '0' fontSize = '1.3rem' lineHeight = '1.3' color = colorTextStrong overflowWrap = 'anywhere' }h2 { margin = '0 0 .5rem' fontSize = '1rem' color = colorTextStrong }time { color = colorTextMuted fontSize = '.85rem' whiteSpace = 'nowrap' }dl { display = 'grid' gridTemplateColumns = 'auto 1fr' gap = '.3rem 1rem' margin = '0' }dt { color = colorTextMuted }dd { margin = '0' overflowWrap = 'anywhere' }'input,textarea,select' { font = 'inherit' width = '100%' padding = '.5rem .7rem' color = colorTextStrong background = colorBackgroundSunken border = '1px solid ' + colorBorder borderRadius = '.4rem' }'input:focus' { outline = '2px solid ' + colorAccent outlineOffset = '1px' }label { display = 'grid' gap = '.25rem' fontSize = '.9rem' color = colorTextMuted }button { font = 'inherit' fontWeight = '600' padding = '.55rem 1.1rem' color = colorAccentText background = colorAccent border = '0' borderRadius = '.4rem' cursor = 'pointer' justifySelf = 'start' }'button:hover' { filter = 'brightness(1.1)' }'button.quiet' { color = colorText background = 'transparent' border = '1px solid ' + colorBorder padding = '.35rem .8rem' fontSize = '.9rem' }// ---- the shell ---------------------------------------------------------------------------applicationHeader { position = 'sticky' top = '0' zIndex = '5' display = 'flex' flexWrap = 'wrap' alignItems = 'center' gap = '.5rem 1rem' padding = '.6rem 1rem' background = colorBackgroundSunken borderBottom = '1px solid ' + colorBorder }'application-header .brand' { fontWeight = '800' fontSize = '1.15rem' color = colorAccent marginRight = 'auto' }main { display = 'block' maxWidth = '60rem' margin = '0 auto' padding = '1rem' }userBox { display = 'flex' flexWrap = 'wrap' alignItems = 'center' justifyContent = 'flex-end' gap = '.4rem .6rem' marginLeft = 'auto' maxWidth = '100%' }// the identity selector (gitoria#14): ident's shadow DOM, restyled to the accent; hidden on a repo address (class onrepo, main.hl)identSelector { '--ident-accent' = colorAccent '--ident-accent-text' = colorAccentText '--ident-background' = colorSurface '--ident-border' = colorBorder '--ident-font' = '600 .9rem/1.4 system-ui, sans-serif' }'ident-selector::part(button)' { padding = '.35rem .8rem' }'ident-selector::part(status)' { padding = '.35rem .8rem' }'ident-selector.onrepo' { display = 'none' }'#whoami' { fontWeight = '600' color = colorTextStrong overflowWrap = 'anywhere' }'a.button' { display = 'inline-block' fontWeight = '600' fontSize = '.9rem' padding = '.35rem .8rem' color = colorAccent border = '1px solid ' + colorAccent borderRadius = '.4rem' }'a.button:hover' { textDecoration = 'none' background = colorSurface }namePrompt { display = 'block' maxWidth = '60rem' margin = '1rem auto 0' padding = '0 1rem' }'name-prompt form' { display = 'grid' gap = '.6rem' padding = '1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' }// ---- offline (mission 046, components/main.hl): the note under the header, and the probe whose endless animation is// the shell's 1 s tick (it must be rendered for the animation to run — not display none — so: invisible)offlineNote { display = 'block' padding = '.5rem 1rem' color = colorTextStrong background = colorSurface }netProbe { position = 'fixed' left = '0' top = '0' width = '1px' height = '1px' opacity = '0' pointerEvents = 'none' animation = 'gitoria-net-tick 1s linear infinite' }'@keyframes gitoria-net-tick' = {'from' = { opacity = '0' }to = { opacity = '0' }}// ---- the repositories ----------------------------------------------------------------------repoHome { display = 'grid' gap = '1rem' }repoPage { display = 'grid' gap = '1rem' }repoHead { display = 'grid' gap = '1rem' }repoList { display = 'grid' gap = '1rem' }codeView { display = 'grid' gap = '1rem' minWidth = '0' }'#createform' { display = 'grid' gap = '.6rem' padding = '1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' }'#repos' { display = 'grid' gap = '.5rem' margin = '0' padding = '0' listStyle = 'none' }'#repos li' { display = 'grid' gap = '.15rem' padding = '.7rem 1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' }'#repos .slug' { fontWeight = '700' fontSize = '1.05rem' overflowWrap = 'anywhere' }'#repos .about' { color = colorText }repoMeta { display = 'flex' flexWrap = 'wrap' gap = '.2rem 1rem' fontSize = '.85rem' color = colorTextMuted }'.empty' { margin = '0' padding = '1rem' textAlign = 'center' color = colorTextMuted border = '1px dashed ' + colorBorder borderRadius = '.5rem' }'.muted' { margin = '0' fontSize = '.9rem' color = colorTextMuted }'.message' { margin = '0' minHeight = '1.5em' color = colorDanger }'.notice' { margin = '0' color = colorSuccess }// ---- the repo homepage (gitoria#8): README.md / $docs as rendered Markdown (components/markdown.hl) ----repoHomepage { display = 'grid' gap = '1.5rem' }homepageFile { display = 'grid' gap = '.5rem' minWidth = '0' }'homepage-file > .path' { color = colorTextMuted fontSize = '.85rem' background = 'transparent' padding = '0' }markdownText { display = 'block' minWidth = '0' }'markdown-text > :first-child' { marginTop = '0' }'markdown-text > :last-child' { marginBottom = '0' }'markdown-text p,markdown-text li' { margin = '.5rem 0' overflowWrap = 'anywhere' }'markdown-text h2,markdown-text h3,markdown-text h4' { margin = '1.2rem 0 .5rem' lineHeight = '1.3' color = colorTextStrong }'markdown-text h2' { fontSize = '1.25rem' paddingBottom = '.25rem' borderBottom = '1px solid ' + colorBorder }'markdown-text h3' { fontSize = '1.08rem' }'markdown-text h4' { fontSize = '1rem' }'markdown-text ul,markdown-text ol' { margin = '.5rem 0' paddingLeft = '1.4rem' }'markdown-text li' { margin = '.15rem 0' }'markdown-text ul' { listStyleType = 'disc' }'markdown-text ol' { listStyleType = 'decimal' }'markdown-text strong' { color = colorTextStrong }'markdown-text a' { color = colorAccent textDecoration = 'underline' textUnderlineOffset = '.15em' }'markdown-text code' { font = '.88em/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' padding = '.05em .3em' color = colorTextStrong background = colorBackgroundSunken borderRadius = '.25rem' }'markdown-text pre' { margin = '.5rem 0' padding = '.6rem .7rem' overflowX = 'auto' background = colorBackgroundSunken border = '1px solid ' + colorBorder borderRadius = '.4rem' }'markdown-text pre code' { padding = '0' background = 'transparent' whiteSpace = 'pre' }'markdown-text blockquote' { margin = '.5rem 0' padding = '.1rem .9rem' color = colorTextMuted borderLeft = '3px solid ' + colorBorder }'markdown-text hr' { border = '0' borderTop = '1px solid ' + colorBorder margin = '1rem 0' }'markdown-text table-scroll' { display = 'block' overflowX = 'auto' margin = '.5rem 0' }'markdown-text table' { borderCollapse = 'collapse' }'markdown-text th,markdown-text td' { padding = '.35rem .7rem' border = '1px solid ' + colorBorder textAlign = 'left' verticalAlign = 'top' }'markdown-text th' { color = colorTextStrong background = colorBackgroundSunken }// ---- adding code + access tokens (gitoria#7, plain text on the Code page of an empty repo: gitoria#20) ----'#addcode' { padding = '.6rem 1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' }addCode { display = 'grid' gap = '.5rem' marginTop = '.6rem' minWidth = '0' }'#addcode pre,#tokensecret' { margin = '0' padding = '.6rem .7rem' overflowX = 'auto' font = '.88em/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' color = colorTextStrong background = colorBackgroundSunken border = '1px solid ' + colorBorder borderRadius = '.4rem' }accessTokens { display = 'grid' gap = '.6rem' }sshKeys { display = 'grid' gap = '.6rem' }'#tokenform,#keyform' { display = 'grid' gap = '.6rem' padding = '1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' }'#tokenlist,#keylist' { display = 'grid' gap = '.5rem' margin = '0' padding = '0' listStyle = 'none' }'#tokenlist li,#keylist li' { display = 'flex' flexWrap = 'wrap' alignItems = 'center' gap = '.3rem 1rem' padding = '.5rem 1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' }'#tokenlist .slug,#keylist .slug' { fontWeight = '700' marginRight = 'auto' overflowWrap = 'anywhere' }// ---- browsing code (gitoria#9): /code, /branch/<name>, /commit/<id> ----repoNav { display = 'flex' gap = '1rem' borderBottom = '1px solid ' + colorBorder paddingBottom = '.4rem' }codeBrowser { display = 'grid' gap = '1rem' minWidth = '0' }codeHead { display = 'grid' gap = '.3rem' }latestCommit { display = 'flex' flexWrap = 'wrap' gap = '.2rem .8rem' alignItems = 'baseline' padding = '.5rem .8rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.4rem' }'latest-commit a,code-side a.sha' { font = '.88em/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' }pathCrumbs { display = 'flex' flexWrap = 'wrap' gap = '.3rem' overflowWrap = 'anywhere' }'#entries,code-side ul' { margin = '0' padding = '0' listStyle = 'none' display = 'grid' }'#entries li' { display = 'flex' justifyContent = 'space-between' gap = '1rem' padding = '.4rem .8rem' borderBottom = '1px solid ' + colorBorder }'#entries a.dir' { fontWeight = '700' }'#entries a.dir::after' { content = '"/"' }'#entries li > :first-child' { overflowWrap = 'anywhere' }codeFile { display = 'grid' gap = '.5rem' minWidth = '0' }'#lines' { margin = '0' padding = '.5rem 0' overflowX = 'auto' listStyle = 'none' counterReset = 'line' background = colorBackgroundSunken border = '1px solid ' + colorBorder borderRadius = '.4rem' font = '.85rem/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' }'#lines li' { counterIncrement = 'line' whiteSpace = 'pre' minHeight = '1.5em' padding = '0 .8rem 0 0' width = 'max-content' minWidth = '100%' }'#lines li::before' { content = 'counter(line)' display = 'inline-block' width = '3.5rem' padding = '0 .8rem' textAlign = 'right' color = colorTextMuted userSelect = 'none' }'#lines code' { font = 'inherit' color = colorTextStrong }codeSide { display = 'grid' gap = '1rem' minWidth = '0' }'code-side section' { display = 'grid' gap = '.4rem' minWidth = '0' }'code-side li' { display = 'flex' flexWrap = 'wrap' alignItems = 'baseline' gap = '.2rem .8rem' padding = '.3rem 0' overflowWrap = 'anywhere' }'button.setmain' { padding = '.1rem .5rem' fontSize = '.8rem' }// ---- the repo's tickets (gitoria#10): the list of tickets.worldapi.org's project ----repoTickets { display = 'grid' gap = '1rem' minWidth = '0' }'#newticket' { padding = '.7rem 1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' }'#newticket summary' { cursor = 'pointer' fontWeight = '600' color = colorAccent }'#newticketform' { display = 'grid' gap = '.6rem' marginTop = '.6rem' }'#ticketlist' { display = 'grid' gap = '.4rem' margin = '0' padding = '0' listStyle = 'none' }'#ticketlist li' { display = 'flex' flexWrap = 'wrap' alignItems = 'baseline' gap = '.2rem .8rem' padding = '.6rem 1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' }'#ticketlist .number' { color = colorTextMuted }'#ticketlist .subject' { flex = '1 1 14rem' fontWeight = '600' overflowWrap = 'anywhere' }'#ticketlist .state' { fontSize = '.85rem' color = colorTextMuted }// ---- the repo's pull requests (gitoria#11) ----repoPulls { display = 'grid' gap = '1rem' minWidth = '0' }'#pulllist' { display = 'grid' gap = '.4rem' margin = '0' padding = '0' listStyle = 'none' }'#pulllist li' { display = 'flex' flexWrap = 'wrap' alignItems = 'baseline' gap = '.2rem .8rem' padding = '.6rem 1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' overflowWrap = 'anywhere' }'#pulllist .subject' { flex = '1 1 14rem' fontWeight = '600' }'#pulllist .open' { fontSize = '.85rem' color = colorAccent }'#pulllist .nomerge' { display = 'none' }'#pulllist .merged' { fontSize = '.85rem' color = colorTextMuted }'#pulllist .branches' { display = 'inline-flex' flexWrap = 'wrap' gap = '.2rem .5rem' }// ---- the repo's settings (gitoria#18) and "#12" links to tickets ----repoSettings { display = 'grid' gap = '1rem' minWidth = '0' }'#ticketsettings' { display = 'grid' gap = '.6rem' justifyItems = 'start' }'#disconnecttickets.nomerge' { display = 'none' }'a.ticketref' { fontWeight = '600' }// ---- the repo's releases (gitoria#12) ----repoReleases { display = 'grid' gap = '1rem' minWidth = '0' }'#releaselist' { display = 'grid' gap = '.4rem' margin = '0' padding = '0' listStyle = 'none' }'#releaselist li' { display = 'flex' flexWrap = 'wrap' alignItems = 'baseline' gap = '.2rem .8rem' padding = '.6rem 1rem' background = colorSurface border = '1px solid ' + colorBorder borderRadius = '.5rem' overflowWrap = 'anywhere' }'#releaselist .version' { fontSize = '1.05rem' color = colorAccent }'#releaselist .latest' { fontSize = '.85rem' color = colorTextMuted }'#releaselist .subject' { flex = '1 1 14rem' }'@media (min-width: 45rem)' = {'code-browser' { gridTemplateColumns = 'minmax(0, 1fr) 18rem' alignItems = 'start' }'code-browser > *' { gridColumn = '1' }'code-browser > code-side' { gridColumn = '2' gridRow = '1 / span 4' }main { padding = '1.5rem 1rem' }'#repos li' { gridTemplateColumns = 'minmax(10rem, 16rem) 1fr auto' alignItems = 'center' gap = '.15rem 1rem' }}'#keylist .fingerprint' { overflowWrap = 'anywhere' color = colorTextMuted }'#keytext' { font = '.88em/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' }
Branches
- mainmain branch
Latest commits
- 09ce4f3fgitoria: mission 069 re-vendor hybriel 8efba065 stopped (big SSR pages grow + slow down); lambda audit clean; old vendor keptmre
- 3dc43108antcolony#40: mission references point to the moved missionsmre
- 8d9450fdantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
- 205d5fe4gitoria: Hybriel master ff51cf46; ssh keys/tokens no double rows (session sync); gates follow #20mre
- 9b27cb26gitoria#21: installable app (manifest, service worker, offline start page), own iconmre
- 68dcb603deploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
- e2deed6dgitoria#20: "Add code" only on the Code page of an empty repository, no collapsiblemre
- 8bb97ffddeploy.sh: never send .git or .gitignore to Byrodinmre
- fd981932State of 2026-09-27; bin/ no longer tracked (Hybriel commit is in README)mre
- 4a2d7125initial commitmre