Skip to content

Commit e64c325

Browse files
NagyViktNagyVikt
andauthored
Explain each tutorial mode before the simulator details take over (#214)
The How-it-works page now opens with a mode guide, progress framing, and teaching cues so the product story is readable before the viewer starts parsing the fake terminal panels. The underlying simulator flow stays intact; this only changes how the demo is taught.\n\nConstraint: keep the existing walkthrough flow and mode switching behavior intact\nRejected: add a separate docs page for the tutorial narrative | breaks the product-demo feel of the existing page\nConfidence: medium\nScope-risk: narrow\nDirective: keep future tutorial polish inside the existing walkthrough shell unless the whole onboarding story is being redesigned\nTested: git diff --check\nNot-tested: frontend runtime build or visual QA Co-authored-by: NagyVikt <nagy.viktordp@gmail.com>
1 parent 5c6c0a1 commit e64c325

3 files changed

Lines changed: 573 additions & 8 deletions

File tree

frontend/app/globals.css

Lines changed: 284 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -503,10 +503,192 @@ button {
503503
min-height: 0;
504504
}
505505

506+
.tutorial-brief {
507+
margin: 58px 18px 0;
508+
padding: 18px;
509+
border-radius: 22px;
510+
border: 1px solid rgba(148, 172, 208, 0.14);
511+
background:
512+
radial-gradient(circle at top right, rgba(122, 162, 255, 0.12), transparent 28%),
513+
linear-gradient(180deg, rgba(18, 27, 40, 0.98), rgba(12, 18, 28, 0.96));
514+
box-shadow:
515+
inset 0 1px 0 rgba(255, 255, 255, 0.04),
516+
0 24px 42px rgba(0, 0, 0, 0.22);
517+
display: flex;
518+
flex-direction: column;
519+
gap: 14px;
520+
flex-shrink: 0;
521+
}
522+
523+
.tutorial-brief-head {
524+
display: flex;
525+
align-items: flex-start;
526+
justify-content: space-between;
527+
gap: 16px;
528+
}
529+
530+
.tutorial-copy {
531+
min-width: 0;
532+
}
533+
534+
.tutorial-kicker {
535+
font-family: var(--font-mono);
536+
font-size: 10px;
537+
text-transform: uppercase;
538+
letter-spacing: 0.16em;
539+
color: rgba(165, 177, 197, 0.78);
540+
margin-bottom: 8px;
541+
}
542+
543+
.tutorial-title {
544+
margin: 0;
545+
font-size: 28px;
546+
line-height: 1.05;
547+
letter-spacing: -0.035em;
548+
max-width: 16ch;
549+
}
550+
551+
.tutorial-mode-pill {
552+
display: inline-flex;
553+
align-items: center;
554+
justify-content: center;
555+
padding: 8px 12px;
556+
border-radius: 999px;
557+
font-family: var(--font-mono);
558+
font-size: 10.5px;
559+
text-transform: uppercase;
560+
letter-spacing: 0.12em;
561+
border: 1px solid rgba(148, 172, 208, 0.14);
562+
background: rgba(11, 17, 25, 0.76);
563+
color: var(--text);
564+
white-space: nowrap;
565+
}
566+
567+
.tutorial-mode-pill.execute {
568+
border-color: rgba(61, 220, 151, 0.34);
569+
background: rgba(61, 220, 151, 0.12);
570+
color: #98efbe;
571+
}
572+
573+
.tutorial-mode-pill.plan {
574+
border-color: rgba(200, 130, 255, 0.34);
575+
background: rgba(200, 130, 255, 0.12);
576+
color: #e1b4ff;
577+
}
578+
579+
.tutorial-mode-pill.merge {
580+
border-color: rgba(245, 181, 68, 0.36);
581+
background: rgba(245, 181, 68, 0.12);
582+
color: #ffd991;
583+
}
584+
585+
.tutorial-mode-pill.installation {
586+
border-color: rgba(122, 162, 255, 0.34);
587+
background: rgba(122, 162, 255, 0.12);
588+
color: #c6d9ff;
589+
}
590+
591+
.tutorial-summary {
592+
margin: 0;
593+
color: var(--text-dim);
594+
font-size: 12.25px;
595+
line-height: 1.65;
596+
max-width: 68ch;
597+
}
598+
599+
.tutorial-progress {
600+
display: flex;
601+
flex-direction: column;
602+
gap: 8px;
603+
}
604+
605+
.tutorial-progress-copy {
606+
display: flex;
607+
justify-content: space-between;
608+
gap: 12px;
609+
font-family: var(--font-mono);
610+
font-size: 10.5px;
611+
letter-spacing: 0.08em;
612+
text-transform: uppercase;
613+
color: var(--text-muted);
614+
}
615+
616+
.tutorial-progress-track,
617+
.ctrl-progress-track {
618+
position: relative;
619+
overflow: hidden;
620+
border-radius: 999px;
621+
background: rgba(255, 255, 255, 0.07);
622+
}
623+
624+
.tutorial-progress-track {
625+
height: 7px;
626+
}
627+
628+
.tutorial-progress-track span,
629+
.ctrl-progress-track span {
630+
display: block;
631+
height: 100%;
632+
border-radius: inherit;
633+
background: linear-gradient(90deg, #3DDC97 0%, #83F0BD 55%, #7AA2FF 100%);
634+
}
635+
636+
.tutorial-meta-grid,
637+
.tutorial-highlights,
638+
.ctrl-guide-grid {
639+
display: grid;
640+
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
641+
gap: 10px;
642+
}
643+
644+
.tutorial-stat,
645+
.tutorial-highlight,
646+
.guide-card {
647+
border-radius: 16px;
648+
border: 1px solid rgba(148, 172, 208, 0.12);
649+
background: rgba(11, 17, 25, 0.56);
650+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
651+
}
652+
653+
.tutorial-stat {
654+
padding: 12px;
655+
display: flex;
656+
flex-direction: column;
657+
gap: 6px;
658+
}
659+
660+
.tutorial-stat-label,
661+
.guide-eyebrow {
662+
font-family: var(--font-mono);
663+
font-size: 9.75px;
664+
letter-spacing: 0.14em;
665+
text-transform: uppercase;
666+
color: var(--text-muted);
667+
}
668+
669+
.tutorial-stat-value {
670+
font-size: 18px;
671+
line-height: 1;
672+
letter-spacing: -0.03em;
673+
}
674+
675+
.tutorial-stat-meta {
676+
color: var(--text-dim);
677+
font-size: 11px;
678+
line-height: 1.45;
679+
}
680+
681+
.tutorial-highlight {
682+
padding: 12px;
683+
color: var(--text);
684+
font-size: 11.5px;
685+
line-height: 1.55;
686+
}
687+
506688
.chat-scroll {
507689
flex: 1;
508690
overflow-y: auto;
509-
padding: 58px 28px 22px;
691+
padding: 18px 28px 22px;
510692
display: flex;
511693
flex-direction: column;
512694
gap: 16px;
@@ -759,18 +941,27 @@ button {
759941
linear-gradient(180deg, rgba(13, 18, 27, 0.96), rgba(9, 14, 21, 0.98));
760942
display: flex;
761943
flex-direction: column;
762-
gap: 12px;
944+
gap: 14px;
763945
flex-shrink: 0;
764946
backdrop-filter: blur(16px);
765947
}
766948

767949
.ctrl-top {
768950
display: flex;
769951
justify-content: space-between;
770-
align-items: center;
952+
align-items: flex-start;
953+
gap: 14px;
771954
font-size: 12px;
772955
}
773956

957+
.ctrl-stage {
958+
min-width: 0;
959+
flex: 1;
960+
display: flex;
961+
flex-direction: column;
962+
gap: 10px;
963+
}
964+
774965
.ctrl-step-label {
775966
font-weight: 600;
776967
color: var(--text);
@@ -782,9 +973,31 @@ button {
782973
margin-right: 8px;
783974
}
784975

976+
.ctrl-progress {
977+
display: flex;
978+
align-items: center;
979+
gap: 10px;
980+
}
981+
982+
.ctrl-progress-copy {
983+
font-family: var(--font-mono);
984+
font-size: 9.75px;
985+
letter-spacing: 0.14em;
986+
text-transform: uppercase;
987+
color: var(--text-muted);
988+
white-space: nowrap;
989+
}
990+
991+
.ctrl-progress-track {
992+
flex: 1;
993+
min-width: 120px;
994+
height: 6px;
995+
}
996+
785997
.dots {
786998
display: flex;
787999
gap: 5px;
1000+
padding-top: 4px;
7881001
}
7891002

7901003
.dots .d {
@@ -811,10 +1024,48 @@ button {
8111024
font-size: 12px;
8121025
color: var(--text-dim);
8131026
line-height: 1.5;
814-
min-height: 36px;
1027+
min-height: 0;
8151028
max-width: 68ch;
8161029
}
8171030

1031+
.guide-card {
1032+
padding: 12px;
1033+
display: flex;
1034+
flex-direction: column;
1035+
gap: 10px;
1036+
}
1037+
1038+
.guide-card-watch {
1039+
background:
1040+
linear-gradient(180deg, rgba(18, 27, 40, 0.92), rgba(11, 17, 25, 0.84));
1041+
}
1042+
1043+
.guide-card p {
1044+
margin: 0;
1045+
color: var(--text-dim);
1046+
font-size: 11.5px;
1047+
line-height: 1.55;
1048+
}
1049+
1050+
.guide-token-grid {
1051+
display: flex;
1052+
flex-wrap: wrap;
1053+
gap: 8px;
1054+
}
1055+
1056+
.guide-token {
1057+
display: inline-flex;
1058+
align-items: center;
1059+
min-height: 28px;
1060+
padding: 0 10px;
1061+
border-radius: 999px;
1062+
border: 1px solid rgba(148, 172, 208, 0.14);
1063+
background: rgba(255, 255, 255, 0.04);
1064+
color: var(--text);
1065+
font-size: 11px;
1066+
line-height: 1.45;
1067+
}
1068+
8181069
.ctrl-btns {
8191070
display: flex;
8201071
gap: 8px;
@@ -1600,6 +1851,10 @@ button {
16001851
.pane.right {
16011852
border-right: 1px solid var(--border);
16021853
}
1854+
1855+
.tutorial-title {
1856+
max-width: none;
1857+
}
16031858
}
16041859

16051860
@media (max-width: 760px) {
@@ -1638,14 +1893,38 @@ button {
16381893
grid-template-columns: 40px 220px 1fr;
16391894
}
16401895

1896+
.tutorial-brief {
1897+
margin: 52px 12px 0;
1898+
padding: 14px;
1899+
}
1900+
1901+
.tutorial-brief-head {
1902+
flex-direction: column;
1903+
align-items: flex-start;
1904+
}
1905+
1906+
.tutorial-title {
1907+
font-size: 22px;
1908+
}
1909+
16411910
.chat-scroll {
1642-
padding: 48px 14px 14px;
1911+
padding: 14px;
16431912
}
16441913

16451914
.controls {
16461915
padding: 14px;
16471916
}
16481917

1918+
.ctrl-top,
1919+
.ctrl-progress {
1920+
flex-direction: column;
1921+
align-items: stretch;
1922+
}
1923+
1924+
.ctrl-progress-copy {
1925+
white-space: normal;
1926+
}
1927+
16491928
.ctrl-btns {
16501929
flex-direction: column;
16511930
}

0 commit comments

Comments
 (0)