final checks and fixes for launch

This commit is contained in:
Nick Yeoman 2025-12-07 20:33:42 -08:00
parent 08b8009dec
commit e5aadb3b82
15 changed files with 467 additions and 422 deletions

View File

@ -1,12 +1,23 @@
# Sass
Running Sass
## Docker
There is a dockerfile in the sass directory you can build an image with.
```bash
cd sass
docker build -t sass-container .
```
## Running Sass
```bash
sudo docker run --rm -v $(pwd):/usr/src/app -w /usr/src/app sass-container sass novaconium/sass/project.sass novaconium/public/css/novaconium.css
```
Compressed:
```
sudo docker run --rm -v $(pwd):/usr/src/app -w /usr/src/app sass-container sass --style=compressed novaconium/sass/project.sass novaconium/public/css/novaconium.css
```bash
# Build Novaconium (compressed)
docker run --rm -v "$(pwd):/usr/src/app" -w /usr/src/app sass-container --style=compressed sass/novaconium.sass skeleton/novaconium/public/css/novaconium.css
```

12
sass/Dockerfile Normal file
View File

@ -0,0 +1,12 @@
# Use an official Node.js image as a base
FROM node:16-slim
# Install Sass globally
RUN npm install -g sass \
&& npm cache clean --force
# Set working directory inside container
WORKDIR /usr/src/app
# Set entrypoint to Sass CLI
ENTRYPOINT ["sass"]

File diff suppressed because one or more lines are too long

View File

@ -3,59 +3,60 @@
@use '../abstracts' as *
@use '../base' as *
#edit-page-form-novaconium
// Form groups: Spacing
.form-group
margin-bottom: space('md') // 1rem
body.novaconium
#edit-page-form-novaconium
// Form groups: Spacing
.form-group
margin-bottom: space('md') // 1rem
&.fullwidth textarea
width: 100%
resize: vertical
&.fullwidth textarea
width: 100%
resize: vertical
.checkbox-group
margin-top: space('lg') // 1.5rem
.checkbox-group
margin-top: space('lg') // 1.5rem
// Inputs: Dark bg, green focus
input[type="text"],
input[type="number"],
textarea,
select
background-color: color('bg-darker') // Deeper green-black
border: 1px solid color('border-light')
color: $text-light
padding: space('sm')
border-radius: 4px
font-family: 'VT323', $mono-font // Matrix monospace
// Inputs: Dark bg, green focus
input[type="text"],
input[type="number"],
textarea,
select
background-color: color('bg-darker') // Deeper green-black
border: 1px solid color('border-light')
color: $text-light
padding: space('sm')
border-radius: 4px
font-family: 'VT323', $mono-font // Matrix monospace
&:focus
border-color: $accent-light // Lime focus
box-shadow: 0 0 0 space('xs') rgba($accent-light, 0.3) // Glow ring
outline: none
&:focus
border-color: $accent-light // Lime focus
box-shadow: 0 0 0 space('xs') rgba($accent-light, 0.3) // Glow ring
outline: none
input[type="checkbox"]
accent-color: $accent-light // Green checkbox
input[type="checkbox"]
accent-color: $accent-light // Green checkbox
// Submit button: Green primary
button[type="submit"]
background-color: $accent-light
color: color('bg-dark') // Dark text on green
border: none
padding: space('sm') space('md')
border-radius: 4px
cursor: pointer
font-family: 'VT323', $mono-font
// Submit button: Green primary
button[type="submit"]
background-color: $accent-light
color: color('bg-dark') // Dark text on green
border: none
padding: space('sm') space('md')
border-radius: 4px
cursor: pointer
font-family: 'VT323', $mono-font
&:hover, &:focus
background-color: hsl(120, 100%, 30%) // Darker green (35% L -5%)
box-shadow: 0 0 4px rgba($accent-light, 0.5)
&:hover, &:focus
background-color: hsl(120, 100%, 30%) // Darker green (35% L -5%)
box-shadow: 0 0 4px rgba($accent-light, 0.5)
// Text/links: Muted with hover
p
color: $text-muted
// Text/links: Muted with hover
p
color: $text-muted
a
color: $accent-light
a
color: $accent-light
&:hover
color: $text-lighter // Brighter green
text-decoration: underline
&:hover
color: $text-lighter // Brighter green
text-decoration: underline

View File

@ -2,7 +2,7 @@
@use '../abstracts' as *
#login
body.novaconium #login
// No background or borderuse parent's ambient styling
padding: 0 // Or keep minimal if needed; adjust to 2rem if you want internal space
// No centering: left-aligned by default

View File

@ -1,78 +1,79 @@
#biglogo
position: relative
display: inline-block
padding: 20px 0
border-radius: 0 // Keep it sharp, no curves
overflow: hidden
body.novaconium
#biglogo
position: relative
display: inline-block
padding: 20px 0
border-radius: 0 // Keep it sharp, no curves
overflow: hidden
&::before
content: ''
position: absolute
top: 0
left: 0
right: 0
bottom: 0
background-image: linear-gradient(rgba(0, 255, 0, 0.02) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 255, 0, 0.02) 1px, transparent 1px)
background-size: 20px 20px
opacity: 0.1 // Subtle grid/matrix rain hint
pointer-events: none
&::before
content: ''
position: absolute
top: 0
left: 0
right: 0
bottom: 0
background-image: linear-gradient(rgba(0, 255, 0, 0.02) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 255, 0, 0.02) 1px, transparent 1px)
background-size: 20px 20px
opacity: 0.1 // Subtle grid/matrix rain hint
pointer-events: none
// Scan lines for extra flicker
&::after
content: ''
position: absolute
top: 0
left: 0
right: 0
height: 1px
background: linear-gradient(90deg, transparent, #00ff00, transparent)
opacity: 0.05
animation: scan 3s linear infinite
// Scan lines for extra flicker
&::after
content: ''
position: absolute
top: 0
left: 0
right: 0
height: 1px
background: linear-gradient(90deg, transparent, #00ff00, transparent)
opacity: 0.05
animation: scan 3s linear infinite
.main
display: block
font-family: 'Orbitron', sans-serif // Cyberpunk geometric punch
font-size: 4.5rem // Chunky figlet scale
font-weight: 900 // Black weight for max angular depth
color: #fff
letter-spacing: 0.1em // Slightly looser for Orbitron's geometry
line-height: 0.85 // Compact height like figlet blocks
text-transform: uppercase
// Multi-layer shadow to mimic ansishadow's depth: base shadow + edge glow
text-shadow: 4px 4px 0 #222, 5px 5px 0 #111, -1px -1px 0 #00ff00, 1px 1px 20px rgba(0, 255, 0, 0.3) // Main drop shadow, deeper offset, subtle green edge highlight for cyber pop, glow for security flair
filter: drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.8)) // Browser shadow boost
.sub
display: block
font-family: 'Orbitron', sans-serif // Match for cohesion, or swap to monospace if you want contrast
font-size: 2.5rem
font-weight: 700 // Bold but not overpowering
color: #fff
letter-spacing: 0.15em // Wider for emphasis
margin-top: 0.5rem
text-shadow: 2px 2px 0 #222, -1px -1px 0 #00ff00, 1px 1px 10px rgba(0, 255, 0, 0.2) // Lighter shadow, subtle green edge, glow
filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.6))
// Optional: Glitch animation on hover for that hacked feel
&:hover
.main
animation: glitch 0.3s infinite
display: block
font-family: 'Orbitron', sans-serif // Cyberpunk geometric punch
font-size: 4.5rem // Chunky figlet scale
font-weight: 900 // Black weight for max angular depth
color: #fff
letter-spacing: 0.1em // Slightly looser for Orbitron's geometry
line-height: 0.85 // Compact height like figlet blocks
text-transform: uppercase
// Multi-layer shadow to mimic ansishadow's depth: base shadow + edge glow
text-shadow: 4px 4px 0 #222, 5px 5px 0 #111, -1px -1px 0 #00ff00, 1px 1px 20px rgba(0, 255, 0, 0.3) // Main drop shadow, deeper offset, subtle green edge highlight for cyber pop, glow for security flair
filter: drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.8)) // Browser shadow boost
@keyframes scan
0%
top: -1px
100%
top: 100%
.sub
display: block
font-family: 'Orbitron', sans-serif // Match for cohesion, or swap to monospace if you want contrast
font-size: 2.5rem
font-weight: 700 // Bold but not overpowering
color: #fff
letter-spacing: 0.15em // Wider for emphasis
margin-top: 0.5rem
text-shadow: 2px 2px 0 #222, -1px -1px 0 #00ff00, 1px 1px 10px rgba(0, 255, 0, 0.2) // Lighter shadow, subtle green edge, glow
filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.6))
@keyframes glitch
0%, 100%
transform: translate(0)
20%
transform: translate(-2px, 2px)
40%
transform: translate(-2px, -2px)
60%
transform: translate(2px, 2px)
80%
transform: translate(2px, -2px)
// Optional: Glitch animation on hover for that hacked feel
&:hover
.main
animation: glitch 0.3s infinite
@keyframes scan
0%
top: -1px
100%
top: 100%
@keyframes glitch
0%, 100%
transform: translate(0)
20%
transform: translate(-2px, 2px)
40%
transform: translate(-2px, -2px)
60%
transform: translate(2px, 2px)
80%
transform: translate(2px, -2px)

View File

@ -3,59 +3,60 @@
@use '../abstracts' as *
@use '../base' as *
// Main page wrapper: Centered flex
#page .container
display: flex
padding: 0
justify-content: center
align-items: flex-start
padding-top: space('lg')
// Article content: Fixed width, no shrink
article
width: 1140px
flex-shrink: 0
padding: 3rem
margin: 0
background-color: $bg-dark
border: 1px solid $bg-darker
ul#leftnav
width: 320px
flex-shrink: 0
list-style: none
padding: 0
margin: 0 space('xl') 0 0 // Right margin preserved (overrides the 0 for other sides)
background-color: $bg-dark
border: 1px solid $bg-darker
#leftnav li
border-bottom: 1px solid color('border-light')
&:last-child
border-bottom: none
#leftnav a
display: block
padding: space('sm') space('md') // Consistent spacing
text-decoration: none
color: $text-light // Theme text
&:hover, &:focus
background-color: rgba($accent-light, 0.1) // Green hover tint
color: $accent-light // Accent on hover
border-radius: 4px
// Responsive: Stack on mobile (add to themes/ for media queries)
@media (max-width: 1280px) // Your xl breakpoint
body.novaconium
// Main page wrapper: Centered flex
#page .container
flex-direction: column
align-items: center
display: flex
padding: 0
justify-content: center
align-items: flex-start
padding-top: space('lg')
article, #leftnav
width: 100%
max-width: 900px
margin: space('md') 0
// Article content: Fixed width, no shrink
article
width: 1140px
flex-shrink: 0
padding: 3rem
margin: 0
background-color: $bg-dark
border: 1px solid $bg-darker
#leftnav
margin-right: 0
ul#leftnav
width: 320px
flex-shrink: 0
list-style: none
padding: 0
margin: 0 space('xl') 0 0 // Right margin preserved (overrides the 0 for other sides)
background-color: $bg-dark
border: 1px solid $bg-darker
#leftnav li
border-bottom: 1px solid color('border-light')
&:last-child
border-bottom: none
#leftnav a
display: block
padding: space('sm') space('md') // Consistent spacing
text-decoration: none
color: $text-light // Theme text
&:hover, &:focus
background-color: rgba($accent-light, 0.1) // Green hover tint
color: $accent-light // Accent on hover
border-radius: 4px
// Responsive: Stack on mobile (add to themes/ for media queries)
@media (max-width: 1280px) // Your xl breakpoint
#page .container
flex-direction: column
align-items: center
article, #leftnav
width: 100%
max-width: 900px
margin: space('md') 0
#leftnav
margin-right: 0

View File

@ -3,46 +3,47 @@
@use '../abstracts' as *
@use 'sass:color' // For color.adjust()non-deprecated color tweaks
// Simplified tab styling: Square borders, no rounds
.tab-container
margin: space('lg') auto
background: $bg-dark
body.novaconium
// Simplified tab styling: Square borders, no rounds
.tab-container
margin: space('lg') auto
background: $bg-dark
.tab-nav
display: flex
background-color: $bg-darker
border-bottom: 1px solid $border-light
.tab-nav
display: flex
background-color: $bg-darker
border-bottom: 1px solid $border-light
.tab-button
padding: space('sm') space('md')
background: $bg-darker
border: 1px solid $border-light
border-bottom: none
cursor: pointer
font-size: 14px
min-width: 120px // Makes them more square/equal
text-align: center
color: $text-light
font-family: $mono-font // From vars
.tab-button
padding: space('sm') space('md')
background: $bg-darker
border: 1px solid $border-light
border-bottom: none
cursor: pointer
font-size: 14px
min-width: 120px // Makes them more square/equal
text-align: center
color: $text-light
font-family: $mono-font // From vars
&:hover
background-color: color.adjust($bg-darker, $lightness: 5%) // Modern, non-deprecated lighten equivalent
&:hover
background-color: color.adjust($bg-darker, $lightness: 5%) // Modern, non-deprecated lighten equivalent
+ .tab-button
border-left: none // Shared borders
+ .tab-button
border-left: none // Shared borders
&.active
&.active
background-color: $bg-dark
border-bottom: 2px solid $accent-light
color: $accent-light
font-weight: bold
.tab-content
display: none
padding: space('lg')
background-color: $bg-dark
border-bottom: 2px solid $accent-light
color: $accent-light
font-weight: bold
color: $text-light
border: none
.tab-content
display: none
padding: space('lg')
background-color: $bg-dark
color: $text-light
border: none
&.active
display: block
&.active
display: block

View File

@ -2,107 +2,108 @@
@use 'sass:color' // For color.adjust()non-deprecated color tweaks
@use '../base' as *
// Tags Dropdown
.tags-dropdown
position: absolute
top: 100%
left: 0
right: 0
max-height: 200px
overflow-y: auto
background: $bg-darker
border: 1px solid $border-light
border-top: none
border-radius: 0 0 4px 4px
list-style: none
margin: 0
padding: 0
z-index: 10
opacity: 0
visibility: hidden
transition: opacity 0.2s
&[aria-expanded="true"]
opacity: 1
visibility: visible
li
padding: space('xs') space('sm')
cursor: pointer
color: $text-light
font-size: 14px
border-bottom: 1px solid transparent
&:hover,
&.selected
background: color.adjust($accent-light, $alpha: -0.1)
color: $accent-light
&:last-child
border-bottom: none
.tags-input
position: relative // For absolute dropdown
// Tags Input
.tags-input
display: flex
flex-wrap: wrap
gap: space('xs')
align-items: center
border: 1px solid $border-light
padding: space('xs')
background: $bg-darker
min-height: 40px
grid-column: 2 // Spans input area in .form-row grid
input
border: none
background: transparent
color: $text-light
font-family: $mono-font
font-size: 14px
flex: 1
min-width: 100px
outline: none
&::placeholder
color: $text-muted
.tag-chip
display: inline-flex
align-items: center
background: color.adjust($accent-light, $alpha: -0.2)
color: $accent-light
padding: space('xs') space('sm')
border-radius: 4px
font-size: 12px
max-width: 150px
overflow: hidden
text-overflow: ellipsis
white-space: nowrap
.tag-remove
background: none
border: none
color: inherit
font-size: 16px
margin-left: space('xs')
cursor: pointer
body.novaconium
// Tags Dropdown
.tags-dropdown
position: absolute
top: 100%
left: 0
right: 0
max-height: 200px
overflow-y: auto
background: $bg-darker
border: 1px solid $border-light
border-top: none
border-radius: 0 0 4px 4px
list-style: none
margin: 0
padding: 0
line-height: 1
z-index: 10
opacity: 0
visibility: hidden
transition: opacity 0.2s
&:hover
opacity: 0.7
&[aria-expanded="true"]
opacity: 1
visibility: visible
// Tags Autocomplete (native datalist styling)
.tags-input input[list]
// Existing input styles apply...
li
padding: space('xs') space('sm')
cursor: pointer
color: $text-light
font-size: 14px
border-bottom: 1px solid transparent
#tag-suggestions
// Native datalist not directly stylable, but options can be influenced via input focus
// For custom polyfill, add JS-generated <ul>, but native is fine for now
&:hover,
&.selected
background: color.adjust($accent-light, $alpha: -0.1)
color: $accent-light
// Browser-specific tweaks (Chrome/Firefox)
.tags-input input[list]::-webkit-calendar-picker-indicator
display: none // Hide arrow if interfering
&:last-child
border-bottom: none
.tags-input
position: relative // For absolute dropdown
// Tags Input
.tags-input
display: flex
flex-wrap: wrap
gap: space('xs')
align-items: center
border: 1px solid $border-light
padding: space('xs')
background: $bg-darker
min-height: 40px
grid-column: 2 // Spans input area in .form-row grid
input
border: none
background: transparent
color: $text-light
font-family: $mono-font
font-size: 14px
flex: 1
min-width: 100px
outline: none
&::placeholder
color: $text-muted
.tag-chip
display: inline-flex
align-items: center
background: color.adjust($accent-light, $alpha: -0.2)
color: $accent-light
padding: space('xs') space('sm')
border-radius: 4px
font-size: 12px
max-width: 150px
overflow: hidden
text-overflow: ellipsis
white-space: nowrap
.tag-remove
background: none
border: none
color: inherit
font-size: 16px
margin-left: space('xs')
cursor: pointer
padding: 0
line-height: 1
&:hover
opacity: 0.7
// Tags Autocomplete (native datalist styling)
.tags-input input[list]
// Existing input styles apply...
#tag-suggestions
// Native datalist not directly stylable, but options can be influenced via input focus
// For custom polyfill, add JS-generated <ul>, but native is fine for now
// Browser-specific tweaks (Chrome/Firefox)
.tags-input input[list]::-webkit-calendar-picker-indicator
display: none // Hide arrow if interfering

View File

@ -2,46 +2,47 @@
@use '../base' as *
@use 'sass:color' // Already there for adjusts
// Tooltip styling (mouse-follow version)
.tooltip
position: relative
display: inline-block
cursor: help
font-size: 16px
color: $accent-light // Green accent for ?
margin-left: space('xs') // 0.25rem
top: 2px
body.novaconium
// Tooltip styling (mouse-follow version)
.tooltip
position: relative
display: inline-block
cursor: help
font-size: 16px
color: $accent-light // Green accent for ?
margin-left: space('xs') // 0.25rem
top: 2px
.tooltiptext
visibility: hidden
width: 200px
background-color: $bg-darker // Darker bg
color: $text-light // White text
text-align: left // Changed to left-align for better readability
border-radius: 0 // Square
padding: space('sm') // 0.5rem
position: fixed // Fixed to viewport, updated by JS
z-index: z('dropdown') // High z-index
opacity: 0
transition: opacity 0.3s
font-size: 14px
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2) // Subtle shadow
pointer-events: none // Prevents mouse interference with tooltip
.tooltiptext
visibility: hidden
width: 200px
background-color: $bg-darker // Darker bg
color: $text-light // White text
text-align: left // Changed to left-align for better readability
border-radius: 0 // Square
padding: space('sm') // 0.5rem
position: fixed // Fixed to viewport, updated by JS
z-index: z('dropdown') // High z-index
opacity: 0
transition: opacity 0.3s
font-size: 14px
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2) // Subtle shadow
pointer-events: none // Prevents mouse interference with tooltip
&::after
content: ""
position: absolute
top: -5px // Arrow above tooltip (points up to mouse)
left: 10px // Slight indent from left edge
border-width: 5px
border-style: solid
border-color: $bg-darker transparent transparent transparent // Upward arrow
&::after
content: ""
position: absolute
top: -5px // Arrow above tooltip (points up to mouse)
left: 10px // Slight indent from left edge
border-width: 5px
border-style: solid
border-color: $bg-darker transparent transparent transparent // Upward arrow
&:hover .tooltiptext
visibility: visible
opacity: 1
&:hover .tooltiptext
visibility: visible
opacity: 1
// Accessibility: Hidden tooltip text for screen readers
.tooltip-desc
position: absolute
left: -9999px
// Accessibility: Hidden tooltip text for screen readers
.tooltip-desc
position: absolute
left: -9999px

View File

@ -3,56 +3,57 @@
@use '../abstracts' as *
@use '../base' as *
// Code blocks: Monospace lock-in with darker green tint
code
font-family: 'VT323', $mono-font // Prioritize Matrix font
font-size: 0.875rem // Smaller for inline; reset has base
background-color: color('bg-darker') // Deeper green-black
color: $text-light // Lighter green text
padding: space('xs') space('sm')
border-radius: 4px
border: 1px solid color('border-light')
box-shadow: 0 0 2px rgba($accent-light, 0.1) // Subtle glow
// Utility: Small text (if still needed; consider rem-based)
.small
font-size: 0.625rem // 10px equiv; use sparingly
// Error/notice divs: Centered alerts with theme colors
div.error, div.notice, div#debug
margin: space('xl') auto // Top/bottom spacing from map
width: 900px // Fixed width; add media query for mobile later
padding: space('lg') // Generous padding
border-radius: 6px
border: 1px solid
div.error
background-color: rgba(color('accent-error'), 0.1) // Subtle red tint
color: color('accent-error') // Darker red text
border-color: color('accent-error')
div.notice
background-color: rgba(color('accent-success'), 0.1) // Green tint
color: color('accent-success') // Heavier green text
border-color: color('accent-success')
div#debug
background-color: color('bg-darker') // Deeper bg for debug
color: $text-muted // Muted green
border-color: color('border-light')
margin-top: space('2xl')
margin-bottom: space('2xl')
// Tables: Simplified; reset handles collapse/padding
.pages-table
width: 100%
border: 1px solid color('border-light') // Green border
th, td
body.novaconium
// Code blocks: Monospace lock-in with darker green tint
code
font-family: 'VT323', $mono-font // Prioritize Matrix font
font-size: 0.875rem // Smaller for inline; reset has base
background-color: color('bg-darker') // Deeper green-black
color: $text-light // Lighter green text
padding: space('xs') space('sm')
border-radius: 4px
border: 1px solid color('border-light')
text-align: left
box-shadow: 0 0 2px rgba($accent-light, 0.1) // Subtle glow
th
background-color: rgba($accent-light, 0.05) // Subtle accent bg
color: $text-lighter // Header green
font-weight: 600 // Semi-bold; no bold in monospace
// Utility: Small text (if still needed; consider rem-based)
.small
font-size: 0.625rem // 10px equiv; use sparingly
// Error/notice divs: Centered alerts with theme colors
div.error, div.notice, div#debug
margin: space('xl') auto // Top/bottom spacing from map
width: 900px // Fixed width; add media query for mobile later
padding: space('lg') // Generous padding
border-radius: 6px
border: 1px solid
div.error
background-color: rgba(color('accent-error'), 0.1) // Subtle red tint
color: color('accent-error') // Darker red text
border-color: color('accent-error')
div.notice
background-color: rgba(color('accent-success'), 0.1) // Green tint
color: color('accent-success') // Heavier green text
border-color: color('accent-success')
div#debug
background-color: color('bg-darker') // Deeper bg for debug
color: $text-muted // Muted green
border-color: color('border-light')
margin-top: space('2xl')
margin-bottom: space('2xl')
// Tables: Simplified; reset handles collapse/padding
.pages-table
width: 100%
border: 1px solid color('border-light') // Green border
th, td
border: 1px solid color('border-light')
text-align: left
th
background-color: rgba($accent-light, 0.05) // Subtle accent bg
color: $text-lighter // Header green
font-weight: 600 // Semi-bold; no bold in monospace

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"sourceRoot":"","sources":["../../../../sass/abstracts/_variables.sass","../../../../sass/base/_reset.sass","../../../../sass/base/_background.sass","../../../../sass/framework/_main.sass","../../../../sass/framework/_ui.sass","../../../../sass/framework/_forms.sass","../../../../sass/framework/_login_form.sass","../../../../sass/framework/_logo.sass","../../../../sass/framework/_tabs.sass","../../../../sass/framework/_edit_page.sass","../../../../sass/framework/_tooltip.sass","../../../../sass/framework/_ace.sass","../../../../sass/framework/_tags.sass"],"names":[],"mappings":"CAoEA,MACE,0BACA,8BACA,+BACA,mCACA,iCACA,oCACA,qCACA,qCACA,kCACA,yCACA,8CC1EF,EACE,sBAEF,KACE,eACA,gBACA,uBACA,iBDWQ,aCVR,MDYW,KCVb,KACE,SACA,UACA,YDgBW,kCCfX,iBDIQ,aCHR,MDKW,KCJX,iBAGF,kBACE,gBACA,gBACA,gBACA,qBAEF,GACE,iBAEF,GACE,eAEF,GACE,kBAEF,GACE,iBAEF,GACE,kBAEF,GACE,eAGF,EACE,eAEF,MACE,kBAEF,SACE,gBAEF,KACE,kBAGF,EACE,MDnCa,eCoCb,qBACA,sCACA,iCAEA,gBACE,oBDzCW,eC0CX,aAGJ,MACE,eACA,mBAEF,GACE,oBAGF,WACE,aACA,iBACA,qCACA,kCACA,MD7DW,KCgEb,cACE,YDvDU,uDCwDV,iBACA,oCACA,qBACA,kBAEF,IACE,aACA,YACA,cACA,oCACA,kBACA,SACE,gBACA,UAGJ,MACE,WACA,yBACA,aAEF,MACE,cACA,gBACA,2CAEF,GACE,gBAGF,6BACE,oBACA,kBACA,oCACA,MDpGW,KCqGX,oCACA,kBACA,aAEA,qDACE,aACA,aDxGW,eCyGX,wCAEJ,OACE,eACA,qCAEA,gBACE,WACA,mBAGJ,IACE,eACA,YACA,kBAEF,OACE,aAGF,GACE,YACA,WACA,oCACA,aAGF,gBACE,iCACA,mBAGF,aACE,KACE,2BACA,uBAEJ,YACE,8BACA,MDnJW,KCsJb,kBACE,8BACA,MDxJW,KEtBb,gBACI,sBACA,0uKCEF,iCACE,aACA,UACA,uBACA,uBACA,mBAGF,wBACE,aACA,cACA,aACA,SACA,iBHGM,aGFN,gCAEF,2BACE,YACA,cACA,gBACA,UACA,oBACA,iBHNM,aGON,gCAEF,4BACE,6CAEA,uCACE,mBAEJ,2BACE,cACA,mBACA,qBACA,MHjBS,KGmBT,kEACE,oCACA,MHlBS,eGmBT,kBAGJ,0BACE,iCACE,sBACA,mBAEF,iDACE,WACA,gBACA,cAEF,yBACE,gBCtDJ,qBACE,2EACA,kBACA,gCACA,MJcS,KIbT,qBACA,kBACA,sCACA,sCAGF,uBACE,kBAGF,+EACE,mBACA,YACA,eACA,kBACA,iBAEF,0BACE,oCACA,qBACA,4BAEF,2BACE,sCACA,uBACA,8BAEF,0BACE,gCACA,MJdS,iBIeT,kCACA,gBACA,mBAGF,6BACE,WACA,sCAEA,gEACE,sCACA,gBAEF,gCACE,qCACA,MJ/BS,iBIgCT,gBClDF,uDACE,mBAEA,0EACE,WACA,gBAEJ,2DACE,kBAGF,gOAIE,gCACA,sCACA,WACA,cACA,kBACA,2EAEA,wPACE,aLHO,eKIP,2CACA,aAEJ,gEACE,aLRS,eKWX,+DACE,iBLZS,eKaT,mBACA,YACA,mBACA,kBACA,eACA,2EAEA,0IACE,sBACA,sCAGJ,6CACE,ML3BO,iBK6BT,6CACE,ML7BS,eK+BT,mDACE,MLlCO,iBKmCP,0BCzDR,uBAEE,UAIA,+HAGE,WACA,gBACA,aACA,mBACA,sBACA,eACA,sCACA,kBACA,WNEM,aMDN,MNGS,6CMCT,uUACA,4BACA,gCACA,qBACA,kBAEF,4CACE,iVACA,4BACA,gCACA,qBACA,kBAEF,2CACE,WNZW,eMaX,aNbW,eMcX,eACA,0BAEA,iDACE,WNlBS,eMmBT,uCAGF,kDACE,aACA,kBCnDJ,yBACE,kBACA,qBACA,eACA,gBACA,gBAEA,iCACE,WACA,kBACA,MACA,OACA,QACA,SACA,gJACA,0BACA,WACA,oBAGF,gCACE,WACA,kBACA,MACA,OACA,QACA,WACA,qEACA,YACA,kCAEF,+BACE,cACA,kCACA,iBACA,gBACA,WACA,oBACA,gBACA,yBAGA,yFACA,mDAEF,8BACE,cACA,kCACA,iBACA,gBACA,WACA,qBACA,iBACA,0EACA,mDAIA,qCACE,8BAEN,gBACE,GACE,SACF,KACE,UAEJ,kBACE,QACE,uBACF,IACE,+BACF,IACE,gCACF,IACE,8BACF,IACE,gCCvEJ,+BACE,mBACA,WRcM,aQZR,yBACE,aACA,iBRWQ,eQVR,6CAEF,4BACE,mBACA,WRMQ,eQLR,sCACA,mBACA,eACA,eACA,gBACA,kBACA,WACA,YRSQ,uDQPR,kCACE,iCAEF,wCACE,iBAEF,mCACE,iBRZI,aQaJ,uCACA,MRTS,eQUT,iBAEJ,6BACE,aACA,eACA,iBRpBM,aQqBN,MRnBS,KQoBT,YAEA,oCACE,cC5CN,iBACI,gBAEA,wBACI,WACA,iBACA,aAEJ,qBACI,gBACA,oBCRN,yBACE,kBACA,qBACA,YACA,eACA,MViBW,eUhBX,mBACA,QAEA,sCACE,kBACA,YACA,iBVMM,eULN,MVMO,KULP,gBACA,gBACA,cACA,eACA,aACA,UACA,uBACA,eACA,oCACA,oBAEA,6CACE,WACA,kBACA,SACA,UACA,iBACA,mBACA,sEAEJ,4CACE,mBACA,UAGJ,8BACE,kBACA,aC1CJ,kBACE,WACA,iBAEF,YACE,aACA,gCACA,YXuBU,uDWpBV,wBACE,qCACA,kCACA,iDAEF,0BACE,mCAEF,8CACE,oCAGF,6CACE,yCCtBF,+BACE,kBACA,SACA,OACA,QACA,iBACA,gBACA,WZWQ,eYVR,sCACA,gBACA,0BACA,gBACA,SACA,UACA,WACA,UACA,kBACA,uBAEA,mDACE,UACA,mBAEF,kCACE,qBACA,eACA,MZPO,KYQP,eACA,sCAEA,mFAEE,8BACA,MZXO,eYaT,6CACE,mBAEN,4BACE,kBAGF,4BACE,aACA,eACA,WACA,mBACA,sCACA,eACA,WZ/BQ,eYgCR,gBACA,cAEA,kCACE,YACA,yBACA,MZrCO,KYsCP,YZ5BM,uDY6BN,eACA,OACA,gBACA,aAEA,+CACE,MZ3CK,iBY6CX,0BACE,oBACA,mBACA,8BACA,MZhDW,eYiDX,qBACA,kBACA,eACA,gBACA,gBACA,uBACA,mBAEA,sCACE,gBACA,YACA,cACA,eACA,mBACA,eACA,UACA,cAEA,4CACE,WAWN,2EACE","file":"novaconium.css"}

View File

@ -17,7 +17,7 @@
{# DARK MODE & THEME HINTS #}
<meta name="color-scheme" content="dark">
<meta name="theme-color" content="#FFFFFF">
<meta name="theme-color" content="#000000">
{# OPEN GRAPH (OG) FOR SOCIAL SHARING #}
<meta property="og:title" content="{{ title | default('Welcome') }}">
@ -28,16 +28,23 @@
{# PWA & FAVICONS #}
<link rel="manifest" href="site.webmanifest">
<link rel="apple-touch-icon" href="/icon.png">
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'><rect width='32' height='32' fill='%23000'/><text x='16' y='22' font-family='Orbitron,monospace' font-size='20' fill='%2300ff00' text-anchor='middle' dominant-baseline='middle'>N</text><circle cx='16' cy='16' r='2' fill='%2300ff00'/></svg>">
<link rel="icon" type="image/png" sizes="32x32" href="/path/to/favicon-32x32.png"> <!-- Fallback if needed -->
<link rel="icon" type="image/x-icon" href="/favicon.ico">
{# GOOGLE FONTS (CDN VIA PRECONNECT) #}
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="{{ fonts | default('https://fonts.googleapis.com/css2?family=VT323:wght@400&family=Fira+Code:wght@400;500&display=swap&family=Material+Icons:wght@400;500&display=swap') }}" rel="stylesheet">
<link
href="{{ fonts | default('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&family=Roboto+Mono&family=Source+Code+Pro&family=Lato&family=Poppins&family=Material+Icons&family=Material+Icons+Outlined&family=VT323:wght@400&family=Fira+Code:wght@400;500&display=swap') }}"
rel="stylesheet"
>
{# STYLESHEET #}
<link rel="stylesheet" href="/css/novaconium.css">
{% if pageclass == "novaconium" %}
<link rel="stylesheet" href="/css/novaconium.css">
{% else %}
<link rel="stylesheet" href="/css/main.css">
{% endif %}
{% if editor == 'ace' %}
<!-- ACE Editor -->
@ -47,4 +54,10 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.35.2/theme-tomorrow_night.min.js"></script> {# Dark theme #}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.35.2/ext-language_tools.min.js"></script> {# Autocomplete #}
<!-- END ACE Editor -->
{% endif %}
{% endif %}
{# highlight.js #}
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/ir-black.min.css">

View File

@ -1,15 +1,16 @@
<div class="left">
<ul id="leftnav">
<li><a href="/">Home</a></li>
{% if username is not empty %}
<li><a href="/novaconium/dashboard">Dashboard</a></li>
<li><a href="/novaconium/pages">Pages</a></li>
<li><a href="/novaconium/messages">Messages</a></li>
{% endif %}
{% if username is not empty %}
<li><a href="/novaconium/logout">Logout</a></li>
{% else %}
<li><a href="/novaconium/login">Login</a></li>
{% endif %}
</ul>
</div>
{% if pageclass == "novaconium" %}
<ul id="leftnav">
<li><a href="/">Home</a></li>
{% if username is not empty %}
<li><a href="/novaconium/dashboard">Dashboard</a></li>
<li><a href="/novaconium/pages">Pages</a></li>
<li><a href="/novaconium/messages">Messages</a></li>
<li><a href="/novaconium/logout">Logout</a></li>
{% else %}
<li><a href="/novaconium/login">Login</a></li>
{% endif %}
</ul>
{% endif %}
</div>