privateboard 0.1.37 → 0.1.40
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/boot.js +1415 -91
- package/dist/boot.js.map +1 -1
- package/dist/cli.js +1415 -91
- package/dist/cli.js.map +1 -1
- package/dist/server.js +1271 -81
- package/dist/server.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/public/__avatar3d_test.html +156 -0
- package/public/adjourn-overlay.css +2 -2
- package/public/agent-overlay.css +27 -15
- package/public/agent-overlay.js +3 -1
- package/public/agent-profile.css +331 -41
- package/public/agent-profile.js +499 -75
- package/public/app-updater.css +1 -1
- package/public/app.js +2090 -547
- package/public/avatar-3d-snap.js +205 -0
- package/public/avatar-3d.js +792 -0
- package/public/avatar-customizer.html +274 -0
- package/public/avatar3d-editor.css +240 -0
- package/public/avatar3d-editor.js +481 -0
- package/public/avatars/3d/chair.png +0 -0
- package/public/avatars/3d/first-principles.png +0 -0
- package/public/avatars/3d/historian.png +0 -0
- package/public/avatars/3d/long-horizon.png +0 -0
- package/public/avatars/3d/phenomenologist.png +0 -0
- package/public/avatars/3d/socrates.png +0 -0
- package/public/avatars/3d/user-empathy.png +0 -0
- package/public/avatars/3d/value-investor.png +0 -0
- package/public/core-avatars.js +86 -0
- package/public/home-3d-loader.js +15 -4
- package/public/home-3d-mock.js +18 -7
- package/public/home.html +80 -18
- package/public/i18n.js +279 -4
- package/public/icons/avatar_1779855104027.glb +0 -0
- package/public/icons/logo.png +0 -0
- package/public/icons/new-style.glb +0 -0
- package/public/icons/new-style2.glb +0 -0
- package/public/icons/new-style3.glb +0 -0
- package/public/icons/new-style4.glb +0 -0
- package/public/icons/new-style5.glb +0 -0
- package/public/icons/office.glb +0 -0
- package/public/icons/stuff.glb +0 -0
- package/public/index.html +203 -182
- package/public/mention-picker.js +1 -1
- package/public/new-agent.css +7 -7
- package/public/new-agent.js +46 -20
- package/public/office-viewer.html +340 -0
- package/public/onboarding.css +5 -5
- package/public/quote-cta.css +5 -4
- package/public/quote-cta.js +50 -5
- package/public/room-settings.css +24 -9
- package/public/stuff-viewer.html +330 -0
- package/public/thread.css +1211 -0
- package/public/user-settings.css +16 -19
- package/public/user-settings.js +86 -78
- package/public/vendor/BufferGeometryUtils.js +1434 -0
- package/public/vendor/DRACOLoader.js +739 -0
- package/public/vendor/GLTFLoader.js +4860 -0
- package/public/vendor/RoomEnvironment.js +185 -0
- package/public/vendor/SkeletonUtils.js +496 -0
- package/public/vendor/draco/draco_decoder.js +34 -0
- package/public/vendor/draco/draco_decoder.wasm +0 -0
- package/public/vendor/draco/draco_encoder.js +33 -0
- package/public/vendor/draco/draco_wasm_wrapper.js +117 -0
- package/public/vendor/meshopt_decoder.module.js +196 -0
- package/public/voice-3d-banner.js +12 -0
- package/public/voice-3d.js +1407 -432
- package/public/voice-clone.css +875 -0
- package/public/voice-clone.js +1351 -0
- package/public/voice-replay.css +3 -3
- package/public/voice-replay.js +21 -0
- package/public/avatar-skill.js +0 -629
- package/public/icons/folded-sidebar.png +0 -0
package/public/agent-profile.css
CHANGED
|
@@ -899,7 +899,7 @@
|
|
|
899
899
|
color: var(--text-soft);
|
|
900
900
|
text-transform: uppercase;
|
|
901
901
|
background: transparent;
|
|
902
|
-
border: 0.5px solid var(--line-
|
|
902
|
+
border: 0.5px solid var(--line-strong);
|
|
903
903
|
padding: 3px 8px;
|
|
904
904
|
cursor: pointer;
|
|
905
905
|
transition: border-color 0.12s, color 0.12s, background 0.12s;
|
|
@@ -1167,7 +1167,7 @@
|
|
|
1167
1167
|
line-height: 1;
|
|
1168
1168
|
}
|
|
1169
1169
|
.dream-z.z1 { left: 14%; font-size: 18px; animation-delay: 0s; }
|
|
1170
|
-
.dream-z.z2 { left: 30%; font-size:
|
|
1170
|
+
.dream-z.z2 { left: 30%; font-size: 14px; animation-delay: 0.6s; }
|
|
1171
1171
|
.dream-z.z3 { left: 50%; font-size: 11px; animation-delay: 1.2s; }
|
|
1172
1172
|
.dream-z.z4 { left: 70%; font-size: 16px; animation-delay: 1.7s; }
|
|
1173
1173
|
.dream-z.z5 { left: 86%; font-size: 12px; animation-delay: 2.4s; }
|
|
@@ -1639,13 +1639,6 @@
|
|
|
1639
1639
|
height: 76px;
|
|
1640
1640
|
margin-top: -46px;
|
|
1641
1641
|
margin-bottom: 0;
|
|
1642
|
-
border-radius: 50%;
|
|
1643
|
-
background: var(--panel-2);
|
|
1644
|
-
/* Ring color follows the page bg so the avatar reads as separated
|
|
1645
|
-
from the cover gradient on every theme · in light themes the ring
|
|
1646
|
-
is white against the gray cover; in dark themes the ring is the
|
|
1647
|
-
near-black bg against the panel-toned cover. */
|
|
1648
|
-
border: 4px solid var(--bg);
|
|
1649
1642
|
overflow: hidden;
|
|
1650
1643
|
display: flex;
|
|
1651
1644
|
align-items: center;
|
|
@@ -1657,8 +1650,9 @@
|
|
|
1657
1650
|
width: 100%;
|
|
1658
1651
|
height: 100%;
|
|
1659
1652
|
object-fit: cover;
|
|
1660
|
-
|
|
1661
|
-
|
|
1653
|
+
/* The 3D-avatar portrait is a smooth downscaled PNG · keep it smooth
|
|
1654
|
+
(pixelated would render it blocky at this size). */
|
|
1655
|
+
image-rendering: auto;
|
|
1662
1656
|
}
|
|
1663
1657
|
/* Text column · sits to the right of the avatar in the same row,
|
|
1664
1658
|
so name + meta read as one tight identifier block. */
|
|
@@ -2439,7 +2433,7 @@
|
|
|
2439
2433
|
}
|
|
2440
2434
|
.ap-stat-v {
|
|
2441
2435
|
font-family: var(--mono);
|
|
2442
|
-
font-size:
|
|
2436
|
+
font-size: 14px;
|
|
2443
2437
|
font-weight: 700;
|
|
2444
2438
|
color: var(--text);
|
|
2445
2439
|
letter-spacing: -0.005em;
|
|
@@ -2568,6 +2562,54 @@
|
|
|
2568
2562
|
border-top: none;
|
|
2569
2563
|
padding-top: 5px;
|
|
2570
2564
|
}
|
|
2565
|
+
/* Cloned voices group · lime kicker so user-owned customs stand out
|
|
2566
|
+
from system / premade voices below them. Same density as the
|
|
2567
|
+
regular group header, just colored. */
|
|
2568
|
+
.ap-model-group.ap-model-group-cloned {
|
|
2569
|
+
color: var(--lime);
|
|
2570
|
+
}
|
|
2571
|
+
.ap-model-opt.ap-model-opt-cloned .ap-model-opt-label {
|
|
2572
|
+
color: var(--text);
|
|
2573
|
+
font-weight: 600;
|
|
2574
|
+
}
|
|
2575
|
+
.ap-model-opt.ap-model-opt-cloned::before {
|
|
2576
|
+
content: "✦";
|
|
2577
|
+
color: var(--lime);
|
|
2578
|
+
margin-right: 6px;
|
|
2579
|
+
font-size: 10px;
|
|
2580
|
+
}
|
|
2581
|
+
/* Row wrapper for inline rename · holds the option button + an
|
|
2582
|
+
optional ✎ chip. Hover anywhere on the row reveals the chip. */
|
|
2583
|
+
.ap-model-opt-row {
|
|
2584
|
+
position: relative;
|
|
2585
|
+
display: flex;
|
|
2586
|
+
align-items: stretch;
|
|
2587
|
+
}
|
|
2588
|
+
.ap-model-opt-row .ap-model-opt {
|
|
2589
|
+
flex: 1;
|
|
2590
|
+
min-width: 0;
|
|
2591
|
+
}
|
|
2592
|
+
.ap-model-opt-rename {
|
|
2593
|
+
flex-shrink: 0;
|
|
2594
|
+
width: 28px;
|
|
2595
|
+
background: transparent;
|
|
2596
|
+
border: 0;
|
|
2597
|
+
border-left: 0.5px solid var(--line);
|
|
2598
|
+
color: var(--text-faint);
|
|
2599
|
+
cursor: pointer;
|
|
2600
|
+
font-size: 12px;
|
|
2601
|
+
line-height: 1;
|
|
2602
|
+
opacity: 0;
|
|
2603
|
+
transition: opacity 0.14s, color 0.14s, background 0.14s;
|
|
2604
|
+
}
|
|
2605
|
+
.ap-model-opt-row:hover .ap-model-opt-rename,
|
|
2606
|
+
.ap-model-opt-rename:focus-visible {
|
|
2607
|
+
opacity: 1;
|
|
2608
|
+
}
|
|
2609
|
+
.ap-model-opt-rename:hover {
|
|
2610
|
+
color: var(--lime);
|
|
2611
|
+
background: var(--panel-2);
|
|
2612
|
+
}
|
|
2571
2613
|
|
|
2572
2614
|
/* Row · single-line label + uppercase mono hint, baseline-aligned,
|
|
2573
2615
|
same vertical rhythm as .cmp-dd-opt. No per-row divider. */
|
|
@@ -2920,7 +2962,7 @@
|
|
|
2920
2962
|
.ap-instr-view em { color: var(--text-soft); font-style: italic; }
|
|
2921
2963
|
.ap-instr-view code {
|
|
2922
2964
|
font-family: var(--mono);
|
|
2923
|
-
font-size:
|
|
2965
|
+
font-size: 14px;
|
|
2924
2966
|
background: var(--bg);
|
|
2925
2967
|
border: 0.5px solid var(--line-bright);
|
|
2926
2968
|
padding: 1px 5px;
|
|
@@ -2937,7 +2979,7 @@
|
|
|
2937
2979
|
background: transparent;
|
|
2938
2980
|
border: none;
|
|
2939
2981
|
padding: 0;
|
|
2940
|
-
font-size:
|
|
2982
|
+
font-size: 14px;
|
|
2941
2983
|
line-height: 1.5;
|
|
2942
2984
|
}
|
|
2943
2985
|
|
|
@@ -3419,7 +3461,7 @@
|
|
|
3419
3461
|
}
|
|
3420
3462
|
.ap-ulm-claim {
|
|
3421
3463
|
font-family: var(--font-human);
|
|
3422
|
-
font-size:
|
|
3464
|
+
font-size: 14px;
|
|
3423
3465
|
line-height: 1.5;
|
|
3424
3466
|
color: var(--text);
|
|
3425
3467
|
letter-spacing: -0.003em;
|
|
@@ -3432,7 +3474,7 @@
|
|
|
3432
3474
|
border: 0.5px solid var(--text-soft);
|
|
3433
3475
|
color: var(--text);
|
|
3434
3476
|
font-family: var(--font-human);
|
|
3435
|
-
font-size:
|
|
3477
|
+
font-size: 14px;
|
|
3436
3478
|
line-height: 1.5;
|
|
3437
3479
|
padding: 8px 10px;
|
|
3438
3480
|
outline: none;
|
|
@@ -3988,11 +4030,251 @@
|
|
|
3988
4030
|
.ap-skill-info-configure-mark { font-size: 12px; }
|
|
3989
4031
|
|
|
3990
4032
|
/* ── Voice configuration panel ───────────────────────────── */
|
|
3991
|
-
/* The wrapping `.ap-voice-config` no longer needs spacing of
|
|
3992
|
-
own —
|
|
3993
|
-
|
|
3994
|
-
|
|
3995
|
-
the
|
|
4033
|
+
/* The wrapping `.ap-voice-config` no longer needs outer spacing of
|
|
4034
|
+
its own — `.ap-block-body` already handles padding. Inside, each
|
|
4035
|
+
logical group (voice picker / emotion / preview line / clone /
|
|
4036
|
+
advanced) lives in its own `.ap-voice-section`. Sections separate
|
|
4037
|
+
with a hairline divider on top so the user can scan "what knob
|
|
4038
|
+
am I touching" without the panel feeling like a wall of mixed
|
|
4039
|
+
inputs. Each section can optionally carry an `.ap-voice-section-head`
|
|
4040
|
+
mono kicker label naming the group. */
|
|
4041
|
+
.ap-voice-config {
|
|
4042
|
+
display: flex;
|
|
4043
|
+
flex-direction: column;
|
|
4044
|
+
}
|
|
4045
|
+
.ap-voice-section {
|
|
4046
|
+
padding: 14px 0;
|
|
4047
|
+
border-top: 0.5px solid var(--line-bright);
|
|
4048
|
+
}
|
|
4049
|
+
.ap-voice-section:first-child {
|
|
4050
|
+
padding-top: 0;
|
|
4051
|
+
border-top: none;
|
|
4052
|
+
}
|
|
4053
|
+
.ap-voice-section:last-child {
|
|
4054
|
+
padding-bottom: 0;
|
|
4055
|
+
}
|
|
4056
|
+
.ap-voice-section-head {
|
|
4057
|
+
font-family: var(--mono);
|
|
4058
|
+
font-size: 10px;
|
|
4059
|
+
font-weight: 700;
|
|
4060
|
+
letter-spacing: 0.18em;
|
|
4061
|
+
text-transform: uppercase;
|
|
4062
|
+
color: var(--text-faint);
|
|
4063
|
+
margin-bottom: 10px;
|
|
4064
|
+
display: block;
|
|
4065
|
+
}
|
|
4066
|
+
.ap-voice-section-head::before {
|
|
4067
|
+
content: "// ";
|
|
4068
|
+
color: color-mix(in srgb, var(--lime) 60%, var(--text-faint));
|
|
4069
|
+
}
|
|
4070
|
+
|
|
4071
|
+
/* Clone voice trigger · sits below the advanced sliders, reads
|
|
4072
|
+
as a single CTA row (icon + title + hint) rather than a row of
|
|
4073
|
+
chips, mirroring `.ap-skill-info-configure` button gravity.
|
|
4074
|
+
Click opens the boardroomVoiceClone overlay (public/voice-clone.js). */
|
|
4075
|
+
/* Custom preview text row · the wrapping `.ap-voice-section` owns
|
|
4076
|
+
the section header now; this just holds the textarea. */
|
|
4077
|
+
.ap-voice-preview-row {
|
|
4078
|
+
display: flex;
|
|
4079
|
+
flex-direction: column;
|
|
4080
|
+
gap: 6px;
|
|
4081
|
+
}
|
|
4082
|
+
.ap-voice-preview-text {
|
|
4083
|
+
width: 100%;
|
|
4084
|
+
resize: vertical;
|
|
4085
|
+
min-height: 48px;
|
|
4086
|
+
max-height: 140px;
|
|
4087
|
+
padding: 8px 10px;
|
|
4088
|
+
background: var(--panel-2);
|
|
4089
|
+
border: 0.5px solid var(--line-bright);
|
|
4090
|
+
border-radius: 6px;
|
|
4091
|
+
color: var(--text);
|
|
4092
|
+
font-family: var(--sans);
|
|
4093
|
+
font-size: 14px;
|
|
4094
|
+
line-height: 1.5;
|
|
4095
|
+
outline: none;
|
|
4096
|
+
transition: border-color 0.12s;
|
|
4097
|
+
}
|
|
4098
|
+
.ap-voice-preview-text:focus { border-color: var(--lime); }
|
|
4099
|
+
.ap-voice-preview-text::placeholder {
|
|
4100
|
+
color: var(--text-faint);
|
|
4101
|
+
font-style: italic;
|
|
4102
|
+
}
|
|
4103
|
+
|
|
4104
|
+
/* ── "Forge Voice" CTA · HUD-styled trigger ─────────────────────
|
|
4105
|
+
The clone overlay is the most playful surface in the agent
|
|
4106
|
+
profile, so the CTA gets a gamified hardware-HUD look rather
|
|
4107
|
+
than a plain dashed-border card: lime L corners (same vocabulary
|
|
4108
|
+
as the room-settings modal frame), a pulsing mic rune, mono
|
|
4109
|
+
uppercase title with bracketed arrow, a slow horizontal
|
|
4110
|
+
scan-line sweep on hover, and a soft lime glow when focused. */
|
|
4111
|
+
.ap-voice-forge {
|
|
4112
|
+
position: relative;
|
|
4113
|
+
display: grid;
|
|
4114
|
+
grid-template-columns: 1fr;
|
|
4115
|
+
grid-auto-rows: auto;
|
|
4116
|
+
row-gap: 6px;
|
|
4117
|
+
width: 100%;
|
|
4118
|
+
padding: 14px 18px 12px;
|
|
4119
|
+
background: linear-gradient(
|
|
4120
|
+
180deg,
|
|
4121
|
+
color-mix(in srgb, var(--lime) 6%, var(--panel-2)) 0%,
|
|
4122
|
+
var(--panel-2) 68%
|
|
4123
|
+
);
|
|
4124
|
+
border: 0.5px solid color-mix(in srgb, var(--lime) 36%, var(--line-bright));
|
|
4125
|
+
border-radius: 4px;
|
|
4126
|
+
color: var(--text);
|
|
4127
|
+
text-align: left;
|
|
4128
|
+
cursor: pointer;
|
|
4129
|
+
overflow: hidden;
|
|
4130
|
+
isolation: isolate;
|
|
4131
|
+
transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.12s ease;
|
|
4132
|
+
}
|
|
4133
|
+
.ap-voice-forge:hover {
|
|
4134
|
+
border-color: var(--lime);
|
|
4135
|
+
box-shadow:
|
|
4136
|
+
0 0 0 1px color-mix(in srgb, var(--lime) 24%, transparent),
|
|
4137
|
+
0 8px 26px -14px color-mix(in srgb, var(--lime) 60%, transparent);
|
|
4138
|
+
}
|
|
4139
|
+
.ap-voice-forge:active { transform: translateY(1px); }
|
|
4140
|
+
|
|
4141
|
+
/* Corner brackets · four lime L shapes pinned to each corner. */
|
|
4142
|
+
.ap-voice-forge-corner {
|
|
4143
|
+
position: absolute;
|
|
4144
|
+
width: 10px;
|
|
4145
|
+
height: 10px;
|
|
4146
|
+
border: 1.5px solid var(--lime);
|
|
4147
|
+
pointer-events: none;
|
|
4148
|
+
z-index: 2;
|
|
4149
|
+
transition: width 0.18s, height 0.18s;
|
|
4150
|
+
}
|
|
4151
|
+
.ap-voice-forge-corner-tl { top: -1px; left: -1px; border-right: none; border-bottom: none; }
|
|
4152
|
+
.ap-voice-forge-corner-tr { top: -1px; right: -1px; border-left: none; border-bottom: none; }
|
|
4153
|
+
.ap-voice-forge-corner-bl { bottom: -1px; left: -1px; border-right: none; border-top: none; }
|
|
4154
|
+
.ap-voice-forge-corner-br { bottom: -1px; right: -1px; border-left: none; border-top: none; }
|
|
4155
|
+
.ap-voice-forge:hover .ap-voice-forge-corner { width: 14px; height: 14px; }
|
|
4156
|
+
|
|
4157
|
+
/* Horizontal scan-line sweep · slow lime gradient slides L→R on
|
|
4158
|
+
hover. Sits behind text. */
|
|
4159
|
+
.ap-voice-forge-scan {
|
|
4160
|
+
position: absolute;
|
|
4161
|
+
inset: 0;
|
|
4162
|
+
pointer-events: none;
|
|
4163
|
+
background: linear-gradient(
|
|
4164
|
+
90deg,
|
|
4165
|
+
transparent 0%,
|
|
4166
|
+
transparent 38%,
|
|
4167
|
+
color-mix(in srgb, var(--lime) 18%, transparent) 50%,
|
|
4168
|
+
transparent 62%,
|
|
4169
|
+
transparent 100%
|
|
4170
|
+
);
|
|
4171
|
+
background-size: 260% 100%;
|
|
4172
|
+
background-position: -120% 0;
|
|
4173
|
+
z-index: 1;
|
|
4174
|
+
opacity: 0;
|
|
4175
|
+
transition: opacity 0.18s ease;
|
|
4176
|
+
}
|
|
4177
|
+
.ap-voice-forge:hover .ap-voice-forge-scan {
|
|
4178
|
+
opacity: 1;
|
|
4179
|
+
animation: ap-voice-forge-scan-sweep 2.4s linear infinite;
|
|
4180
|
+
}
|
|
4181
|
+
@keyframes ap-voice-forge-scan-sweep {
|
|
4182
|
+
0% { background-position: -120% 0; }
|
|
4183
|
+
100% { background-position: 220% 0; }
|
|
4184
|
+
}
|
|
4185
|
+
|
|
4186
|
+
.ap-voice-forge-kicker {
|
|
4187
|
+
position: relative;
|
|
4188
|
+
z-index: 3;
|
|
4189
|
+
font-family: var(--mono);
|
|
4190
|
+
font-size: 10px;
|
|
4191
|
+
font-weight: 700;
|
|
4192
|
+
letter-spacing: 0.22em;
|
|
4193
|
+
text-transform: uppercase;
|
|
4194
|
+
color: color-mix(in srgb, var(--lime) 80%, var(--text));
|
|
4195
|
+
}
|
|
4196
|
+
|
|
4197
|
+
.ap-voice-forge-body {
|
|
4198
|
+
position: relative;
|
|
4199
|
+
z-index: 3;
|
|
4200
|
+
display: flex;
|
|
4201
|
+
align-items: center;
|
|
4202
|
+
gap: 12px;
|
|
4203
|
+
}
|
|
4204
|
+
.ap-voice-forge-rune {
|
|
4205
|
+
position: relative;
|
|
4206
|
+
width: 36px;
|
|
4207
|
+
height: 36px;
|
|
4208
|
+
flex-shrink: 0;
|
|
4209
|
+
display: inline-flex;
|
|
4210
|
+
align-items: center;
|
|
4211
|
+
justify-content: center;
|
|
4212
|
+
color: var(--lime);
|
|
4213
|
+
border: 0.5px solid color-mix(in srgb, var(--lime) 45%, transparent);
|
|
4214
|
+
border-radius: 4px;
|
|
4215
|
+
background: color-mix(in srgb, var(--lime) 8%, transparent);
|
|
4216
|
+
}
|
|
4217
|
+
.ap-voice-forge-rune svg { width: 18px; height: 18px; }
|
|
4218
|
+
.ap-voice-forge-rune::after {
|
|
4219
|
+
content: "";
|
|
4220
|
+
position: absolute;
|
|
4221
|
+
inset: -3px;
|
|
4222
|
+
border-radius: 6px;
|
|
4223
|
+
border: 0.5px solid color-mix(in srgb, var(--lime) 50%, transparent);
|
|
4224
|
+
opacity: 0;
|
|
4225
|
+
transition: opacity 0.18s;
|
|
4226
|
+
pointer-events: none;
|
|
4227
|
+
}
|
|
4228
|
+
.ap-voice-forge:hover .ap-voice-forge-rune::after {
|
|
4229
|
+
opacity: 1;
|
|
4230
|
+
animation: ap-voice-forge-rune-pulse 1.4s ease-in-out infinite;
|
|
4231
|
+
}
|
|
4232
|
+
@keyframes ap-voice-forge-rune-pulse {
|
|
4233
|
+
0%, 100% { transform: scale(1); opacity: 0.65; }
|
|
4234
|
+
50% { transform: scale(1.18); opacity: 0; }
|
|
4235
|
+
}
|
|
4236
|
+
.ap-voice-forge-title {
|
|
4237
|
+
flex: 1;
|
|
4238
|
+
min-width: 0;
|
|
4239
|
+
font-family: var(--mono);
|
|
4240
|
+
font-size: 14px;
|
|
4241
|
+
font-weight: 700;
|
|
4242
|
+
letter-spacing: 0.08em;
|
|
4243
|
+
text-transform: uppercase;
|
|
4244
|
+
color: var(--text);
|
|
4245
|
+
white-space: nowrap;
|
|
4246
|
+
overflow: hidden;
|
|
4247
|
+
text-overflow: ellipsis;
|
|
4248
|
+
}
|
|
4249
|
+
.ap-voice-forge-title::before { content: "[ + "; color: var(--text-faint); }
|
|
4250
|
+
.ap-voice-forge-title::after { content: " ]"; color: var(--text-faint); }
|
|
4251
|
+
.ap-voice-forge:hover .ap-voice-forge-title::before,
|
|
4252
|
+
.ap-voice-forge:hover .ap-voice-forge-title::after { color: var(--lime); }
|
|
4253
|
+
.ap-voice-forge-arrow {
|
|
4254
|
+
flex-shrink: 0;
|
|
4255
|
+
font-family: var(--mono);
|
|
4256
|
+
font-size: 18px;
|
|
4257
|
+
line-height: 1;
|
|
4258
|
+
color: var(--lime);
|
|
4259
|
+
transform: translateX(0);
|
|
4260
|
+
transition: transform 0.18s ease;
|
|
4261
|
+
}
|
|
4262
|
+
.ap-voice-forge:hover .ap-voice-forge-arrow { transform: translateX(4px); }
|
|
4263
|
+
|
|
4264
|
+
.ap-voice-forge-hint {
|
|
4265
|
+
position: relative;
|
|
4266
|
+
z-index: 3;
|
|
4267
|
+
font-family: var(--mono);
|
|
4268
|
+
font-size: 11px;
|
|
4269
|
+
color: var(--text-faint);
|
|
4270
|
+
letter-spacing: 0.02em;
|
|
4271
|
+
line-height: 1.55;
|
|
4272
|
+
}
|
|
4273
|
+
.ap-voice-forge-hint::before {
|
|
4274
|
+
content: "// ";
|
|
4275
|
+
color: color-mix(in srgb, var(--lime) 60%, var(--text-faint));
|
|
4276
|
+
}
|
|
4277
|
+
|
|
3996
4278
|
.ap-voice-picker-row {
|
|
3997
4279
|
display: flex;
|
|
3998
4280
|
align-items: center;
|
|
@@ -4078,7 +4360,6 @@
|
|
|
4078
4360
|
display: flex;
|
|
4079
4361
|
flex-direction: column;
|
|
4080
4362
|
gap: 6px;
|
|
4081
|
-
margin-top: 8px;
|
|
4082
4363
|
}
|
|
4083
4364
|
.ap-voice-emotion-row .ap-voice-emotion-trigger {
|
|
4084
4365
|
width: 100%;
|
|
@@ -4299,45 +4580,54 @@
|
|
|
4299
4580
|
pointer-events: none;
|
|
4300
4581
|
z-index: 0;
|
|
4301
4582
|
}
|
|
4583
|
+
/* Advanced tuning · sits at the very bottom of the voice block,
|
|
4584
|
+
under the Forge CTA. Plain header row — no chip / no border / no
|
|
4585
|
+
background — so it reads as "extra knobs if you need them" rather
|
|
4586
|
+
than another card vying for attention. Only the top hairline
|
|
4587
|
+
divider remains for section separation; the `+ / −` marker uses
|
|
4588
|
+
lime to stay legible in both light and dark themes. */
|
|
4589
|
+
/* Advanced details wrapper · now lives inside its own
|
|
4590
|
+
.ap-voice-section, which already supplies the top divider +
|
|
4591
|
+
vertical padding. Strip the duplicate spacing/border so the
|
|
4592
|
+
chevron row aligns with neighbouring section headers. */
|
|
4302
4593
|
.ap-voice-advanced {
|
|
4303
|
-
margin
|
|
4304
|
-
border-top:
|
|
4305
|
-
padding-top:
|
|
4594
|
+
margin: 0;
|
|
4595
|
+
border-top: 0;
|
|
4596
|
+
padding-top: 0;
|
|
4306
4597
|
}
|
|
4307
|
-
/* Header row · label on the left, custom expand/collapse indicator
|
|
4308
|
-
on the right. Removes the browser's default ▶ disclosure triangle
|
|
4309
|
-
on the left so the row reads as a clean section header rather
|
|
4310
|
-
than a list item. The right-edge `+ / −` glyph swaps when
|
|
4311
|
-
[open] is set — same hairline mono register the rest of the
|
|
4312
|
-
profile uses for header actions. */
|
|
4313
4598
|
.ap-voice-advanced summary {
|
|
4314
4599
|
display: flex;
|
|
4315
4600
|
align-items: center;
|
|
4316
4601
|
justify-content: space-between;
|
|
4317
4602
|
gap: 12px;
|
|
4603
|
+
padding: 4px 0;
|
|
4318
4604
|
font-family: var(--mono, monospace);
|
|
4319
|
-
font-size:
|
|
4320
|
-
letter-spacing: 0.
|
|
4605
|
+
font-size: 11px;
|
|
4606
|
+
letter-spacing: 0.14em;
|
|
4321
4607
|
text-transform: uppercase;
|
|
4322
4608
|
color: var(--text-soft);
|
|
4323
4609
|
cursor: pointer;
|
|
4324
4610
|
user-select: none;
|
|
4325
4611
|
list-style: none;
|
|
4612
|
+
transition: color 0.12s;
|
|
4326
4613
|
}
|
|
4327
4614
|
.ap-voice-advanced summary::-webkit-details-marker { display: none; }
|
|
4328
4615
|
.ap-voice-advanced summary::marker { display: none; content: ""; }
|
|
4329
4616
|
.ap-voice-advanced summary::after {
|
|
4330
4617
|
content: "+";
|
|
4331
4618
|
font-family: var(--mono, monospace);
|
|
4332
|
-
font-size:
|
|
4333
|
-
font-weight:
|
|
4619
|
+
font-size: 16px;
|
|
4620
|
+
font-weight: 700;
|
|
4334
4621
|
line-height: 1;
|
|
4335
|
-
color: var(--
|
|
4336
|
-
transition: color 0.12s;
|
|
4622
|
+
color: var(--lime);
|
|
4623
|
+
transition: color 0.12s, transform 0.18s ease;
|
|
4624
|
+
}
|
|
4625
|
+
.ap-voice-advanced[open] summary::after {
|
|
4626
|
+
content: "−";
|
|
4627
|
+
transform: rotate(180deg);
|
|
4337
4628
|
}
|
|
4338
|
-
.ap-voice-advanced[open] summary::after { content: "−"; }
|
|
4339
4629
|
.ap-voice-advanced summary:hover { color: var(--text); }
|
|
4340
|
-
.ap-voice-advanced summary:hover::after { color: var(--
|
|
4630
|
+
.ap-voice-advanced summary:hover::after { color: var(--lime); }
|
|
4341
4631
|
|
|
4342
4632
|
/* ────────────────────────────────────────────────────────────
|
|
4343
4633
|
Persona dossier · Full-mode agents only
|
|
@@ -4687,7 +4977,7 @@ html.is-electron-mac .ap-persona-overlay-backdrop {
|
|
|
4687
4977
|
}
|
|
4688
4978
|
.ap-persona-overlay-md h3 {
|
|
4689
4979
|
font-family: var(--font-human);
|
|
4690
|
-
font-size:
|
|
4980
|
+
font-size: 14px;
|
|
4691
4981
|
font-weight: 700;
|
|
4692
4982
|
color: var(--text);
|
|
4693
4983
|
margin: 18px 0 6px;
|
|
@@ -4942,7 +5232,7 @@ body.ap-persona-overlay-open { overflow: hidden; }
|
|
|
4942
5232
|
.ap-buildlog-phase-blurb {
|
|
4943
5233
|
margin: 0;
|
|
4944
5234
|
font-family: var(--font-human);
|
|
4945
|
-
font-size:
|
|
5235
|
+
font-size: 14px;
|
|
4946
5236
|
line-height: 1.6;
|
|
4947
5237
|
color: var(--text-soft);
|
|
4948
5238
|
padding-left: 34px;
|