comparison mrjunejune/src/jrpg/jrpg.css @ 261:b401627fc49e

Add JRPG mock flows and interactive previews Add scripted mock SSE commands, custom event forwarding, animated chat turns, full-height message navigation, and a cyberpunk resume dossier. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <mrjunejune@users.noreply.github.com>
date Wed, 05 Aug 2026 20:38:32 -0700
parents 1f9877b637e9
children 0f45474c1b1a
comparison
equal deleted inserted replaced
260:1f9877b637e9 261:b401627fc49e
175 gap: var(--zenbu-sys-space-group); 175 gap: var(--zenbu-sys-space-group);
176 padding-bottom: var(--zenbu-sys-padding-sm); 176 padding-bottom: var(--zenbu-sys-padding-sm);
177 border-bottom: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft); 177 border-bottom: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft);
178 } 178 }
179 179
180 .jrpg-panel-heading span,
181 .jrpg-preview-kicker, 180 .jrpg-preview-kicker,
182 .jrpg-menu-label, 181 .jrpg-menu-label,
183 .jrpg-brand > p, 182 .jrpg-brand > p,
184 .jrpg-dialog-heading p, 183 .jrpg-dialog-heading p,
185 .jrpg-preview-stats dt { 184 .jrpg-preview-stats dt {
192 margin: 0; 191 margin: 0;
193 color: var(--mjj-jrpg-text); 192 color: var(--mjj-jrpg-text);
194 font-size: var(--zenbu-sys-font-size-lg); 193 font-size: var(--zenbu-sys-font-size-lg);
195 } 194 }
196 195
197 zen-message-scroller, 196 zen-message-scroller {
198 .jrpg-message-viewport {
199 display: block; 197 display: block;
198 overflow: hidden;
200 min-height: 0; 199 min-height: 0;
201 height: 100%; 200 height: 100%;
202 } 201 }
203 202
204 .jrpg-message-viewport { 203 zen-message-scroller > .jrpg-message-viewport {
204 box-sizing: border-box;
205 height: 100%;
206 min-height: 0;
207 max-height: none;
205 overflow-y: auto; 208 overflow-y: auto;
206 overflow-anchor: none; 209 overflow-anchor: none;
207 overscroll-behavior: contain; 210 overscroll-behavior: contain;
208 scrollbar-color: var(--mjj-jrpg-frame) transparent; 211 scrollbar-color: var(--mjj-jrpg-frame) transparent;
209 } 212 }
222 gap: var(--zenbu-sys-space-control); 225 gap: var(--zenbu-sys-space-control);
223 padding-left: var(--zenbu-sys-padding-sm); 226 padding-left: var(--zenbu-sys-padding-sm);
224 border-left: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-accent); 227 border-left: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-accent);
225 } 228 }
226 229
230 .jrpg-message[hidden] {
231 display: none;
232 }
233
227 .jrpg-message[data-speaker="June"] { 234 .jrpg-message[data-speaker="June"] {
228 border-left-color: var(--mjj-jrpg-info); 235 border-left-color: var(--mjj-jrpg-info);
229 } 236 }
230 237
231 .jrpg-message strong { 238 .jrpg-message strong {
234 } 241 }
235 242
236 .jrpg-message p { 243 .jrpg-message p {
237 margin: 0; 244 margin: 0;
238 color: var(--mjj-jrpg-text); 245 color: var(--mjj-jrpg-text);
239 } 246 white-space: pre-wrap;
240 247 }
241 .jrpg-next { 248
242 display: flex; 249 .jrpg-message[data-streaming="true"] p::after {
250 display: inline-block;
251 width: 0.65em;
252 height: 1em;
253 margin-left: var(--zenbu-sys-space-icon-label);
254 background: currentColor;
255 content: "";
256 vertical-align: -0.12em;
257 animation: mjj-jrpg-cursor
258 calc(var(--zenbu-sys-motion-duration-layout) * 2)
259 steps(1, end)
260 infinite;
261 }
262
263 @keyframes mjj-jrpg-cursor {
264 50% {
265 opacity: 0;
266 }
267 }
268
269 @media (prefers-reduced-motion: reduce) {
270 .jrpg-message[data-streaming="true"] p::after {
271 animation: none;
272 }
273 }
274
275 .jrpg-turn-navigation {
276 display: grid;
277 grid-template-columns: auto minmax(0, 1fr) auto;
243 align-items: center; 278 align-items: center;
244 justify-content: end;
245 gap: var(--zenbu-sys-space-icon-label); 279 gap: var(--zenbu-sys-space-icon-label);
246 margin: 0; 280 padding-top: var(--zenbu-sys-padding-sm);
281 border-top: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft);
282 }
283
284 .jrpg-turn-navigation zen-button,
285 .jrpg-turn-navigation button {
286 width: 100%;
287 }
288
289 .jrpg-turn-navigation button {
290 justify-content: center;
291 border: var(--zenbu-sys-stroke-width) solid transparent;
292 border-radius: 0;
293 background: transparent;
247 color: var(--mjj-jrpg-primary); 294 color: var(--mjj-jrpg-primary);
248 font-size: var(--zenbu-sys-font-size-xs); 295 font-size: var(--zenbu-sys-font-size-xs);
296 cursor: pointer;
297 }
298
299 .jrpg-turn-navigation button:hover:not(:disabled) {
300 border-color: var(--mjj-jrpg-primary);
301 background: var(--mjj-jrpg-surface-raised);
302 }
303
304 .jrpg-turn-navigation button:disabled {
305 color: var(--mjj-jrpg-text-muted);
306 cursor: not-allowed;
307 opacity: var(--zenbu-sys-opacity-disabled);
308 }
309
310 .jrpg-turn-navigation [data-turn-position] {
311 justify-self: center;
312 color: var(--mjj-jrpg-text-muted);
313 font-size: var(--zenbu-sys-font-size-xs);
314 letter-spacing: 0.08em;
249 } 315 }
250 316
251 .jrpg-utility { 317 .jrpg-utility {
252 grid-area: utility; 318 grid-area: utility;
253 display: grid; 319 display: grid;
297 min-height: 0; 363 min-height: 0;
298 } 364 }
299 365
300 .jrpg-preview-panel { 366 .jrpg-preview-panel {
301 display: grid; 367 display: grid;
302 grid-template-rows: auto auto minmax(0, 1fr) auto auto; 368 grid-template-rows: auto auto auto minmax(0, 1fr) auto auto;
303 gap: var(--zenbu-sys-space-group); 369 gap: var(--zenbu-sys-space-group);
304 height: 100%; 370 height: 100%;
305 padding: var(--zenbu-sys-padding-lg); 371 padding: var(--zenbu-sys-padding-lg);
306 background: 372 background:
307 linear-gradient( 373 linear-gradient(
323 color: var(--mjj-jrpg-primary); 389 color: var(--mjj-jrpg-primary);
324 } 390 }
325 391
326 .jrpg-preview-panel > p:not(.jrpg-preview-kicker) { 392 .jrpg-preview-panel > p:not(.jrpg-preview-kicker) {
327 color: var(--mjj-jrpg-text); 393 color: var(--mjj-jrpg-text);
394 }
395
396 .jrpg-work-showcase {
397 display: grid;
398 grid-template-columns: repeat(2, minmax(0, 1fr));
399 align-content: start;
400 gap: var(--zenbu-sys-space-control);
401 min-height: 0;
402 margin: 0;
403 padding: 0;
404 overflow-y: auto;
405 list-style: none;
406 }
407
408 .jrpg-work-showcase a {
409 display: grid;
410 gap: var(--zenbu-sys-space-icon-label);
411 height: 100%;
412 padding: var(--zenbu-sys-padding-sm);
413 border: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft);
414 background: var(--mjj-jrpg-panel);
415 color: var(--mjj-jrpg-primary);
416 text-decoration: none;
417 }
418
419 .jrpg-work-showcase a:hover,
420 .jrpg-work-showcase a:focus-visible {
421 border-color: var(--mjj-jrpg-accent);
422 background: var(--mjj-jrpg-surface-raised);
423 }
424
425 .jrpg-work-showcase small {
426 color: var(--mjj-jrpg-text-muted);
427 font-size: var(--zenbu-sys-font-size-xs);
328 } 428 }
329 429
330 .jrpg-preview-stats { 430 .jrpg-preview-stats {
331 display: grid; 431 display: grid;
332 grid-template-columns: repeat(2, 1fr); 432 grid-template-columns: repeat(2, 1fr);
432 532
433 .jrpg-preview-dialog dialog > p { 533 .jrpg-preview-dialog dialog > p {
434 margin-bottom: var(--zenbu-sys-space-content); 534 margin-bottom: var(--zenbu-sys-space-content);
435 } 535 }
436 536
537 .jrpg-preview-dialog dialog.jrpg-resume-dialog {
538 width: min(94vw, 72rem);
539 max-height: calc(100dvh - var(--zenbu-sys-space-container));
540 overflow: hidden;
541 }
542
543 .jrpg-preview-dialog dialog.jrpg-resume-dialog[open] {
544 display: grid;
545 grid-template-rows: auto auto minmax(0, 1fr) auto;
546 gap: var(--zenbu-sys-space-group);
547 }
548
549 .jrpg-resume-dossier {
550 min-height: 0;
551 padding: var(--zenbu-sys-padding-lg);
552 overflow: auto;
553 border: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft);
554 background: var(--mjj-jrpg-surface-sunken);
555 scrollbar-color: var(--mjj-jrpg-frame) transparent;
556 }
557
558 .jrpg-resume-dossier[hidden],
559 [data-dialog-copy][hidden],
560 [data-resume-status][hidden],
561 [data-resume-download][hidden] {
562 display: none;
563 }
564
565 .jrpg-resume-dossier [data-resume-status] {
566 margin: 0;
567 color: var(--mjj-jrpg-highlight);
568 }
569
570 .jrpg-resume-dossier [data-resume-content] {
571 display: grid;
572 gap: var(--zenbu-sys-space-group);
573 color: var(--mjj-jrpg-text);
574 }
575
576 .jrpg-resume-dossier :where(p, ul) {
577 margin-block: 0;
578 }
579
580 .jrpg-resume-dossier .info {
581 display: grid;
582 gap: var(--zenbu-sys-space-control);
583 padding: var(--zenbu-sys-padding-lg);
584 border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-primary);
585 background: var(--mjj-jrpg-panel);
586 }
587
588 .jrpg-resume-dossier .info > p {
589 color: var(--mjj-jrpg-primary);
590 font-size: var(--zenbu-sys-font-size-xl);
591 }
592
593 .jrpg-resume-dossier .header-address-style,
594 .jrpg-resume-dossier .header-social-style {
595 display: flex;
596 flex-wrap: wrap;
597 gap: var(--zenbu-sys-space-control);
598 color: var(--mjj-jrpg-text-muted);
599 }
600
601 .jrpg-resume-dossier .sub-header {
602 display: grid;
603 grid-template-columns: auto minmax(0, 1fr);
604 align-items: center;
605 gap: var(--zenbu-sys-space-control);
606 margin-top: var(--zenbu-sys-space-content);
607 }
608
609 .jrpg-resume-dossier .sub-header h2 {
610 margin: 0;
611 color: var(--mjj-jrpg-highlight);
612 font-size: var(--zenbu-sys-font-size-lg);
613 text-transform: uppercase;
614 }
615
616 .jrpg-resume-dossier .sub-header .line {
617 height: var(--zenbu-sys-stroke-width-emphasis);
618 background: var(--mjj-jrpg-accent);
619 }
620
621 .jrpg-resume-dossier .flex-box {
622 display: flex;
623 align-items: baseline;
624 justify-content: space-between;
625 gap: var(--zenbu-sys-space-control);
626 padding-top: var(--zenbu-sys-padding-sm);
627 border-top: var(--zenbu-sys-stroke-width) solid var(--mjj-jrpg-frame-soft);
628 }
629
630 .jrpg-resume-dossier .entry-title-style,
631 .jrpg-resume-dossier .entry-position-style {
632 color: var(--mjj-jrpg-primary);
633 }
634
635 .jrpg-resume-dossier .entry-location-style,
636 .jrpg-resume-dossier .entry-date-style,
637 .jrpg-resume-dossier .skill-type-style {
638 color: var(--mjj-jrpg-text-muted);
639 text-align: right;
640 }
641
642 .jrpg-resume-dossier .description-style {
643 display: grid;
644 gap: var(--zenbu-sys-space-control);
645 padding-left: var(--zenbu-sys-padding-xl);
646 }
647
648 .jrpg-resume-dossier a {
649 color: var(--mjj-jrpg-primary);
650 text-decoration-color: var(--mjj-jrpg-accent);
651 text-underline-offset: var(--zenbu-sys-space-icon-label);
652 }
653
654 .jrpg-dialog-actions {
655 display: grid;
656 grid-template-columns: repeat(2, minmax(0, 1fr));
657 gap: var(--zenbu-sys-space-control);
658 }
659
437 mjj-jrpg-composer { 660 mjj-jrpg-composer {
438 grid-area: composer; 661 grid-area: composer;
439 display: block; 662 display: block;
663 min-height: 0;
440 padding: var(--zenbu-sys-padding-md); 664 padding: var(--zenbu-sys-padding-md);
441 background: var(--mjj-jrpg-surface); 665 background: var(--mjj-jrpg-surface);
442 } 666 }
443 667
444 .jrpg-composer { 668 .jrpg-composer {
445 display: grid; 669 display: grid;
446 grid-template-columns: minmax(0, 1fr) auto; 670 grid-template-columns: minmax(0, 1fr) auto;
447 gap: var(--zenbu-sys-space-control); 671 grid-template-rows: minmax(0, 1fr) auto;
448 } 672 gap: var(--zenbu-sys-space-control);
449 673 height: 100%;
450 .jrpg-composer zen-field { 674 min-height: 0;
451 display: grid; 675 }
676
677 .jrpg-composer zen-field[appearance="plain"] {
678 display: grid;
679 grid-column: 1;
680 grid-row: 1;
681 grid-template-rows: auto minmax(0, 1fr);
452 gap: var(--zenbu-sys-space-icon-label); 682 gap: var(--zenbu-sys-space-icon-label);
683 min-height: 0;
453 } 684 }
454 685
455 .jrpg-composer label, 686 .jrpg-composer label,
456 .jrpg-composer-hint { 687 .jrpg-composer-hint {
457 grid-column: 1 / -1; 688 grid-column: 1 / -1;
689 grid-row: 2;
458 color: var(--mjj-jrpg-text-muted); 690 color: var(--mjj-jrpg-text-muted);
459 font-size: var(--zenbu-sys-font-size-xs); 691 font-size: var(--zenbu-sys-font-size-xs);
460 } 692 }
461 693
694 .jrpg-composer zen-field label {
695 grid-column: 1;
696 grid-row: 1;
697 }
698
462 .jrpg-composer textarea { 699 .jrpg-composer textarea {
463 box-sizing: border-box; 700 box-sizing: border-box;
701 grid-column: 1;
702 grid-row: 2;
464 width: 100%; 703 width: 100%;
704 height: 100%;
465 min-height: calc(var(--zenbu-control-height) * 2); 705 min-height: calc(var(--zenbu-control-height) * 2);
466 resize: vertical; 706 resize: none;
467 padding: 707 padding:
468 var(--zenbu-control-padding-block) 708 var(--zenbu-control-padding-block)
469 var(--zenbu-control-padding-inline); 709 var(--zenbu-control-padding-inline);
470 border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame); 710 border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame);
471 border-radius: 0; 711 border-radius: 0;
481 .jrpg-page :where(a, button, textarea):focus-visible { 721 .jrpg-page :where(a, button, textarea):focus-visible {
482 outline: var(--zenbu-sys-focus-width) solid var(--mjj-jrpg-focus); 722 outline: var(--zenbu-sys-focus-width) solid var(--mjj-jrpg-focus);
483 outline-offset: var(--zenbu-sys-focus-offset); 723 outline-offset: var(--zenbu-sys-focus-offset);
484 } 724 }
485 725
726 .jrpg-composer-actions {
727 display: flex;
728 grid-column: 2;
729 grid-row: 1;
730 flex-direction: column;
731 justify-content: flex-end;
732 gap: var(--zenbu-sys-space-control);
733 }
734
486 .jrpg-composer zen-button { 735 .jrpg-composer zen-button {
487 align-self: end; 736 width: 100%;
737 }
738
739 .jrpg-composer zen-button[hidden] {
740 display: none;
488 } 741 }
489 742
490 .jrpg-composer zen-button > button { 743 .jrpg-composer zen-button > button {
744 width: 100%;
491 border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame); 745 border: var(--zenbu-sys-stroke-width-emphasis) solid var(--mjj-jrpg-frame);
492 border-radius: 0; 746 border-radius: 0;
493 background: var(--mjj-jrpg-primary); 747 background: var(--mjj-jrpg-primary);
494 color: var(--mjj-jrpg-primary-foreground); 748 color: var(--mjj-jrpg-primary-foreground);
495 cursor: pointer; 749 cursor: pointer;
653 max-width: 9rem; 907 max-width: 9rem;
654 } 908 }
655 909
656 .jrpg-composer { 910 .jrpg-composer {
657 grid-template-columns: 1fr; 911 grid-template-columns: 1fr;
658 } 912 grid-template-rows:
659 913 minmax(calc(var(--zenbu-control-height) * 3), 1fr)
660 .jrpg-composer zen-button { 914 auto
661 width: 100%; 915 auto;
916 }
917
918 .jrpg-composer-actions {
919 grid-column: 1;
920 grid-row: 2;
921 flex-direction: row;
922 }
923
924 .jrpg-composer-hint {
925 grid-row: 3;
926 }
927
928 .jrpg-composer-actions zen-button {
929 flex: 1;
930 }
931
932 .jrpg-work-showcase,
933 .jrpg-dialog-actions {
934 grid-template-columns: 1fr;
935 }
936
937 .jrpg-resume-dossier .flex-box {
938 display: grid;
939 }
940
941 .jrpg-resume-dossier .entry-location-style,
942 .jrpg-resume-dossier .entry-date-style,
943 .jrpg-resume-dossier .skill-type-style {
944 text-align: left;
662 } 945 }
663 946
664 .jrpg-composer zen-button > button { 947 .jrpg-composer zen-button > button {
665 width: 100%; 948 width: 100%;
666 } 949 }