2026-03-07 23:27:25 -06:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
< title > CPAS Tracker — Demo Preview</ title >
< link rel = "preconnect" href = "https://fonts.googleapis.com" >
< link href = "https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Syne:wght@700;800&family=Inter:wght@300;400;500;600;700&display=swap" rel = "stylesheet" >
< style >
*, * :: before , * :: after { box-sizing : border-box ; margin : 0 ; padding : 0 ; }
: root {
2026-03-08 00:19:59 -06:00
--gold : #d4af37 ;
--gold-lt : #ffdf8a ;
--gold-dk : #a88520 ;
--bg : #050608 ;
--bg-nav : #000000 ;
--bg-card : #111217 ;
--bg-section : #181924 ;
--border : #222 ;
--border-lt : #2a2b3a ;
--text : #f8f9fa ;
--text-muted : #9ca0b8 ;
--text-dim : #d1d3e0 ;
--green : #28a745 ;
--green-bg : #d4edda ;
--yellow : #856404 ;
--yellow-bg : #fff3cd ;
--red : #d9534f ;
--red-bg : #f8d7da ;
--red-dk : #721c24 ;
--red-dk-bg : #f5c6cb ;
--sep : #721c24 ;
2026-03-07 23:27:25 -06:00
}
html { scroll-behavior : smooth ; }
body {
background : var ( -- bg );
color : var ( -- text );
font-family : 'Inter' , sans-serif ;
min-height : 100 vh ;
overflow-x : hidden ;
}
/* ── DEMO BANNER ── */
. demo-banner {
background : linear-gradient ( 90 deg , #1a1200 0 % , #2a1f00 50 % , #1a1200 100 % );
border-bottom : 1 px solid var ( -- gold - dk );
padding : 8 px 40 px ;
display : flex ;
align-items : center ;
justify-content : center ;
gap : 10 px ;
font-family : 'DM Mono' , monospace ;
font-size : 11 px ;
color : var ( -- gold - lt );
letter-spacing : 0.8 px ;
position : sticky ;
top : 0 ;
z-index : 1000 ;
}
. demo-banner . dot {
width : 6 px ; height : 6 px ; border-radius : 50 % ;
background : var ( -- gold );
animation : pulse 2 s infinite ;
}
@ keyframes pulse {
0 %, 100 % { opacity : 1 ; transform : scale ( 1 ); }
50 % { opacity : 0.4 ; transform : scale ( 0.7 ); }
}
/* ── NAV ── */
nav {
background : var ( -- bg - nav );
padding : 0 40 px ;
display : flex ;
align-items : center ;
gap : 0 ;
border-bottom : 1 px solid #333 ;
position : sticky ;
top : 33 px ;
z-index : 999 ;
}
. logo-wrap {
display : flex ; align-items : center ;
margin-right : 32 px ; padding : 14 px 0 ;
gap : 10 px ;
}
. logo-icon {
width : 28 px ; height : 28 px ;
background : linear-gradient ( 135 deg , var ( -- gold ), var ( -- gold - lt ));
border-radius : 6 px ;
display : flex ; align-items : center ; justify-content : center ;
font-size : 14 px ; font-weight : 900 ; color : #000 ;
font-family : 'Syne' , sans-serif ;
flex-shrink : 0 ;
}
. logo-text {
color : var ( -- text );
font-weight : 800 ;
font-size : 18 px ;
letter-spacing : 0.5 px ;
font-family : 'Syne' , sans-serif ;
}
. nav-tab {
padding : 18 px 22 px ;
color : rgba ( 248 , 249 , 250 , 0.55 );
border-bottom : 3 px solid transparent ;
cursor : pointer ;
font-weight : 400 ;
font-size : 14 px ;
background : none ;
border-top : none ; border-left : none ; border-right : none ;
transition : color 0.2 s ;
text-decoration : none ;
display : inline-block ;
}
. nav-tab . active {
color : var ( -- text );
border-bottom-color : var ( -- gold );
font-weight : 700 ;
}
. nav-tab : hover { color : var ( -- text ); }
. nav-docs {
margin-left : auto ;
background : none ;
border : 1 px solid var ( -- border - lt );
color : var ( -- text - muted );
border-radius : 6 px ;
padding : 6 px 14 px ;
font-size : 12 px ;
cursor : pointer ;
font-weight : 600 ;
}
/* ── MAIN LAYOUT ── */
. main {
max-width : 1100 px ;
margin : 30 px auto ;
padding : 0 20 px 60 px ;
}
/* ── HERO ── */
. hero {
background : var ( -- bg - card );
border-radius : 10 px ;
border : 1 px solid var ( -- border );
padding : 48 px 48 px 40 px ;
margin-bottom : 24 px ;
position : relative ;
overflow : hidden ;
}
. hero :: before {
content : '' ;
position : absolute ;
top : 0 ; left : 0 ; right : 0 ;
height : 3 px ;
background : linear-gradient ( 90 deg , transparent , var ( -- gold ), var ( -- gold - lt ), var ( -- gold ), transparent );
}
. hero :: after {
content : 'DEMO' ;
position : absolute ;
top : 20 px ; right : 24 px ;
font-family : 'DM Mono' , monospace ;
font-size : 10 px ;
letter-spacing : 2 px ;
color : var ( -- gold - dk );
border : 1 px solid var ( -- gold - dk );
padding : 2 px 8 px ;
border-radius : 3 px ;
}
. hero-eyebrow {
font-family : 'DM Mono' , monospace ;
font-size : 11 px ;
letter-spacing : 2 px ;
color : var ( -- gold );
text-transform : uppercase ;
margin-bottom : 14 px ;
}
. hero h1 {
font-family : 'Syne' , sans-serif ;
font-size : 36 px ;
font-weight : 800 ;
color : var ( -- text );
line-height : 1.1 ;
margin-bottom : 14 px ;
}
. hero h1 span { color : var ( -- gold ); }
. hero p {
font-size : 15 px ;
color : var ( -- text - dim );
max-width : 580 px ;
line-height : 1.7 ;
margin-bottom : 28 px ;
}
. hero-stats {
display : flex ;
gap : 32 px ;
flex-wrap : wrap ;
}
. hero-stat {
display : flex ; flex-direction : column ; gap : 3 px ;
}
. hero-stat . val {
font-family : 'Syne' , sans-serif ;
font-size : 28 px ;
font-weight : 800 ;
color : var ( -- gold - lt );
line-height : 1 ;
}
. hero-stat . lbl {
font-size : 11 px ;
color : var ( -- text - muted );
letter-spacing : 0.5 px ;
text-transform : uppercase ;
font-family : 'DM Mono' , monospace ;
}
. hero-stat-divider {
width : 1 px ; background : var ( -- border - lt );
align-self : stretch ; margin : 4 px 0 ;
}
/* ── SECTION TITLE ── */
. section-header {
display : flex ;
align-items : center ;
justify-content : space-between ;
margin-bottom : 16 px ;
}
. section-title {
font-family : 'Syne' , sans-serif ;
font-size : 13 px ;
font-weight : 700 ;
text-transform : uppercase ;
letter-spacing : 1.5 px ;
color : var ( -- text - muted );
display : flex ;
align-items : center ;
gap : 8 px ;
}
. section-title :: before {
content : '' ;
display : block ;
width : 3 px ; height : 14 px ;
background : var ( -- gold );
border-radius : 2 px ;
}
/* ── KPI CARDS ROW ── */
. kpi-row {
display : grid ;
grid-template-columns : repeat ( 4 , 1 fr );
gap : 14 px ;
margin-bottom : 24 px ;
}
. kpi-card {
background : var ( -- bg - card );
border : 1 px solid var ( -- border );
border-radius : 10 px ;
padding : 20 px 22 px ;
position : relative ;
overflow : hidden ;
transition : border-color 0.2 s , transform 0.15 s ;
}
. kpi-card : hover { border-color : var ( -- border - lt ); transform : translateY ( -1 px ); }
. kpi-card . kpi-label {
font-size : 11 px ;
font-family : 'DM Mono' , monospace ;
letter-spacing : 0.8 px ;
color : var ( -- text - muted );
text-transform : uppercase ;
margin-bottom : 10 px ;
}
. kpi-card . kpi-val {
font-family : 'Syne' , sans-serif ;
font-size : 32 px ;
font-weight : 800 ;
color : var ( -- text );
line-height : 1 ;
margin-bottom : 6 px ;
}
. kpi-card . kpi-sub { font-size : 11 px ; color : var ( -- text - muted ); }
. kpi-card . kpi-accent { position : absolute ; bottom : 0 ; left : 0 ; right : 0 ; height : 3 px ; }
. kpi-accent-gold { background : linear-gradient ( 90 deg , var ( -- gold - dk ), var ( -- gold )); }
. kpi-accent-red { background : linear-gradient ( 90 deg , #a02020 , #e74c3c ); }
. kpi-accent-blue { background : linear-gradient ( 90 deg , #1a3a6a , #3b82f6 ); }
. kpi-accent-green { background : linear-gradient ( 90 deg , #0a3d20 , #28a745 ); }
/* ── TWO COLUMNS ── */
. two-col {
display : grid ;
grid-template-columns : 1 fr 1 fr ;
gap : 20 px ;
margin-bottom : 24 px ;
}
. panel {
background : var ( -- bg - card );
border : 1 px solid var ( -- border );
border-radius : 10 px ;
overflow : hidden ;
}
. panel-head {
background : var ( -- bg - section );
border-bottom : 1 px solid var ( -- border );
padding : 14 px 20 px ;
display : flex ;
align-items : center ;
justify-content : space-between ;
}
. panel-title {
font-size : 13 px ; font-weight : 700 ;
color : var ( -- text ); font-family : 'Syne' , sans-serif ;
}
/* ── EMPLOYEE TABLE ── */
. emp-table { width : 100 % ; border-collapse : collapse ; font-size : 13 px ; }
. emp-table th {
padding : 10 px 16 px ; text-align : left ;
font-size : 10 px ; font-family : 'DM Mono' , monospace ;
letter-spacing : 1 px ; text-transform : uppercase ;
color : var ( -- text - muted ); border-bottom : 1 px solid var ( -- border );
background : var ( -- bg - section );
}
. emp-table td { padding : 11 px 16 px ; border-bottom : 1 px solid #18191f ; vertical-align : middle ; }
. emp-table tr : last-child td { border-bottom : none ; }
. emp-table tr : hover td { background : rgba ( 255 , 255 , 255 , 0.02 ); }
. emp-name { font-weight : 600 ; color : var ( -- text ); }
/* ── TIER BADGES ── */
. tier-badge {
display : inline-block ; padding : 3 px 9 px ; border-radius : 10 px ;
font-size : 11 px ; font-weight : 700 ; white-space : nowrap ; border : 1 px solid ;
}
. tier-0 { color : #28a745 ; background : #d4edda ; border-color : #28a745 ; }
. tier-1 { color : #856404 ; background : #fff3cd ; border-color : #c9a000 ; }
. tier-2 { color : #d9534f ; background : #f8d7da ; border-color : #d9534f ; }
. tier-3 { color : #d9534f ; background : #f8d7da ; border-color : #d9534f ; }
. tier-4 { color : #721c24 ; background : #f5c6cb ; border-color : #c0392b ; }
. tier-5 { color : #721c24 ; background : #f5c6cb ; border-color : #c0392b ; }
. tier-6 { color : #fff ; background : #721c24 ; border-color : #5a1520 ; }
/* ── VIOLATION FEED ── */
. viol-item {
padding : 13 px 18 px ; border-bottom : 1 px solid #18191f ;
display : flex ; align-items : flex-start ; gap : 12 px ;
}
. viol-item : last-child { border-bottom : none ; }
. viol-dot { width : 8 px ; height : 8 px ; border-radius : 50 % ; margin-top : 5 px ; flex-shrink : 0 ; }
. viol-dot-red { background : #e74c3c ; box-shadow : 0 0 6 px rgba ( 231 , 76 , 60 , 0.5 ); }
. viol-dot-yellow { background : var ( -- gold ); box-shadow : 0 0 6 px rgba ( 212 , 175 , 55 , 0.5 ); }
. viol-dot-green { background : #28a745 ; }
. viol-info { flex : 1 ; min-width : 0 ; }
. viol-name { font-size : 13 px ; font-weight : 600 ; color : var ( -- text ); }
. viol-type { font-size : 11 px ; color : var ( -- text - muted ); margin-top : 2 px ; }
. viol-meta { display : flex ; align-items : center ; gap : 8 px ; margin-top : 4 px ; font-size : 11 px ; color : var ( -- text - muted ); font-family : 'DM Mono' , monospace ; }
. viol-pts { font-family : 'Syne' , sans-serif ; font-size : 18 px ; font-weight : 800 ; color : var ( -- gold - lt ); flex-shrink : 0 ; }
. repeat-tag { display : inline-block ; padding : 1 px 6 px ; border-radius : 8 px ; font-size : 10 px ; font-weight : 700 ; background : #3b2e00 ; color : #ffd666 ; border : 1 px solid var ( -- gold - dk ); margin-left : 4 px ; }
/* ── DEPT BREAKDOWN ── */
. dept-row { padding : 12 px 18 px ; border-bottom : 1 px solid #18191f ; display : flex ; align-items : center ; gap : 12 px ; }
. dept-row : last-child { border-bottom : none ; }
. dept-name { font-size : 13 px ; color : var ( -- text - dim ); min-width : 160 px ; }
. dept-bar-track { flex : 1 ; height : 6 px ; background : var ( -- border - lt ); border-radius : 3 px ; overflow : hidden ; }
. dept-bar-fill { height : 100 % ; border-radius : 3 px ; background : linear-gradient ( 90 deg , var ( -- gold - dk ), var ( -- gold )); }
. dept-count { font-family : 'DM Mono' , monospace ; font-size : 12 px ; color : var ( -- text - muted ); min-width : 28 px ; text-align : right ; }
/* ── FORM PREVIEW ── */
. form-preview { background : var ( -- bg - card ); border : 1 px solid var ( -- border ); border-radius : 10 px ; margin-bottom : 24 px ; overflow : hidden ; }
. form-section { background : var ( -- bg - section ); border-left : 4 px solid var ( -- gold ); padding : 20 px 24 px ; margin : 20 px ; border-radius : 4 px ; border-top : 1 px solid var ( -- border - lt ); border-right : 1 px solid var ( -- border - lt ); border-bottom : 1 px solid var ( -- border - lt ); }
. form-section-title { font-family : 'Syne' , sans-serif ; font-size : 18 px ; font-weight : 700 ; color : var ( -- text ); margin-bottom : 14 px ; }
. form-grid { display : grid ; grid-template-columns : repeat ( auto - fit , minmax ( 200 px , 1 fr )); gap : 14 px ; }
. form-item { display : flex ; flex-direction : column ; gap : 5 px ; }
. form-label { font-size : 12 px ; font-weight : 600 ; color : #e5e7f1 ; }
. form-input { padding : 9 px 12 px ; border : 1 px solid var ( -- border - lt ); border-radius : 4 px ; font-size : 13 px ; background : #050608 ; color : var ( -- text - muted ); font-family : 'Inter' , sans-serif ; pointer-events : none ; }
. form-input . filled { color : var ( -- text ); border-color : #3a3d52 ; }
. point-val { font-family : 'Syne' , sans-serif ; font-size : 28 px ; font-weight : 800 ; color : var ( -- gold - lt ); }
/* ── TIER SCALE ── */
. tier-timeline { display : flex ; align-items : stretch ; border-radius : 8 px ; border : 1 px solid var ( -- border ); overflow : hidden ; }
. tier-seg { flex : 1 ; padding : 12 px 8 px 10 px ; text-align : center ; border-right : 1 px solid rgba ( 255 , 255 , 255 , 0.05 ); }
. tier-seg : last-child { border-right : none ; }
. tier-seg . ts-pts { font-family : 'Syne' , sans-serif ; font-size : 15 px ; font-weight : 800 ; margin-bottom : 3 px ; }
. tier-seg . ts-label { font-size : 9 px ; font-family : 'DM Mono' , monospace ; letter-spacing : 0.5 px ; opacity : 0.8 ; line-height : 1.3 ; }
. ts-0 { background : rgba ( 40 , 167 , 69 , 0.12 ); color : #28a745 ; }
. ts-1 { background : rgba ( 133 , 100 , 4 , 0.15 ); color : #c9a000 ; }
. ts-2 { background : rgba ( 217 , 83 , 79 , 0.15 ); color : #d9534f ; }
. ts-3 { background : rgba ( 217 , 83 , 79 , 0.18 ); color : #d9534f ; }
. ts-4 { background : rgba ( 114 , 28 , 36 , 0.20 ); color : #e87070 ; }
. ts-5 { background : rgba ( 114 , 28 , 36 , 0.25 ); color : #e87070 ; }
. ts-6 { background : rgba ( 114 , 28 , 36 , 0.50 ); color : #ff9999 ; }
/* ── AUDIT LOG ── */
. audit-item { padding : 11 px 18 px ; border-bottom : 1 px solid #18191f ; display : flex ; align-items : center ; gap : 12 px ; font-size : 12 px ; }
. audit-item : last-child { border-bottom : none ; }
. audit-time { font-family : 'DM Mono' , monospace ; color : var ( -- text - muted ); font-size : 11 px ; min-width : 80 px ; }
. audit-action { flex : 1 ; color : var ( -- text - dim ); }
. audit-action strong { color : var ( -- text ); font-weight : 600 ; }
. audit-pts { font-family : 'DM Mono' , monospace ; font-size : 11 px ; color : var ( -- gold ); font-weight : 700 ; }
/* ── FEATURES ── */
. features-grid { display : grid ; grid-template-columns : repeat ( 3 , 1 fr ); gap : 14 px ; margin-bottom : 24 px ; }
. feature-card { background : var ( -- bg - card ); border : 1 px solid var ( -- border ); border-radius : 10 px ; padding : 22 px ; transition : border-color 0.2 s , transform 0.15 s ; }
. feature-card : hover { border-color : var ( -- border - lt ); transform : translateY ( -2 px ); }
. feature-icon { font-size : 22 px ; margin-bottom : 12 px ; display : block ; }
. feature-title { font-family : 'Syne' , sans-serif ; font-size : 14 px ; font-weight : 700 ; color : var ( -- text ); margin-bottom : 6 px ; }
. feature-desc { font-size : 12 px ; color : var ( -- text - muted ); line-height : 1.6 ; }
/* ── FOOTER ── */
2026-03-08 00:19:59 -06:00
footer {
border-top : 1 px solid var ( -- border );
padding : 20 px 40 px ;
display : flex ;
align-items : center ;
justify-content : space-between ;
flex-wrap : wrap ;
gap : 12 px ;
font-size : 11 px ;
color : var ( -- text - muted );
font-family : 'DM Mono' , monospace ;
background : var ( -- bg - nav );
}
. footer-left {
display : flex ;
align-items : center ;
gap : 18 px ;
}
. footer-brand {
font-family : 'Syne' , sans-serif ;
font-size : 13 px ;
font-weight : 700 ;
color : var ( -- text - dim );
}
. footer-copy {
color : var ( -- text - muted );
font-size : 11 px ;
}
. footer-gitea {
display : flex ;
align-items : center ;
gap : 6 px ;
color : var ( -- text - muted );
text-decoration : none ;
padding : 4 px 10 px ;
border : 1 px solid var ( -- border - lt );
border-radius : 5 px ;
transition : border-color 0.2 s , color 0.2 s ;
font-size : 11 px ;
}
. footer-gitea : hover {
border-color : var ( -- gold - dk );
color : var ( -- gold - lt );
}
. footer-gitea svg {
width : 14 px ;
height : 14 px ;
fill : currentColor ;
flex-shrink : 0 ;
}
. footer-right {
display : flex ;
align-items : center ;
gap : 18 px ;
}
. footer-ticker {
display : flex ;
align-items : center ;
gap : 8 px ;
background : rgba ( 212 , 175 , 55 , 0.06 );
border : 1 px solid rgba ( 212 , 175 , 55 , 0.2 );
border-radius : 5 px ;
padding : 4 px 12 px ;
}
. footer-ticker-label {
font-size : 10 px ;
color : var ( -- text - muted );
letter-spacing : 0.5 px ;
text-transform : uppercase ;
}
. footer-ticker-time {
font-family : 'DM Mono' , monospace ;
font-size : 12 px ;
color : var ( -- gold );
font-weight : 500 ;
letter-spacing : 1 px ;
}
. footer-ticker-dot {
width : 5 px ; height : 5 px ; border-radius : 50 % ;
background : var ( -- gold );
animation : pulse 2 s infinite ;
flex-shrink : 0 ;
}
. footer-divider {
width : 1 px ;
height : 16 px ;
background : var ( -- border - lt );
}
2026-03-07 23:27:25 -06:00
/* ── ANIMATIONS ── */
. fade-in { opacity : 0 ; transform : translateY ( 16 px ); animation : fadeUp 0.5 s ease forwards ; }
@ keyframes fadeUp { to { opacity : 1 ; transform : translateY ( 0 ); } }
. fade-in : nth-child ( 1 ) { animation-delay : 0.05 s ; }
. fade-in : nth-child ( 2 ) { animation-delay : 0.10 s ; }
. fade-in : nth-child ( 3 ) { animation-delay : 0.15 s ; }
. fade-in : nth-child ( 4 ) { animation-delay : 0.20 s ; }
. tab-pane { display : none ; }
. tab-pane . active { display : block ; }
@ media ( max-width : 768px ) {
. kpi-row { grid-template-columns : repeat ( 2 , 1 fr ); }
. two-col { grid-template-columns : 1 fr ; }
. features-grid { grid-template-columns : 1 fr 1 fr ; }
. hero { padding : 30 px 24 px ; }
. hero h1 { font-size : 26 px ; }
nav { padding : 0 16 px ; }
. main { padding : 0 12 px 60 px ; }
2026-03-08 00:19:59 -06:00
footer { padding : 16 px 20 px ; flex-direction : column ; align-items : flex-start ; }
. footer-right { flex-wrap : wrap ; }
2026-03-07 23:27:25 -06:00
}
</ style >
</ head >
< body >
<!-- Demo Banner -->
< div class = "demo-banner" >
< div class = "dot" ></ div >
DEMO ENVIRONMENT — Simulated data for stakeholder preview only — Not connected to live database
< div class = "dot" ></ div >
</ div >
<!-- Navigation -->
< nav >
< div class = "logo-wrap" >
< div class = "logo-icon" > C</ div >
< div class = "logo-text" > CPAS Tracker</ div >
</ div >
< a class = "nav-tab active" href = "#" onclick = "switchTab('dashboard', this); return false;" > 📊 Dashboard</ a >
< a class = "nav-tab" href = "#" onclick = "switchTab('violations', this); return false;" > + New Violation</ a >
< button class = "nav-docs" > ? Docs</ button >
</ nav >
< div class = "main" >
<!-- ── DASHBOARD TAB ── -->
< div id = "tab-dashboard" class = "tab-pane active" >
< div class = "hero fade-in" >
< div class = "hero-eyebrow" > Corrective Performance Action System</ div >
< h1 > Employee < span > Compliance</ span > Dashboard</ h1 >
< p > Real-time visibility into workforce disciplinary standing. Track violations, monitor tier escalations, and generate signed documentation — all in one place.</ p >
< div class = "hero-stats" >
< div class = "hero-stat" >< div class = "val" > 47</ div >< div class = "lbl" > Total Employees</ div ></ div >
< div class = "hero-stat-divider" ></ div >
< div class = "hero-stat" >< div class = "val" > 23</ div >< div class = "lbl" > Active Violations (90d)</ div ></ div >
< div class = "hero-stat-divider" ></ div >
< div class = "hero-stat" >< div class = "val" > 3</ div >< div class = "lbl" > At-Risk (Tier 3+)</ div ></ div >
< div class = "hero-stat-divider" ></ div >
< div class = "hero-stat" >< div class = "val" > 91%</ div >< div class = "lbl" > In Good Standing</ div ></ div >
</ div >
</ div >
< div class = "kpi-row" >
< div class = "kpi-card fade-in" >
< div class = "kpi-label" > New This Week</ div >
< div class = "kpi-val" > 6</ div >
< div class = "kpi-sub" > +2 vs prior week</ div >
< div class = "kpi-accent kpi-accent-gold" ></ div >
</ div >
< div class = "kpi-card fade-in" >
< div class = "kpi-label" > Tier 3+ Employees</ div >
< div class = "kpi-val" > 3</ div >
< div class = "kpi-sub" > Requires attention</ div >
< div class = "kpi-accent kpi-accent-red" ></ div >
</ div >
< div class = "kpi-card fade-in" >
< div class = "kpi-label" > PDFs Generated</ div >
< div class = "kpi-val" > 18</ div >
< div class = "kpi-sub" > This month</ div >
< div class = "kpi-accent kpi-accent-blue" ></ div >
</ div >
< div class = "kpi-card fade-in" >
< div class = "kpi-label" > Expiring (30d)</ div >
< div class = "kpi-val" > 9</ div >
< div class = "kpi-sub" > Points rolling off</ div >
< div class = "kpi-accent kpi-accent-green" ></ div >
</ div >
</ div >
< div class = "two-col" >
<!-- Employee Roster -->
< div class = "panel" >
< div class = "panel-head" >
< span class = "panel-title" > Employee Roster</ span >
< span style = "font-size:11px;color:var(--text-muted);font-family:'DM Mono',monospace;" > 47 total</ span >
</ div >
< table class = "emp-table" >
< thead >< tr >< th > Employee</ th >< th > Dept</ th >< th > Standing</ th ></ tr ></ thead >
< tbody >
< tr >< td >< div class = "emp-name" > Marcus T.</ div ></ td >< td >< div style = "font-size:11px;color:var(--text-muted);" > Operations</ div ></ td >< td >< span class = "tier-badge tier-4" > 22 pts — Tier 4</ span ></ td ></ tr >
< tr >< td >< div class = "emp-name" > Janelle R.</ div ></ td >< td >< div style = "font-size:11px;color:var(--text-muted);" > Production</ div ></ td >< td >< span class = "tier-badge tier-3" > 17 pts — Tier 3</ span ></ td ></ tr >
< tr >< td >< div class = "emp-name" > Devon H.</ div ></ td >< td >< div style = "font-size:11px;color:var(--text-muted);" > Operations</ div ></ td >< td >< span class = "tier-badge tier-3" > 15 pts — Tier 3</ span ></ td ></ tr >
< tr >< td >< div class = "emp-name" > Priya S.</ div ></ td >< td >< div style = "font-size:11px;color:var(--text-muted);" > Impl & Support</ div ></ td >< td >< span class = "tier-badge tier-2" > 12 pts — Tier 2</ span ></ td ></ tr >
< tr >< td >< div class = "emp-name" > Carlos M.</ div ></ td >< td >< div style = "font-size:11px;color:var(--text-muted);" > Production</ div ></ td >< td >< span class = "tier-badge tier-1" > 7 pts — Tier 1</ span ></ td ></ tr >
< tr >< td >< div class = "emp-name" > Aisha W.</ div ></ td >< td >< div style = "font-size:11px;color:var(--text-muted);" > Administrative</ div ></ td >< td >< span class = "tier-badge tier-1" > 5 pts — Tier 1</ span ></ td ></ tr >
< tr >< td >< div class = "emp-name" > Tom B.</ div ></ td >< td >< div style = "font-size:11px;color:var(--text-muted);" > Design & Content</ div ></ td >< td >< span class = "tier-badge tier-0" > 2 pts — Elite</ span ></ td ></ tr >
< tr >< td >< div class = "emp-name" > Sandra K.</ div ></ td >< td >< div style = "font-size:11px;color:var(--text-muted);" > Business Dev</ div ></ td >< td >< span class = "tier-badge tier-0" > 0 pts — Elite</ span ></ td ></ tr >
</ tbody >
</ table >
</ div >
<!-- Recent Violations -->
< div class = "panel" >
< div class = "panel-head" >
< span class = "panel-title" > Recent Violations</ span >
< span style = "font-size:11px;color:var(--text-muted);font-family:'DM Mono',monospace;" > Last 7 days</ span >
</ div >
< div >
< div class = "viol-item" >
< div class = "viol-dot viol-dot-red" ></ div >
< div class = "viol-info" >
2026-03-08 00:19:59 -06:00
< div class = "viol-name" > Marcus T. < span class = "repeat-tag" > ☆ REPEAT</ span ></ div >
2026-03-07 23:27:25 -06:00
< div class = "viol-type" > Unauthorized Absence — Operations</ div >
< div class = "viol-meta" >< span > Mar 6</ span >< span > ·</ span >< span > D. Williams</ span ></ div >
</ div >
< div class = "viol-pts" > +5</ div >
</ div >
< div class = "viol-item" >
< div class = "viol-dot viol-dot-red" ></ div >
< div class = "viol-info" >
< div class = "viol-name" > Janelle R.</ div >
< div class = "viol-type" > Insubordination — Production</ div >
< div class = "viol-meta" >< span > Mar 5</ span >< span > ·</ span >< span > K. Thompson</ span ></ div >
</ div >
< div class = "viol-pts" > +4</ div >
</ div >
< div class = "viol-item" >
< div class = "viol-dot viol-dot-yellow" ></ div >
< div class = "viol-info" >
< div class = "viol-name" > Devon H.</ div >
< div class = "viol-type" > Tardiness (3× ) — Operations</ div >
< div class = "viol-meta" >< span > Mar 4</ span >< span > ·</ span >< span > D. Williams</ span ></ div >
</ div >
< div class = "viol-pts" > +3</ div >
</ div >
< div class = "viol-item" >
< div class = "viol-dot viol-dot-yellow" ></ div >
< div class = "viol-info" >
< div class = "viol-name" > Carlos M.</ div >
< div class = "viol-type" > Cell Phone Policy — Production</ div >
< div class = "viol-meta" >< span > Mar 3</ span >< span > ·</ span >< span > K. Thompson</ span ></ div >
</ div >
< div class = "viol-pts" > +2</ div >
</ div >
< div class = "viol-item" >
< div class = "viol-dot viol-dot-yellow" ></ div >
< div class = "viol-info" >
< div class = "viol-name" > Priya S.</ div >
< div class = "viol-type" > Dress Code Violation — Impl & Support</ div >
< div class = "viol-meta" >< span > Mar 2</ span >< span > ·</ span >< span > M. Johnson</ span ></ div >
</ div >
< div class = "viol-pts" > +1</ div >
</ div >
< div class = "viol-item" >
< div class = "viol-dot viol-dot-green" ></ div >
< div class = "viol-info" >
< div class = "viol-name" > Aisha W.</ div >
< div class = "viol-type" > Late Return from Break — Administrative</ div >
< div class = "viol-meta" >< span > Mar 1</ span >< span > ·</ span >< span > S. Martinez</ span ></ div >
</ div >
< div class = "viol-pts" > +1</ div >
</ div >
</ div >
</ div >
</ div >
< div class = "two-col" >
<!-- Dept Breakdown -->
< div class = "panel" >
< div class = "panel-head" >
< span class = "panel-title" > Violations by Department</ span >
< span style = "font-size:11px;color:var(--text-muted);font-family:'DM Mono',monospace;" > 90-day window</ span >
</ div >
< div style = "padding:8px 0;" >
< div class = "dept-row" >< div class = "dept-name" > Operations</ div >< div class = "dept-bar-track" >< div class = "dept-bar-fill" style = "width:88%" ></ div ></ div >< div class = "dept-count" > 8</ div ></ div >
< div class = "dept-row" >< div class = "dept-name" > Production</ div >< div class = "dept-bar-track" >< div class = "dept-bar-fill" style = "width:66%" ></ div ></ div >< div class = "dept-count" > 6</ div ></ div >
< div class = "dept-row" >< div class = "dept-name" > Impl & Support</ div >< div class = "dept-bar-track" >< div class = "dept-bar-fill" style = "width:44%" ></ div ></ div >< div class = "dept-count" > 4</ div ></ div >
< div class = "dept-row" >< div class = "dept-name" > Administrative</ div >< div class = "dept-bar-track" >< div class = "dept-bar-fill" style = "width:22%" ></ div ></ div >< div class = "dept-count" > 2</ div ></ div >
< div class = "dept-row" >< div class = "dept-name" > Business Dev</ div >< div class = "dept-bar-track" >< div class = "dept-bar-fill" style = "width:11%" ></ div ></ div >< div class = "dept-count" > 1</ div ></ div >
< div class = "dept-row" >< div class = "dept-name" > Design & Content</ div >< div class = "dept-bar-track" >< div class = "dept-bar-fill" style = "width:11%" ></ div ></ div >< div class = "dept-count" > 1</ div ></ div >
< div class = "dept-row" >< div class = "dept-name" > Executive</ div >< div class = "dept-bar-track" >< div class = "dept-bar-fill" style = "width:0%" ></ div ></ div >< div class = "dept-count" > 0</ div ></ div >
</ div >
</ div >
<!-- Audit Log -->
< div class = "panel" >
< div class = "panel-head" >
< span class = "panel-title" > Audit Log</ span >
< span style = "font-size:11px;color:var(--text-muted);font-family:'DM Mono',monospace;" > System activity</ span >
</ div >
< div >
< div class = "audit-item" >< div class = "audit-time" > 03/06 2:14p</ div >< div class = "audit-action" >< strong > Violation #41</ strong > created — Marcus T.</ div >< div class = "audit-pts" > +5 pts</ div ></ div >
< div class = "audit-item" >< div class = "audit-time" > 03/06 2:15p</ div >< div class = "audit-action" > PDF generated for < strong > Violation #41</ strong ></ div >< div class = "audit-pts" > —</ div ></ div >
< div class = "audit-item" >< div class = "audit-time" > 03/05 9:40a</ div >< div class = "audit-action" >< strong > Violation #40</ strong > created — Janelle R.</ div >< div class = "audit-pts" > +4 pts</ div ></ div >
< div class = "audit-item" >< div class = "audit-time" > 03/04 11:20a</ div >< div class = "audit-action" > Employee < strong > Devon H.</ strong > record updated</ div >< div class = "audit-pts" > —</ div ></ div >
< div class = "audit-item" >< div class = "audit-time" > 03/04 8:55a</ div >< div class = "audit-action" >< strong > Violation #39</ strong > created — Devon H.</ div >< div class = "audit-pts" > +3 pts</ div ></ div >
< div class = "audit-item" >< div class = "audit-time" > 03/03 3:30p</ div >< div class = "audit-action" >< strong > Violation #38</ strong > amended — Carlos M.</ div >< div class = "audit-pts" > − 1 pt</ div ></ div >
< div class = "audit-item" >< div class = "audit-time" > 03/02 1:05p</ div >< div class = "audit-action" >< strong > Duplicate record</ strong > merged — R. Johnson</ div >< div class = "audit-pts" > —</ div ></ div >
</ div >
</ div >
</ div >
<!-- CPAS Tier Scale -->
< div style = "margin-bottom:24px;" >
< div class = "section-header" >
< div class = "section-title" > CPAS Tier Scale</ div >
</ div >
< div class = "tier-timeline" >
< div class = "tier-seg ts-0" >< div class = "ts-pts" > 0– 4</ div >< div class = "ts-label" > Elite< br /> Standing</ div ></ div >
< div class = "tier-seg ts-1" >< div class = "ts-pts" > 5– 9</ div >< div class = "ts-label" > Tier 1< br /> Realignment</ div ></ div >
< div class = "tier-seg ts-2" >< div class = "ts-pts" > 10– 14</ div >< div class = "ts-label" > Tier 2< br /> Admin Lockdown</ div ></ div >
< div class = "tier-seg ts-3" >< div class = "ts-pts" > 15– 19</ div >< div class = "ts-label" > Tier 3< br /> Verification</ div ></ div >
< div class = "tier-seg ts-4" >< div class = "ts-pts" > 20– 24</ div >< div class = "ts-label" > Tier 4< br /> Risk Mitigation</ div ></ div >
< div class = "tier-seg ts-5" >< div class = "ts-pts" > 25– 29</ div >< div class = "ts-label" > Tier 5< br /> Final Decision</ div ></ div >
< div class = "tier-seg ts-6" >< div class = "ts-pts" > 30+</ div >< div class = "ts-label" > Tier 6< br /> Separation</ div ></ div >
</ div >
</ div >
<!-- System Capabilities -->
< div class = "section-header" >< div class = "section-title" > System Capabilities</ div ></ div >
< div class = "features-grid" >
< div class = "feature-card fade-in" >< span class = "feature-icon" > ⚡</ span >< div class = "feature-title" > Repeat Offense Detection</ div >< div class = "feature-desc" > Automatically flags prior violations for the same type and escalates point recommendations per recidivist policy.</ div ></ div >
< div class = "feature-card fade-in" >< span class = "feature-icon" > 📄</ span >< div class = "feature-title" > One-Click PDF Generation</ div >< div class = "feature-desc" > Generates signed, professional violation documents instantly — with or without employee acknowledgment signatures.</ div ></ div >
2026-03-08 00:19:59 -06:00
< div class = "feature-card fade-in" >< span class = "feature-icon" > 📀</ span >< div class = "feature-title" > Duplicate Record Merge</ div >< div class = "feature-desc" > Consolidate duplicate employee records while preserving full violation history under the canonical profile.</ div ></ div >
< div class = "feature-card fade-in" >< span class = "feature-icon" > 🕊</ span >< div class = "feature-title" > 90-Day Rolling Window</ div >< div class = "feature-desc" > Points automatically expire after 90 days. Active standing reflects only the current compliance window.</ div ></ div >
2026-03-07 23:27:25 -06:00
< div class = "feature-card fade-in" >< span class = "feature-icon" > 🏷️</ span >< div class = "feature-title" > Tier Escalation Warnings</ div >< div class = "feature-desc" > Real-time alerts when a new violation would push an employee across a tier boundary before you submit.</ div ></ div >
< div class = "feature-card fade-in" >< span class = "feature-icon" > 🗂️</ span >< div class = "feature-title" > Full Audit Trail</ div >< div class = "feature-desc" > Every create, amendment, merge, and PDF generation is logged with timestamp and operator attribution.</ div ></ div >
</ div >
</ div > <!-- /tab-dashboard -->
<!-- ── VIOLATION FORM TAB ── -->
< div id = "tab-violations" class = "tab-pane" >
< div style = "margin-bottom:20px;" >
< div style = "background:#181200;border:1px solid var(--gold-dk);border-radius:8px;padding:12px 18px;font-size:12px;color:var(--gold-lt);font-family:'DM Mono',monospace;letter-spacing:0.4px;" >
2026-03-08 00:19:59 -06:00
⚡ DEMO VIEW — Form fields shown with sample data. Submission is disabled in demo mode.
2026-03-07 23:27:25 -06:00
</ div >
</ div >
< div class = "form-preview" >
< div class = "form-section" >
< div class = "form-section-title" > Employee Information</ div >
< div style = "margin-bottom:16px;" >
< div class = "form-label" style = "margin-bottom:6px;" > Quick-Select Existing Employee:</ div >
< div class = "form-input filled" style = "display:flex;align-items:center;justify-content:space-between;" >
< span > Marcus Thompson — Operations</ span >< span style = "color:var(--text-muted);font-size:11px;" > ▼</ span >
</ div >
< div style = "margin-top:8px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;" >
< span style = "font-size:12px;color:var(--text-dim);font-weight:600;" > Current Standing:</ span >
< span class = "tier-badge tier-4" > 22 pts — Tier 4 · Risk Mitigation</ span >
< span style = "font-size:11px;color:var(--text-muted);" > 4 violations in last 90 days</ span >
</ div >
</ div >
< div class = "form-grid" >
< div class = "form-item" >< div class = "form-label" > Employee Name:</ div >< div class = "form-input filled" > Marcus Thompson</ div ></ div >
< div class = "form-item" >< div class = "form-label" > Department:</ div >< div class = "form-input filled" style = "display:flex;align-items:center;justify-content:space-between;" >< span > Operations</ span >< span style = "color:var(--text-muted);font-size:11px;" > ▼</ span ></ div ></ div >
< div class = "form-item" >< div class = "form-label" > Supervisor Name:</ div >< div class = "form-input filled" > D. Williams</ div ></ div >
< div class = "form-item" >< div class = "form-label" > Witness Name (Officer):</ div >< div class = "form-input" > Officer Name</ div ></ div >
</ div >
</ div >
< div class = "form-section" >
< div class = "form-section-title" > Violation Details</ div >
< div class = "form-grid" >
< div class = "form-item" style = "grid-column:1 / -1;" >
< div class = "form-label" > Violation Type:</ div >
< div class = "form-input filled" style = "display:flex;align-items:center;justify-content:space-between;" >
2026-03-08 00:19:59 -06:00
< span > Unauthorized Absence ☆ 2x in 90 days</ span >< span style = "color:var(--text-muted);font-size:11px;" > ▼</ span >
2026-03-07 23:27:25 -06:00
</ div >
< div style = "background:#141623;border:1px solid var(--border-lt);border-radius:4px;padding:10px;font-size:12px;color:var(--text-dim);margin-top:6px;" >
2026-03-08 00:19:59 -06:00
< strong > Unauthorized Absence</ strong > < span class = "repeat-tag" > ☆ Repeat — 2x prior</ span >< br />
2026-03-07 23:27:25 -06:00
Absence from scheduled work without prior approval or acceptable documentation.< br />
< span style = "font-size:10px;color:#a0a3ba;" > Chapter 4, Section 4.1 — Attendance & Punctuality</ span >
</ div >
< div style = "background:#3b2e00;border:1px solid var(--gold-dk);border-radius:4px;padding:8px 12px;margin-top:6px;font-size:12px;color:#ffdf8a;" >
< strong > Repeat offense detected.</ strong > Point slider set to maximum (5 pts) per recidivist policy. Adjust if needed.
</ div >
</ div >
< div class = "form-item" >< div class = "form-label" > Incident Date:</ div >< div class = "form-input filled" > 2026-03-06</ div ></ div >
</ div >
< div style = "background:#2d1a00;border:1px solid #a06000;border-radius:6px;padding:12px 16px;margin-top:16px;font-size:13px;color:#ffc107;" >
2026-03-08 00:19:59 -06:00
⚡ < strong > Tier escalation warning:</ strong > Adding 5 pts will bring Marcus to < strong > 27 pts (Tier 5 — Final Decision)</ strong > . This is one tier below Separation. Review carefully.
2026-03-07 23:27:25 -06:00
</ div >
< div style = "background:#181200;border:2px solid var(--gold);padding:14px;border-radius:6px;margin:16px 0 0;text-align:center;" >
< div style = "color:#ffdf8a;font-weight:700;margin-bottom:8px;" > CPAS Point Assessment</ div >
< div style = "font-size:13px;color:var(--text-dim);" > Unauthorized Absence: 3– 5 Points</ div >
< div style = "width:100%;height:6px;background:var(--border-lt);border-radius:3px;margin:12px 0 4px;overflow:hidden;" >< div style = "width:100%;height:100%;background:linear-gradient(90deg,var(--gold-dk),var(--gold));border-radius:3px;" ></ div ></ div >
< div class = "point-val" > 5 Points</ div >
< div style = "font-size:12px;color:var(--text-dim);margin-top:4px;" > Adjust to reflect severity and context</ div >
</ div >
</ div >
< div style = "background:var(--bg-section);border-left:4px solid #2196F3;padding:20px 24px;margin:20px;border-radius:4px;border:1px solid var(--border-lt);" >
< div style = "font-family:'Syne',sans-serif;font-size:16px;font-weight:700;margin-bottom:8px;" > Employee Acknowledgment</ div >
< div style = "font-size:12px;color:var(--text-muted);margin-bottom:14px;line-height:1.6;" > If the employee is present and acknowledges receipt of this violation, enter their name and the date below.</ div >
< div class = "form-grid" >
< div class = "form-item" >< div class = "form-label" > Acknowledged By:</ div >< div class = "form-input" > Employee's printed name</ div ></ div >
< div class = "form-item" >< div class = "form-label" > Acknowledgment Date:</ div >< div class = "form-input" > yyyy-mm-dd</ div ></ div >
</ div >
</ div >
< div style = "display:flex;gap:14px;justify-content:center;padding:20px 20px 28px;" >
< button style = "padding:14px 36px;font-size:15px;font-weight:700;border:none;border-radius:6px;cursor:not-allowed;background:linear-gradient(135deg,#d4af37,#ffdf8a);color:#000;text-transform:uppercase;opacity:0.5;" > Submit Violation</ button >
< button style = "padding:14px 36px;font-size:15px;font-weight:700;border:1px solid var(--border-lt);border-radius:6px;cursor:not-allowed;background:#050608;color:var(--text);text-transform:uppercase;opacity:0.5;" > Clear Form</ button >
</ div >
</ div >
</ div > <!-- /tab-violations -->
</ div > <!-- /main -->
< footer >
2026-03-08 00:19:59 -06:00
< div class = "footer-left" >
< div class = "footer-brand" > CPAS Tracker</ div >
< div class = "footer-divider" ></ div >
< div class = "footer-copy" > © 2026 Jason Stedwell</ div >
< div class = "footer-divider" ></ div >
< div style = "font-size:11px;color:var(--text-muted);" > DEMO BUILD — All data synthetic</ div >
</ div >
< div class = "footer-right" >
< a class = "footer-gitea" href = "https://git.alwisp.com/jason/cpas" target = "_blank" rel = "noopener" >
<!-- Gitea logo SVG -->
< svg viewBox = "0 0 640 640" xmlns = "http://www.w3.org/2000/svg" >
< path d = "M321.6 3.2C146.4 3.2 3.2 146.4 3.2 321.6c0 141.6 91.8 261.9 219.7 304.1 16.1 3 22-7 22-15.5 0-7.6-.3-32.8-.4-59.5-89.5 19.4-108.4-38.4-108.4-38.4-14.6-37.2-35.7-47.1-35.7-47.1-29.2-20 2.2-19.6 2.2-19.6 32.3 2.3 49.3 33.1 49.3 33.1 28.7 49.2 75.3 35 93.7 26.7 2.9-20.8 11.2-35 20.4-43-71.4-8.1-146.5-35.7-146.5-158.9 0-35.1 12.5-63.8 33.1-86.3-3.3-8.1-14.4-40.8 3.1-85.1 0 0 27-8.7 88.4 32.9 25.6-7.1 53.1-10.7 80.4-10.8 27.3.1 54.8 3.7 80.5 10.8 61.3-41.6 88.3-32.9 88.3-32.9 17.6 44.3 6.5 77 3.2 85.1 20.6 22.5 33 51.2 33 86.3 0 123.5-75.2 150.7-146.8 158.7 11.5 10 21.8 29.7 21.8 59.8 0 43.2-.4 78-0.4 88.6 0 8.6 5.8 18.6 22.1 15.5C524.8 583.2 616.8 463.1 616.8 321.6 616.8 146.4 473.6 3.2 298.4 3.2z" />
</ svg >
jason/cpas
</ a >
< div class = "footer-divider" ></ div >
< div class = "footer-ticker" >
< div class = "footer-ticker-dot" ></ div >
< div class = "footer-ticker-label" > Dev Time</ div >
< div class = "footer-ticker-time" id = "dev-ticker" > —</ div >
</ div >
</ div >
2026-03-07 23:27:25 -06:00
</ footer >
< script >
function switchTab ( name , el ) {
document . querySelectorAll ( '.tab-pane' ). forEach ( p => p . classList . remove ( 'active' ));
document . querySelectorAll ( '.nav-tab' ). forEach ( t => t . classList . remove ( 'active' ));
document . getElementById ( 'tab-' + name ). classList . add ( 'active' );
el . classList . add ( 'active' );
}
2026-03-08 00:19:59 -06:00
// ── DEV TIME TICKER ──────────────────────────────────────────────────────────
// Base dev time calculated from real commit sessions (30-min gap = new session).
// Each session timed as (last_commit - first_commit) + 15min overhead.
//
// Session 1: 2026-03-06 11:33 → 12:05 = 32min + 15 = 47min
// Session 2: 2026-03-06 12:19 → 18:00 = 341min + 15 = 356min
// Session 3: 2026-03-06 23:18 → 23:41 = 23min + 15 = 38min
// Session 4: 2026-03-07 09:22 → 09:53 = 31min + 15 = 46min
// Session 5: 2026-03-07 18:31 → 19:02 = 31min + 15 = 46min
// Session 6: 2026-03-07 21:28 → 22:02 = 34min + 15 = 49min
// Session 7: 2026-03-07 23:13 → 23:59 = 46min + 15 = 61min
// Session 8: 2026-03-08 00:11 → 00:12 = 1min + 15 = 16min
// Total: 659min = 39,540 seconds
//
// Anchor: last commit timestamp 2026-03-08T06:12:11Z (UTC)
// Ticker ticks up every second from that base.
const BASE_SECONDS = 39540 ;
const ANCHOR_UTC = new Date ( '2026-03-08T06:12:11Z' ). getTime ();
function formatDevTime ( totalSec ) {
const h = Math . floor ( totalSec / 3600 );
const m = Math . floor (( totalSec % 3600 ) / 60 );
const s = totalSec % 60 ;
return ` ${ String ( h ). padStart ( 2 , '0' ) } h ${ String ( m ). padStart ( 2 , '0' ) } m ${ String ( s ). padStart ( 2 , '0' ) } s` ;
}
function updateTicker () {
const elapsed = Math . floor (( Date . now () - ANCHOR_UTC ) / 1000 );
const total = BASE_SECONDS + Math . max ( 0 , elapsed );
document . getElementById ( 'dev-ticker' ). textContent = formatDevTime ( total );
}
updateTicker ();
setInterval ( updateTicker , 1000 );
2026-03-07 23:27:25 -06:00
</ script >
</ body >
</ html >