commit 0619d59bf32960fa57a3605d7d363709ace6e5c7 Author: colem Date: Tue Jan 27 16:54:01 2026 -0500 first commit diff --git a/public/assets/css/chroma/base.css b/public/assets/css/chroma/base.css new file mode 100644 index 0000000..bce1333 --- /dev/null +++ b/public/assets/css/chroma/base.css @@ -0,0 +1,46 @@ +/* LineTableTD */ +.chroma .lntd { + vertical-align: top; + padding: 0; + margin: 0; + border: 0; +} + +/* LineTable */ +.chroma .lntable { + border-spacing: 0; + padding: 0; + margin: 0; + border: 0; + width: auto; + overflow: auto; + display: block; +} + +/* LineHighlight */ +.chroma .hl { + display: block; + width: 100%; +} + +/* LineNumbersTable */ +.chroma .lnt { + margin-right: 0.4em; + padding: 0 0.4em; +} + +/* LineNumbers */ +.chroma .ln { + margin-right: 0.4em; + padding: 0 0.4em; +} + +/* GenericStrong */ +.chroma .gs { + font-weight: var(--font-weight-semibold); +} + +/* GenericUnderline */ +.chroma .gl { + text-decoration: underline; +} diff --git a/public/assets/css/chroma/dark.css b/public/assets/css/chroma/dark.css new file mode 100644 index 0000000..bfe9d69 --- /dev/null +++ b/public/assets/css/chroma/dark.css @@ -0,0 +1,76 @@ +/* https://github.com/alecthomas/chroma/blob/6428fb4e65f3c1493491571c8a6a8f1add1da822/types.go#L208 */ +.chroma .bp { color: #fabd2f; } /* NameBuiltinPseudo */ +.chroma .c { color: #777e94; } /* Comment */ +.chroma .c1 { color: #777e94; } /* CommentSingle */ +.chroma .ch { color: #777e94; } /* CommentHashbang */ +.chroma .cm { color: #777e94; } /* CommentMultiline */ +.chroma .cp { color: #8ec07c; } /* CommentPreproc */ +.chroma .cpf { color: #649bc4; } /* CommentPreprocFile */ +.chroma .cs { color: #9075cd; } /* CommentSpecial */ +.chroma .dl { color: #649bc4; } /* LiteralStringDelimiter */ +.chroma .fm {} /* NameFunctionMagic */ +.chroma .g {} /* Generic */ +.chroma .gd { color: #ffffff; background-color: #5f3737; } /* GenericDeleted */ +.chroma .ge { color: #ddee30; } /* GenericEmph */ +.chroma .gh { color: #ffaa10; } /* GenericHeading */ +.chroma .gi { color: #ffffff; background-color: #3a523a; } /* GenericInserted */ +.chroma .gl {} /* GenericUnderline */ +.chroma .go { color: #777e94; } /* GenericOutput */ +.chroma .gp { color: #ebdbb2; } /* GenericPrompt */ +.chroma .gr { color: #ff4433; } /* GenericError */ +.chroma .gs { color: #ebdbb2; } /* GenericStrong */ +.chroma .gt { color: #ff7540; } /* GenericTraceback */ +.chroma .gu { color: #b8bb26; } /* GenericSubheading */ +.chroma .il { color: #649bc4; } /* LiteralNumberIntegerLong */ +.chroma .k { color: #ff7540; } /* Keyword */ +.chroma .kc { color: #649bc4; } /* KeywordConstant */ +.chroma .kd { color: #ff7540; } /* KeywordDeclaration */ +.chroma .kn { color: #ffaa10; } /* KeywordNamespace */ +.chroma .kp { color: #5f8700; } /* KeywordPseudo */ +.chroma .kr { color: #ff7540; } /* KeywordReserved */ +.chroma .kt { color: #ff7b72; } /* KeywordType */ +.chroma .l {} /* Literal */ +.chroma .ld {} /* LiteralDate */ +.chroma .m { color: #649bc4; } /* LiteralNumber */ +.chroma .mb { color: #649bc4; } /* LiteralNumberBin */ +.chroma .mf { color: #649bc4; } /* LiteralNumberFloat */ +.chroma .mh { color: #649bc4; } /* LiteralNumberHex */ +.chroma .mi { color: #649bc4; } /* LiteralNumberInteger */ +.chroma .mo { color: #649bc4; } /* LiteralNumberOct */ +.chroma .n { color: #c9d1d9; } /* Name */ +.chroma .na { color: #fabd2f; } /* NameAttribute */ +.chroma .nb { color: #fabd2f; } /* NameBuiltin */ +.chroma .nc { color: #ffaa10; } /* NameClass */ +.chroma .nd { color: #8ec07c; } /* NameDecorator */ +.chroma .ne { color: #ff7540; } /* NameException */ +.chroma .nf { color: #fabd2f; } /* NameFunction */ +.chroma .ni { color: #fabd2f; } /* NameEntity */ +.chroma .nl { color: #ff7540; } /* NameLabel */ +.chroma .nn { color: #c9d1d9; } /* NameNamespace */ +.chroma .no { color: #649bc4; } /* NameConstant */ +.chroma .nt { color: #ff7540; } /* NameTag */ +.chroma .nv { color: #ebdbb2; } /* NameVariable */ +.chroma .nx { color: #b6bac5; } /* NameOther */ +.chroma .o { color: #ff7540; } /* Operator */ +.chroma .ow { color: #5f8700; } /* OperatorWord */ +.chroma .p { color: #d2d4db; } /* Punctuation */ +.chroma .py {} /* NameProperty */ +.chroma .s { color: #b8bb26; } /* LiteralString */ +.chroma .s1 { color: #b8bb26; } /* LiteralStringSingle */ +.chroma .s2 { color: #b8bb26; } /* LiteralStringDouble */ +.chroma .sa { color: #ffaa10; } /* LiteralStringAffix */ +.chroma .sb { color: #b8bb26; } /* LiteralStringBacktick */ +.chroma .sc { color: #ffaa10; } /* LiteralStringChar */ +.chroma .sd { color: #b8bb26; } /* LiteralStringDoc */ +.chroma .se { color: #ff8540; } /* LiteralStringEscape */ +.chroma .sh { color: #b8bb26; } /* LiteralStringHeredoc */ +.chroma .si { color: #ffaa10; } /* LiteralStringInterpol */ +.chroma .sr { color: #9075cd; } /* LiteralStringRegex */ +.chroma .ss { color: #ff8540; } /* LiteralStringSymbol */ +.chroma .sx { color: #ffaa10; } /* LiteralStringOther */ +.chroma .vc { color: #649bee; } /* NameVariableClass */ +.chroma .vg { color: #649bee; } /* NameVariableGlobal */ +.chroma .vi { color: #649bee; } /* NameVariableInstance */ +.chroma .vm {} /* NameVariableMagic */ +.chroma .w { color: #7f8699; } /* TextWhitespace */ +.chroma .err {/* not styled because Chroma uses it on too many things like JSX */} /* Error */ diff --git a/public/assets/css/chroma/light.css b/public/assets/css/chroma/light.css new file mode 100644 index 0000000..c1e4cb3 --- /dev/null +++ b/public/assets/css/chroma/light.css @@ -0,0 +1,76 @@ +/* https://github.com/alecthomas/chroma/blob/6428fb4e65f3c1493491571c8a6a8f1add1da822/types.go#L208 */ +.chroma .bp { color: #999999; } /* NameBuiltinPseudo */ +.chroma .c { color: #6a737d; } /* Comment */ +.chroma .c1 { color: #6a737d; } /* CommentSingle */ +.chroma .ch { color: #6a737d; } /* CommentHashbang */ +.chroma .cm { color: #999988; } /* CommentMultiline */ +.chroma .cp { color: #109295; } /* CommentPreproc */ +.chroma .cpf { color: #4c4dbc; } /* CommentPreprocFile */ +.chroma .cs { color: #999999; } /* CommentSpecial */ +.chroma .dl { color: #106303; } /* LiteralStringDelimiter */ +.chroma .fm {} /* NameFunctionMagic */ +.chroma .g {} /* Generic */ +.chroma .gd { color: #000000; background-color: #ffdddd; } /* GenericDeleted */ +.chroma .ge { color: #000000; } /* GenericEmph */ +.chroma .gh { color: #999999; } /* GenericHeading */ +.chroma .gi { color: #000000; background-color: #ddffdd; } /* GenericInserted */ +.chroma .gl {} /* GenericUnderline */ +.chroma .go { color: #888888; } /* GenericOutput */ +.chroma .gp { color: #555555; } /* GenericPrompt */ +.chroma .gr { color: #aa0000; } /* GenericError */ +.chroma .gs {} /* GenericStrong */ +.chroma .gt { color: #aa0000; } /* GenericTraceback */ +.chroma .gu { color: #aaaaaa; } /* GenericSubheading */ +.chroma .il { color: #009999; } /* LiteralNumberIntegerLong */ +.chroma .k { color: #d73a49; } /* Keyword */ +.chroma .kc { color: #d73a49; } /* KeywordConstant */ +.chroma .kd { color: #d73a49; } /* KeywordDeclaration */ +.chroma .kn { color: #d73a49; } /* KeywordNamespace */ +.chroma .kp { color: #d73a49; } /* KeywordPseudo */ +.chroma .kr { color: #d73a49; } /* KeywordReserved */ +.chroma .kt { color: #445588; } /* KeywordType */ +.chroma .l {} /* Literal */ +.chroma .ld {} /* LiteralDate */ +.chroma .m { color: #009999; } /* LiteralNumber */ +.chroma .mb { color: #009999; } /* LiteralNumberBin */ +.chroma .mf { color: #009999; } /* LiteralNumberFloat */ +.chroma .mh { color: #009999; } /* LiteralNumberHex */ +.chroma .mi { color: #009999; } /* LiteralNumberInteger */ +.chroma .mo { color: #009999; } /* LiteralNumberOct */ +.chroma .n {} /* Name */ +.chroma .na { color: #d73a49; } /* NameAttribute */ +.chroma .nb { color: #005cc5; } /* NameBuiltin */ +.chroma .nc { color: #445588; } /* NameClass */ +.chroma .nd { color: #3c5d5d; } /* NameDecorator */ +.chroma .ne { color: #990000; } /* NameException */ +.chroma .nf { color: #005cc5; } /* NameFunction */ +.chroma .ni { color: #6f42c1; } /* NameEntity */ +.chroma .nl { color: #990000; } /* NameLabel */ +.chroma .nn { color: #555555; } /* NameNamespace */ +.chroma .no { color: #008080; } /* NameConstant */ +.chroma .nt { color: #22863a; } /* NameTag */ +.chroma .nv { color: #008080; } /* NameVariable */ +.chroma .nx { color: #24292e; } /* NameOther */ +.chroma .o { color: #d73a49; } /* Operator */ +.chroma .ow { color: #d73a49; } /* OperatorWord */ +.chroma .p {} /* Punctuation */ +.chroma .py {} /* NameProperty */ +.chroma .s { color: #106303; } /* LiteralString */ +.chroma .s1 { color: #106303; } /* LiteralStringSingle */ +.chroma .s2 { color: #106303; } /* LiteralStringDouble */ +.chroma .sa { color: #cc7a00; } /* LiteralStringAffix */ +.chroma .sb { color: #106303; } /* LiteralStringBacktick */ +.chroma .sc { color: #cc7a00; } /* LiteralStringChar */ +.chroma .sd { color: #106303; } /* LiteralStringDoc */ +.chroma .se { color: #994400; } /* LiteralStringEscape */ +.chroma .sh { color: #106303; } /* LiteralStringHeredoc */ +.chroma .si { color: #cc7a00; } /* LiteralStringInterpol */ +.chroma .sr { color: #4c4dbc; } /* LiteralStringRegex */ +.chroma .ss { color: #994400; } /* LiteralStringSymbol */ +.chroma .sx { color: #106303; } /* LiteralStringOther */ +.chroma .vc { color: #008080; } /* NameVariableClass */ +.chroma .vg { color: #008080; } /* NameVariableGlobal */ +.chroma .vi { color: #008080; } /* NameVariableInstance */ +.chroma .vm {} /* NameVariableMagic */ +.chroma .w { color: #bbbbbb; } /* TextWhitespace */ +.chroma .err {/* not styled because Chroma uses it on too many things like JSX */} /* Error */ diff --git a/public/assets/css/codemirror/base.css b/public/assets/css/codemirror/base.css new file mode 100644 index 0000000..aedf7d8 --- /dev/null +++ b/public/assets/css/codemirror/base.css @@ -0,0 +1,49 @@ +.ui .field:not(:last-child) .EasyMDEContainer .editor-statusbar { + margin-bottom: -1em; /* when there is a statusbar, the "margin-bottom: 1em" of the "field" is not needed, because the statusbar is likely a blank line */ +} + +.EasyMDEContainer .CodeMirror { + color: var(--color-input-text); + background-color: var(--color-input-background); + border-color: var(--color-secondary); + font: 14px var(--fonts-monospace); +} + +.EasyMDEContainer .CodeMirror.cm-s-default { + border-radius: var(--border-radius); + padding: 0 !important; +} + +.EasyMDEContainer .CodeMirror.CodeMirror-fullscreen.CodeMirror-focused { + border-right: 1px solid var(--color-primary) !important; +} + +.CodeMirror-cursor { + border-color: var(--color-caret) !important; +} + +.CodeMirror .cm-comment { + background: inherit !important; +} + +.CodeMirror .CodeMirror-code { + font: 14px var(--fonts-monospace); +} + +.CodeMirror-selected { + background: var(--color-primary-light-1) !important; + color: var(--color-white) !important; +} + +.CodeMirror-placeholder { + color: var(--color-placeholder-text) !important; + opacity: 1 !important; +} + +.CodeMirror-focused { + border-color: var(--color-primary) !important; +} + +.CodeMirror :focus { + outline: none; +} diff --git a/public/assets/css/codemirror/dark.css b/public/assets/css/codemirror/dark.css new file mode 100644 index 0000000..8a20d1c --- /dev/null +++ b/public/assets/css/codemirror/dark.css @@ -0,0 +1,106 @@ +.CodeMirror.cm-s-default .cm-property, +.CodeMirror.cm-s-paper .cm-property { + color: #a0cc75; +} + +.CodeMirror.cm-s-default .cm-header, +.CodeMirror.cm-s-paper .cm-header { + color: #9daccc; +} + +.CodeMirror.cm-s-default .cm-quote, +.CodeMirror.cm-s-paper .cm-quote { + color: #009900; +} + +.CodeMirror.cm-s-default .cm-keyword, +.CodeMirror.cm-s-paper .cm-keyword { + color: #cc8a61; +} + +.CodeMirror.cm-s-default .cm-atom, +.CodeMirror.cm-s-paper .cm-atom { + color: #ef5e77; +} + +.CodeMirror.cm-s-default .cm-number, +.CodeMirror.cm-s-paper .cm-number { + color: #ff5656; +} + +.CodeMirror.cm-s-default .cm-def, +.CodeMirror.cm-s-paper .cm-def { + color: #e4e4e4; +} + +.CodeMirror.cm-s-default .cm-variable-2, +.CodeMirror.cm-s-paper .cm-variable-2 { + color: #00bdbf; +} + +.CodeMirror.cm-s-default .cm-variable-3, +.CodeMirror.cm-s-paper .cm-variable-3 { + color: #008855; +} + +.CodeMirror.cm-s-default .cm-comment, +.CodeMirror.cm-s-paper .cm-comment { + color: #8e9ab3; +} + +.CodeMirror.cm-s-default .cm-string, +.CodeMirror.cm-s-paper .cm-string { + color: #a77272; +} + +.CodeMirror.cm-s-default .cm-string-2, +.CodeMirror.cm-s-paper .cm-string-2 { + color: #ff5500; +} + +.CodeMirror.cm-s-default .cm-meta, +.CodeMirror.cm-s-paper .cm-meta, +.CodeMirror.cm-s-default .cm-qualifier, +.CodeMirror.cm-s-paper .cm-qualifier { + color: #ffb176; +} + +.CodeMirror.cm-s-default .cm-builtin, +.CodeMirror.cm-s-paper .cm-builtin { + color: #b7c951; +} + +.CodeMirror.cm-s-default .cm-bracket, +.CodeMirror.cm-s-paper .cm-bracket { + color: #999977; +} + +.CodeMirror.cm-s-default .cm-tag, +.CodeMirror.cm-s-paper .cm-tag { + color: #f1d273; +} + +.CodeMirror.cm-s-default .cm-attribute, +.CodeMirror.cm-s-paper .cm-attribute { + color: #bfcc70; +} + +.CodeMirror.cm-s-default .cm-hr, +.CodeMirror.cm-s-paper .cm-hr { + color: #999999; +} + +.CodeMirror.cm-s-default .cm-url, +.CodeMirror.cm-s-paper .cm-url { + color: #c5cfd0; +} + +.CodeMirror.cm-s-default .cm-link, +.CodeMirror.cm-s-paper .cm-link { + color: #d8c792; +} + +.CodeMirror.cm-s-default .cm-error, +.CodeMirror.cm-s-paper .cm-error { + color: #dbdbeb; +} diff --git a/public/assets/css/codemirror/light.css b/public/assets/css/codemirror/light.css new file mode 100644 index 0000000..aa89263 --- /dev/null +++ b/public/assets/css/codemirror/light.css @@ -0,0 +1 @@ +/* Placeholder, there is no light theme, it uses CM defaults */ diff --git a/public/assets/css/theme-codecraftsmen-auto.css b/public/assets/css/theme-codecraftsmen-auto.css new file mode 100644 index 0000000..3467f7b --- /dev/null +++ b/public/assets/css/theme-codecraftsmen-auto.css @@ -0,0 +1,13 @@ +@import "./theme-codecraftsmen-light.css" (prefers-color-scheme: light); +@import "./theme-codecraftsmen-dark.css" (prefers-color-scheme: dark); + +#navbar-logo .nav-logo-dark { display: none; } + +@media (prefers-color-scheme: dark) { + html[data-theme="codecraftsmen-auto"] #navbar-logo .nav-logo-light { display: none; } + html[data-theme="codecraftsmen-auto"] #navbar-logo .nav-logo-dark { display: inline; } +} + +gitea-theme-meta-info { + --theme-display-name: "CodeCraftsmen Auto"; +} diff --git a/public/assets/css/theme-codecraftsmen-dark.css b/public/assets/css/theme-codecraftsmen-dark.css new file mode 100644 index 0000000..b3e14e0 --- /dev/null +++ b/public/assets/css/theme-codecraftsmen-dark.css @@ -0,0 +1,327 @@ +@import "./chroma/dark.css"; +@import "./codemirror/dark.css"; + +gitea-theme-meta-info { + --theme-display-name: "CodeCraftsmen Dark"; +} + +@font-face { + font-family: "Gotham"; + src: url("/assets/fonts/GothamNarrow-Medium.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "alro"; + src: url("/assets/fonts/alro-bold-700.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +:root { + --is-dark-theme: true; + --color-primary: #7395b9; + --color-primary-contrast: #222222; + --color-primary-dark-1: #81a0c0; + --color-primary-dark-2: #8faac7; + --color-primary-dark-3: #9db5ce; + --color-primary-dark-4: #abbfd5; + --color-primary-dark-5: #c7d5e3; + --color-primary-dark-6: #e3eaf1; + --color-primary-dark-7: #f4f7f9; + --color-primary-light-1: #6886a6; + --color-primary-light-2: #5c7794; + --color-primary-light-3: #506882; + --color-primary-light-4: #45596f; + --color-primary-light-5: #2e3c4a; + --color-primary-light-6: #171e25; + --color-primary-light-7: #090c0f; + --color-primary-alpha-10: #7395b919; + --color-primary-alpha-20: #7395b933; + --color-primary-alpha-30: #7395b94c; + --color-primary-alpha-40: #7395b966; + --color-primary-alpha-50: #7395b97f; + --color-primary-alpha-60: #7395b999; + --color-primary-alpha-70: #7395b9b2; + --color-primary-alpha-80: #7395b9cc; + --color-primary-alpha-90: #7395b9e5; + --color-primary-hover: var(--color-primary-dark-1); + --color-primary-active: var(--color-primary-dark-2); + --color-secondary: #40403c; + --color-secondary-dark-1: #4a4a46; + --color-secondary-dark-2: #535350; + --color-secondary-dark-3: #5f5f5b; + --color-secondary-dark-4: #6a6a67; + --color-secondary-dark-5: #797976; + --color-secondary-dark-6: #898986; + --color-secondary-dark-7: #989896; + --color-secondary-dark-8: #a7a7a5; + --color-secondary-dark-9: #b6b6b5; + --color-secondary-dark-10: #c6c6c4; + --color-secondary-dark-11: #d5d5d4; + --color-secondary-dark-12: #e4e4e4; + --color-secondary-dark-13: #f0f0ef; + --color-secondary-light-1: #3b3b37; + --color-secondary-light-2: #363632; + --color-secondary-light-3: #31312e; + --color-secondary-light-4: #2c2c29; + --color-secondary-alpha-10: #40403c19; + --color-secondary-alpha-20: #40403c33; + --color-secondary-alpha-30: #40403c4c; + --color-secondary-alpha-40: #40403c66; + --color-secondary-alpha-50: #40403c7f; + --color-secondary-alpha-60: #40403c99; + --color-secondary-alpha-70: #40403cb2; + --color-secondary-alpha-80: #40403ccc; + --color-secondary-alpha-90: #40403ce5; + --color-secondary-button: var(--color-secondary-dark-4); + --color-secondary-hover: var(--color-secondary-dark-3); + --color-secondary-active: var(--color-secondary-dark-2); + /* console colors - used for actions console and console files */ + --color-console-fg: #f7f8f9; + --color-console-fg-subtle: #bdc4cc; + --color-console-bg: #171b1e; + --color-console-border: #2e353b; + --color-console-hover-bg: #272d33; + --color-console-active-bg: #2e353b; + --color-console-menu-bg: #262b31; + --color-console-menu-border: #414b55; + /* named colors */ + --color-red: #d52b1e; + --color-orange: #cc580c; + --color-yellow: #f2b134; + --color-olive: #91a313; + --color-green: #87ab63; + --color-teal: #00918a; + --color-blue: #7395b9; + --color-violet: #906ae1; + --color-purple: #b259d0; + --color-pink: #d22e8b; + --color-brown: #7a5230; + --color-black: #222222; + /* light variants - produced via Sass scale-color(color, $lightness: +10%) */ + --color-red-light: #d94034; + --color-orange-light: #f6a066; + --color-yellow-light: #f3b948; + --color-olive-light: #abc016; + --color-green-light: #93b373; + --color-teal-light: #00b6ad; + --color-blue-light: #81a0c0; + --color-violet-light: #9b79e4; + --color-purple-light: #ba6ad5; + --color-pink-light: #d74397; + --color-brown-light: #876345; + --color-black-light: #383838; + /* dark 1 variants - produced via Sass scale-color(color, $lightness: -10%) */ + --color-red-dark-1: #c0271b; + --color-orange-dark-1: #f38236; + --color-yellow-dark-1: #da9f2f; + --color-olive-dark-1: #839311; + --color-green-dark-1: #7a9e55; + --color-teal-dark-1: #00837c; + --color-blue-dark-1: #6886a6; + --color-violet-dark-1: #7b4edb; + --color-purple-dark-1: #a742c9; + --color-pink-dark-1: #be297d; + --color-brown-dark-1: #6e4a2b; + --color-black-dark-1: #1f1f1f; + /* dark 2 variants - produced via Sass scale-color(color, $lightness: -20%) */ + --color-red-dark-2: #aa2218; + --color-orange-dark-2: #f16e17; + --color-yellow-dark-2: #c28e2a; + --color-olive-dark-2: #74820f; + --color-green-dark-2: #6c8c4c; + --color-teal-dark-2: #00746e; + --color-blue-dark-2: #5c7794; + --color-violet-dark-2: #6733d6; + --color-purple-dark-2: #9834b9; + --color-pink-dark-2: #a9246f; + --color-brown-dark-2: #624226; + --color-black-dark-2: #1b1b1b; + /* ansi colors used for actions console and console files */ + --color-ansi-black: #1e2327; + --color-ansi-red: #d52b1e; + --color-ansi-green: #87ab63; + --color-ansi-yellow: #c28e2a; + --color-ansi-blue: #7395b9; + --color-ansi-magenta: #d22e8b; + --color-ansi-cyan: #00918a; + --color-ansi-white: var(--color-console-fg-subtle); + --color-ansi-bright-black: #424851; + --color-ansi-bright-red: #d94034; + --color-ansi-bright-green: #93b373; + --color-ansi-bright-yellow: #f3b948; + --color-ansi-bright-blue: #81a0c0; + --color-ansi-bright-magenta: #d74397; + --color-ansi-bright-cyan: #00b6ad; + --color-ansi-bright-white: var(--color-console-fg); + /* other colors */ + --color-grey: #384149; + --color-grey-light: #818f9e; + --color-gold: #b1983b; + --color-white: #ffffff; + --color-diff-added-linenum-bg: #274227; + --color-diff-added-row-bg: #203224; + --color-diff-added-row-border: #314a37; + --color-diff-added-word-bg: #3c653c; + --color-diff-moved-row-bg: #818044; + --color-diff-moved-row-border: #bcca6f; + --color-diff-removed-linenum-bg: #482121; + --color-diff-removed-row-bg: #301e1e; + --color-diff-removed-row-border: #634343; + --color-diff-removed-word-bg: #6f3333; + --color-diff-inactive: #22282d; + --color-error-border: #a04141; + --color-error-bg: #522; + --color-error-bg-active: #744; + --color-error-bg-hover: #633; + --color-error-text: #f9cbcb; + --color-success-border: #458a57; + --color-success-bg: #284034; + --color-success-text: #6cc664; + --color-warning-border: #bb9d00; + --color-warning-bg: #3a3a30; + --color-warning-text: #fbbd08; + --color-info-border: #306090; + --color-info-bg: #26354c; + --color-info-text: #38a8e8; + --color-red-badge: #db2828; + --color-red-badge-bg: #db28281a; + --color-red-badge-hover-bg: #db28284d; + --color-green-badge: #21ba45; + --color-green-badge-bg: #21ba451a; + --color-green-badge-hover-bg: #21ba454d; + --color-yellow-badge: #fbbd08; + --color-yellow-badge-bg: #fbbd081a; + --color-yellow-badge-hover-bg: #fbbd084d; + --color-orange-badge: #f2711c; + --color-orange-badge-bg: #f2711c1a; + --color-orange-badge-hover-bg: #f2711c4d; + --color-git: #f05133; + --color-logo: #f2b134; + /* target-based colors */ + --color-body: #222222; + --color-box-header: #1f1f1f; + --color-box-body: #1d1d1d; + --color-box-body-highlight: #202020; + --color-text-dark: #ede8d0; + --color-text: #efead5; + --color-text-light: #c9c5b1; + --color-text-light-1: #b2ae9c; + --color-text-light-2: #9a9787; + --color-text-light-3: #828072; + --color-footer: var(--color-nav-bg); + --color-timeline: #343c44; + --color-input-text: var(--color-text-dark); + --color-input-background: #171a1e; + --color-input-toggle-background: #2e353c; + --color-input-border: var(--color-secondary); + --color-input-border-hover: var(--color-secondary-dark-1); + --color-light: #00001728; + --color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled))); + --color-light-border: #e8f3ff28; + --color-hover: #e8f3ff19; + --color-hover-opaque: #21252a; /* TODO: color-mix(in srgb, var(--color-body), var(--color-hover)); */ + --color-active: #e8f3ff24; + --color-menu: #1f1f1f; + --color-card: #1f1f1f; + --color-markup-table-row: #e8f3ff0f; + --color-markup-code-block: #e8f3ff12; + --color-markup-code-inline: #e8f3ff28; + --color-button: #1f1f1f; + --color-code-bg: #1d1d1d; + --color-shadow: #00001758; + --color-shadow-opaque: #000017; + --color-secondary-bg: #202020; + --color-expand-button: #2f363d; + --color-placeholder-text: var(--color-text-light-3); + --color-editor-line-highlight: var(--color-primary-light-5); + --color-project-column-bg: var(--color-secondary-light-2); + --color-caret: var(--color-text); /* should ideally be --color-text-dark, see #15651 */ + --color-reaction-bg: #e8f3ff12; + --color-reaction-hover-bg: var(--color-primary-light-4); + --color-reaction-active-bg: var(--color-primary-light-5); + --color-tooltip-text: #f9fafb; + --color-tooltip-bg: #000b17f0; + --color-nav-bg: #1e1e1e; + --color-nav-hover-bg: #212121; + --color-nav-text: var(--color-text); + --color-secondary-nav-bg: #1f1f1f; + --color-label-text: var(--color-text); + --color-label-bg: #7282924b; + --color-label-hover-bg: #728292a0; + --color-label-active-bg: #728292ff; + --color-accent: var(--color-primary-light-1); + --color-small-accent: var(--color-primary-light-5); + --color-highlight-fg: #f2b134; + --color-highlight-bg: #6b5428; + --color-overlay-backdrop: #080808c0; + accent-color: var(--color-accent); + color-scheme: dark; +} + +/* invert emojis that are hard to read otherwise */ +.emoji[aria-label="check mark"], +.emoji[aria-label="currency exchange"], +.emoji[aria-label="TOP arrow"], +.emoji[aria-label="END arrow"], +.emoji[aria-label="ON! arrow"], +.emoji[aria-label="SOON arrow"], +.emoji[aria-label="heavy dollar sign"], +.emoji[aria-label="copyright"], +.emoji[aria-label="registered"], +.emoji[aria-label="trade mark"], +.emoji[aria-label="multiply"], +.emoji[aria-label="plus"], +.emoji[aria-label="minus"], +.emoji[aria-label="divide"], +.emoji[aria-label="curly loop"], +.emoji[aria-label="double curly loop"], +.emoji[aria-label="wavy dash"], +.emoji[aria-label="paw prints"], +.emoji[aria-label="musical note"], +.emoji[aria-label="musical notes"] { + filter: invert(100%) hue-rotate(180deg); +} + +/* CodeCraftsmen brand typography (falls back gracefully if custom fonts are not installed) */ +:root { + --cc-font-body: "Gotham", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji"; + --cc-font-heading: "alro", "Gotham", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial; + --cc-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +html[data-theme="codecraftsmen-dark"] #navbar-logo .nav-logo-light { display: none; } +html[data-theme="codecraftsmen-dark"] #navbar-logo .nav-logo-dark { display: inline; } + +body, +input, +textarea, +select, +button, +small { + font-family: var(--cc-font-body); +} + +h1, +h2, +h3, +h4, +h5, +h6, +.ui.header, +.page-title, +.repository .ui.header { + font-family: var(--cc-font-heading); + letter-spacing: 0.02em; +} + +code, +pre, +kbd, +samp, +.monospace { + font-family: var(--cc-font-mono); +} diff --git a/public/assets/css/theme-codecraftsmen-light.css b/public/assets/css/theme-codecraftsmen-light.css new file mode 100644 index 0000000..bb8cd9b --- /dev/null +++ b/public/assets/css/theme-codecraftsmen-light.css @@ -0,0 +1,303 @@ +@import "./chroma/light.css"; +@import "./codemirror/light.css"; + +gitea-theme-meta-info { + --theme-display-name: "CodeCraftsmen Light"; +} + +@font-face { + font-family: "Gotham"; + src: url("/assets/fonts/GothamNarrow-Medium.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "alro"; + src: url("/assets/fonts/alro-bold-700.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +:root { + --is-dark-theme: false; + --color-primary: #003f7f; + --color-primary-contrast: #ffffff; + --color-primary-dark-1: #003972; + --color-primary-dark-2: #003266; + --color-primary-dark-3: #002c59; + --color-primary-dark-4: #00264c; + --color-primary-dark-5: #001933; + --color-primary-dark-6: #000d19; + --color-primary-dark-7: #00050a; + --color-primary-light-1: #1a528c; + --color-primary-light-2: #336599; + --color-primary-light-3: #4c79a5; + --color-primary-light-4: #668cb2; + --color-primary-light-5: #99b2cc; + --color-primary-light-6: #ccd9e5; + --color-primary-light-7: #ebf0f5; + --color-primary-alpha-10: #003f7f19; + --color-primary-alpha-20: #003f7f33; + --color-primary-alpha-30: #003f7f4c; + --color-primary-alpha-40: #003f7f66; + --color-primary-alpha-50: #003f7f7f; + --color-primary-alpha-60: #003f7f99; + --color-primary-alpha-70: #003f7fb2; + --color-primary-alpha-80: #003f7fcc; + --color-primary-alpha-90: #003f7fe5; + --color-primary-hover: var(--color-primary-dark-1); + --color-primary-active: var(--color-primary-dark-2); + --color-secondary: #c9c5b1; + --color-secondary-dark-1: #bfbba8; + --color-secondary-dark-2: #b5b19f; + --color-secondary-dark-3: #a19e8e; + --color-secondary-dark-4: #918e7f; + --color-secondary-dark-5: #817e71; + --color-secondary-dark-6: #716e63; + --color-secondary-dark-7: #605f55; + --color-secondary-dark-8: #504f47; + --color-secondary-dark-9: #403f39; + --color-secondary-dark-10: #302f2a; + --color-secondary-dark-11: #20201c; + --color-secondary-dark-12: #10100e; + --color-secondary-dark-13: #060605; + --color-secondary-light-1: #cfccba; + --color-secondary-light-2: #d4d1c1; + --color-secondary-light-3: #d8d5c7; + --color-secondary-light-4: #dcdacd; + --color-secondary-alpha-10: #c9c5b119; + --color-secondary-alpha-20: #c9c5b133; + --color-secondary-alpha-30: #c9c5b14c; + --color-secondary-alpha-40: #c9c5b166; + --color-secondary-alpha-50: #c9c5b17f; + --color-secondary-alpha-60: #c9c5b199; + --color-secondary-alpha-70: #c9c5b1b2; + --color-secondary-alpha-80: #c9c5b1cc; + --color-secondary-alpha-90: #c9c5b1e5; + --color-secondary-button: var(--color-secondary-dark-4); + --color-secondary-hover: var(--color-secondary-dark-5); + --color-secondary-active: var(--color-secondary-dark-6); + /* console colors - used for actions console and console files */ + --color-console-fg: #f7f8f9; + --color-console-fg-subtle: #bdc4cc; + --color-console-bg: #171b1e; + --color-console-border: #2e353b; + --color-console-hover-bg: #272d33; + --color-console-active-bg: #2e353b; + --color-console-menu-bg: #262b31; + --color-console-menu-border: #414b55; + /* named colors */ + --color-red: #d52b1e; + --color-orange: #f2711c; + --color-yellow: #f2b134; + --color-olive: #b5cc18; + --color-green: #21ba45; + --color-teal: #00b5ad; + --color-blue: #003f7f; + --color-violet: #6435c9; + --color-purple: #a333c8; + --color-pink: #e03997; + --color-brown: #7a5230; + --color-black: #222222; + /* light variants - produced via Sass scale-color(color, $lightness: +25%) */ + --color-red-light: #e06056; + --color-orange-light: #f59555; + --color-yellow-light: #f5c467; + --color-olive-light: #d3e942; + --color-green-light: #46de6a; + --color-teal-light: #08fff4; + --color-blue-light: #406f9f; + --color-violet-light: #8b67d7; + --color-purple-light: #bb64d8; + --color-pink-light: #e86bb1; + --color-brown-light: #9b7d64; + --color-black-light: #595959; + /* dark 1 variants - produced via Sass scale-color(color, $lightness: -10%) */ + --color-red-dark-1: #c0271b; + --color-orange-dark-1: #e6630d; + --color-yellow-dark-1: #da9f2f; + --color-olive-dark-1: #a3b816; + --color-green-dark-1: #1ea73e; + --color-teal-dark-1: #00a39c; + --color-blue-dark-1: #003972; + --color-violet-dark-1: #5a30b5; + --color-purple-dark-1: #932eb4; + --color-pink-dark-1: #db228a; + --color-brown-dark-1: #6e4a2b; + --color-black-dark-1: #1f1f1f; + /* dark 2 variants - produced via Sass scale-color(color, $lightness: -20%) */ + --color-red-dark-2: #aa2218; + --color-orange-dark-2: #cc580c; + --color-yellow-dark-2: #c28e2a; + --color-olive-dark-2: #91a313; + --color-green-dark-2: #1a9537; + --color-teal-dark-2: #00918a; + --color-blue-dark-2: #003266; + --color-violet-dark-2: #502aa1; + --color-purple-dark-2: #8229a0; + --color-pink-dark-2: #c21e7b; + --color-brown-dark-2: #624226; + --color-black-dark-2: #1b1b1b; + /* ansi colors used for actions console and console files */ + --color-ansi-black: #1e2327; + --color-ansi-red: #d52b1e; + --color-ansi-green: #87ab63; + --color-ansi-yellow: #c28e2a; + --color-ansi-blue: #003f7f; + --color-ansi-magenta: #d22e8b; + --color-ansi-cyan: #00918a; + --color-ansi-white: var(--color-console-fg-subtle); + --color-ansi-bright-black: #46494d; + --color-ansi-bright-red: #e06056; + --color-ansi-bright-green: #93b373; + --color-ansi-bright-yellow: #f5c467; + --color-ansi-bright-blue: #406f9f; + --color-ansi-bright-magenta: #d74397; + --color-ansi-bright-cyan: #00b6ad; + --color-ansi-bright-white: var(--color-console-fg); + /* other colors */ + --color-grey: #697077; + --color-grey-light: #7c838a; + --color-gold: #a1882b; + --color-white: #ffffff; + --color-diff-added-linenum-bg: #d1f8d9; + --color-diff-added-row-bg: #e6ffed; + --color-diff-added-row-border: #e6ffed; + --color-diff-added-word-bg: #acf2bd; + --color-diff-moved-row-bg: #f1f8d1; + --color-diff-moved-row-border: #d0e27f; + --color-diff-removed-linenum-bg: #ffcecb; + --color-diff-removed-row-bg: #ffeef0; + --color-diff-removed-row-border: #f1c0c0; + --color-diff-removed-word-bg: #fdb8c0; + --color-diff-inactive: #f0f2f4; + --color-error-border: #e0b4b4; + --color-error-bg: #fff6f6; + --color-error-bg-active: #fbb; + --color-error-bg-hover: #fdd; + --color-error-text: #9f3a38; + --color-success-border: #a3c293; + --color-success-bg: #fcfff5; + --color-success-text: #2c662d; + --color-warning-border: #c9ba9b; + --color-warning-bg: #fffaf3; + --color-warning-text: #573a08; + --color-info-border: #a9d5de; + --color-info-bg: #f8ffff; + --color-info-text: #276f86; + --color-red-badge: #db2828; + --color-red-badge-bg: #db28281a; + --color-red-badge-hover-bg: #db28284d; + --color-green-badge: #21ba45; + --color-green-badge-bg: #21ba451a; + --color-green-badge-hover-bg: #21ba454d; + --color-yellow-badge: #fbbd08; + --color-yellow-badge-bg: #fbbd081a; + --color-yellow-badge-hover-bg: #fbbd084d; + --color-orange-badge: #f2711c; + --color-orange-badge-bg: #f2711c1a; + --color-orange-badge-hover-bg: #f2711c4d; + --color-git: #f05133; + --color-logo: #003f7f; + /* target-based colors */ + --color-body: #ffffff; + --color-box-header: #f1edd9; + --color-box-body: #ffffff; + --color-box-body-highlight: #f2efde; + --color-text-dark: #222222; + --color-text: #222222; + --color-text-light: #595959; + --color-text-light-1: #6f6f6f; + --color-text-light-2: #858585; + --color-text-light-3: #9c9c9c; + --color-footer: var(--color-nav-bg); + --color-timeline: #d0d7de; + --color-input-text: var(--color-text-dark); + --color-input-background: #fff; + --color-input-toggle-background: #d0d7de; + --color-input-border: var(--color-secondary); + --color-input-border-hover: var(--color-secondary-dark-1); + --color-light: #00001706; + --color-light-mimic-enabled: rgba(0, 0, 0, calc(6 / 255 * 222 / 255 / var(--opacity-disabled))); + --color-light-border: #0000171d; + --color-hover: #00001708; + --color-hover-opaque: #f1f3f5; /* TODO: color-mix(in srgb, var(--color-body), var(--color-hover)); */ + --color-active: #00001714; + --color-menu: #f0ecd8; + --color-card: #f0ecd8; + --color-markup-table-row: #0030600a; + --color-markup-code-block: #00306010; + --color-markup-code-inline: #00306012; + --color-button: #f0ecd8; + --color-code-bg: #f2eedc; + --color-shadow: #00001726; + --color-shadow-opaque: #c7ced5; + --color-secondary-bg: #f1edda; + --color-expand-button: #cfe8fa; + --color-placeholder-text: var(--color-text-light-3); + --color-editor-line-highlight: var(--color-primary-light-6); + --color-project-column-bg: var(--color-secondary-light-4); + --color-caret: var(--color-text-dark); + --color-reaction-bg: #0000170a; + --color-reaction-hover-bg: var(--color-primary-light-5); + --color-reaction-active-bg: var(--color-primary-light-6); + --color-tooltip-text: #fbfdff; + --color-tooltip-bg: #000017f0; + --color-nav-bg: #ede8d0; + --color-nav-hover-bg: #f0ecd8; + --color-nav-text: var(--color-text); + --color-secondary-nav-bg: #efebd6; + --color-label-text: var(--color-text); + --color-label-bg: #949da64b; + --color-label-hover-bg: #949da6a0; + --color-label-active-bg: #949da6ff; + --color-accent: var(--color-primary-light-1); + --color-small-accent: var(--color-primary-light-6); + --color-highlight-fg: #7a5230; + --color-highlight-bg: #fae4b8; + --color-overlay-backdrop: #080808c0; + accent-color: var(--color-accent); + color-scheme: light; +} + +/* CodeCraftsmen brand typography (falls back gracefully if custom fonts are not installed) */ +:root { + --cc-font-body: "Gotham", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji"; + --cc-font-heading: "alro", "Gotham", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial; + --cc-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +html[data-theme="codecraftsmen-light"] #navbar-logo .nav-logo-light { display: inline; } +html[data-theme="codecraftsmen-light"] #navbar-logo .nav-logo-dark { display: none; } + +body, +input, +textarea, +select, +button, +small { + font-family: var(--cc-font-body); +} + +h1, +h2, +h3, +h4, +h5, +h6, +.ui.header, +.page-title, +.repository .ui.header { + font-family: var(--cc-font-heading); + letter-spacing: 0.02em; +} + +code, +pre, +kbd, +samp, +.monospace { + font-family: var(--cc-font-mono); +} diff --git a/public/assets/fonts/GothamNarrow-Medium.woff2 b/public/assets/fonts/GothamNarrow-Medium.woff2 new file mode 100644 index 0000000..dc2cf1d Binary files /dev/null and b/public/assets/fonts/GothamNarrow-Medium.woff2 differ diff --git a/public/assets/fonts/alro-bold-700.woff2 b/public/assets/fonts/alro-bold-700.woff2 new file mode 100644 index 0000000..78896a1 Binary files /dev/null and b/public/assets/fonts/alro-bold-700.woff2 differ diff --git a/public/assets/img/favicon.svg b/public/assets/img/favicon.svg new file mode 100644 index 0000000..6a3d4d4 --- /dev/null +++ b/public/assets/img/favicon.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/logo-dark-no-slogan.svg b/public/assets/img/logo-dark-no-slogan.svg new file mode 100644 index 0000000..22a756a --- /dev/null +++ b/public/assets/img/logo-dark-no-slogan.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/img/logo-dark.svg b/public/assets/img/logo-dark.svg new file mode 100644 index 0000000..d5810a9 --- /dev/null +++ b/public/assets/img/logo-dark.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/logo-light-no-slogan.svg b/public/assets/img/logo-light-no-slogan.svg new file mode 100644 index 0000000..5846408 --- /dev/null +++ b/public/assets/img/logo-light-no-slogan.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/img/logo-light.svg b/public/assets/img/logo-light.svg new file mode 100644 index 0000000..e8ba1d7 --- /dev/null +++ b/public/assets/img/logo-light.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/assets/img/logo.svg b/public/assets/img/logo.svg new file mode 100644 index 0000000..f8d2dd1 --- /dev/null +++ b/public/assets/img/logo.svg @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl new file mode 100644 index 0000000..b2bacc4 --- /dev/null +++ b/templates/base/head_navbar.tmpl @@ -0,0 +1,179 @@ + diff --git a/templates/custom/header.tmpl b/templates/custom/header.tmpl new file mode 100644 index 0000000..9c26ac1 --- /dev/null +++ b/templates/custom/header.tmpl @@ -0,0 +1,7 @@ + + + +