Skip to content

Commit cfa4d9a

Browse files
committed
Rebuild architecture overview as a compact single-screen 2x2 grid
Previous version forced vertical scrolling. This rewrite uses a CSS grid with four areas matching the paper layout: [ User Input ][ ReAct Loop ][ bridge ][ Docker Container ] [ Setup Report][ Validation ][ bridge ][ Docker Container ] ReAct internals form a 2x3 quad (Thinking -> Action above, Decision <- Observation below). The validation-to-ReAct feedback is shown via a highlighted strip on top of the Validation panel. Validation's edges to Docker memory and project files are compact labels. Collapses to a single column below 700px.
1 parent ce7a0c9 commit cfa4d9a

2 files changed

Lines changed: 232 additions & 215 deletions

File tree

website/css/style.css

Lines changed: 154 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -723,81 +723,110 @@ header.g {
723723

724724
.explain strong { color: var(--fg); font-weight: 500; }
725725

726-
/* ── Architecture Overview diagram ── */
727-
.arch-overview .arch-primary {
728-
display: grid;
729-
grid-template-columns: minmax(180px, 200px) minmax(0, 2fr) auto minmax(240px, 280px);
730-
gap: 12px;
731-
align-items: stretch;
726+
/* ── Architecture Overview · single-screen 2x2 grid ── */
727+
.arch-overview .diagram,
728+
.diagram.arch-overview {
729+
padding: 16px;
732730
}
733731

734-
.arch-io {
735-
display: flex;
736-
flex-direction: column;
732+
.arch-grid {
733+
display: grid;
734+
grid-template-columns: 150px minmax(0, 1fr) 72px 280px;
735+
grid-template-rows: auto auto;
736+
grid-template-areas:
737+
"input react bridge docker"
738+
"report valid bridge docker";
737739
gap: 10px;
738-
justify-content: space-between;
740+
align-items: stretch;
739741
}
740742

741-
.arch-io-flow {
743+
.ag-input { grid-area: input; }
744+
.ag-report { grid-area: report; }
745+
.ag-react { grid-area: react; }
746+
.ag-valid { grid-area: valid; }
747+
.ag-bridge { grid-area: bridge; }
748+
.ag-docker { grid-area: docker; }
749+
750+
/* Compact panel skeleton */
751+
.ag-react,
752+
.ag-valid,
753+
.ag-docker {
754+
border: 1px solid var(--border);
755+
background: var(--bg);
756+
padding: 10px 12px 12px;
742757
display: flex;
743758
flex-direction: column;
744-
align-items: center;
745-
gap: 4px;
746-
padding: 6px 0;
759+
gap: 8px;
747760
}
748761

749-
.arch-io-flow .arr {
750-
font-size: 16px;
751-
color: var(--fg-faint);
752-
line-height: 1;
753-
}
762+
/* Dashed outer box for SAG Agent + Validation grouping vibe */
763+
.ag-react { border-top: 2px solid #d97706; }
764+
.ag-valid { border-top: 2px solid #d97706; }
765+
.ag-docker { border-top: 2px solid #dc2626; }
754766

755-
.arch-io-flow .lbl {
767+
.ag-section-header {
756768
font-family: var(--mono);
757-
font-size: 0.5rem;
758-
letter-spacing: 0.08em;
769+
font-size: 0.5625rem;
770+
font-weight: 700;
771+
letter-spacing: 0.12em;
759772
text-transform: uppercase;
760-
color: var(--fg-faint);
761-
text-align: center;
762-
line-height: 1.4;
773+
padding-bottom: 6px;
774+
border-bottom: 1px solid var(--border-light);
763775
}
764776

765-
.arch-react,
766-
.arch-docker {
767-
display: flex;
768-
flex-direction: column;
769-
gap: 12px;
770-
}
777+
.ag-section-header.c-amber { color: #d97706; }
778+
.ag-section-header.c-red { color: #dc2626; }
771779

772-
.react-stage {
773-
display: flex;
774-
align-items: stretch;
775-
gap: 10px;
780+
/* Compact dia-box inside arch grid — smaller padding, smaller list gaps */
781+
.arch-grid .dia-box {
782+
padding: 8px 10px;
783+
}
784+
.arch-grid .dia-box h5 {
785+
font-size: 0.5rem;
786+
margin-bottom: 4px;
787+
}
788+
.arch-grid .dia-box ul {
789+
font-size: 0.625rem;
790+
line-height: 1.55;
776791
}
777792

778-
.react-stage > .dia-box {
779-
flex: 1;
793+
/* ReAct internal quad: 2 rows × (box arrow box) */
794+
.react-quad {
795+
display: grid;
796+
grid-template-columns: minmax(0, 1fr) 48px minmax(0, 1fr);
797+
grid-template-rows: auto auto;
798+
gap: 8px 0;
799+
align-items: stretch;
780800
}
781801

782-
.react-stage-back { flex-direction: row-reverse; }
802+
.r-thinking { grid-column: 1; grid-row: 1; }
803+
.r-plan { grid-column: 2; grid-row: 1; }
804+
.r-action { grid-column: 3; grid-row: 1; }
805+
.r-decision { grid-column: 1; grid-row: 2; }
806+
.r-obs { grid-column: 2; grid-row: 2; }
807+
.r-observation { grid-column: 3; grid-row: 2; }
783808

784-
.dia-flow {
809+
.r-arr {
785810
display: flex;
811+
flex-direction: column;
786812
align-items: center;
787813
justify-content: center;
788-
flex: 0 0 auto;
789-
padding: 0 4px;
814+
gap: 2px;
790815
}
791-
792-
.dia-flow .lbl {
816+
.r-arr .arr {
817+
font-size: 16px;
818+
color: var(--fg-faint);
819+
line-height: 1;
820+
}
821+
.r-arr .lbl {
793822
font-family: var(--mono);
794-
font-size: 0.5rem;
823+
font-size: 0.4375rem;
795824
letter-spacing: 0.08em;
796825
text-transform: uppercase;
797826
color: var(--fg-faint);
798-
white-space: nowrap;
799827
}
800828

829+
/* Decision box visual */
801830
.dia-box.decision {
802831
border-style: dashed;
803832
}
@@ -806,47 +835,44 @@ header.g {
806835
.tag-no {
807836
display: inline-block;
808837
font-family: var(--mono);
809-
font-size: 0.5rem;
810-
letter-spacing: 0.08em;
811-
text-transform: uppercase;
812-
padding: 1px 6px;
838+
font-size: 0.4375rem;
839+
font-weight: 700;
840+
letter-spacing: 0.06em;
841+
padding: 0 4px;
842+
margin-right: 2px;
813843
border-radius: 2px;
814-
margin-right: 4px;
815844
}
816-
817-
.tag-yes { color: #16a34a; background: rgba(22, 163, 74, 0.12); }
818-
.tag-no { color: #dc2626; background: rgba(220, 38, 38, 0.12); }
819-
820-
.obs-box { border-width: 2px; }
845+
.tag-yes { color: #16a34a; background: rgba(22, 163, 74, 0.14); }
846+
.tag-no { color: #dc2626; background: rgba(220, 38, 38, 0.14); }
821847

822848
.obs-feedback {
823849
color: var(--accent);
824850
font-weight: 500;
825851
}
826852

827-
.arch-bridge {
853+
/* Horizontal bridge column between ReAct and Docker */
854+
.ag-bridge {
828855
display: flex;
829856
flex-direction: column;
830857
justify-content: center;
831-
gap: 18px;
858+
gap: 24px;
832859
padding: 0 4px;
833-
min-width: 80px;
834860
}
835861

836-
.arch-bridge-row {
862+
.ag-bridge-row {
837863
display: flex;
838864
flex-direction: column;
839865
align-items: center;
840866
gap: 2px;
841867
}
842868

843-
.arch-bridge-row .arr {
844-
font-size: 18px;
869+
.ag-bridge-row .arr {
870+
font-size: 20px;
845871
color: var(--fg-faint);
846872
line-height: 1;
847873
}
848874

849-
.arch-bridge-row .lbl {
875+
.ag-bridge-row .lbl {
850876
font-family: var(--mono);
851877
font-size: 0.5rem;
852878
letter-spacing: 0.08em;
@@ -855,113 +881,120 @@ header.g {
855881
white-space: nowrap;
856882
}
857883

858-
.arch-fs {
884+
/* Docker internals */
885+
.ag-fs {
859886
border: 1px dashed var(--border);
860-
padding: 10px;
861-
background: var(--bg);
887+
padding: 8px;
862888
}
863889

864-
.arch-fs-label {
890+
.ag-fs-label {
865891
font-family: var(--mono);
866-
font-size: 0.5625rem;
892+
font-size: 0.5rem;
867893
font-weight: 700;
868894
letter-spacing: 0.12em;
869895
text-transform: uppercase;
870896
color: var(--fg-dim);
871-
margin-bottom: 8px;
897+
margin-bottom: 6px;
872898
}
873899

874-
.arch-fs-inner {
900+
.ag-fs-inner {
875901
display: flex;
876902
flex-direction: column;
877-
gap: 8px;
903+
gap: 6px;
878904
}
879905

880-
.arch-feedback-connector {
906+
/* Validation: feedback arrow on top, boxes in middle, links at bottom */
907+
.ag-feedback-top {
881908
display: flex;
882909
align-items: center;
883-
justify-content: center;
884-
gap: 10px;
885-
margin: 16px auto 0;
886-
padding: 10px 16px;
887-
max-width: 520px;
888-
border: 1px solid var(--accent);
889-
border-left-width: 3px;
910+
gap: 6px;
911+
margin: -4px -12px 4px -12px;
912+
padding: 6px 12px;
890913
background: var(--accent-bg);
914+
border-bottom: 1px solid var(--accent);
891915
}
892916

893-
.arch-feedback-connector .arr {
894-
font-size: 18px;
917+
.ag-feedback-top .arr {
895918
color: var(--accent);
896-
line-height: 1;
919+
font-size: 14px;
897920
font-weight: 700;
921+
line-height: 1;
898922
}
899923

900-
.arch-feedback-connector .lbl {
924+
.ag-feedback-top .lbl {
901925
font-family: var(--mono);
902-
font-size: 0.625rem;
903-
letter-spacing: 0.06em;
926+
font-size: 0.5rem;
927+
letter-spacing: 0.08em;
928+
text-transform: uppercase;
904929
color: var(--accent);
905930
}
906931

907-
.arch-feedback-connector em {
908-
font-style: normal;
909-
color: var(--fg-dim);
910-
}
911-
912-
.arch-validation {
913-
margin-top: 12px;
914-
}
915-
916-
.validation-grid {
932+
.v-grid {
917933
display: grid;
918934
grid-template-columns: 1fr 1fr;
919-
gap: 10px;
935+
gap: 8px;
920936
}
921937

922-
.validation-links {
938+
.v-links {
923939
display: flex;
924940
flex-wrap: wrap;
925-
gap: 10px 18px;
926-
margin-top: 12px;
927-
padding-top: 12px;
941+
gap: 4px 14px;
942+
padding-top: 6px;
928943
border-top: 1px dashed var(--border);
929944
}
930945

931946
.vlink {
947+
display: inline-flex;
948+
align-items: center;
949+
gap: 4px;
932950
font-family: var(--mono);
933-
font-size: 0.625rem;
951+
font-size: 0.5rem;
934952
letter-spacing: 0.04em;
935953
color: var(--fg-dim);
936-
display: inline-flex;
937-
align-items: center;
938-
gap: 6px;
939954
}
940955

941-
.vlink .arr { color: var(--fg-faint); }
942-
.vlink em { font-style: normal; color: var(--fg-faint); }
956+
.vlink .arr { color: var(--fg-faint); font-size: 12px; line-height: 1; }
943957

944-
.vlink-feedback { color: var(--accent); font-weight: 500; }
945-
.vlink-feedback .arr,
946-
.vlink-feedback em { color: var(--accent); }
958+
/* Input/Report columns: compact, centered */
959+
.ag-input,
960+
.ag-report {
961+
align-self: stretch;
962+
}
947963

948-
/* Responsive: stack primary grid on narrow viewports */
949-
@media (max-width: 900px) {
950-
.arch-overview .arch-primary {
951-
grid-template-columns: 1fr;
964+
/* Responsive: reflow on narrow viewports */
965+
@media (max-width: 1000px) {
966+
.arch-grid {
967+
grid-template-columns: 140px minmax(0, 1fr) 260px;
968+
grid-template-rows: auto auto auto;
969+
grid-template-areas:
970+
"input react docker"
971+
"report react docker"
972+
"valid valid docker";
952973
}
953-
.arch-bridge {
954-
flex-direction: row;
955-
justify-content: center;
956-
gap: 24px;
957-
}
958-
.react-stage,
959-
.react-stage-back {
960-
flex-direction: column;
974+
.ag-bridge { display: none; }
975+
}
976+
977+
@media (max-width: 700px) {
978+
.arch-grid {
979+
grid-template-columns: 1fr;
980+
grid-template-areas:
981+
"input"
982+
"react"
983+
"valid"
984+
"docker"
985+
"report";
961986
}
962-
.validation-grid {
987+
.react-quad {
963988
grid-template-columns: 1fr;
989+
grid-template-rows: repeat(6, auto);
964990
}
991+
.r-thinking { grid-column: 1; grid-row: 1; }
992+
.r-plan { grid-column: 1; grid-row: 2; }
993+
.r-action { grid-column: 1; grid-row: 3; }
994+
.r-observation { grid-column: 1; grid-row: 4; }
995+
.r-obs { grid-column: 1; grid-row: 5; }
996+
.r-decision { grid-column: 1; grid-row: 6; }
997+
.v-grid { grid-template-columns: 1fr; }
965998
}
966999

9671000
/* ============================================================

0 commit comments

Comments
 (0)