@@ -261,7 +261,8 @@ export interface ItemDescription {
261261 readonly what : string ;
262262 /** What choosing it costs or changes. One line. Omit when there is nothing true to say. */
263263 readonly impact ?: string ;
264- /** "consequence" paints impact in UI.action — billing, trust, anything that spends or extends reach. */
264+ /** "consequence" paints impact in UI.warning — billing, trust, anything that spends or extends reach. */
265+
265266 readonly tone ?: "plain" | "consequence" ;
266267}
267268
@@ -1280,12 +1281,21 @@ function overlayTitleLine(
12801281 interior : number ,
12811282 hints : readonly string [ ] = DEFAULT_OVERLAY_HINTS ,
12821283) : string {
1284+ const trimmed = title . trim ( ) ;
1285+ // Empty/blank title: paint hints alone — no leading " · " from a missing title.
1286+ if ( trimmed . length === 0 ) {
1287+ for ( const hint of hints ) {
1288+ const line = ` ${ hint } ` ;
1289+ if ( line . length <= interior ) return line ;
1290+ }
1291+ return " " ;
1292+ }
12831293 const suffixes = [ ...hints . map ( ( h ) => ` · ${ h } ` ) , "" ] ;
12841294 for ( const suffix of suffixes ) {
1285- const line = ` ${ title } ${ suffix } ` ;
1295+ const line = ` ${ trimmed } ${ suffix } ` ;
12861296 if ( line . length <= interior ) return line ;
12871297 }
1288- return ` ${ middleEllipsis ( title , Math . max ( 1 , interior - 1 ) ) } ` ;
1298+ return ` ${ middleEllipsis ( trimmed , Math . max ( 1 , interior - 1 ) ) } ` ;
12891299}
12901300
12911301const DEFAULT_OVERLAY_HINTS = [ "Esc cancel · Enter choose" , "Esc · Enter" ] as const ;
@@ -1419,7 +1429,8 @@ export function describeZoneLines(
14191429 fgs . push ( UI . textDim ) ;
14201430 }
14211431 if ( desc . impact !== undefined && width >= DESCRIPTION_ZONE_IMPACT_MIN_WIDTH ) {
1422- const impactFg = desc . tone === "consequence" ? UI . action : UI . textFaint ;
1432+ const impactFg = desc . tone === "consequence" ? UI . warning : UI . textFaint ;
1433+
14231434 for ( const line of wrapWords ( desc . impact , width ) ) {
14241435 if ( lines . length >= DESCRIPTION_ZONE_LINES ) break ;
14251436 lines . push ( line ) ;
@@ -5401,14 +5412,14 @@ export function createAppShell(renderer: ShellRenderer, options?: AppShellOption
54015412 // which would leave a half-overlay the operator cannot dismiss.
54025413 overflow : "hidden" ,
54035414 border : true ,
5404- borderColor : UI . action ,
5415+ borderColor : UI . textDim ,
54055416 backgroundColor : UI . ground ,
54065417 visible : false ,
54075418 } ) ;
54085419 const overlayTitle = new TextRenderable ( ctx , {
54095420 id : "shell-overlay-title" ,
54105421 content : " overlay" ,
5411- fg : UI . action ,
5422+ fg : UI . textDim ,
54125423 } ) ;
54135424 const overlayBody = new BoxRenderable ( ctx , {
54145425 id : "shell-overlay-body" ,
0 commit comments