2026-08-14 12:43:11 +02:00
@ import url ( 'https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700&family=Special+Elite&display=swap' ) ;
: root { font-family : Inter , sans-serif ; color : #d8ded9 ; background : #071916 ; font-synthesis : none ; }
* { box-sizing : border-box ; }
body { margin : 0 ; overflow : hidden ; }
button { font : inherit ; color : inherit ; }
button : focus-visible { outline : 2 px solid #e99a44 ; outline-offset : 2 px ; }
. desktop { height : 100 vh ; display : grid ; grid-template-rows : 74 px 1 fr 112 px ; background : #071916 ; }
. menubar { display : grid ; grid-template-columns : 310 px 1 fr auto ; align-items : center ; padding : 0 24 px ; border-bottom : 1 px solid #315049 ; background : #0a211d ; box-shadow : 0 5 px 22 px #0008 ; z-index : 10 ; }
. brand { display : flex ; gap : 13 px ; align-items : center ; font : 600 12 px IBM Plex Mono ; letter-spacing : .08 em ; }
. brand em { color : #78938c ; font-style : normal ; font-weight : 400 ; }
. brand-mark { width : 35 px ; height : 35 px ; display : grid ; place-items : center ; border : 1 px solid #d88938 ; color : #e99a44 ; font : 600 11 px IBM Plex Mono ; transform : rotate ( -3 deg ); }
. menubar nav { display : flex ; height : 100 % ; align-items : stretch ; }
. menubar nav button { background : none ; border : 0 ; padding : 0 18 px ; font : 500 11 px IBM Plex Mono ; letter-spacing : .1 em ; color : #94aaa4 ; cursor : pointer ; }
2026-08-14 16:18:13 +02:00
. menubar nav button : hover , . menubar nav button . active { background : #112f2a ; color : white ; }
2026-08-15 09:29:08 +02:00
. admin-menu { position : relative ; display : flex ; align-items : stretch ; }. admin-menu > button { height : 100 % ; }. admin-menu-items { position : absolute ; z-index : 30 ; top : calc ( 100 % - 1 px ); right : 0 ; width : 235 px ; padding : 5 px ; display : grid ; background : #c5c9c2 ; border : 2 px outset #e5e8e2 ; box-shadow : 6 px 8 px 0 #020907 aa ; }. menubar nav . admin-menu-items button { min-height : 37 px ; padding : 0 12 px ; color : #263d36 ; border : 1 px solid transparent ; text-align : left ; font-size : 9 px ; }. menubar nav . admin-menu-items button : hover , . menubar nav . admin-menu-items button : focus-visible { background : #173d34 ; border-color : #526c64 ; color : #f1f3ef ; }
2026-08-14 16:18:13 +02:00
. brief-count { display : inline - grid ; min-width : 17 px ; height : 17 px ; margin-left : 7 px ; padding : 0 4 px ; place-items : center ; border-radius : 9 px ; background : #b56d30 ; color : #fff3df ; font : 600 9 px IBM Plex Mono ; }
2026-08-14 12:43:11 +02:00
. terminal-status { font : 10 px IBM Plex Mono ; color : #769087 ; letter-spacing : .06 em ; display : flex ; gap : 8 px ; align-items : center ; white-space : nowrap ; }
. terminal-status i { width : 7 px ; height : 7 px ; background : #71c888 ; border-radius : 50 % ; box-shadow : 0 0 8 px #71c888 ; }
. terminal-status span { color : #d9a05d ; margin-left : 20 px ; font-size : 13 px ; }
. workspace { display : flex ; min-height : 0 ; }
. documents-panel { width : 315 px ; flex : 0 0 auto ; background : #102722 ; border-right : 1 px solid #3c514b ; transition : margin .25 s ; display : grid ; grid-template-rows : auto auto auto 1 fr auto ; z-index : 5 ; box-shadow : 10 px 0 40 px #00100d 66 ; }
. documents-panel . closed { margin-left : -315 px ; }
. panel-heading { padding : 25 px 20 px 17 px ; display : flex ; justify-content : space-between ; align-items : start ; }
. panel-heading small , . case-heading small , . timeline small , . help small { font : 500 9 px IBM Plex Mono ; letter-spacing : .18 em ; color : #78958d ; }
. panel-heading h2 { font : 600 17 px IBM Plex Mono ; letter-spacing : .04 em ; margin : 6 px 0 0 ; }
. panel-heading sup { color : #d89043 ; font-size : 10 px ; }
. panel-heading button { background : none ; border : 0 ; color : #6f8b83 ; cursor : pointer ; }
2026-08-14 17:57:00 +02:00
. search { margin : 0 15 px 12 px ; height : 36 px ; border : 1 px solid #314a44 ; display : flex ; align-items : center ; gap : 9 px ; padding : 0 10 px 0 12 px ; color : #607d75 ; font-size : 11 px ; }
. search : focus-within { border-color : #9a683d ; box-shadow : inset 0 0 0 1 px #6f4b2f ; color : #c18b55 ; }
. search input { min-width : 0 ; flex : 1 ; border : 0 ; outline : 0 ; background : transparent ; color : #d6ded9 ; font : 10 px IBM Plex Mono ; }
. search input :: placeholder { color : #607d75 ; }. search input :: -webkit-search-cancel-button { display : none ; }
. search button { display : grid ; place-items : center ; padding : 2 px ; border : 0 ; background : transparent ; color : #8a9d97 ; cursor : pointer ; }
2026-08-14 12:43:11 +02:00
. import-document { margin : 0 15 px 12 px ; height : 34 px ; border : 1 px dashed #a26d3d ; background : #19322c ; color : #d79754 ; display : flex ; justify-content : center ; align-items : center ; gap : 8 px ; font : 600 9 px IBM Plex Mono ; letter-spacing : .08 em ; cursor : pointer ; }. import-document : hover { background : #244039 ; border-style : solid ; }. file-input { display : none ; }
. doc-list { overflow : auto ; border-top : 1 px solid #243d36 ; }
2026-08-14 17:57:00 +02:00
. no-document-results { min-height : 150 px ; padding : 32 px 20 px ; display : grid ; place-items : center ; align-content : center ; gap : 9 px ; text-align : center ; color : #617d75 ; }. no-document-results b { color : #91a59f ; font : 600 9 px IBM Plex Mono ; letter-spacing : .08 em ; }. no-document-results span { font : 8 px / 1.5 IBM Plex Mono ; }
2026-08-14 12:43:11 +02:00
. doc-row { width : 100 % ; min-height : 76 px ; border : 0 ; border-bottom : 1 px solid #243d36 ; background : transparent ; padding : 11 px 13 px ; display : grid ; grid-template-columns : 45 px 1 fr 18 px ; text-align : left ; align-items : center ; gap : 10 px ; cursor : pointer ; }
. doc-row : hover { background : #18342e ; }
2026-08-15 09:34:53 +02:00
. doc-row . selected { position : relative ; background : #304534 ; box-shadow : inset 4 px 0 #f1cf55 , inset 0 0 20 px #d8b947 22 ; }
. doc-row . selected :: after { content : 'LOCATED' ; position : absolute ; top : 7 px ; right : 9 px ; color : #f0ce57 ; font : 600 6 px IBM Plex Mono ; letter-spacing : .12 em ; }
. doc-row . selected . doc-icon { border-color : #e7c750 ; box-shadow : 0 0 12 px #efd44f 66 , 3 px 3 px #081a16 ; }
2026-08-14 12:43:11 +02:00
. doc-row strong { display : block ; color : #d8dfda ; font-size : 12 px ; margin-bottom : 6 px ; }
. doc-row span { display : block ; font : 9 px IBM Plex Mono ; color : #708b83 ; }
. doc-row > svg { color : #527068 ; }
. doc-icon { height : 49 px ; border : 1 px solid #61736d ; display : grid ; place-items : center ; position : relative ; color : #ccd2cd ; background : #263c36 ; box-shadow : 3 px 3 px #081a16 ; }
. doc-icon b { position : absolute ; bottom : 2 px ; right : 2 px ; background : #d58e42 ; color : #14231f ; font : 600 7 px IBM Plex Mono ; padding : 1 px 3 px ; }
. tint-1 { background : #38352d ; } . tint-2 { background : #263c3f ; }
. panel-foot { height : 42 px ; border-top : 1 px solid #354b45 ; padding : 0 16 px ; display : flex ; align-items : center ; gap : 8 px ; font : 9 px IBM Plex Mono ; color : #718d84 ; }
. panel-foot span { margin-left : auto ; color : #b27b43 ; }
. board-shell { flex : 1 ; min-width : 0 ; position : relative ; background : #0b1d19 ; }
. case-heading { position : absolute ; top : 20 px ; left : 27 px ; z-index : 2 ; display : flex ; color : #dde2de ; pointer-events : none ; }
. case-heading h1 { font : 500 24 px Special Elite , serif ; margin : 6 px 0 5 px ; letter-spacing : .02 em ; }
. case-heading p { margin : 0 ; color : #a06d3e ; font : 9 px IBM Plex Mono ; letter-spacing : .13 em ; }
. case-number { border-left : 1 px solid #415750 ; margin-left : 26 px ; padding-left : 17 px ; font : 8 px IBM Plex Mono ; color : #6d867f ; line-height : 1.5 ; }
. case-number b { color : #bdc9c3 ; font-size : 13 px ; }
. board-viewport { position : absolute ; inset : 0 ; overflow : hidden ; touch-action : none ; overscroll-behavior : contain ; cursor : default ; background-image : radial-gradient ( #49615a 55 1 px , transparent 1 px ), linear-gradient ( 90 deg , #18302a 33 1 px , transparent 1 px ), linear-gradient ( #18302a 33 1 px , transparent 1 px ); background-size : 20 px 20 px , 100 px 100 px , 100 px 100 px ; }
2026-08-14 17:59:03 +02:00
. board-viewport . tool-move { cursor : grab ; }
. board-viewport . tool-move : active { cursor : grabbing ; }
2026-08-14 12:43:11 +02:00
. board-viewport . tool-hand , . board-viewport . tool-hand . evidence-card , . board-viewport . tool-hand . source-file-widget { cursor : grab ; }
. board-viewport . tool-hand : active , . board-viewport . tool-hand . evidence-card : active , . board-viewport . tool-hand . source-file-widget : active { cursor : grabbing ; }
2026-08-14 16:37:50 +02:00
. board-viewport . threading , . board-viewport . threading . evidence-card , . board-viewport . threading . source-file-widget { cursor : crosshair ; }
2026-08-14 19:37:43 +02:00
. board-trash { position : absolute ; z-index : 18 ; left : 18 px ; bottom : 18 px ; width : 136 px ; min-height : 64 px ; padding : 10 px 12 px ; display : flex ; align-items : center ; gap : 10 px ; border : 1 px dashed #6f5d50 ; background : #10231f dd ; color : #866f61 ; box-shadow : 4 px 5 px 0 #020907 88 ; opacity : .48 ; pointer-events : none ; transition : opacity .16 s ease , color .16 s ease , border-color .16 s ease , background .16 s ease , transform .16 s ease , box-shadow .16 s ease ; }
. board-trash span { display : grid ; gap : 3 px ; }. board-trash b { font : 600 9 px IBM Plex Mono ; letter-spacing : .1 em ; }. board-trash small { font : 6 px IBM Plex Mono ; letter-spacing : .05 em ; white-space : nowrap ; }
. board-trash . drag-ready { opacity : 1 ; color : #d69568 ; border-color : #b06e4f ; background : #1c2b26 ee ; transform : translateY ( -2 px ); }
. board-trash . active { color : #ffe2cf ; border-color : #df5c48 ; background : #6d2823 ed ; box-shadow : 0 0 0 4 px #c44737 38 , 6 px 8 px 0 #020907 99 ; transform : scale ( 1.05 ); }
2026-08-14 12:43:11 +02:00
. board { transform-origin : 0 0 ; position : absolute ; background : linear-gradient ( 110 deg , #0c211d 33 , #122b25 1 f ); }
. board-stamp { position : absolute ; left : 1480 px ; top : 240 px ; color : #6e807a 2 e ; border : 2 px solid #6e807a 20 ; padding : 9 px 13 px ; transform : rotate ( -4 deg ); font : 600 11 px IBM Plex Mono ; }
. board-stamp span { display : block ; text-align : center ; font-size : 8 px ; margin-top : 4 px ; }
. connections { position : absolute ; inset : 0 ; overflow : visible ; pointer-events : none ; }
. connections path { stroke : #8f2828 ; stroke-width : 3 ; fill : none ; filter : drop-shadow ( 1 px 2 px 0 #020907 aa ); }
. connections circle { fill : #b33a32 ; stroke : #581916 ; stroke-width : 2 ; }
2026-08-14 16:37:50 +02:00
. connections . thread-preview path { stroke : #bc3b35 ; stroke-width : 2.5 ; stroke-dasharray : 8 6 ; opacity : .82 ; }
. connections . thread-preview circle : last-child { fill : #0d211c ; stroke : #c84a43 ; }
. connections g . tightening path { stroke-dasharray : 1400 ; animation : thread-tighten .9 s cubic-bezier ( .15 , .75 , .22 , 1 ) both ; }
@ keyframes thread-tighten { 0 % { stroke-dashoffset : 1400 ; filter : drop-shadow ( 0 0 7 px #d85a50 ); } 70 % { stroke-dashoffset : 0 ; stroke-width : 4 ; } 100 % { stroke-dashoffset : 0 ; stroke-width : 3 ; } }
2026-08-14 17:02:17 +02:00
. luggage-tag . luggage-tag { background : linear-gradient ( 100 deg , #aa8755 , #c7a773 52 % , #a9834f ); border : 1 px solid #d3b681 ; color : #33291c ; clip-path : polygon ( 13 px 0 , calc ( 100 % - 13 px ) 0 , 100 % 14 px , 100 % 100 % , 0 100 % , 0 14 px ); transform-origin : 50 % 8 px ; transition : transform .22 s ease , filter .22 s ease ; box-shadow : 5 px 7 px 0 #020b09 80 , inset 0 0 18 px #604522 33 ; }
. luggage-tag . luggage-tag :: before { content : '' ; position : absolute ; z-index : 3 ; top : 6 px ; left : 50 % ; width : 10 px ; height : 10 px ; translate : -50 % 0 ; border-radius : 50 % ; background : #12211d ; border : 2 px solid #70583b ; box-shadow : 0 0 0 2 px #c5a66f , inset 1 px 1 px 2 px #000 ; }
. luggage-tag . luggage-tag :: after { content : '' ; position : absolute ; left : 9 px ; right : 9 px ; bottom : -1 px ; height : 4 px ; background : #745a37 ; clip-path : polygon ( 0 0 , 5 % 50 % , 12 % 0 , 20 % 70 % , 28 % 0 , 40 % 60 % , 49 % 0 , 61 % 70 % , 73 % 0 , 83 % 60 % , 91 % 0 , 100 % 50 % , 100 % 100 % , 0 100 % ); }
2026-08-14 18:26:20 +02:00
. thread-tag { position : absolute ; z-index : 7 ; border : 0 ; cursor : grab ; touch-action : none ; transition : left .1 s ease-out , top .1 s ease-out , transform .22 s ease , filter .22 s ease , opacity .15 s ease ; }
2026-08-14 18:11:51 +02:00
. board-viewport . threading . thread-tag { pointer-events : none ; opacity : .72 ; }
2026-08-14 18:26:20 +02:00
. thread-tag . dragging { z-index : 15 ; cursor : grabbing ; transition : transform .12 s ease , filter .12 s ease ; filter : drop-shadow ( 0 0 7 px #d99a58 aa ); }
. thread-tag-position { position : absolute ; z-index : 8 ; left : 50 % ; top : -22 px ; translate : -50 % 0 ; min-width : 34 px ; padding : 3 px 5 px ; border : 1 px solid #9a683d ; background : #102a24 ; color : #e6a45e ; font : 7 px IBM Plex Mono ; box-shadow : 2 px 3 px #020907 99 ; }
2026-08-14 17:02:17 +02:00
. thread-tag . untagged { width : 13 px ; height : 13 px ; padding : 0 ; transform : translate ( -50 % , -50 % ); border : 2 px solid #611d1c ; border-radius : 50 % ; background : #a63531 ; box-shadow : 1 px 2 px #020907 aa ; }
. thread-tag . untagged i { display : none ; }
. thread-tag . untagged : hover , . thread-tag . untagged : focus-visible { background : #e07158 ; box-shadow : 0 0 0 4 px #b23e35 44 ; }
2026-08-14 17:07:30 +02:00
. thread-tag . compact { transform : translate ( -50 % , -50 % ); display : flex ; align-items : center ; gap : 5 px ; max-width : 190 px ; padding : 0 ; background : transparent ; color : #241d17 ; }
. thread-tag . compact i { flex : 0 0 auto ; width : 9 px ; height : 9 px ; border : 2 px solid #611d1c ; border-radius : 50 % ; background : #a63531 ; box-shadow : 1 px 2 px #020907 aa ; }
. thread-tag-compact-label { overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; padding : 5 px 7 px 4 px ; border : 1 px solid #9c917b ; background : #d7c9a9 ; box-shadow : 2 px 3 px #020907 99 ; font : 8 px Special Elite ; }
. thread-tag . compact : hover i , . thread-tag . compact : focus-visible i { background : #e07158 ; box-shadow : 0 0 0 4 px #b23e35 44 ; }
2026-08-14 17:02:17 +02:00
. thread-tag . labelled { width : 108 px ; height : 154 px ; padding : 27 px 10 px 11 px ; transform : translate ( -50 % , 4 px ) rotate ( -2 deg ); }
. thread-tag . labelled i { display : none ; }
. thread-tag-content { display : grid ; align-content : start ; gap : 7 px ; height : 108 px ; padding-top : 10 px ; overflow : hidden ; text-align : left ; transition : transform .22 s ease ; }
. thread-tag-content small { padding-bottom : 4 px ; border-bottom : 1 px solid #7e6542 ; color : #5b472d ; font : 600 6 px IBM Plex Mono ; letter-spacing : .1 em ; }
. thread-tag-content b { display : -webkit- box ; overflow : hidden ; -webkit- line-clamp : 5 ; -webkit- box-orient : vertical ; color : #33291c ; font : 12 px / 1.25 Special Elite ; }
. thread-tag-content em { color : #68472c ; font : 600 6 px IBM Plex Mono ; letter-spacing : .06 em ; }
. thread-tag . labelled . expanded { z-index : 14 ; transform : translate ( -50 % , 4 px ) rotate ( 90 deg ) scale ( 1.55 ); filter : drop-shadow ( 12 px 8 px 5 px #0008 ); }
. thread-tag . labelled . expanded . thread-tag-content { width : 142 px ; height : 94 px ; margin : 4 px 0 0 -17 px ; overflow : visible ; transform : rotate ( -90 deg ); }
. thread-tag . labelled . expanded . thread-tag-content b { display : block ; overflow : visible ; font-size : 13 px ; line-height : 1.32 ; }
2026-08-14 14:31:52 +02:00
. event-support-lines { position : absolute ; inset : 0 ; overflow : visible ; pointer-events : none ; }
. event-support-lines line { stroke : #d3a05c ; stroke-width : 2 ; stroke-dasharray : 7 6 ; opacity : .58 ; filter : drop-shadow ( 1 px 1 px 0 #020907 ); }
2026-08-14 14:44:58 +02:00
. party-association-lines { position : absolute ; inset : 0 ; overflow : visible ; pointer-events : none ; }
. party-association-lines line { stroke : #6fa694 ; stroke-width : 2 ; stroke-dasharray : 3 5 ; opacity : .52 ; filter : drop-shadow ( 1 px 1 px 0 #020907 ); }
2026-08-14 12:43:11 +02:00
. folder-bands { position : absolute ; inset : 0 ; overflow : visible ; pointer-events : none ; }
. folder-bands line { stroke : #b63232 ; stroke-width : 7 ; opacity : .2 ; filter : drop-shadow ( 1 px 1 px 0 #050a08 ); transition : x2 .42 s cubic-bezier ( .2 , .75 , .2 , 1 ), y2 .42 s cubic-bezier ( .2 , .75 , .2 , 1 ), opacity .24 s ease ; }
. folder-bands line . closed { opacity : 0 ; }
. evidence-card { position : absolute ; min-height : 138 px ; color : #1b2925 ; background : #d8d8ca ; border : 1 px solid #edece0 ; padding : 13 px 15 px 12 px ; box-shadow : 7 px 9 px 0 #020b09 80 , 0 0 0 1 px #45524d ; cursor : move ; user-select : none ; }
. evidence-card :: after { content : '' ; position : absolute ; left : 9 px ; right : 9 px ; bottom : -6 px ; height : 5 px ; background : #80847b ; clip-path : polygon ( 0 0 , 5 % 50 % , 12 % 0 , 20 % 70 % , 28 % 0 , 40 % 60 % , 49 % 0 , 61 % 70 % , 73 % 0 , 83 % 60 % , 91 % 0 , 100 % 50 % , 100 % 100 % , 0 100 % ); }
. evidence-card . selected { outline : 2 px solid #e49a4a ; outline-offset : 5 px ; }
2026-08-15 09:34:53 +02:00
. evidence-card . document-located , . source-file-widget . document-located { z-index : 6 ; outline : 3 px solid #f2d254 ; outline-offset : 6 px ; filter : drop-shadow ( 0 0 10 px #f3d75d 99 ) brightness ( 1.08 ); animation : document-locator-target 1.35 s ease-in-out infinite alternate ; }
@ keyframes document-locator-target { from { outline-color : #cda936 ; filter : drop-shadow ( 0 0 5 px #f3d75d 66 ) brightness ( 1.03 ); } to { outline-color : #fff19a ; filter : drop-shadow ( 0 0 14 px #ffe66c bb ) brightness ( 1.12 ); } }
2026-08-14 12:43:11 +02:00
. evidence-card . linking { outline : 2 px dashed #e49a4a ; outline-offset : 7 px ; }
2026-08-14 16:37:50 +02:00
. evidence-card . thread-target : hover , . source-file-widget . thread-target : hover { outline : 2 px dashed #b8443e ; outline-offset : 6 px ; }
2026-08-22 14:53:23 +02:00
. evidence-card . arriving , . source-file-widget . arriving { z-index : 6 ; animation : exhibit-arrival 1.15 s cubic-bezier ( .18 , .85 , .22 , 1 ) both ; }
. source-file-widget . arriving :: before { content : 'NEW EVIDENCE' ; position : absolute ; z-index : 4 ; top : -19 px ; right : -8 px ; padding : 4 px 6 px ; border : 1 px solid #f0c16f ; background : #9a3c2e ; color : #fff4d6 ; box-shadow : 2 px 3 px #020907 99 ; font : 600 7 px IBM Plex Mono ; letter-spacing : .08 em ; }
. doc-row . arriving { animation : document-row-arrival 1.15 s ease both ; }
@ keyframes document-row-arrival { 0 % { background : #a05328 ; box-shadow : inset 5 px 0 #ffd48a ; } 100 % { background : transparent ; box-shadow : inset 0 0 transparent ; } }
2026-08-14 16:18:13 +02:00
@ keyframes exhibit-arrival { 0 % { opacity : 0 ; scale : .72 ; translate : 0 -24 px ; filter : brightness ( 1.7 ); box-shadow : 0 0 0 0 #eda85b 00 ; } 45 % { opacity : 1 ; scale : 1.035 ; translate : 0 2 px ; box-shadow : 0 0 0 12 px #eda85b 55 , 7 px 9 px 0 #020b09 80 ; } 100 % { opacity : 1 ; scale : 1 ; translate : 0 0 ; filter : brightness ( 1 ); box-shadow : 7 px 9 px 0 #020b09 80 , 0 0 0 1 px #45524d ; } }
2026-08-14 12:43:11 +02:00
. evidence-card header { border-bottom : 1 px solid #989e94 ; display : flex ; justify-content : space-between ; padding-bottom : 6 px ; font : 600 8 px IBM Plex Mono ; letter-spacing : .12 em ; color : #5d6763 ; }
. evidence-card h3 { font : 600 10 px IBM Plex Mono ; letter-spacing : .09 em ; margin : 12 px 0 6 px ; color : #9a5d2e ; }
. evidence-card p { font : 500 16 px Special Elite , serif ; line-height : 1.35 ; margin : 0 0 12 px ; }
. evidence-card time { display : inline-block ; border : 1 px solid #7c867e ; padding : 3 px 5 px ; font : 9 px IBM Plex Mono ; }
. evidence-card button { float : right ; background : transparent ; border : 0 ; color : #55635e ; display : flex ; gap : 4 px ; align-items : center ; font : 600 8 px IBM Plex Mono ; padding : 4 px 0 ; cursor : pointer ; }
. evidence-card . folder { min-height : 166 px ; padding-top : 17 px ; background : linear-gradient ( 104 deg , #c9a66a , #d4b579 58 % , #b99055 ); border-color : #e0c68f ; box-shadow : 7 px 9 px 0 #020b09 80 , inset 0 0 22 px #65451f 24 , 0 0 0 1 px #61492e ; }
. evidence-card . folder :: before { content : '' ; position : absolute ; z-index : -1 ; top : -13 px ; left : 13 px ; width : 42 % ; height : 20 px ; border : 1 px solid #dfc38c ; border-bottom : 0 ; background : #caa76c ; clip-path : polygon ( 0 0 , 80 % 0 , 100 % 100 % , 0 100 % ); }
. evidence-card . folder :: after { background : #80643e ; }
. evidence-card . folder header { border-color : #846e49 ; color : #594a33 ; }
. evidence-card . folder h3 { color : #66401f ; }
2026-08-18 15:37:46 +02:00
. evidence-card . folder p { max-height : 58 px ; padding-right : 2 px ; overflow : hidden ; }
2026-08-14 14:31:52 +02:00
. evidence-card . event { background : linear-gradient ( 112 deg , #d6d1bd , #c8c5b6 ); border-left : 5 px solid #9a6332 ; min-height : 174 px ; }
. evidence-card . event h3 { color : #70401e ; }
. evidence-card . event p { font-size : 15 px ; }
. event-actions { clear : both ; margin-top : 10 px ; padding-top : 7 px ; border-top : 1 px dashed #858c84 ; display : flex ; align-items : center ; justify-content : space-between ; }
. event-actions span { color : #6a736d ; font : 7 px IBM Plex Mono ; }
. event-actions button { float : none ; }
2026-08-14 14:44:58 +02:00
. evidence-card . party { min-height : 190 px ; background : linear-gradient ( 110 deg , #d9d7c9 , #c8c8bd ); border-top : 5 px solid #315a50 ; }
. evidence-card . party h3 { margin : 0 0 3 px ; color : #254d43 ; }
. party-identity { display : grid ; grid-template-columns : 34 px 1 fr ; gap : 8 px ; align-items : center ; padding : 11 px 0 8 px ; border-bottom : 1 px solid #929a92 ; }
. party-identity > svg { color : #315a50 ; }
. party-identity small { color : #6a746e ; font : 7 px IBM Plex Mono ; }
. evidence-card . party p { margin-top : 9 px ; font-size : 13 px ; }
. party-aliases { padding : 5 px 0 ; color : #76552f ; font : 7 px IBM Plex Mono ; }
2026-08-18 15:37:46 +02:00
. folder-actions { position : absolute ; right : 13 px ; bottom : 10 px ; }
. folder-actions button { float : none ; min-height : 29 px ; padding : 6 px 9 px ; gap : 6 px ; border : 1 px solid #81633d ; background : #d9bb82 ; color : #563617 ; font-size : 9 px ; box-shadow : 2 px 2 px #75552f 66 ; }
. folder-actions button : hover { background : #e5ca96 ; color : #321f0f ; }
2026-08-14 12:43:11 +02:00
. source-file-widget { position : absolute ; z-index : 4 ; width : 174 px ; min-height : 145 px ; padding : 8 px ; color : #1a2421 ; background : #d9d8cc ; border : 1 px solid #f1efe2 ; box-shadow : 5 px 7 px 0 #020b09 80 , 0 0 0 1 px #53615c ; cursor : move ; user-select : none ; transition : left .42 s cubic-bezier ( .2 , .75 , .2 , 1 ), top .42 s cubic-bezier ( .2 , .75 , .2 , 1 ), opacity .28 s ease , transform .42 s cubic-bezier ( .2 , .75 , .2 , 1 ); }
. source-file-widget . closed { opacity : 0 ; transform : scale ( .18 ) rotate ( -8 deg ); pointer-events : none ; }
. source-file-widget . open { opacity : 1 ; transform : scale ( 1 ) rotate ( .6 deg ); }
2026-08-14 18:11:51 +02:00
. source-file-widget . selected { outline : 2 px solid #e49a4a ; outline-offset : 5 px ; }
. source-file-widget . linking { outline : 2 px dashed #e49a4a ; outline-offset : 7 px ; }
2026-08-14 12:43:11 +02:00
. source-file-widget header { height : 18 px ; display : flex ; justify-content : space-between ; border-bottom : 1 px solid #8b938d ; color : #59645f ; font : 600 7 px IBM Plex Mono ; letter-spacing : .1 em ; }
. source-file-preview { height : 79 px ; margin : 7 px 0 ; display : grid ; place-items : center ; overflow : hidden ; background : #263a35 ; border : 1 px solid #707a74 ; }
. source-file-preview img { width : 100 % ; height : 100 % ; object-fit : cover ; }
. source-file-preview > div { display : grid ; justify-items : center ; gap : 5 px ; color : #b8c2bd ; }
. source-file-preview small { font : 7 px IBM Plex Mono ; }
2026-08-14 18:30:31 +02:00
. source-file-widget . file-type-text . source-file-preview { height : 108 px ; display : block ; background : #e8e4d7 ; border-color : #a19b8b ; }
. text-document-preview { width : 100 % ; height : 100 % ; display : grid !important ; grid-template-rows : 42 px 1 fr ; justify-items : stretch !important ; gap : 0 !important ; color : #202722 !important ; }
. text-source-excerpt { margin : 0 ; padding : 6 px 7 px ; overflow : hidden ; border-bottom : 1 px solid #a29d8e ; background : #d5d1c4 ; font : 6 px / 1.35 IBM Plex Mono ; text-transform : uppercase ; }
. text-document-preview textarea { width : 100 % ; min-height : 0 ; resize : none ; overflow : hidden ; border : 0 ; outline : 0 ; padding : 8 px 7 px 5 px ; background : repeating-linear-gradient ( #ede9dc 0 20 px , #c9c5b8 55 21 px ); color : #151b18 ; font : 900 15 px / 1.05 "Marker Felt" , "Comic Sans MS" , cursive ; letter-spacing : .015 em ; text-align : center ; transform : rotate ( -1 deg ); }
. text-document-preview textarea :: placeholder { color : #76786f ; font-size : 9 px ; letter-spacing : .04 em ; }
. board-viewport . threading . text-document-preview textarea { pointer-events : none ; }
2026-08-14 12:43:11 +02:00
. source-file-widget > strong { display : block ; overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; font : 600 9 px IBM Plex Mono ; }
. source-file-widget > time { display : block ; margin-top : 3 px ; color : #86603b ; font : 7 px IBM Plex Mono ; }
. source-file-actions { display : flex ; justify-content : space-between ; margin-top : 6 px ; border-top : 1 px dashed #969b94 ; padding-top : 4 px ; }
. source-file-actions button { display : flex ; align-items : center ; gap : 3 px ; border : 0 ; background : transparent ; padding : 2 px ; color : #4e5d57 ; cursor : pointer ; font : 600 6 px IBM Plex Mono ; }
2026-08-14 17:02:17 +02:00
. evidence-card . note { width : 108 px !important ; height : 154 px ; min-height : 154 px ; padding : 27 px 10 px 11 px ; rotate : -2 deg !important ; z-index : 2 ; }
2026-08-14 12:43:11 +02:00
. evidence-card . note header { position : absolute ; left : 9 px ; right : 9 px ; top : 21 px ; padding-bottom : 3 px ; font-size : 6 px ; color : #5b472d ; border-color : #7e6542 ; }
. evidence-card . note header i { display : none ; }
. evidence-card . note . card-content { height : 108 px ; padding-top : 10 px ; overflow : hidden ; transition : transform .22 s ease ; }
. evidence-card . note h3 { color : #5b3c24 ; font-size : 7 px ; margin : 2 px 0 5 px ; }
. evidence-card . note p { display : -webkit- box ; overflow : hidden ; -webkit- line-clamp : 4 ; -webkit- box-orient : vertical ; font-family : Special Elite ; font-size : 12 px ; line-height : 1.25 ; }
. evidence-card . note . selected { z-index : 12 ; outline : 1 px dashed #e6b168 ; outline-offset : 5 px ; transform : rotate ( 90 deg ) scale ( 1.55 ); filter : drop-shadow ( 12 px 8 px 5 px #0008 ); }
. evidence-card . note . selected . card-content { width : 142 px ; height : 94 px ; margin : 4 px 0 0 -17 px ; overflow : visible ; transform : rotate ( -90 deg ); }
. evidence-card . note . selected p { display : block ; overflow : visible ; font-size : 13 px ; line-height : 1.32 ; }
. evidence-card . note . selected h3 { font-size : 7 px ; }
. board-actions { position : absolute ; z-index : 4 ; bottom : 17 px ; left : 50 % ; transform : translateX ( -50 % ); display : flex ; align-items : center ; height : 43 px ; background : #102a24 ee ; border : 1 px solid #3c564e ; box-shadow : 0 8 px 24 px #0009 ; padding : 4 px ; }
. board-actions button { height : 33 px ; border : 0 ; background : transparent ; padding : 0 10 px ; display : flex ; align-items : center ; gap : 7 px ; font : 9 px IBM Plex Mono ; cursor : pointer ; color : #a8b8b2 ; }
. board-actions button : hover , . board-actions button . active { background : #27443c ; color : #e4a35e ; }
2026-08-14 16:37:50 +02:00
. board-actions button . thread-tool : not ( : disabled ) { color : #d35b52 ; }
. board-actions button . thread-tool . active { background : #4a211f ; color : #ff8a78 ; box-shadow : inset 0 0 0 1 px #8f3934 ; }
2026-08-14 12:43:11 +02:00
. board-actions button : disabled { opacity : .35 ; cursor : default ; }
. board-actions span { width : 1 px ; height : 24 px ; background : #385149 ; margin : 0 5 px ; }
. board-actions b { width : 44 px ; text-align : center ; color : #91a69f ; font : 9 px IBM Plex Mono ; }
. open-files { position : absolute ; top : 25 px ; left : 25 px ; z-index : 4 ; border : 1 px solid #4c675f ; background : #122e28 ; padding : 11 px 13 px ; display : flex ; gap : 8 px ; font : 9 px IBM Plex Mono ; cursor : pointer ; }
. open-files b { color : #e19a4d ; }
2026-08-14 14:31:52 +02:00
. story-strip { position : absolute ; z-index : 4 ; right : 18 px ; top : 18 px ; width : 255 px ; max-height : 235 px ; overflow : auto ; padding : 10 px ; background : #0d2721 e8 ; border : 1 px solid #466159 ; box-shadow : 5 px 7 px 18 px #0008 ; }
. story-strip > small { display : block ; padding : 2 px 4 px 8 px ; color : #b47a41 ; font : 600 8 px IBM Plex Mono ; letter-spacing : .12 em ; }
. story-strip button { width : 100 % ; display : grid ; grid-template-columns : 64 px 1 fr ; gap : 2 px 7 px ; padding : 7 px 5 px ; text-align : left ; border : 0 ; border-top : 1 px solid #304a43 ; background : transparent ; cursor : pointer ; }
. story-strip button : hover , . story-strip button . selected { background : #193a32 ; }
. story-strip time { grid-row : 1 / 3 ; color : #7b938b ; font : 7 px IBM Plex Mono ; }
. story-strip b { color : #d9ddd8 ; font : 9 px IBM Plex Mono ; }
. story-strip span { overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; color : #849b93 ; font : 8 px Special Elite ; }
2026-08-14 14:44:58 +02:00
. brief-panel { position : absolute ; z-index : 12 ; right : 18 px ; top : 18 px ; width : min ( 410 px , 42 vw ); max-height : calc ( 100 % - 36 px ); overflow : auto ; background : #c6c9c1 ; color : #17231f ; border : 2 px solid #d8dbd4 ; box-shadow : 7 px 9 px 0 #020a08 , 0 0 0 1 px #46554f ; }
2026-08-18 15:37:46 +02:00
. brief-panel > header { position : sticky ; z-index : 3 ; top : 0 ; height : 44 px ; padding : 0 7 px 0 13 px ; display : flex ; align-items : center ; background : #173d34 ; color : #e0e8e4 ; cursor : default ; }
2026-08-14 18:33:04 +02:00
. brief-panel > header div { display : grid ; gap : 2 px ; }. brief-panel > header > span { flex : 1 ; }. brief-panel > header small { color : #9bb0a9 ; font : 7 px IBM Plex Mono ; letter-spacing : .14 em ; }. brief-panel > header b { font : 10 px IBM Plex Mono ; }. brief-panel > header button { flex : 0 0 auto ; width : 25 px ; height : 24 px ; margin-left : 4 px ; display : grid ; place-items : center ; padding : 0 ; border : 1 px outset #e8ece8 ; background : #c9cec8 ; color : #17312b ; cursor : pointer ; }. brief-panel > header button : hover { background : #eef0eb ; color : #070d0b ; }
. brief-panel . minimized { width : min ( 330 px , 42 vw ); overflow : hidden ; }. brief-panel . minimized > : not ( header ) { display : none ; }
2026-08-14 14:44:58 +02:00
. brief-panel > p { margin : 16 px ; padding : 13 px ; background : #e2dfd2 ; border-left : 3 px solid #a66d37 ; font : 13 px / 1.55 Special Elite ; }
2026-08-14 16:18:13 +02:00
. brief-concepts { border-top : 1 px solid #8c958e ; }. brief-concepts section { padding : 12 px 15 px ; border-bottom : 1 px solid #959c95 ; }. brief-concepts section . resolved { background : #d5ddcf ; }. brief-concepts section . just-resolved { animation : concept-resolved 1.15 s ease-out ; }. brief-concepts section > div : first-child { display : grid ; gap : 4 px ; }. brief-concepts b { font : 600 10 px IBM Plex Mono ; }. brief-concepts span { color : #616d67 ; font : 9 px Special Elite ; }
2026-08-14 18:17:31 +02:00
. classify-actions , . resolved-actions { display : flex ; align-items : center ; gap : 7 px ; margin-top : 9 px ; }. classify-actions button , . resolved-actions button , . edit-brief , . new-party-from-brief { display : inline-flex ; align-items : center ; gap : 5 px ; border : 1 px outset #89948e ; background : #e3e1d6 ; color : #29463e ; padding : 7 px 8 px ; cursor : pointer ; font : 8 px IBM Plex Mono ; }. resolved-actions > span { margin-right : auto ; display : inline-flex ; align-items : center ; gap : 5 px ; color : #31584d ; font : 600 8 px IBM Plex Mono ; }. edit-brief , . new-party-from-brief { margin : 12 px 15 px 0 ; }. edit-brief { background : #234c41 ; color : white ; }. new-party-from-brief { width : calc ( 100 % - 30 px ); justify-content : center ; border-style : dashed ; background : #d8d8cf ; }. dismiss-brief { width : calc ( 100 % - 30 px ); margin : 12 px 15 px 14 px ; padding : 9 px ; border : 1 px outset #73877f ; background : #1e473d ; color : white ; cursor : pointer ; font : 600 9 px IBM Plex Mono ; letter-spacing : .08 em ; }
2026-08-14 16:18:13 +02:00
@ keyframes concept-resolved { 0 % { background : #e8b76c ; box-shadow : inset 4 px 0 #b56127 ; } 100 % { background : #d5ddcf ; box-shadow : inset 0 0 transparent ; } }
2026-08-14 14:44:58 +02:00
. concept-editor-list { max-height : 280 px ; overflow : auto ; border : 1 px solid #8d968f ; background : #d4d5cd ; }. concept-editor-row { display : grid ; grid-template-columns : 150 px 1 fr 125 px 30 px ; gap : 6 px ; padding : 7 px ; border-bottom : 1 px solid #9fa59e ; }. concept-editor-row input , . concept-editor-row select { min-width : 0 ; border : 1 px solid #7d8780 ; background : #e8e5d8 ; padding : 7 px ; font : 9 px IBM Plex Mono ; }. concept-editor-row button { border : 0 ; color : #713c2d ; }
2026-08-14 12:43:11 +02:00
. file-drop-overlay { position : absolute ; z-index : 20 ; inset : 14 px ; border : 2 px dashed #e19a4d ; background : #0a211d e8 ; display : grid ; place-items : center ; pointer-events : none ; }. file-drop-overlay > div { width : 290 px ; height : 150 px ; border : 1 px solid #5e786f ; background : #102c25 ; display : flex ; flex-direction : column ; align-items : center ; justify-content : center ; gap : 10 px ; box-shadow : 9 px 10 px #020b09 ; color : #d99a58 ; }. file-drop-overlay b { font : 600 12 px IBM Plex Mono ; letter-spacing : .08 em ; }. file-drop-overlay span { font : 9 px IBM Plex Mono ; color : #78928a ; letter-spacing : .12 em ; }
. timeline { background : #0d231e ; border-top : 1 px solid #3c544d ; display : grid ; grid-template-columns : 180 px 1 fr 165 px ; align-items : center ; padding : 0 25 px ; z-index : 8 ; }
2026-08-14 18:59:50 +02:00
. temporal-links { position : fixed ; z-index : 9 ; inset : 0 ; width : 100 vw ; height : 100 vh ; pointer-events : none ; overflow : visible ; }. temporal-links line { stroke : #8b9792 ; stroke-width : 1 ; opacity : .42 ; vector-effect : non-scaling-stroke ; }
2026-08-15 09:34:53 +02:00
. document-locator-beam { position : fixed ; z-index : 9 ; inset : 0 ; width : 100 vw ; height : 100 vh ; overflow : visible ; pointer-events : none ; }
. document-locator-beam path { fill : none ; vector-effect : non-scaling-stroke ; }
. document-locator-halo { stroke : #ffe276 ; stroke-width : 12 ; opacity : .13 ; filter : url ( #document-locator-glow ); }
. document-locator-ray { stroke : #ffe066 ; stroke-width : 2 ; stroke-dasharray : 10 8 ; opacity : .9 ; filter : url ( #document-locator-glow ); animation : document-locator-flow .7 s linear infinite ; }
. document-locator-beam circle { fill : #ffe36d ; stroke : #fff3b0 ; stroke-width : 2 ; filter : url ( #document-locator-glow ); }
. document-locator-beam . document-locator-pulse { fill : none ; opacity : .65 ; animation : document-locator-pulse 1.1 s ease-out infinite ; }
@ keyframes document-locator-flow { to { stroke-dashoffset : -18 ; } }
@ keyframes document-locator-pulse { from { r : 7 ; opacity : .8 ; } to { r : 24 ; opacity : 0 ; } }
2026-08-14 12:43:11 +02:00
. timeline-label { border-right : 1 px solid #314a43 ; height : 67 px ; display : flex ; flex-direction : column ; justify-content : center ; }
2026-08-15 09:13:30 +02:00
. timeline-label b { font : 600 15 px IBM Plex Mono ; margin : 4 px 0 ; }. timeline-label button { width : max-content ; max-width : 170 px ; padding : 1 px 0 ; overflow : hidden ; color : #d29a61 ; background : transparent ; border : 0 ; text-overflow : ellipsis ; white-space : nowrap ; text-align : left ; cursor : pointer ; font : 500 11 px IBM Plex Mono ; }
2026-08-14 12:43:11 +02:00
. timeline-track { height : 75 px ; margin : 0 43 px ; position : relative ; }
. axis { position : absolute ; left : 0 ; right : 0 ; top : 45 px ; height : 1 px ; background : #61736d ; }
2026-08-15 09:13:30 +02:00
. year { position : absolute ; top : 53 px ; transform : translateX ( -50 % ); color : #b7c7c1 ; font : 600 12 px IBM Plex Mono ; letter-spacing : .02 em ; text-shadow : 0 1 px 1 px #020907 ; }
2026-08-14 12:43:11 +02:00
. year :: before { content : '' ; position : absolute ; left : 50 % ; top : -9 px ; height : 5 px ; border-left : 1 px solid #6a7e78 ; }
. marker { position : absolute ; width : 19 px ; height : 29 px ; transform : translateX ( -50 % ); border : 0 ; background : transparent ; cursor : pointer ; padding : 0 ; }
. marker i { display : block ; width : 10 px ; height : 10 px ; border : 2 px solid #8eb3a7 ; background : #16352e ; rotate : 45 deg ; box-shadow : 0 0 0 3 px #0d231e ; }
. marker . document i { border-radius : 50 % ; rotate : 0 deg ; width : 9 px ; height : 9 px ; border-color : #89948f ; background : #263a34 ; }
. marker . selected i { border-color : #eea458 ; background : #eea458 ; }
. timeline-key { border-left : 1 px solid #314a43 ; padding-left : 24 px ; font : 8 px IBM Plex Mono ; color : #759087 ; display : flex ; gap : 18 px ; }. timeline-key span { display : flex ; gap : 5 px ; }. timeline-key i { width : 7 px ; height : 7 px ; background : #8eb3a7 ; rotate : 45 deg ; }. timeline-key . amber i { background : #eea458 ; }
2026-08-18 15:37:46 +02:00
. window { position : fixed ; z-index : 30 ; max-width : calc ( 100 vw - 24 px ); max-height : calc ( 100 vh - 24 px ); max-height : calc ( 100 dvh - 24 px ); overflow-y : auto ; overscroll-behavior : contain ; background : #bfc4bc ; color : #14201d ; border : 2 px solid #cfd3cc ; box-shadow : 5 px 6 px 0 #020a08 , 0 0 0 1 px #45534e ; }
2026-08-14 15:40:54 +02:00
. timeline-editor { width : min ( 520 px , 88 vw ); }. timeline-editor > div { padding : 24 px 27 px ; }. timeline-editor p { margin : 12 px 0 18 px ; font : 12 px / 1.5 Special Elite ; }. timeline-range-fields { display : grid ; grid-template-columns : 1 fr 1 fr ; gap : 14 px ; margin-bottom : 20 px ; }
2026-08-14 18:26:20 +02:00
. thread-editor { width : min ( 520 px , 88 vw ); }. thread-editor > div { padding : 24 px 27 px ; }. thread-editor > div > small { color : #8a4b32 ; font : 600 8 px IBM Plex Mono ; letter-spacing : .14 em ; }. thread-editor p { margin : 14 px 0 ; font : 12 px / 1.5 Special Elite ; }. thread-endpoints { margin-top : 15 px ; display : grid ; grid-template-columns : minmax ( 0 , 1 fr ) 70 px minmax ( 0 , 1 fr ); align-items : center ; gap : 9 px ; }. thread-endpoints b { overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; font : 600 9 px IBM Plex Mono ; }. thread-endpoints b : last-child { text-align : right ; }. thread-endpoints i { height : 3 px ; background : #982e2b ; box-shadow : 0 1 px #5b1d1b ; }. thread-tightness { margin : 20 px 0 ; }. thread-tightness output { margin-left : auto ; color : #9a332e ; }. thread-tightness input { accent-color : #9b302d ; padding : 0 ; }. thread-tightness > small { display : flex ; justify-content : space-between ; color : #68736d ; font : 7 px IBM Plex Mono ; }. thread-position-control { margin-top : 17 px ; }. thread-position-control output { margin-left : auto ; color : #9a5c2f ; }. thread-position-control input { accent-color : #9a5c2f ; padding : 0 ; }. thread-position-control > small { color : #68736d ; font : 7 px / 1.4 IBM Plex Mono ; }. thread-editor . folder-editor-actions > span { flex : 1 ; }. folder-editor-actions button . danger { color : #7c2925 ; border-color : #a25b55 ; }
2026-08-14 17:07:30 +02:00
. tag-style-picker { margin : 16 px 0 4 px ; padding : 0 ; border : 0 ; display : grid ; grid-template-columns : 1 fr 1 fr ; gap : 8 px ; }. tag-style-picker legend { margin-bottom : 6 px ; color : #44504c ; font : 600 8 px IBM Plex Mono ; letter-spacing : .1 em ; }. tag-style-picker label { position : relative ; display : grid ; gap : 5 px ; padding : 10 px ; border : 1 px solid #909991 ; background : #d6d7cf ; cursor : pointer ; }. tag-style-picker label . selected { border-color : #8f3833 ; background : #e1d4bd ; box-shadow : inset 3 px 0 #9c3631 ; }. tag-style-picker input { position : absolute ; opacity : 0 ; }. tag-style-picker label > span { display : flex ; align-items : center ; gap : 7 px ; color : #344b44 ; font : 600 8 px IBM Plex Mono ; }. tag-style-picker label > small { color : #69746e ; font : 7 px IBM Plex Mono ; }. tag-style-luggage i { width : 15 px ; height : 21 px ; background : #b99562 ; border : 1 px solid #7b6040 ; clip-path : polygon ( 3 px 0 , 12 px 0 , 15 px 3 px , 15 px 21 px , 0 21 px , 0 3 px ); }. tag-style-compact i { width : 25 px ; height : 8 px ; border-left : 7 px solid #a63531 ; background : #d7c9a9 ; box-shadow : 1 px 1 px #6e6250 ; }
2026-08-18 15:37:46 +02:00
. window > header { position : sticky ; z-index : 3 ; top : 0 ; height : 31 px ; min-height : 31 px ; display : flex ; align-items : center ; gap : 8 px ; padding : 0 5 px 0 9 px ; color : #dfe9e4 ; background : #183f36 ; font : 500 11 px IBM Plex Mono ; cursor : move ; touch-action : none ; }
2026-08-14 12:43:11 +02:00
. window > header span { flex : 1 ; }. window > header button { width : 22 px ; height : 21 px ; display : grid ; place-items : center ; padding : 0 ; background : #b7bcb4 ; border : 1 px outset white ; color : #17221f ; cursor : pointer ; }
. document-window { width : min ( 610 px , 60 vw ); }. document-window . minimized { width : min ( 380 px , 60 vw ); }. document-window > nav { height : 28 px ; padding : 7 px 10 px ; background : #aeb4ac ; border-bottom : 1 px solid #727c76 ; font : 9 px IBM Plex Mono ; }
. paper { margin : 17 px ; padding : 34 px 43 px ; height : min ( 500 px , 58 vh ); overflow : auto ; background : #e8e5d8 ; box-shadow : inset 0 0 24 px #9a9685 66 ; font-family : IBM Plex Mono ; }
. paper . asset-paper { padding : 20 px ; display : flex ; flex-direction : column ; }. asset-paper . paper-meta { flex : 0 0 auto ; margin-bottom : 14 px ; }. document-image { display : block ; max-width : 100 % ; margin : auto ; box-shadow : 0 2 px 12 px #0005 ; }. document-frame { width : 100 % ; flex : 1 ; min-height : 350 px ; border : 1 px solid #81877f ; background : white ; }. unsupported-file { flex : 1 ; display : flex ; flex-direction : column ; align-items : center ; justify-content : center ; gap : 11 px ; color : #4a5651 ; }. unsupported-file b { font-size : 12 px ; }. unsupported-file span { font-size : 9 px ; color : #758079 ; }. unsupported-file a { margin-top : 9 px ; padding : 8 px 11 px ; background : #244b40 ; color : white ; text-decoration : none ; font : 9 px IBM Plex Mono ; }
. paper-meta { display : flex ; justify-content : space-between ; font-size : 8 px ; letter-spacing : .1 em ; border-bottom : 2 px solid #252d29 ; padding-bottom : 9 px ; margin-bottom : 28 px ; }. paper-meta b { color : #945b32 ; }
. paper p { font-size : 12 px ; line-height : 1.7 ; margin : 0 ; }. paper p : nth-child ( 4 ) { margin-top : 12 px ; }
. extracts { display : flex ; flex-wrap : wrap ; gap : 8 px ; border-top : 1 px dashed #999b91 ; padding-top : 18 px ; margin-top : 28 px ; }
. extracts button { border : 1 px solid #9b602f ; background : #f0dbc0 ; color : #66391a ; padding : 8 px 10 px ; display : flex ; align-items : center ; gap : 6 px ; cursor : pointer ; font : 600 9 px IBM Plex Mono ; text-transform : uppercase ; }. extracts button : hover { background : #e8bd87 ; }. extracts button . done { border-color : #667a71 ; background : #d1d7ce ; color : #42554d ; }
. document-window > footer { height : 25 px ; border-top : 1 px solid #737f78 ; display : flex ; justify-content : space-between ; padding : 6 px 8 px ; font : 8 px IBM Plex Mono ; }
. modal-shade { position : fixed ; z-index : 40 ; inset : 0 ; background : #020b09 aa ; display : grid ; place-items : center ; }
. help { width : 440 px ; }. help > div { padding : 30 px 34 px 34 px ; }. help h2 { font : 23 px Special Elite ; margin : 8 px 0 22 px ; }. help ol { padding-left : 22 px ; font-size : 12 px ; line-height : 2 ; }. help p { font : 13 px Special Elite ; border-left : 3 px solid #a56330 ; padding-left : 12 px ; }. primary { float : right ; background : #163f35 ; color : white ; border : 2 px outset #608177 ; font : 9 px IBM Plex Mono ; padding : 10 px 13 px ; cursor : pointer ; }
. folder-editor { width : min ( 680 px , 88 vw ); }
. folder-editor-body { padding : 24 px 27 px 22 px ; }
. folder-editor-body > small { color : #805027 ; font : 600 8 px IBM Plex Mono ; letter-spacing : .16 em ; }
. field { display : grid ; gap : 5 px ; margin-top : 13 px ; }
. field > span , . folder-members-heading b { font : 600 8 px IBM Plex Mono ; letter-spacing : .1 em ; color : #44504c ; }
. field input , . field textarea , . field select , . metadata-row input { width : 100 % ; border : 1 px solid #7d8780 ; background : #e8e5d8 ; color : #17231f ; padding : 8 px 9 px ; font : 11 px IBM Plex Mono ; resize : vertical ; }
. folder-members-heading { margin-top : 20 px ; padding-bottom : 8 px ; border-bottom : 2 px solid #59625d ; display : flex ; justify-content : space-between ; align-items : end ; }
. folder-members-heading div { display : grid ; gap : 3 px ; }
. folder-members-heading small { color : #8c5c31 ; font : 7 px IBM Plex Mono ; }
. folder-members-heading > span { display : flex ; gap : 6 px ; align-items : center ; color : #66716b ; font : 7 px IBM Plex Mono ; }
. folder-members { max-height : 260 px ; overflow : auto ; border : 1 px solid #8a918b ; border-top : 0 ; background : #d4d5cd ; }
2026-08-14 14:31:52 +02:00
. event-support-list > p { margin : 20 px ; text-align : center ; color : #68746e ; font : 8 px IBM Plex Mono ; }
2026-08-14 19:57:22 +02:00
. event-date-field > span : last-child { display : grid ; grid-template-columns : minmax ( 0 , 1 fr ) auto ; gap : 7 px ; }. event-date-field > span : last-child button { border : 1 px outset #8c948e ; background : #c8cbc4 ; color : #4d5853 ; padding : 0 10 px ; cursor : pointer ; font : 8 px IBM Plex Mono ; }. event-date-field > span : last-child button : disabled { opacity : .45 ; cursor : default ; }
2026-08-14 12:43:11 +02:00
. folder-member { min-height : 56 px ; padding : 8 px 10 px ; display : grid ; grid-template-columns : minmax ( 0 , 1 fr ) 190 px ; gap : 14 px ; align-items : center ; border-bottom : 1 px solid #a1a69f ; opacity : .67 ; }
. folder-member . included { background : #e2d7bd ; opacity : 1 ; }
. folder-member label { min-width : 0 ; display : grid ; grid-template-columns : 18 px 18 px minmax ( 0 , 1 fr ); align-items : center ; gap : 7 px ; cursor : pointer ; }
. folder-member label span { min-width : 0 ; display : grid ; gap : 3 px ; }
. folder-member label b { overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; font : 600 10 px IBM Plex Mono ; }
. folder-member label small { color : #6c756f ; font : 7 px IBM Plex Mono ; }
. folder-member-date { text-align : right ; color : #72563a ; font : 8 px IBM Plex Mono ; }
. folder-editor-note { margin : 12 px 0 ; padding-left : 10 px ; border-left : 3 px solid #9c6534 ; color : #555f5a ; font : 10 px / 1.5 IBM Plex Mono ; }
. folder-editor-actions { display : flex ; justify-content : flex-end ; gap : 8 px ; }
. folder-editor-actions button { border : 1 px outset #8c948e ; padding : 9 px 12 px ; cursor : pointer ; font : 9 px IBM Plex Mono ; }
. folder-editor-actions . primary { float : none ; }
. file-editor { width : min ( 620 px , 88 vw ); }
. file-editor-body { padding : 24 px 27 px 22 px ; }
. file-editor-body > small { color : #805027 ; font : 600 8 px IBM Plex Mono ; letter-spacing : .16 em ; }
. file-editor-grid { display : grid ; grid-template-columns : 1 fr 180 px ; gap : 12 px ; }
. field > span { display : flex ; align-items : center ; gap : 6 px ; }
. metadata-heading { margin-top : 20 px ; padding-bottom : 8 px ; border-bottom : 2 px solid #59625d ; display : flex ; justify-content : space-between ; align-items : end ; }
. metadata-heading > div { display : grid ; gap : 3 px ; }
. metadata-heading b { color : #44504c ; font : 600 8 px IBM Plex Mono ; letter-spacing : .1 em ; }
. metadata-heading small { color : #8c5c31 ; font : 7 px IBM Plex Mono ; }
. metadata-heading button { display : flex ; align-items : center ; gap : 5 px ; border : 1 px outset #969d97 ; padding : 6 px 8 px ; cursor : pointer ; font : 8 px IBM Plex Mono ; }
. metadata-rows { max-height : 220 px ; overflow : auto ; background : #d4d5cd ; border : 1 px solid #929991 ; border-top : 0 ; }
. metadata-rows > p { margin : 20 px ; text-align : center ; color : #707a74 ; font : 8 px IBM Plex Mono ; }
. metadata-row { display : grid ; grid-template-columns : 150 px 1 fr 28 px ; gap : 7 px ; padding : 7 px ; border-bottom : 1 px solid #a1a69f ; }
. metadata-row input { padding : 6 px ; font-size : 9 px ; }
. metadata-row button { display : grid ; place-items : center ; border : 0 ; background : #b8bcb5 ; color : #6c3a2c ; cursor : pointer ; }
2026-08-22 14:53:23 +02:00
. gate-field { margin : 18 px 0 ; padding : 12 px ; border : 1 px dashed #9b6638 ; background : #d2c8af ; }. gate-field small { color : #6f5840 ; font : 8 px / 1.4 IBM Plex Mono ; }
. flags-editor { width : min ( 560 px , 90 vw ); }. flags-editor-body { padding : 24 px 27 px 26 px ; }. flags-editor-body > small { color : #805027 ; font : 600 8 px IBM Plex Mono ; letter-spacing : .16 em ; }. flags-editor-body > p { margin : 12 px 0 18 px ; font : 12 px / 1.5 Special Elite ; }
. flag-list { max-height : 290 px ; overflow : auto ; border : 1 px solid #8b938d ; background : #d3d4cc ; }. flag-empty { padding : 28 px 16 px ; text-align : center ; color : #6d7771 ; font : 8 px IBM Plex Mono ; }
. flag-row { min-height : 55 px ; padding : 8 px 10 px ; display : flex ; align-items : center ; gap : 10 px ; border-bottom : 1 px solid #a0a69f ; }. flag-row . earned { background : #d9dfce ; box-shadow : inset 4 px 0 #3f755f ; }. flag-row > div { flex : 1 ; min-width : 0 ; display : grid ; gap : 4 px ; }. flag-row b { overflow : hidden ; text-overflow : ellipsis ; color : #273d36 ; font : 600 10 px IBM Plex Mono ; }. flag-row small { color : #737d77 ; font : 7 px IBM Plex Mono ; }. flag-row button , . flag-add button { border : 1 px outset #89938d ; background : #c6cbc4 ; color : #30463f ; padding : 7 px 9 px ; cursor : pointer ; font : 8 px IBM Plex Mono ; }. flag-row . earned button { color : #783f2e ; }
. flag-add { margin-top : 13 px ; display : grid ; grid-template-columns : 1 fr auto ; gap : 7 px ; }. flag-add input { min-width : 0 ; border : 1 px solid #7d8780 ; background : #e8e5d8 ; padding : 8 px 9 px ; font : 10 px IBM Plex Mono ; }. flag-add button { background : #244c41 ; color : white ; }. flag-row button : disabled , . flag-add button : disabled { opacity : .5 ; cursor : default ; }. flags-editor-body . flag-error { margin : 10 px 0 0 ; color : #8a342e ; font : 8 px IBM Plex Mono ; }
. match-rules-editor { width : min ( 1000 px , 94 vw ); max-height : min ( 820 px , 92 vh ); }
. match-rules-body { padding : 22 px 25 px 25 px ; overflow : auto ; }. match-rules-body > small { color : #805027 ; font : 600 8 px IBM Plex Mono ; letter-spacing : .16 em ; }. match-rules-body > p { max-width : 760 px ; margin : 10 px 0 17 px ; font : 11 px / 1.5 Special Elite ; }
. match-rule-layout { display : grid ; grid-template-columns : minmax ( 250 px , .75 fr ) minmax ( 390 px , 1.25 fr ); gap : 13 px ; align-items : start ; }. match-rule-list { max-height : 560 px ; overflow : auto ; border : 1 px solid #8b938d ; background : #d3d4cc ; }
. match-rule-row { min-height : 58 px ; display : grid ; grid-template-columns : minmax ( 0 , 1 fr ) auto 28 px ; align-items : center ; gap : 6 px ; padding : 7 px ; border-bottom : 1 px solid #a0a69f ; }. match-rule-row . disabled { opacity : .55 ; }. match-rule-row > div { min-width : 0 ; display : grid ; gap : 4 px ; }. match-rule-row b , . match-rule-row small { overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; }. match-rule-row b { color : #273d36 ; font : 600 9 px IBM Plex Mono ; }. match-rule-row small { color : #737d77 ; font : 7 px IBM Plex Mono ; }. match-rule-row button , . match-rule-form button { min-height : 27 px ; border : 1 px outset #89938d ; background : #c6cbc4 ; color : #30463f ; cursor : pointer ; font : 8 px IBM Plex Mono ; }. match-rule-row button : last-child { display : grid ; place-items : center ; color : #783f2e ; }
. match-rule-form { padding : 13 px ; border : 1 px solid #8b938d ; background : #cecfc7 ; }. match-rule-form-heading , . anchor-heading { display : flex ; justify-content : space-between ; align-items : center ; margin-bottom : 11 px ; color : #44504c ; font : 8 px IBM Plex Mono ; letter-spacing : .08 em ; }. match-rule-form-heading button , . anchor-heading button { display : flex ; align-items : center ; gap : 4 px ; padding : 5 px 8 px ; }. match-rule-fields { display : grid ; grid-template-columns : minmax ( 0 , 1 fr ) 110 px ; gap : 9 px ; }. match-rule-enabled { display : flex ; align-items : center ; gap : 7 px ; margin : 10 px 0 15 px ; color : #59645e ; font : 8 px IBM Plex Mono ; }. anchor-heading { margin : 0 ; padding : 8 px 0 ; border-bottom : 2 px solid #59625d ; }. anchor-list { max-height : 295 px ; overflow : auto ; border : 1 px solid #929991 ; border-top : 0 ; background : #d7d8d0 ; }. anchor-row { display : grid ; grid-template-columns : minmax ( 0 , 1 fr ) 88 px 28 px ; align-items : end ; gap : 7 px ; padding : 8 px ; border-bottom : 1 px solid #a1a69f ; }. anchor-row > div , . anchor-row label { display : grid ; gap : 4 px ; }. anchor-row small , . anchor-row label span { color : #6b756f ; font : 7 px IBM Plex Mono ; }. anchor-row textarea { min-width : 0 ; resize : vertical ; padding : 7 px ; background : #eeeadd ; font : 9 px / 1.4 IBM Plex Mono ; }. anchor-row input { min-width : 0 ; padding : 7 px 4 px ; font : 8 px IBM Plex Mono ; }. anchor-row > button { display : grid ; place-items : center ; color : #783f2e ; }. match-rule-form . folder-editor-actions { margin-top : 12 px ; }. match-rule-form . folder-editor-actions button { padding : 8 px 11 px ; }. match-rule-form . folder-editor-actions button : disabled , . match-rule-row button : disabled , . anchor-row > button : disabled { opacity : .45 ; cursor : default ; }. match-rule-form . flag-error { margin : 9 px 0 0 ; color : #8a342e ; font : 8 px IBM Plex Mono ; }
2026-08-14 12:43:11 +02:00
. boot { height : 100 vh ; background : #071916 ; display : grid ; place-content : center ; justify-items : center ; color : #819b93 ; font : 11 px IBM Plex Mono ; letter-spacing : .15 em ; }. boot . seal { width : 70 px ; height : 70 px ; display : grid ; place-items : center ; border : 2 px solid #b87337 ; color : #d58a46 ; margin-bottom : 24 px ; font-weight : 600 ; }. boot small { color : #4e6a62 ; }
. empty-archive { height : 100 vh ; display : grid ; place-content : center ; justify-items : center ; text-align : center ; background : radial-gradient ( circle , #123029 0 , #071916 65 % ); color : #9bb0a9 ; }. empty-archive . seal { width : 72 px ; height : 72 px ; display : grid ; place-items : center ; border : 2 px solid #b87337 ; color : #d58a46 ; font : 600 14 px IBM Plex Mono ; margin-bottom : 25 px ; }. empty-archive small { font : 9 px IBM Plex Mono ; letter-spacing : .18 em ; color : #68837b ; }. empty-archive h1 { margin : 12 px 0 5 px ; color : #e0e5e1 ; font : 27 px Special Elite ; }. empty-archive p { font-size : 12 px ; }. empty-archive button { margin-top : 18 px ; display : flex ; align-items : center ; gap : 8 px ; background : #1a493d ; border : 1 px solid #6f8f85 ; padding : 11 px 16 px ; font : 10 px IBM Plex Mono ; cursor : pointer ; }. empty-archive . hint { margin-top : 20 px ; color : #718a83 ; }. empty-archive code { color : #d59450 ; }
2026-08-18 15:37:46 +02:00
@ media ( max-width : 900px ) {
. menubar { grid-template-columns : 39 px minmax ( 0 , 1 fr ) 10 px ; gap : 5 px ; padding : 0 8 px ; }
. brand { gap : 0 ; }
. brand > span : not ( . brand-mark ) { display : none ; }
. brand-mark { width : 33 px ; height : 33 px ; }
. menubar nav { min-width : 0 ; display : flex ; overflow-x : auto ; overflow-y : hidden ; scrollbar-width : none ; overscroll-behavior-inline : contain ; -webkit- overflow-scrolling : touch ; }
. menubar nav :: -webkit-scrollbar { display : none ; }
. menubar nav button { flex : 0 0 auto ; padding : 0 10 px ; font-size : 8 px ; letter-spacing : .05 em ; white-space : nowrap ; }
. admin-menu { flex : 0 0 auto ; }
. menubar nav . admin-menu-items { position : fixed ; top : 68 px ; right : 8 px ; width : min ( 235 px , calc ( 100 vw - 16 px )); height : auto ; }
. terminal-status { justify-content : center ; gap : 0 ; font-size : 0 ; }
. terminal-status span { display : none ; }
. documents-panel { width : 275 px ; }
. documents-panel . closed { margin-left : -275 px ; }
. timeline { grid-template-columns : 115 px 1 fr ; padding : 0 12 px ; }
. timeline-key { display : none ; }
. timeline-track { margin : 0 23 px ; }
. document-window { width : 80 vw ; }
. case-heading { left : 18 px ; }
. case-number { display : none ; }
. brief-panel { position : fixed ; inset : 0 ; width : 100 vw ; height : 100 dvh ; max-height : none ; border-width : 0 ; box-shadow : none ; }
. brief-panel > header { position : sticky ; z-index : 2 ; top : 0 ; min-height : 48 px ; padding-left : max ( 13 px , env ( safe - area - inset - left )); padding-right : max ( 7 px , env ( safe - area - inset - right )); }
. brief-panel . minimized { inset : 82 px 8 px auto ; width : auto ; height : 48 px ; max-height : 48 px ; border : 2 px solid #d8dbd4 ; box-shadow : 5 px 6 px 0 #020a08 ; }
. folder-member , . file-editor-grid { grid-template-columns : 1 fr ; gap : 7 px ; }
2026-08-22 14:53:23 +02:00
. match-rules-editor { width : 100 vw ; height : 100 dvh ; max-height : none ; border : 0 ; }. match-rules-body { padding : 16 px ; }. match-rule-layout { grid-template-columns : 1 fr ; }. match-rule-list { max-height : 180 px ; }. match-rule-fields { grid-template-columns : 1 fr 100 px ; }
2026-08-18 15:37:46 +02:00
. board-actions button { width : 38 px ; padding : 0 ; justify-content : center ; gap : 0 ; font-size : 0 ; }
. board-actions > b { display : none ; }
. board-actions > span { margin : 0 2 px ; }
}
2026-08-14 18:35:54 +02:00
@ media ( max-width : 900px ) and ( orientation : portrait ) {
2026-08-18 15:37:46 +02:00
. board-actions { top : 50 % ; right : 8 px ; bottom : auto ; left : auto ; width : 48 px ; height : auto ; max-height : calc ( 100 % - 20 px ); padding : 5 px ; transform : translateY ( -50 % ); flex-direction : column ; align-items : center ; overflow-y : auto ; }
. board-actions button { flex : 0 0 36 px ; width : 36 px ; justify-content : center ; }
. board-actions > span { flex : 0 0 1 px ; width : 30 px ; height : 1 px ; margin : 3 px 0 ; }
2026-08-14 18:35:54 +02:00
}
2026-08-22 14:53:23 +02:00
@ media ( prefers-reduced-motion : reduce ) { . evidence-card . arriving , . source-file-widget . arriving , . doc-row . arriving , . brief-concepts section . just-resolved , . connections g . tightening path , . document-located , . document-locator-ray , . document-locator-pulse { animation : none ; }. board , . documents-panel , . luggage-tag , . thread-tag-content { transition : none ; } }
2026-08-18 15:37:46 +02:00
/* Narrative layer: splash + NPC dialogue */
. splash { height : 100 vh ; display : grid ; place-content : center ; justify-items : center ; text-align : center ; background : radial-gradient ( circle at 50 % 40 % , #123029 0 , #071916 68 % ); color : #9bb0a9 ; }
. splash-plate { display : grid ; justify-items : center ; padding : 20 px ; }
. splash . seal { width : 78 px ; height : 78 px ; display : grid ; place-items : center ; border : 2 px solid #b87337 ; color : #d58a46 ; font : 600 15 px IBM Plex Mono ; margin-bottom : 30 px ; }
. splash-title { margin : 0 ; color : #e9ede8 ; font : 40 px Special Elite ; letter-spacing : .06 em ; }
. splash-sub { margin : 6 px 0 0 ; font : 11 px IBM Plex Mono ; letter-spacing : .32 em ; color : #7f9a92 ; text-transform : uppercase ; }
. splash-actions { display : flex ; gap : 14 px ; margin : 40 px 0 22 px ; }
. splash-button { background : #10362d ; border : 1 px solid #6f8f85 ; color : #d8ded9 ; padding : 13 px 26 px ; font : 11 px IBM Plex Mono ; letter-spacing : .16 em ; cursor : pointer ; }
. splash-button : hover : not ( : disabled ) { background : #1a493d ; color : #fff ; }
. splash-button . primary { background : #a2551f ; border-color : #d58a46 ; color : #f6ead9 ; }
. splash-button . primary : hover : not ( : disabled ) { background : #b8622a ; }
. splash-button : disabled { opacity : .5 ; cursor : progress ; }
. splash-status { font : 9 px IBM Plex Mono ; letter-spacing : .2 em ; color : #5f7b73 ; }
/* Full-screen visual-novel cutscene: NPC art fills the viewport, a translucent
panel floats at the bottom. One fluid layout for mobile and desktop. */
. dialogue { position : fixed ; inset : 0 ; z-index : 200 ; height : 100 vh ; height : 100 dvh ; overflow : hidden ;
display : flex ; flex-direction : column ; justify-content : flex-end ; background : #06140f ; cursor : pointer ; animation : dialogue-in .25 s ease ; }
@ keyframes dialogue-in { from { opacity : 0 ; } to { opacity : 1 ; } }
/* The portrait is a full-bleed, top-cropped, centered cover image. Reserved (empty
dark) when no art has been uploaded yet, so layout does not shift when it arrives. */
. dialogue-portrait { position : absolute ; inset : 0 ; }
. dialogue-portrait img { width : 100 % ; height : 100 % ; object-fit : cover ; object-position : top center ; }
/* Legibility gradient behind the panel, present with or without art. */
. dialogue-scrim { position : absolute ; inset : 0 ; pointer-events : none ;
background : linear-gradient ( to top , #04110e f2 0 % , #04110e d0 20 % , #04110e 55 42 % , #04110e 00 68 % ); }
. dialogue-skip { position : absolute ; top : max ( 16 px , env ( safe - area - inset - top )); right : max ( 16 px , env ( safe - area - inset - right ));
background : #04110e 99 ; border : 1 px solid #3c5a52 ; color : #cfe0d9 ; padding : 8 px 14 px ; font : 9 px IBM Plex Mono ; letter-spacing : .18 em ; cursor : pointer ; z-index : 2 ; }
. dialogue-skip : hover { border-color : #6f8f85 ; color : #fff ; }
. dialogue-box { position : relative ; z-index : 1 ; width : 100 % ; padding : 0 clamp ( 14 px , 4 vw , 40 px ) max ( 20 px , env ( safe - area - inset - bottom )); }
. dialogue-panel { width : min ( 860 px , 100 % ); margin : 0 auto ; border : 1 px solid #40655b 8 c ; border-bottom : 0 ;
background : #0a211d e6 ; backdrop-filter : blur ( 3 px ); box-shadow : 0 -8 px 34 px #000b ; padding : clamp ( 16 px , 3.4 vw , 26 px ) clamp ( 18 px , 4 vw , 34 px ) clamp ( 20 px , 4 vw , 30 px ); }
. dialogue-speaker { display : flex ; align-items : baseline ; gap : 12 px ; margin-bottom : 11 px ; flex-wrap : wrap ; }
. dialogue-speaker strong { color : #e7b57e ; font : 600 clamp ( 13 px , 1.1 vw + .5 rem , 16 px ) IBM Plex Mono ; letter-spacing : .06 em ; }
. dialogue-speaker em { color : #7f9a92 ; font : clamp ( 8 px , .5 vw + .3 rem , 9 px ) IBM Plex Mono ; letter-spacing : .16 em ; font-style : normal ; text-transform : uppercase ; }
. dialogue-text { margin : 0 ; max-width : 62 ch ; min-height : 4.8 em ; color : #eef2ec ; font : clamp ( 16 px , 1 vw + .7 rem , 21 px ) / 1.6 Special Elite ; text-shadow : 0 1 px 6 px #0007 ; }
. dialogue-caret { color : #d58a46 ; }
. dialogue-advance { margin-top : 15 px ; text-align : right ; min-height : 12 px ; color : #a9c7bd ; font : 9 px IBM Plex Mono ; letter-spacing : .2 em ; animation : advance-pulse 1.4 s ease-in-out infinite ; }
@ keyframes advance-pulse { 0 %, 100 % { opacity : .4 ; } 50 % { opacity : 1 ; } }
/* Landscape phones: tiny height — keep the panel compact and never taller than the screen allows. */
@ media ( orientation : landscape ) and ( max-height : 520px ) {
. dialogue-panel { padding : 12 px 20 px 14 px ; }
. dialogue-text { min-height : 3.4 em ; max-height : 40 vh ; overflow-y : auto ; }
. dialogue-advance { margin-top : 8 px ; }
}
@ media ( max-width : 900px ) { . splash-title { font-size : 30 px ; } . splash-actions { flex-direction : column ; } }
@ media ( prefers-reduced-motion : reduce ) { . dialogue { animation : none ; } . dialogue-advance { animation : none ; } }
/* Admin authoring panel */
. admin { height : 100 vh ; height : 100 dvh ; display : grid ; grid-template-rows : 56 px 1 fr 30 px ; background : #071916 ; color : #d8ded9 ; }
. admin-head { display : flex ; align-items : center ; gap : 26 px ; padding : 0 22 px ; border-bottom : 1 px solid #315049 ; background : #0a211d ; }
. admin-tabs { display : flex ; gap : 4 px ; margin-left : 14 px ; }
. admin-tabs button { background : none ; border : 0 ; padding : 8 px 16 px ; font : 500 11 px IBM Plex Mono ; letter-spacing : .12 em ; color : #94aaa4 ; cursor : pointer ; border-bottom : 2 px solid transparent ; }
. admin-tabs button : hover { color : #e4e9e4 ; }
. admin-tabs button . active { color : #fff ; border-bottom-color : #d58a46 ; }
. admin-link { margin-left : auto ; color : #8fb0a6 ; text-decoration : none ; font : 10 px IBM Plex Mono ; letter-spacing : .12 em ; }
. admin-link : hover { color : #e7b57e ; }
. admin-body { display : grid ; grid-template-columns : 300 px 1 fr ; min-height : 0 ; }
. npc-list { border-right : 1 px solid #243d36 ; background : #0b201b ; overflow : auto ; display : flex ; flex-direction : column ; }
. npc-list-head { display : flex ; justify-content : space-between ; align-items : center ; padding : 16 px 16 px 10 px ; font : 600 9 px IBM Plex Mono ; letter-spacing : .18 em ; color : #78958d ; }
. npc-list-head button { background : #143229 ; border : 1 px solid #3c5a52 ; color : #d79754 ; font : 9 px IBM Plex Mono ; padding : 5 px 10 px ; cursor : pointer ; }
. npc-list-head button : hover { background : #1c463a ; }
. npc-row { display : flex ; align-items : center ; gap : 12 px ; padding : 11 px 16 px ; border : 0 ; border-bottom : 1 px solid #17302a ; background : none ; text-align : left ; cursor : pointer ; color : inherit ; }
. npc-row : hover { background : #12312a ; }
. npc-row . selected { background : #1b3d33 ; box-shadow : inset 3 px 0 #d58a46 ; }
. npc-avatar { width : 40 px ; height : 40 px ; flex : 0 0 auto ; display : grid ; place-items : center ; overflow : hidden ; border : 1 px solid #3c5a52 ; background : #0e2a24 ; color : #6f9084 ; font : 600 15 px Special Elite ; }
. npc-avatar img { width : 100 % ; height : 100 % ; object-fit : cover ; object-position : top center ; }
. npc-row-text strong { display : block ; font : 13 px IBM Plex Mono ; color : #dfe5e0 ; }
. npc-row-text small { color : #7f9a92 ; font : 9 px IBM Plex Mono ; letter-spacing : .04 em ; }
. npc-editor { padding : 26 px 32 px ; overflow : auto ; max-width : 720 px ; }
. npc-editor . empty { display : grid ; place-items : center ; color : #607d75 ; font : 11 px IBM Plex Mono ; }
. npc-editor-head { display : flex ; align-items : baseline ; gap : 14 px ; margin-bottom : 22 px ; }
. npc-editor-head h2 { margin : 0 ; font : 500 24 px Special Elite ; color : #e9ede8 ; }
. npc-editor-head code { color : #8fb0a6 ; font : 10 px IBM Plex Mono ; background : #0e2a24 ; padding : 3 px 8 px ; border : 1 px solid #2c473f ; }
. npc-editor-head . danger { margin-left : auto ; background : none ; border : 1 px solid #7a3b34 ; color : #d78a7f ; font : 9 px IBM Plex Mono ; padding : 6 px 12 px ; cursor : pointer ; }
. npc-editor-head . danger : disabled { opacity : .4 ; cursor : not-allowed ; }
. npc-editor-head . danger : not ( : disabled ) : hover { background : #4a221d ; }
. admin-field { display : grid ; gap : 5 px ; margin-bottom : 15 px ; }
. admin-field label { font : 600 9 px IBM Plex Mono ; letter-spacing : .14 em ; color : #86a199 ; }
. admin-field input , . admin-field select , . pose-key { background : #0c231e ; border : 1 px solid #35544c ; color : #e4e9e4 ; padding : 9 px 11 px ; font : 12 px IBM Plex Mono ; }
. admin-field input : focus , . admin-field select : focus , . pose-key : focus { outline : 0 ; border-color : #9a683d ; box-shadow : inset 0 0 0 1 px #6f4b2f ; }
. admin-save { margin-top : 4 px ; background : #a2551f ; border : 1 px solid #d58a46 ; color : #f6ead9 ; padding : 10 px 20 px ; font : 10 px IBM Plex Mono ; letter-spacing : .12 em ; cursor : pointer ; }
. admin-save : disabled { opacity : .45 ; cursor : default ; background : #143229 ; border-color : #35544c ; color : #8fb0a6 ; }
. npc-editor h3 { margin : 30 px 0 12 px ; font : 600 10 px IBM Plex Mono ; letter-spacing : .18 em ; color : #86a199 ; }
. pose-grid { display : grid ; grid-template-columns : repeat ( auto - fill , minmax ( 120 px , 1 fr )); gap : 14 px ; }
. pose-card { position : relative ; margin : 0 ; border : 1 px solid #35544c ; background : #0e2a24 ; }
. pose-card . is-default { border-color : #d58a46 ; box-shadow : 0 0 0 1 px #d58a46 55 ; }
. pose-card img { width : 100 % ; aspect-ratio : 3 / 4 ; object-fit : cover ; object-position : top center ; display : block ; }
. pose-card figcaption { padding : 7 px 9 px ; font : 10 px IBM Plex Mono ; color : #cfe0d9 ; letter-spacing : .04 em ; }
. pose-card . is-default figcaption :: after { content : ' · default' ; color : #d58a46 ; }
. pose-remove { position : absolute ; top : 5 px ; right : 5 px ; width : 22 px ; height : 22 px ; border : 0 ; border-radius : 2 px ; background : #04110e cc ; color : #e5b3ab ; font-size : 15 px ; line-height : 1 ; cursor : pointer ; }
. pose-remove : hover { background : #4a221d ; color : #fff ; }
. pose-upload { display : flex ; gap : 12 px ; align-items : center ; margin-top : 16 px ; flex-wrap : wrap ; }
. pose-upload . pose-key { flex : 0 0 220 px ; }
. pose-upload input [ type = file ] { font : 10 px IBM Plex Mono ; color : #9bb0a9 ; }
. admin-hint , . admin-note { color : #6f8b83 ; font : 9 px / 1.5 IBM Plex Mono ; }
. admin-hint { display : block ; margin-top : 16 px ; }
. admin-note { margin-top : 20 px ; }
. admin-empty { color : #607d75 ; font : 10 px IBM Plex Mono ; padding : 16 px ; }
. mystery-list { padding : 26 px 32 px ; overflow : auto ; }
. mystery-row { padding : 12 px 0 ; border-bottom : 1 px solid #1c352e ; display : grid ; gap : 3 px ; }
. mystery-row strong { color : #dfe5e0 ; font : 14 px IBM Plex Mono ; }
. mystery-row span { color : #7f9a92 ; font : 9 px IBM Plex Mono ; letter-spacing : .06 em ; }
. admin-foot { display : flex ; align-items : center ; padding : 0 22 px ; border-top : 1 px solid #243d36 ; background : #0a211d ; font : 9 px IBM Plex Mono ; letter-spacing : .08 em ; color : #718d84 ; }
. boot . admin-link { color : #8fb0a6 ; }
@ media ( max-width : 760px ) { . admin-body { grid-template-columns : 1 fr ; } . npc-list { max-height : 34 vh ; } }
/* Mystery story-flow graph editor */
. mystery-row { width : 100 % ; border : 0 ; border-bottom : 1 px solid #1c352e ; background : none ; text-align : left ; cursor : pointer ; }
. mystery-row : hover { background : #12312a ; }
. graph-loading , . graph-empty { display : grid ; place-items : center ; height : 100 % ; color : #607d75 ; font : 11 px IBM Plex Mono ; }
. graph-editor { display : flex ; flex-direction : column ; min-height : 0 ; background : #081915 00 ; }
. graph-toolbar { display : flex ; align-items : center ; gap : 10 px ; padding : 8 px 16 px ; border-bottom : 1 px solid #243d36 ; background : #0a211d ; flex-wrap : wrap ; }
. graph-toolbar strong { color : #e9ede8 ; font : 13 px IBM Plex Mono ; margin-right : 8 px ; }
. graph-back { background : none ; border : 1 px solid #3c5a52 ; color : #9bb0a9 ; font : 9 px IBM Plex Mono ; padding : 6 px 11 px ; cursor : pointer ; }
. graph-add-label { color : #78958d ; font : 9 px IBM Plex Mono ; letter-spacing : .12 em ; margin-left : 8 px ; }
. graph-add { background : #143229 ; border : 1 px solid #3c5a52 ; color : #d79754 ; font : 9 px IBM Plex Mono ; padding : 6 px 10 px ; cursor : pointer ; }
. graph-add : hover { background : #1c463a ; }
. graph-wiring { color : #e7b57e ; font : 9 px IBM Plex Mono ; letter-spacing : .06 em ; }
. graph-zoom { margin-left : auto ; color : #6f8b83 ; font : 9 px IBM Plex Mono ; }
. graph-main { flex : 1 ; display : flex ; min-height : 0 ; }
. graph-canvas { position : relative ; flex : 1 ; overflow : hidden ; background :
radial-gradient ( #49615a 33 1 px , transparent 1 px ), #0b1d19 ; background-size : 22 px 22 px ; touch-action : none ; cursor : grab ; }
. graph-canvas . wiring { cursor : crosshair ; }
. graph-world { position : absolute ; top : 0 ; left : 0 ; transform-origin : 0 0 ; }
. graph-wires { position : absolute ; top : 0 ; left : 0 ; overflow : visible ; pointer-events : none ; }
. graph-wire { fill : none ; stroke : #c98a4c ; stroke-width : 2 ; opacity : .8 ; }
. gnode { position : absolute ; background : #0e2a24 ; border : 1 px solid #40655b ; box-shadow : 4 px 5 px 0 #04110e 66 ; user-select : none ; }
. gnode . selected { border-color : #e7b57e ; box-shadow : 0 0 0 1 px #e7b57e , 4 px 5 px 0 #04110e 66 ; }
. gnode . entry { box-shadow : -4 px 0 0 #6fbf8b , 4 px 5 px 0 #04110e 66 ; }
. gnode . entry . selected { box-shadow : -4 px 0 0 #6fbf8b , 0 0 0 1 px #e7b57e ; }
. gnode-head { height : 30 px ; display : flex ; align-items : center ; gap : 7 px ; padding : 0 10 px ; cursor : grab ; border-bottom : 1 px solid #24413a ; }
. gnode-head : active { cursor : grabbing ; }
. gnode-type { font : 600 8 px IBM Plex Mono ; letter-spacing : .1 em ; text-transform : uppercase ; padding : 2 px 5 px ; border-radius : 2 px ; background : #24413a ; color : #9bd ; }
. type-cutscene . gnode-type { color : #d7a0e0 ; } . type-dialogue . gnode-type { color : #7fc7b6 ; }
. type-level . gnode-type { color : #e7b57e ; } . type-det_gate . gnode-type { color : #d89a9a ; } . type-llm_gate . gnode-type { color : #c9b06e ; }
. gnode-label { flex : 1 ; font : 11 px IBM Plex Mono ; color : #e4e9e4 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. gnode-entry { color : #6fbf8b ; font-size : 10 px ; }
. gnode-sub { height : 18 px ; padding : 0 10 px ; font : 8 px IBM Plex Mono ; color : #7f9a92 ; display : flex ; align-items : center ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. gnode-terminals { padding-bottom : 4 px ; }
. gterm { position : relative ; display : flex ; align-items : center ; padding : 0 12 px ; }
. gterm-label { font : 9 px IBM Plex Mono ; color : #b6c6c0 ; margin-left : auto ; }
. gport { position : absolute ; right : -7 px ; top : 50 % ; transform : translateY ( -50 % ); width : 12 px ; height : 12 px ; border-radius : 50 % ; border : 2 px solid #6f8f85 ; background : #0b1d19 ; cursor : pointer ; padding : 0 ; }
. gport : hover { border-color : #e7b57e ; }
. gport . wired { background : #c98a4c ; border-color : #c98a4c ; }
. gport . active { border-color : #e7b57e ; box-shadow : 0 0 0 3 px #e7b57e 55 ; }
. ginput { position : absolute ; left : -6 px ; top : 20 px ; width : 11 px ; height : 11 px ; border-radius : 50 % ; background : #2c473f ; border : 2 px solid #6f8f85 ; }
. graph-inspector { width : 280 px ; flex : 0 0 auto ; border-left : 1 px solid #243d36 ; background : #0b201b ; overflow : auto ; }
. inspector-body { padding : 16 px ; display : grid ; gap : 12 px ; }
. inspector-head { display : flex ; align-items : center ; gap : 10 px ; }
. ins-entry { margin-left : auto ; background : #143229 ; border : 1 px solid #3c5a52 ; color : #6fbf8b ; font : 8 px IBM Plex Mono ; padding : 5 px 9 px ; cursor : pointer ; }
. ins-field { display : grid ; gap : 4 px ; font : 600 8 px IBM Plex Mono ; letter-spacing : .12 em ; color : #86a199 ; }
. ins-field input , . ins-field select { background : #0c231e ; border : 1 px solid #35544c ; color : #e4e9e4 ; padding : 7 px 9 px ; font : 11 px IBM Plex Mono ; }
. ins-check { display : flex ; align-items : center ; gap : 8 px ; font : 10 px IBM Plex Mono ; color : #b6c6c0 ; }
. ins-terminals-head { display : flex ; justify-content : space-between ; align-items : center ; font : 600 8 px IBM Plex Mono ; letter-spacing : .12 em ; color : #86a199 ; margin-top : 6 px ; }
. ins-terminals-head button { background : #143229 ; border : 1 px solid #3c5a52 ; color : #d79754 ; font : 8 px IBM Plex Mono ; padding : 4 px 8 px ; cursor : pointer ; }
. ins-terminal { display : flex ; align-items : center ; gap : 6 px ; }
. ins-terminal input { flex : 0 0 84 px ; background : #0c231e ; border : 1 px solid #35544c ; color : #e4e9e4 ; padding : 5 px 7 px ; font : 10 px IBM Plex Mono ; }
. ins-terminal-to { flex : 1 ; font : 9 px IBM Plex Mono ; color : #7f9a92 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. ins-unwire , . ins-term-del { background : none ; border : 1 px solid #3c5a52 ; color : #9bb0a9 ; width : 22 px ; height : 24 px ; cursor : pointer ; font-size : 12 px ; }
. ins-unwire : hover , . ins-term-del : hover { border-color : #d78a7f ; color : #e5b3ab ; }
. ins-delete { margin-top : 8 px ; background : none ; border : 1 px solid #7a3b34 ; color : #d78a7f ; font : 9 px IBM Plex Mono ; padding : 8 px ; cursor : pointer ; }
. ins-delete : hover { background : #4a221d ; }
/* Utterance sub-canvas (dialogue crafter) */
. graph-editor { position : relative ; }
. utterance-overlay { position : absolute ; inset : 0 ; z-index : 20 ; display : flex ; flex-direction : column ; background : #071916 ; }
. ins-utterances { background : #143229 ; border : 1 px solid #3c5a52 ; color : #7fc7b6 ; font : 9 px IBM Plex Mono ; padding : 8 px ; cursor : pointer ; }
. ins-utterances : hover { background : #1c463a ; }
. ucard { position : absolute ; background : #10241f ; border : 1 px solid #40655b ; box-shadow : 3 px 4 px 0 #04110e 66 ; user-select : none ; display : flex ; flex-direction : column ; }
. ucard . u-npc { border-left : 3 px solid #7fc7b6 ; }
. ucard . u-player { border-left : 3 px solid #e7b57e ; background : #18231d ; }
. ucard . selected { border-color : #e7b57e ; box-shadow : 0 0 0 1 px #e7b57e , 3 px 4 px 0 #04110e 66 ; }
. ucard-head { height : 24 px ; display : flex ; align-items : center ; gap : 6 px ; padding : 0 9 px ; cursor : grab ; border-bottom : 1 px solid #24413a ; }
. ucard-head : active { cursor : grabbing ; }
. ucard-badge { font : 600 8 px IBM Plex Mono ; letter-spacing : .08 em ; color : #cfe0d9 ; text-transform : uppercase ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. ucard-pose { margin-left : auto ; font : 8 px IBM Plex Mono ; color : #86a199 ; }
. ucard-text { flex : 1 ; padding : 6 px 9 px ; font : 12 px / 1.3 Special Elite ; color : #dfe5e0 ; overflow : hidden ; }
. ucard-text em { color : #5f7b73 ; }
. uinput { position : absolute ; left : -6 px ; top : 50 % ; transform : translateY ( -50 % ); width : 11 px ; height : 11 px ; border-radius : 50 % ; background : #2c473f ; border : 2 px solid #6f8f85 ; }
. uport { position : absolute ; width : 13 px ; height : 13 px ; border-radius : 50 % ; border : 2 px solid #6f8f85 ; background : #0b1d19 ; cursor : pointer ; padding : 0 ; }
. uport . flow { right : -7 px ; top : 50 % ; transform : translateY ( -50 % ); }
. uport . options { bottom : -7 px ; left : 50 % ; transform : translateX ( -50 % ); border-color : #c98a4c ; }
. uport : hover { border-color : #e7b57e ; }
. uport . wired { background : #c98a4c ; border-color : #c98a4c ; }
. uport . active { box-shadow : 0 0 0 3 px #e7b57e 55 ; border-color : #e7b57e ; }
. usink { position : absolute ; height : 40 px ; display : flex ; align-items : center ; padding : 0 12 px ; background : #241a12 ; border : 1 px dashed #c98a4c ; color : #e7b57e ; cursor : pointer ; }
. usink : hover { background : #30241a ; }
. usink-label { font : 9 px IBM Plex Mono ; letter-spacing : .06 em ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. graph-wire . exit { stroke : #e7b57e ; }
. graph-wire . option { stroke : #7fc7b6 ; stroke-dasharray : 5 4 ; opacity : .7 ; }
. ins-text { min-height : 70 px ; resize : vertical ; background : #0c231e ; border : 1 px solid #35544c ; color : #e4e9e4 ; padding : 8 px ; font : 13 px / 1.4 Special Elite ; }
. ins-links { font : 9 px IBM Plex Mono ; color : #9bb0a9 ; display : grid ; gap : 6 px ; }
. ins-links > div { display : flex ; align-items : center ; gap : 8 px ; }
/* Story-graph runtime: cutscene title card + report-back */
. cutscene-card { position : fixed ; inset : 0 ; z-index : 200 ; display : grid ; place-items : center ; background : #04110e ; cursor : pointer ; animation : dialogue-in .3 s ease ; }
. title-card-inner { display : grid ; justify-items : center ; text-align : center ; gap : 18 px ; animation : title-rise 1.1 s cubic-bezier ( .2 , .7 , .2 , 1 ); }
@ keyframes title-rise { from { opacity : 0 ; transform : translateY ( 14 px ); } to { opacity : 1 ; transform : none ; } }
. title-card-inner small { font : 10 px IBM Plex Mono ; letter-spacing : .3 em ; color : #7f9a92 ; text-transform : uppercase ; }
. title-card-inner h1 { margin : 0 ; font : 44 px Special Elite ; letter-spacing : .04 em ; color : #eef2ec ; max-width : 16 ch ; }
. cutscene-missing { color : #b56d30 !important ; letter-spacing : .08 em !important ; }
. cutscene-begin { margin-top : 10 px ; background : #a2551f ; border : 1 px solid #d58a46 ; color : #f6ead9 ; padding : 11 px 24 px ; font : 11 px IBM Plex Mono ; letter-spacing : .16 em ; cursor : pointer ; }
. cutscene-begin : hover { background : #b8622a ; }
. menubar nav button . report-back { color : #f6ead9 ; background : #a2551f ; }
. menubar nav button . report-back : hover { background : #b8622a ; }
@ media ( max-width : 900px ) { . title-card-inner h1 { font-size : 30 px ; } }
/* Utterance cards: expand to full content, ports anchored to top, colour by speaker */
. ucard { height : auto ; min-height : 58 px ; }
. ucard . u-npc { background : #0f2a24 ; border-left : 3 px solid #6fbfa9 ; }
. ucard . u-player { background : #2b2113 ; border-left : 3 px solid #e0a253 ; }
. u-npc . ucard-badge { color : #9fe0cd ; }
. u-player . ucard-badge { color : #e8bd80 ; }
. ucard-text { flex : none ; overflow : visible ; white-space : pre-wrap ; min-height : 20 px ; }
. uinput { top : 18 px ; transform : none ; }
. uport . flow { top : 18 px ; transform : none ; }
. uport . options { top : 44 px ; bottom : auto ; left : auto ; right : -7 px ; transform : none ; }
/* Clickable wires (delete a connection by clicking it) */
. wire-hit { fill : none ; stroke : transparent ; stroke-width : 16 ; pointer-events : stroke ; cursor : pointer ; }
. wire-hit : hover + . graph-wire { stroke-width : 4 ; filter : drop-shadow ( 0 0 3 px #e7b57e ); }
/* Branching dialogue: player choice buttons */
. dialogue-choices { display : grid ; gap : 8 px ; margin-top : 14 px ; }
. dialogue-choices button { text-align : left ; background : #0e2a24 e6 ; border : 1 px solid #6f8f85 ; color : #eef2ec ; padding : 12 px 16 px ; font : 15 px / 1.4 Special Elite ; cursor : pointer ; min-height : 46 px ; }
. dialogue-choices button : hover { background : #1a493d ; border-color : #e7b57e ; }
/* Vertical mystery-graph nodes: input top, output terminals along the bottom */
. gnode { display : flex ; flex-direction : column ; }
. ginput { top : -6 px ; left : 50 % ; right : auto ; bottom : auto ; transform : translateX ( -50 % ); }
. gnode-outs { display : flex ; justify-content : space-around ; align-items : flex-end ; gap : 4 px ; margin-top : auto ; padding : 2 px 6 px 0 ; }
. gout { position : relative ; flex : 1 1 0 ; min-width : 0 ; display : flex ; flex-direction : column ; align-items : center ; gap : 3 px ; padding-bottom : 9 px ; }
. gout-label { font : 9 px IBM Plex Mono ; color : #b6c6c0 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; max-width : 100 % ; }
. gout . gport { position : absolute ; bottom : -7 px ; left : 50 % ; top : auto ; right : auto ; transform : translateX ( -50 % ); }
2026-08-18 17:59:17 +02:00
/* Utterance canvas vertical flow: input on top, output on the bottom */
. uinput { top : -6 px ; bottom : auto ; left : 50 % ; right : auto ; transform : translateX ( -50 % ); }
. uport . flow { bottom : -7 px ; top : auto ; left : 50 % ; right : auto ; transform : translateX ( -50 % ); }
2026-08-18 19:05:29 +02:00
/* Admin: mystery list actions + asset library */
. mystery-list-head { display : flex ; justify-content : space-between ; align-items : center ; padding : 16 px 0 10 px ; font : 600 9 px IBM Plex Mono ; letter-spacing : .18 em ; color : #78958d ; }
. mystery-list-head button , . asset-upload-btn { background : #143229 ; border : 1 px solid #3c5a52 ; color : #d79754 ; font : 9 px IBM Plex Mono ; padding : 6 px 12 px ; cursor : pointer ; }
. mystery-list-head button : hover , . asset-upload-btn : hover { background : #1c463a ; }
. asset-upload-btn { display : inline-flex ; align-items : center ; letter-spacing : .1 em ; }
. asset-upload-btn input { display : none ; }
. mystery-row { display : flex ; align-items : center ; gap : 10 px ; width : 100 % ; padding : 12 px 6 px ; border : 0 ; border-bottom : 1 px solid #1c352e ; background : none ; text-align : left ; cursor : pointer ; }
. mystery-row : hover { background : #12312a ; }
. mystery-row-main { flex : 1 ; display : grid ; gap : 3 px ; min-width : 0 ; }
. mystery-del { flex : 0 0 auto ; background : none ; border : 1 px solid #3c5a52 ; color : #9bb0a9 ; width : 26 px ; height : 26 px ; font-size : 15 px ; cursor : pointer ; }
. mystery-del : hover { border-color : #d78a7f ; color : #e5b3ab ; background : #4a221d ; }
. ins-warn { color : #d78a7f ; font-weight : 600 ; }
. asset-store { padding : 0 24 px 24 px ; overflow : auto ; }
. asset-grid { display : grid ; grid-template-columns : repeat ( auto - fill , minmax ( 150 px , 1 fr )); gap : 14 px ; }
. asset-card { margin : 0 ; border : 1 px solid #35544c ; background : #0e2a24 ; display : flex ; flex-direction : column ; }
. asset-thumb { aspect-ratio : 4 / 3 ; display : grid ; place-items : center ; overflow : hidden ; background : #0a211d ; }
. asset-thumb img { width : 100 % ; height : 100 % ; object-fit : cover ; }
. asset-icon { font : 600 20 px IBM Plex Mono ; color : #7f9a92 ; letter-spacing : .06 em ; }
. asset-card figcaption { padding : 7 px 9 px 2 px ; font : 10 px IBM Plex Mono ; color : #cfe0d9 ; white-space : nowrap ; overflow : hidden ; text-overflow : ellipsis ; }
. asset-card small { padding : 0 9 px 6 px ; font : 8 px IBM Plex Mono ; color : #7f9a92 ; }
. asset-actions { display : flex ; gap : 4 px ; padding : 0 8 px 8 px ; margin-top : auto ; }
. asset-actions button { flex : 1 ; background : #143229 ; border : 1 px solid #3c5a52 ; color : #9bb0a9 ; font : 8 px IBM Plex Mono ; padding : 5 px ; cursor : pointer ; }
. asset-actions button : hover { background : #1c463a ; color : #e4e9e4 ; }
. asset-actions . asset-del { flex : 0 0 26 px ; }
. asset-actions . asset-del : hover { border-color : #d78a7f ; color : #e5b3ab ; background : #4a221d ; }
2026-08-18 19:24:03 +02:00
/* Live dialogue preview (mini player, real DialoguePlayer scaled down) */
. dialogue . inline { position : absolute ; inset : 0 ; width : 100 % ; height : 100 % ; animation : none ; }
. dialogue-preview { width : 340 px ; background : #0a211d ; border : 1 px solid #40655b ; box-shadow : 4 px 6 px 0 #04110e 88 ; }
. dialogue-preview-bar { display : flex ; align-items : center ; gap : 6 px ; height : 22 px ; padding : 0 8 px ; background : #0e2a24 ; border-bottom : 1 px solid #24413a ; font : 8 px IBM Plex Mono ; letter-spacing : .16 em ; color : #86a199 ; text-transform : uppercase ; }
. dialogue-preview-bar span { margin-right : auto ; }
. dialogue-preview-bar button { background : none ; border : 0 ; color : #9bb0a9 ; cursor : pointer ; font-size : 12 px ; line-height : 1 ; padding : 0 2 px ; }
. dialogue-preview-bar button : hover { color : #e7b57e ; }
. dialogue-preview-stage { position : relative ; width : 340 px ; height : 191 px ; overflow : hidden ; cursor : pointer ; background : #06140f ; }
. dialogue-preview-scale { position : absolute ; top : 0 ; left : 0 ; width : 1020 px ; height : 573 px ; transform : scale ( 0.33333 ); transform-origin : top left ; }
. dialogue-preview-empty { display : grid ; place-items : center ; height : 100 % ; color : #5f7b73 ; font : 9 px IBM Plex Mono ; }
. graph-node-preview { position : absolute ; z-index : 6 ; }
. utterance-preview-dock { position : absolute ; left : 16 px ; bottom : 16 px ; z-index : 6 ; }
2026-08-18 19:51:44 +02:00
/* Audio mute toggle (floats over cutscene/dialogue/board) */
. audio-toggle { position : fixed ; top : 14 px ; right : 14 px ; z-index : 300 ; width : 34 px ; height : 34 px ; display : grid ; place-items : center ; border : 1 px solid #3c5a52 ; background : #0a211d e6 ; color : #d58a46 ; font-size : 16 px ; line-height : 1 ; cursor : pointer ; }
. audio-toggle : hover { border-color : #6f8f85 ; color : #e7b57e ; }
. audio-toggle . muted { color : #5f7b73 ; text-decoration : line-through ; }
2026-08-22 12:14:11 +02:00
/* === 90s handset spike (src/phone.tsx) ============================ */
. phone-backdrop { position : fixed ; inset : 0 ; z-index : 500 ; display : flex ; flex-direction : column ; align-items : center ; justify-content : center ; gap : 14 px ;
background : radial-gradient ( 120 % 90 % at 50 % 30 % , #10201c 0 % , #060b0a 70 % , #020403 100 % ); }
/* Fixed 1:2 portrait stage. The 3D scene and the DOM screen both live here, so
percentages resolve against the same box at every size. */
. phone-stage { position : relative ; height : min ( 88 vh , 720 px ); aspect-ratio : 1 / 2 ; max-width : 92 vw ; }
. phone-canvas { position : absolute ; inset : 0 ; }
/* The interactive screen, positioned in % of the stage over the 3D glass. */
. phone-screen { position : absolute ; box-sizing : border-box ; padding : 4 % 6 % ; overflow : hidden ;
background : linear-gradient ( 180 deg , #12200b , #0a1607 ); color : #cdea6a ; font-family : "DejaVu Sans Mono" , ui-monospace , monospace ;
text-shadow : 0 0 6 px #7fa029 88 ; opacity : 0 ; transition : opacity .1 s ease ; pointer-events : none ;
box-shadow : inset 0 0 18 px #0006 , inset 0 0 0 1 px #2c3d16 ; }
. phone-screen . on { opacity : 1 ; pointer-events : auto ; transition : opacity .28 s ease .1 s ; }
. phone-screen :: after { content : "" ; position : absolute ; inset : 0 ; pointer-events : none ;
background : repeating-linear-gradient ( 180 deg , #0000 0 2 px , #000000 22 2 px 3 px ); mix-blend-mode : multiply ; }
. pscr-status { display : flex ; justify-content : space-between ; font-size : 9 px ; letter-spacing : .5 px ; opacity : .85 ; }
. pscr-clock { text-align : center ; font-size : 34 px ; font-weight : 700 ; margin-top : 14 % ; letter-spacing : 2 px ; }
. pscr-date { text-align : center ; font-size : 11 px ; opacity : .8 ; letter-spacing : 3 px ; }
. pscr-soft { position : absolute ; left : 6 % ; right : 6 % ; bottom : 4 % ; display : flex ; justify-content : space-between ; font-size : 10 px ; opacity : .9 ; }
. pscr-dir { text-align : center ; font-size : 9 px ; opacity : .55 ; margin-top : 8 % ; letter-spacing : 1 px ; }
. pscr-num { text-align : center ; font-size : 22 px ; letter-spacing : 3 px ; margin-top : 16 % ; word-break : break-all ; }
. pscr-num . sm { font-size : 13 px ; margin-top : 4 % ; opacity : .8 ; }
. pscr-big { text-align : center ; font-size : 17 px ; letter-spacing : 1 px ; margin-top : 12 % ; font-weight : 700 ; }
. pscr-big . warn { color : #e88a4a ; text-shadow : 0 0 6 px #e88a4a 66 ; }
. pscr-big . ok { color : #8fe86a ; }
. pscr-big : nth-of-type ( 3 ) { margin-top : 2 % ; }
. pscr-callee { text-align : center ; font-size : 12 px ; margin-top : 6 % ; opacity : .95 ; }
. pscr-line { text-align : center ; font-size : 10 px ; opacity : .7 ; margin-top : 3 % ; }
. pscr-dots :: after { content : "…" ; animation : pscr-blink 1 s steps ( 1 ) infinite ; }
@ keyframes pscr-blink { 50 % { opacity : .2 ; } }
. phone-open-btn { border : 1 px solid #6f8f85 ; background : #0a211d e6 ; color : #cdea6a ; font-family : ui-monospace , monospace ;
letter-spacing : 2 px ; padding : 8 px 22 px ; cursor : pointer ; }
. phone-open-btn : hover { border-color : #cdea6a ; }
. phone-hint { color : #5f7b73 ; font-family : ui-monospace , monospace ; font-size : 11 px ; margin : 0 ; }
. phone-hint code { color : #8fae4a ; }
2026-08-22 14:53:23 +02:00
. phone-open-btn . glow { border-color : #cdea6a ; color : #eafaa0 ; box-shadow : 0 0 14 px #9fd020 88 , inset 0 0 8 px #9fd020 44 ; animation : phone-glow 1.4 s ease-in-out infinite ; }
@ keyframes phone-glow { 50 % { box-shadow : 0 0 22 px #cdea6a cc , inset 0 0 12 px #9fd020 66 ; } }
. phone-dev { display : flex ; flex-direction : column ; align-items : center ; gap : 8 px ; }
. phone-dev-btn { border : 1 px dashed #6f8f85 ; background : #0a1a16 cc ; color : #9fd020 ; font-family : ui-monospace , monospace ; font-size : 11 px ; letter-spacing : 1 px ; padding : 5 px 12 px ; cursor : pointer ; }
. phone-dev-btn : disabled { color : #5f7b73 ; border-style : solid ; cursor : default ; }
. phone-dev-btn : not ( : disabled ) : hover { border-color : #cdea6a ; color : #cdea6a ; }