2026-05-13 14:35:09 +08:00
<!doctype html>
< html lang = "en" >
< head >
< meta charset = "utf-8" />
< meta name = "viewport" content = "width=device-width, initial-scale=1" />
2026-05-13 21:24:36 +08:00
< title > Example Live Ops Artifact</ title >
2026-05-13 14:35:09 +08:00
< style >
: root {
--bg : #eef2f0 ;
--ink : #18201d ;
--muted : #65736f ;
--line : #cdd9d4 ;
--panel : #ffffff ;
--green : #0a7b5e ;
--blue : #2e5aac ;
--amber : #b86f00 ;
}
* { box-sizing : border-box ; }
body {
margin : 0 ;
min-height : 100 vh ;
background : var ( -- bg );
color : var ( -- ink );
font-family : Inter , ui-sans-serif , system-ui , - apple-system , BlinkMacSystemFont , "Segoe UI" , sans-serif ;
padding : 28 px ;
}
. artifact {
max-width : 1180 px ;
margin : 0 auto ;
}
header {
display : flex ;
justify-content : space-between ;
gap : 20 px ;
align-items : start ;
margin-bottom : 18 px ;
}
h1 {
margin : 0 ;
font-size : 36 px ;
line-height : 1.04 ;
letter-spacing : 0 ;
}
. meta {
margin-top : 8 px ;
color : var ( -- muted );
line-height : 1.45 ;
}
. refresh {
border : 1 px solid var ( -- line );
border-radius : 8 px ;
background : #fbfdfc ;
padding : 12 px 14 px ;
min-width : 230 px ;
font-size : 13 px ;
color : var ( -- muted );
}
. refresh strong {
display : block ;
color : var ( -- green );
font-size : 15 px ;
margin-bottom : 4 px ;
}
. grid {
display : grid ;
grid-template-columns : repeat ( 4 , minmax ( 0 , 1 fr ));
gap : 14 px ;
margin-bottom : 14 px ;
}
. card {
background : var ( -- panel );
border : 1 px solid var ( -- line );
border-radius : 8 px ;
padding : 18 px ;
}
. label {
color : var ( -- muted );
text-transform : uppercase ;
letter-spacing : .08 em ;
font-size : 12 px ;
font-weight : 820 ;
}
. value {
margin-top : 10 px ;
font-size : 32 px ;
line-height : 1 ;
font-weight : 860 ;
}
. split {
display : grid ;
grid-template-columns : minmax ( 0 , 1.1 fr ) minmax ( 320 px , .9 fr );
gap : 14 px ;
}
. source {
display : flex ;
align-items : center ;
justify-content : space-between ;
padding : 14 px 0 ;
border-bottom : 1 px solid #edf1ef ;
gap : 12 px ;
}
. source : last-child { border-bottom : 0 ; }
. source b { display : block ; margin-bottom : 4 px ; }
. source span { color : var ( -- muted ); font-size : 14 px ; }
. pill {
border-radius : 999 px ;
padding : 5 px 9 px ;
background : #e9f6f2 ;
color : var ( -- green );
font-size : 12 px ;
font-weight : 820 ;
white-space : nowrap ;
}
. pill . warn {
background : #fff2db ;
color : var ( -- amber );
}
. actions {
display : grid ;
gap : 10 px ;
margin-top : 14 px ;
}
. action {
border : 1 px solid var ( -- line );
border-radius : 8 px ;
padding : 14 px ;
display : grid ;
gap : 5 px ;
background : #fbfdfc ;
}
. action strong { font-size : 15 px ; }
. action span { color : var ( -- muted ); line-height : 1.4 ; }
@ media ( max-width : 860px ) {
body { padding : 18 px ; }
header { flex-direction : column ; }
. grid , . split { grid-template-columns : 1 fr ; }
}
</ style >
</ head >
< body >
< main class = "artifact" >
< header >
< div >
< h1 > Customer success live artifact</ h1 >
< div class = "meta" > Seeded mock source for connector-ready weekly account review. Designed to refresh from Notion, Linear, or Stripe later.</ div >
</ div >
< div class = "refresh" >< strong > Fresh</ strong > Updated 4 minutes ago from mock data. Refresh target: every 60 seconds.</ div >
</ header >
< section class = "grid" aria-label = "Live KPIs" >
< div class = "card" >< div class = "label" > Accounts at risk</ div >< div class = "value" > 9</ div ></ div >
< div class = "card" >< div class = "label" > Expansion signals</ div >< div class = "value" > 17</ div ></ div >
< div class = "card" >< div class = "label" > Open blockers</ div >< div class = "value" > 24</ div ></ div >
< div class = "card" >< div class = "label" > Health score</ div >< div class = "value" > 82</ div ></ div >
</ section >
< section class = "split" >
< div class = "card" >
< div class = "label" > Source health</ div >
< div class = "source" >< div >< b > Mock account table</ b >< span > 12 rows mapped into KPI cards and action queue.</ span ></ div >< span class = "pill" > Ready</ span ></ div >
< div class = "source" >< div >< b > Linear blockers</ b >< span > Connector not bound. Showing seeded issue counts.</ span ></ div >< span class = "pill warn" > Seeded</ span ></ div >
< div class = "source" >< div >< b > Stripe expansion</ b >< span > ARR deltas use sample values until credentials are connected.</ span ></ div >< span class = "pill warn" > Seeded</ span ></ div >
</ div >
< div class = "card" >
< div class = "label" > Next actions</ div >
< div class = "actions" >
< div class = "action" >< strong > Escalate Northstar Labs</ strong >< span > Renewal date moved up. Owner: Priya. Send migration plan before Friday.</ span ></ div >
< div class = "action" >< strong > Unblock billing export</ strong >< span > Two enterprise teams are waiting on CSV field mapping.</ span ></ div >
< div class = "action" >< strong > Prepare expansion brief</ strong >< span > Three workspaces crossed 80% active-seat utilization this week.</ span ></ div >
</ div >
</ div >
</ section >
</ main >
</ body >
</ html >