privateboard 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +700 -17
- package/dist/cli.js.map +1 -1
- package/package.json +4 -2
- package/public/adjourn-overlay.css +194 -0
- package/public/agent-profile.js +14 -0
- package/public/app.js +862 -741
- package/public/bento.html +1396 -0
- package/public/home.html +389 -17
- package/public/index.html +211 -152
- package/public/magazine.html +1266 -0
- package/public/newspaper.html +1770 -0
- package/public/report.html +666 -55
- package/public/typing-sfx.js +158 -0
- package/public/user-settings.css +156 -19
- package/public/user-settings.js +109 -4
package/public/home.html
CHANGED
|
@@ -30,6 +30,11 @@
|
|
|
30
30
|
--amber: #B59560;
|
|
31
31
|
--red: #B5706A;
|
|
32
32
|
--cyan: #6A9B97;
|
|
33
|
+
/* Cool steel-blue accent · used for the research-room mode card.
|
|
34
|
+
Stays in the same low-saturation, warm-leaning palette as the
|
|
35
|
+
other accents so the four modes read as a coherent quartet. */
|
|
36
|
+
--steel: #8B97A8;
|
|
37
|
+
--steel-dim: #354048;
|
|
33
38
|
|
|
34
39
|
--mono: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", system-ui, sans-serif;
|
|
35
40
|
}
|
|
@@ -913,6 +918,265 @@
|
|
|
913
918
|
color: var(--text-soft);
|
|
914
919
|
}
|
|
915
920
|
|
|
921
|
+
/* ─────────── MODE CARDS · brainstorm / debate / critique ───────
|
|
922
|
+
Three figure cards, each carries: mono kicker, big numeric
|
|
923
|
+
headline, unit caption, deck, viz frame, ghost-button CTA.
|
|
924
|
+
Per-card accent (`--accent`) colours the headline numeral,
|
|
925
|
+
bracketed corners, viz strokes, and CTA hover state in one
|
|
926
|
+
unified shade.
|
|
927
|
+
Note · these styles are scoped under `.section #modes` so they
|
|
928
|
+
can't leak into the existing `.how-card` blocks two sections
|
|
929
|
+
above (which still use the older flat-card vocabulary for
|
|
930
|
+
"convene · sharpen · adjourn"). */
|
|
931
|
+
/* Four modes side-by-side at desktop, 2×2 at tablet, stacked on
|
|
932
|
+
mobile. Card padding is slightly tighter than the 3-up version
|
|
933
|
+
used to be (24 vs 28) so the four cards still breathe at
|
|
934
|
+
1280px max-width without the headline crowding the deck. */
|
|
935
|
+
#modes .modes-grid {
|
|
936
|
+
display: grid;
|
|
937
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
938
|
+
gap: 14px;
|
|
939
|
+
}
|
|
940
|
+
@media (max-width: 1100px) {
|
|
941
|
+
#modes .modes-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
942
|
+
}
|
|
943
|
+
@media (max-width: 640px) {
|
|
944
|
+
#modes .modes-grid { grid-template-columns: 1fr; }
|
|
945
|
+
}
|
|
946
|
+
#modes .mode-card {
|
|
947
|
+
background: var(--panel-2);
|
|
948
|
+
border: 1px solid var(--line-bright);
|
|
949
|
+
padding: 24px;
|
|
950
|
+
display: flex;
|
|
951
|
+
flex-direction: column;
|
|
952
|
+
color: var(--text);
|
|
953
|
+
min-height: 520px;
|
|
954
|
+
position: relative;
|
|
955
|
+
/* Bracketed corners use `currentColor`, so set the card's color
|
|
956
|
+
to its accent up-front. The body text below resets to the
|
|
957
|
+
neutral palette via explicit declarations. */
|
|
958
|
+
}
|
|
959
|
+
/* Bracketed L-corners · echoes the `.bracketed` decoration on the
|
|
960
|
+
section wrapper, but at card scale and tinted to the card accent. */
|
|
961
|
+
#modes .mode-card::before,
|
|
962
|
+
#modes .mode-card::after {
|
|
963
|
+
content: "";
|
|
964
|
+
position: absolute;
|
|
965
|
+
width: 10px; height: 10px;
|
|
966
|
+
border: 1px solid currentColor;
|
|
967
|
+
pointer-events: none;
|
|
968
|
+
opacity: 0.7;
|
|
969
|
+
}
|
|
970
|
+
#modes .mode-card::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
|
|
971
|
+
#modes .mode-card::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
|
|
972
|
+
|
|
973
|
+
#modes .mode-card.lime { --accent: var(--lime); --accent-dim: var(--lime-dim); color: var(--lime); }
|
|
974
|
+
#modes .mode-card.cyan { --accent: var(--cyan); --accent-dim: #2E4A47; color: var(--cyan); }
|
|
975
|
+
#modes .mode-card.amber { --accent: var(--amber); --accent-dim: #5A4730; color: var(--amber); }
|
|
976
|
+
#modes .mode-card.steel { --accent: var(--steel); --accent-dim: var(--steel-dim); color: var(--steel); }
|
|
977
|
+
|
|
978
|
+
#modes .mode-kicker {
|
|
979
|
+
font-size: 10px;
|
|
980
|
+
font-weight: 700;
|
|
981
|
+
letter-spacing: 0.18em;
|
|
982
|
+
text-transform: uppercase;
|
|
983
|
+
color: var(--accent);
|
|
984
|
+
margin-bottom: 18px;
|
|
985
|
+
white-space: nowrap;
|
|
986
|
+
}
|
|
987
|
+
#modes .mode-kicker::before { content: "// "; opacity: 0.6; }
|
|
988
|
+
|
|
989
|
+
#modes .mode-headline {
|
|
990
|
+
font-family: var(--mono);
|
|
991
|
+
font-weight: 700;
|
|
992
|
+
font-size: 52px;
|
|
993
|
+
line-height: 1;
|
|
994
|
+
letter-spacing: -0.03em;
|
|
995
|
+
color: var(--text);
|
|
996
|
+
white-space: nowrap;
|
|
997
|
+
}
|
|
998
|
+
#modes .mode-headline em {
|
|
999
|
+
font-style: normal;
|
|
1000
|
+
color: var(--accent);
|
|
1001
|
+
}
|
|
1002
|
+
#modes .mode-unit {
|
|
1003
|
+
font-size: 11px;
|
|
1004
|
+
font-weight: 600;
|
|
1005
|
+
letter-spacing: 0.16em;
|
|
1006
|
+
text-transform: uppercase;
|
|
1007
|
+
color: var(--text-dim);
|
|
1008
|
+
margin-top: 10px;
|
|
1009
|
+
margin-bottom: 16px;
|
|
1010
|
+
}
|
|
1011
|
+
#modes .mode-deck {
|
|
1012
|
+
font-size: 13px;
|
|
1013
|
+
line-height: 1.55;
|
|
1014
|
+
color: var(--text-soft);
|
|
1015
|
+
margin-bottom: 22px;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
/* Viz frame · pinned 168px so all three figures land on the same
|
|
1019
|
+
vertical baseline; the CTA below them therefore lines up across
|
|
1020
|
+
the row regardless of how many lines the deck wrapped to. */
|
|
1021
|
+
#modes .mode-viz {
|
|
1022
|
+
height: 168px;
|
|
1023
|
+
flex-shrink: 0;
|
|
1024
|
+
border: 1px solid var(--line);
|
|
1025
|
+
background: var(--panel);
|
|
1026
|
+
padding: 22px 14px 14px;
|
|
1027
|
+
margin-bottom: 22px;
|
|
1028
|
+
position: relative;
|
|
1029
|
+
overflow: hidden;
|
|
1030
|
+
}
|
|
1031
|
+
#modes .mode-viz::before {
|
|
1032
|
+
content: attr(data-cap);
|
|
1033
|
+
position: absolute;
|
|
1034
|
+
top: 7px;
|
|
1035
|
+
left: 12px;
|
|
1036
|
+
font-size: 9px;
|
|
1037
|
+
font-weight: 700;
|
|
1038
|
+
letter-spacing: 0.16em;
|
|
1039
|
+
text-transform: uppercase;
|
|
1040
|
+
color: var(--text-dim);
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
/* Bars (lime) · 7 vertical columns + 3 hairline gridlines via
|
|
1044
|
+
repeating-linear-gradient. Two "spike" bars take full accent;
|
|
1045
|
+
the rest sit in `--accent-dim`. */
|
|
1046
|
+
#modes .mode-bars {
|
|
1047
|
+
width: 100%;
|
|
1048
|
+
height: 100%;
|
|
1049
|
+
display: flex;
|
|
1050
|
+
align-items: flex-end;
|
|
1051
|
+
gap: 8px;
|
|
1052
|
+
background:
|
|
1053
|
+
linear-gradient(to bottom,
|
|
1054
|
+
transparent 0,
|
|
1055
|
+
transparent calc(33% - 0.5px),
|
|
1056
|
+
var(--line) calc(33% - 0.5px),
|
|
1057
|
+
var(--line) calc(33% + 0.5px),
|
|
1058
|
+
transparent calc(33% + 0.5px),
|
|
1059
|
+
transparent calc(66% - 0.5px),
|
|
1060
|
+
var(--line) calc(66% - 0.5px),
|
|
1061
|
+
var(--line) calc(66% + 0.5px),
|
|
1062
|
+
transparent calc(66% + 0.5px),
|
|
1063
|
+
transparent 100%);
|
|
1064
|
+
}
|
|
1065
|
+
#modes .mode-bars span {
|
|
1066
|
+
flex: 1;
|
|
1067
|
+
background: var(--accent-dim);
|
|
1068
|
+
min-width: 0;
|
|
1069
|
+
}
|
|
1070
|
+
#modes .mode-bars span.tall { background: var(--accent); }
|
|
1071
|
+
|
|
1072
|
+
/* Heatmap (cyan) · 6×6 director × lens. Fixed 140×140 square,
|
|
1073
|
+
centred horizontally inside the viz frame. */
|
|
1074
|
+
#modes .mode-grid {
|
|
1075
|
+
width: 140px;
|
|
1076
|
+
height: 140px;
|
|
1077
|
+
margin: 0 auto;
|
|
1078
|
+
display: grid;
|
|
1079
|
+
grid-template-columns: repeat(6, 1fr);
|
|
1080
|
+
grid-template-rows: repeat(6, 1fr);
|
|
1081
|
+
gap: 3px;
|
|
1082
|
+
}
|
|
1083
|
+
#modes .mode-grid i {
|
|
1084
|
+
background: var(--line);
|
|
1085
|
+
}
|
|
1086
|
+
#modes .mode-grid i.m { background: var(--accent-dim); }
|
|
1087
|
+
#modes .mode-grid i.d { background: var(--accent); }
|
|
1088
|
+
|
|
1089
|
+
/* Severity × likelihood (amber) · the actual 3×3 matrix the
|
|
1090
|
+
critique reports render. Axis labels live in their own fixed
|
|
1091
|
+
`36px` left column so the cells stay square. */
|
|
1092
|
+
#modes .mode-matrix {
|
|
1093
|
+
display: grid;
|
|
1094
|
+
grid-template-columns: 36px repeat(3, 1fr);
|
|
1095
|
+
grid-template-rows: 14px repeat(3, 1fr);
|
|
1096
|
+
gap: 4px;
|
|
1097
|
+
width: 100%;
|
|
1098
|
+
height: 100%;
|
|
1099
|
+
font-size: 8px;
|
|
1100
|
+
font-weight: 700;
|
|
1101
|
+
letter-spacing: 0.14em;
|
|
1102
|
+
text-transform: uppercase;
|
|
1103
|
+
}
|
|
1104
|
+
#modes .mode-matrix .ax {
|
|
1105
|
+
color: var(--text-dim);
|
|
1106
|
+
display: flex;
|
|
1107
|
+
align-items: center;
|
|
1108
|
+
overflow: hidden;
|
|
1109
|
+
}
|
|
1110
|
+
#modes .mode-matrix .ax-row { justify-content: flex-end; padding-right: 4px; }
|
|
1111
|
+
#modes .mode-matrix .cell {
|
|
1112
|
+
border: 1px solid var(--line);
|
|
1113
|
+
background: var(--panel-2);
|
|
1114
|
+
min-width: 0;
|
|
1115
|
+
min-height: 0;
|
|
1116
|
+
}
|
|
1117
|
+
#modes .mode-matrix .cell.minor { background: var(--accent-dim); border-color: var(--accent-dim); opacity: 0.55; }
|
|
1118
|
+
#modes .mode-matrix .cell.major { background: var(--accent-dim); border-color: var(--accent); }
|
|
1119
|
+
#modes .mode-matrix .cell.block { background: var(--accent); border-color: var(--accent); }
|
|
1120
|
+
|
|
1121
|
+
/* Citation network (steel) · the research card's viz. A center
|
|
1122
|
+
"claim" node connected by hairline edges to five "source" dots
|
|
1123
|
+
scattered around it. SVG is the right tool for the job — pure
|
|
1124
|
+
CSS makes the connecting lines fragile. The center node uses
|
|
1125
|
+
full accent fill, satellites use a hollow ring (accent stroke,
|
|
1126
|
+
panel-2 fill) so the eye reads "one claim, many sources." */
|
|
1127
|
+
#modes .mode-network {
|
|
1128
|
+
width: 100%;
|
|
1129
|
+
height: 100%;
|
|
1130
|
+
display: flex;
|
|
1131
|
+
align-items: center;
|
|
1132
|
+
justify-content: center;
|
|
1133
|
+
}
|
|
1134
|
+
#modes .mode-network svg {
|
|
1135
|
+
width: 100%;
|
|
1136
|
+
height: 100%;
|
|
1137
|
+
max-width: 220px;
|
|
1138
|
+
overflow: visible;
|
|
1139
|
+
}
|
|
1140
|
+
#modes .mode-network .net-edge {
|
|
1141
|
+
stroke: var(--accent-dim);
|
|
1142
|
+
stroke-width: 0.7;
|
|
1143
|
+
fill: none;
|
|
1144
|
+
}
|
|
1145
|
+
#modes .mode-network .net-claim {
|
|
1146
|
+
fill: var(--accent);
|
|
1147
|
+
stroke: var(--accent);
|
|
1148
|
+
}
|
|
1149
|
+
#modes .mode-network .net-source {
|
|
1150
|
+
fill: var(--panel);
|
|
1151
|
+
stroke: var(--accent);
|
|
1152
|
+
stroke-width: 1.2;
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
/* CTA · `[ → label ]` ghost-button vocabulary. Border lifts to
|
|
1156
|
+
accent on hover, no fill change. */
|
|
1157
|
+
#modes .mode-cta {
|
|
1158
|
+
align-self: flex-start;
|
|
1159
|
+
margin-top: auto;
|
|
1160
|
+
display: inline-flex;
|
|
1161
|
+
align-items: center;
|
|
1162
|
+
gap: 8px;
|
|
1163
|
+
padding: 8px 14px;
|
|
1164
|
+
background: transparent;
|
|
1165
|
+
border: 1px solid var(--line-bright);
|
|
1166
|
+
color: var(--text);
|
|
1167
|
+
font-size: 11px;
|
|
1168
|
+
font-weight: 700;
|
|
1169
|
+
letter-spacing: 0.14em;
|
|
1170
|
+
text-transform: uppercase;
|
|
1171
|
+
text-decoration: none;
|
|
1172
|
+
transition: border-color 0.12s, color 0.12s;
|
|
1173
|
+
white-space: nowrap;
|
|
1174
|
+
}
|
|
1175
|
+
#modes .mode-cta:hover { border-color: var(--accent); color: var(--accent); }
|
|
1176
|
+
#modes .mode-cta-arrow { color: var(--accent); }
|
|
1177
|
+
#modes .mode-cta::before { content: "["; color: var(--text-dim); margin-right: 4px; }
|
|
1178
|
+
#modes .mode-cta::after { content: "]"; color: var(--text-dim); margin-left: 4px; }
|
|
1179
|
+
|
|
916
1180
|
/* ─────────── REPORT GRID · 4 cards, each with cover art ──────
|
|
917
1181
|
Each report is a card: a bordered cover at the top holding
|
|
918
1182
|
a single piece of abstract SVG artwork (concentric target /
|
|
@@ -1509,28 +1773,136 @@
|
|
|
1509
1773
|
<div class="section-tag">Modes</div>
|
|
1510
1774
|
<h2 class="section-title">Same room. <span class="accent">Different temperature.</span></h2>
|
|
1511
1775
|
<p class="section-deck">
|
|
1512
|
-
|
|
1776
|
+
Four rooms, one cast. Brainstorm to open the surface area, debate to test the obvious answer, critique to break what's already committed, research to chase what you don't yet know. The chair enforces the rhythm so the same six directors play four different games.
|
|
1513
1777
|
</p>
|
|
1514
1778
|
</div>
|
|
1515
1779
|
|
|
1516
|
-
<div class="
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
<
|
|
1521
|
-
|
|
1780
|
+
<div class="modes-grid">
|
|
1781
|
+
|
|
1782
|
+
<!-- ─── Brainstorm · lime ─── -->
|
|
1783
|
+
<article class="mode-card lime">
|
|
1784
|
+
<div class="mode-kicker">brainstorm room</div>
|
|
1785
|
+
<h3 class="mode-headline"><em>3–6</em></h3>
|
|
1786
|
+
<div class="mode-unit">ideas per turn</div>
|
|
1787
|
+
<p class="mode-deck">Generative tone. Each director throws three to six ideas per turn — yes-and the wild ones first, prune later. Use this when you don't know the question yet.</p>
|
|
1788
|
+
|
|
1789
|
+
<div class="mode-viz" data-cap="ideas / turn">
|
|
1790
|
+
<div class="mode-bars" aria-hidden="true">
|
|
1791
|
+
<span style="height: 38%"></span>
|
|
1792
|
+
<span class="tall" style="height: 78%"></span>
|
|
1793
|
+
<span style="height: 22%"></span>
|
|
1794
|
+
<span style="height: 34%"></span>
|
|
1795
|
+
<span class="tall" style="height: 92%"></span>
|
|
1796
|
+
<span style="height: 64%"></span>
|
|
1797
|
+
<span style="height: 41%"></span>
|
|
1798
|
+
</div>
|
|
1799
|
+
</div>
|
|
1522
1800
|
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
</
|
|
1801
|
+
<a href="#install" class="mode-cta">
|
|
1802
|
+
<span class="mode-cta-arrow">→</span>
|
|
1803
|
+
Try Brainstorm
|
|
1804
|
+
</a>
|
|
1805
|
+
</article>
|
|
1806
|
+
|
|
1807
|
+
<!-- ─── Debate · cyan ─── -->
|
|
1808
|
+
<article class="mode-card cyan">
|
|
1809
|
+
<div class="mode-kicker">debate room</div>
|
|
1810
|
+
<h3 class="mode-headline"><em>6×6</em></h3>
|
|
1811
|
+
<div class="mode-unit">lens × director</div>
|
|
1812
|
+
<p class="mode-deck">Six standing directors, six lenses each. Steelman before challenge — every claim survives a triangulation through philosophy, finance, design, history.</p>
|
|
1813
|
+
|
|
1814
|
+
<div class="mode-viz" data-cap="lens coverage">
|
|
1815
|
+
<div class="mode-grid" aria-hidden="true">
|
|
1816
|
+
<!-- 6×6 = 36 cells, mostly populated. The shape is the
|
|
1817
|
+
pitch: lens × director matrix is dense, not sparse. -->
|
|
1818
|
+
<i class="m"></i><i class="d"></i><i class="m"></i><i class="m"></i><i class="d"></i><i class="m"></i>
|
|
1819
|
+
<i class="d"></i><i class="m"></i><i class="m"></i><i class="d"></i><i class="m"></i><i class="m"></i>
|
|
1820
|
+
<i class="m"></i><i class="m"></i><i class="d"></i><i class="m"></i><i class="m"></i><i class="d"></i>
|
|
1821
|
+
<i class="m"></i><i class="d"></i><i class="m"></i><i class="m"></i><i class="d"></i><i class="m"></i>
|
|
1822
|
+
<i class="d"></i><i class="m"></i><i class="m"></i><i class="d"></i><i class="m"></i><i class="m"></i>
|
|
1823
|
+
<i class="m"></i><i class="m"></i><i class="d"></i><i class="m"></i><i class="m"></i><i class="d"></i>
|
|
1824
|
+
</div>
|
|
1825
|
+
</div>
|
|
1826
|
+
|
|
1827
|
+
<a href="#install" class="mode-cta">
|
|
1828
|
+
<span class="mode-cta-arrow">→</span>
|
|
1829
|
+
Try Debate
|
|
1830
|
+
</a>
|
|
1831
|
+
</article>
|
|
1832
|
+
|
|
1833
|
+
<!-- ─── Critique · amber ─── -->
|
|
1834
|
+
<article class="mode-card amber">
|
|
1835
|
+
<div class="mode-kicker">critique room</div>
|
|
1836
|
+
<h3 class="mode-headline"><em>3×3</em></h3>
|
|
1837
|
+
<div class="mode-unit">severity × likelihood</div>
|
|
1838
|
+
<p class="mode-deck">Severity × likelihood matrix surfaces what's load-bearing. Strength preservation per blocker — every objection ships with what to keep.</p>
|
|
1839
|
+
|
|
1840
|
+
<div class="mode-viz" data-cap="risk register">
|
|
1841
|
+
<div class="mode-matrix" aria-hidden="true">
|
|
1842
|
+
<span class="ax"></span>
|
|
1843
|
+
<span class="ax">edge</span>
|
|
1844
|
+
<span class="ax">plaus.</span>
|
|
1845
|
+
<span class="ax">likely</span>
|
|
1846
|
+
|
|
1847
|
+
<span class="ax ax-row">block</span>
|
|
1848
|
+
<span class="cell major"></span>
|
|
1849
|
+
<span class="cell block"></span>
|
|
1850
|
+
<span class="cell block"></span>
|
|
1851
|
+
|
|
1852
|
+
<span class="ax ax-row">major</span>
|
|
1853
|
+
<span class="cell minor"></span>
|
|
1854
|
+
<span class="cell major"></span>
|
|
1855
|
+
<span class="cell block"></span>
|
|
1856
|
+
|
|
1857
|
+
<span class="ax ax-row">minor</span>
|
|
1858
|
+
<span class="cell minor"></span>
|
|
1859
|
+
<span class="cell minor"></span>
|
|
1860
|
+
<span class="cell major"></span>
|
|
1861
|
+
</div>
|
|
1862
|
+
</div>
|
|
1863
|
+
|
|
1864
|
+
<a href="#install" class="mode-cta">
|
|
1865
|
+
<span class="mode-cta-arrow">→</span>
|
|
1866
|
+
Try Critique
|
|
1867
|
+
</a>
|
|
1868
|
+
</article>
|
|
1869
|
+
|
|
1870
|
+
<!-- ─── Research · steel ─── -->
|
|
1871
|
+
<article class="mode-card steel">
|
|
1872
|
+
<div class="mode-kicker">research room</div>
|
|
1873
|
+
<h3 class="mode-headline"><em>5+</em></h3>
|
|
1874
|
+
<div class="mode-unit">sources per claim</div>
|
|
1875
|
+
<p class="mode-deck">Claims demand evidence. Each director cross-references their assertions; the chair flags weak chains. Use this when the question hinges on facts you don't yet have.</p>
|
|
1876
|
+
|
|
1877
|
+
<div class="mode-viz" data-cap="citation graph">
|
|
1878
|
+
<div class="mode-network" aria-hidden="true">
|
|
1879
|
+
<!-- Center "claim" node + 5 satellite "source" nodes,
|
|
1880
|
+
wired with hairline edges. Coordinates picked so the
|
|
1881
|
+
layout reads as a star with one slightly-asymmetric
|
|
1882
|
+
outlier (top-right) — a research figure, not a
|
|
1883
|
+
perfect symmetric mandala. -->
|
|
1884
|
+
<svg viewBox="0 0 200 130" preserveAspectRatio="xMidYMid meet">
|
|
1885
|
+
<line class="net-edge" x1="100" y1="65" x2="38" y2="28" />
|
|
1886
|
+
<line class="net-edge" x1="100" y1="65" x2="160" y2="22" />
|
|
1887
|
+
<line class="net-edge" x1="100" y1="65" x2="178" y2="78" />
|
|
1888
|
+
<line class="net-edge" x1="100" y1="65" x2="125" y2="115" />
|
|
1889
|
+
<line class="net-edge" x1="100" y1="65" x2="36" y2="100" />
|
|
1890
|
+
<circle class="net-source" cx="38" cy="28" r="4.5" />
|
|
1891
|
+
<circle class="net-source" cx="160" cy="22" r="4.5" />
|
|
1892
|
+
<circle class="net-source" cx="178" cy="78" r="4.5" />
|
|
1893
|
+
<circle class="net-source" cx="125" cy="115" r="4.5" />
|
|
1894
|
+
<circle class="net-source" cx="36" cy="100" r="4.5" />
|
|
1895
|
+
<circle class="net-claim" cx="100" cy="65" r="7" />
|
|
1896
|
+
</svg>
|
|
1897
|
+
</div>
|
|
1898
|
+
</div>
|
|
1899
|
+
|
|
1900
|
+
<a href="#install" class="mode-cta">
|
|
1901
|
+
<span class="mode-cta-arrow">→</span>
|
|
1902
|
+
Try Research
|
|
1903
|
+
</a>
|
|
1904
|
+
</article>
|
|
1528
1905
|
|
|
1529
|
-
<div class="how-card">
|
|
1530
|
-
<span class="how-step">critique</span>
|
|
1531
|
-
<h3>Find every weakness, mercilessly.</h3>
|
|
1532
|
-
<p>You're already committed to the idea — you want it tested. The cast goes after structure, assumptions, and second-order effects until what's left is load-bearing.</p>
|
|
1533
|
-
</div>
|
|
1534
1906
|
</div>
|
|
1535
1907
|
</section>
|
|
1536
1908
|
|