@@ -77,11 +77,20 @@ body {
7777 margin: 0 auto;
7878}
7979.task-detail-topbar {
80+ position: sticky;
81+ top: 14px;
82+ z-index: 30;
8083 display: flex;
8184 align-items: center;
8285 justify-content: space-between;
8386 gap: 12px;
8487 flex-wrap: wrap;
88+ padding: 10px 12px;
89+ border-radius: 18px;
90+ border: 1px solid var(--task-border);
91+ background: rgba(255, 251, 246, 0.84);
92+ box-shadow: 0 18px 52px rgba(84, 67, 48, 0.08);
93+ backdrop-filter: blur(18px);
8594}
8695.task-detail-grid {
8796 display: grid;
@@ -358,6 +367,38 @@ body {
358367.task-active-item {
359368 width: 100%;
360369 font: inherit;
370+ position: relative;
371+ text-align: left;
372+ transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease, background 0.18s ease;
373+ }
374+ .task-active-item::before {
375+ content: "";
376+ position: absolute;
377+ left: 10px;
378+ top: 10px;
379+ bottom: 10px;
380+ width: 4px;
381+ border-radius: 999px;
382+ background: rgba(154, 138, 119, 0.5);
383+ opacity: 0.9;
384+ }
385+ .task-active-item[data-status="running"]::before {
386+ background: color-mix(in srgb, var(--task-orange) 72%, rgba(255, 255, 255, 0.3));
387+ }
388+ .task-active-item[data-status="waiting"]::before {
389+ background: color-mix(in srgb, var(--task-purple) 72%, rgba(255, 255, 255, 0.3));
390+ }
391+ .task-active-item[data-status="done"]::before {
392+ background: color-mix(in srgb, var(--task-accent) 70%, rgba(255, 255, 255, 0.3));
393+ }
394+ .task-active-item[data-status="failed"]::before {
395+ background: color-mix(in srgb, var(--task-red) 74%, rgba(255, 255, 255, 0.3));
396+ }
397+ .task-active-item:hover {
398+ transform: translateY(-1px);
399+ border-color: color-mix(in srgb, var(--task-blue) 28%, var(--task-border));
400+ background: rgba(255, 255, 255, 0.86);
401+ box-shadow: 0 18px 44px rgba(84, 67, 48, 0.1);
361402}
362403.task-legend-item {
363404 display: flex;
@@ -525,22 +566,49 @@ body {
525566 gap: 8px;
526567}
527568.task-item {
528- padding: 12px;
529- border-radius: 14px;
569+ position: relative;
570+ padding: 12px 12px 12px 22px;
571+ border-radius: 16px;
530572 border: 1px solid var(--task-border);
531573 background: var(--task-card);
532574 cursor: pointer;
533- transition: 0.18s ease;
575+ transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease, background 0.18s ease;
534576 color: inherit;
535577 text-align: left;
578+ box-shadow: 0 12px 32px rgba(84, 67, 48, 0.06);
579+ }
580+ .task-item::before {
581+ content: "";
582+ position: absolute;
583+ left: 10px;
584+ top: 12px;
585+ bottom: 12px;
586+ width: 4px;
587+ border-radius: 999px;
588+ background: rgba(154, 138, 119, 0.5);
589+ opacity: 0.9;
590+ }
591+ .task-item[data-status="running"]::before {
592+ background: color-mix(in srgb, var(--task-orange) 72%, rgba(255, 255, 255, 0.3));
593+ }
594+ .task-item[data-status="waiting"]::before {
595+ background: color-mix(in srgb, var(--task-purple) 72%, rgba(255, 255, 255, 0.3));
596+ }
597+ .task-item[data-status="done"]::before {
598+ background: color-mix(in srgb, var(--task-accent) 70%, rgba(255, 255, 255, 0.3));
599+ }
600+ .task-item[data-status="failed"]::before {
601+ background: color-mix(in srgb, var(--task-red) 74%, rgba(255, 255, 255, 0.3));
536602}
537603.task-item:hover,
538604.task-item.active {
605+ transform: translateY(-1px);
539606 background: var(--task-hover);
540- border-color: color-mix(in srgb, var(--task-accent) 42%, var(--task-border));
607+ border-color: color-mix(in srgb, var(--task-accent) 36%, var(--task-border));
608+ box-shadow: 0 20px 52px rgba(84, 67, 48, 0.12);
541609}
542610.task-title {
543- font-weight: 700 ;
611+ font-weight: 850 ;
544612 font-size: 14px;
545613 line-height: 1.45;
546614}
@@ -576,6 +644,25 @@ body {
576644.badge.waiting { color: var(--task-orange); }
577645.badge.done { color: var(--task-blue); }
578646.badge.archived { color: var(--task-muted); }
647+ .badge.running {
648+ border-color: color-mix(in srgb, var(--task-accent) 22%, var(--task-border));
649+ background: rgba(46, 107, 89, 0.08);
650+ }
651+ .badge.waiting {
652+ border-color: color-mix(in srgb, var(--task-orange) 22%, var(--task-border));
653+ background: rgba(183, 128, 52, 0.1);
654+ }
655+ .badge.done {
656+ border-color: color-mix(in srgb, var(--task-blue) 22%, var(--task-border));
657+ background: rgba(86, 116, 143, 0.1);
658+ }
659+ .badge.failed {
660+ border-color: color-mix(in srgb, var(--task-red) 22%, var(--task-border));
661+ background: rgba(185, 90, 74, 0.08);
662+ }
663+ .badge.archived {
664+ background: rgba(151, 130, 105, 0.08);
665+ }
579666.task-planet {
580667 cursor: pointer;
581668 transition: transform 0.18s ease;
@@ -608,6 +695,18 @@ body {
608695 border: 1px solid var(--task-border);
609696 background: var(--task-card);
610697}
698+ .task-detail-hero[data-status="running"] {
699+ border-color: color-mix(in srgb, var(--task-accent) 26%, var(--task-border));
700+ }
701+ .task-detail-hero[data-status="waiting"] {
702+ border-color: color-mix(in srgb, var(--task-orange) 26%, var(--task-border));
703+ }
704+ .task-detail-hero[data-status="done"] {
705+ border-color: color-mix(in srgb, var(--task-blue) 26%, var(--task-border));
706+ }
707+ .task-detail-hero[data-status="failed"] {
708+ border-color: color-mix(in srgb, var(--task-red) 26%, var(--task-border));
709+ }
611710.summary-card {
612711 padding: 18px;
613712 border-color: color-mix(in srgb, var(--task-accent) 20%, var(--task-border));
@@ -1836,7 +1935,7 @@ export default function TasksPage() {
18361935
18371936 { selectedTask ? (
18381937 < >
1839- < section className = "task-shell task-detail-hero" >
1938+ < section className = "task-shell task-detail-hero" data-status = { selectedTask . status } >
18401939 < div style = { { color : 'var(--task-dim)' , fontSize : 12 , letterSpacing : '0.12em' , fontWeight : 700 } } >
18411940 TASK DETAIL
18421941 </ div >
@@ -2183,13 +2282,14 @@ export default function TasksPage() {
21832282
21842283 < div className = "task-active-list" >
21852284 { activePlanets . length > 0 ? activePlanets . map ( ( planet ) => (
2186- < button
2187- key = { planet . id }
2188- type = "button"
2189- className = "task-active-item"
2190- style = { { color : 'inherit' , textAlign : 'left' , cursor : 'pointer' , background : 'var(--task-card)' } }
2191- onClick = { ( ) => navigate ( `/tasks/${ planet . id } ` ) }
2192- >
2285+ < button
2286+ key = { planet . id }
2287+ type = "button"
2288+ className = "task-active-item"
2289+ data-status = { planet . status }
2290+ style = { { color : 'inherit' , textAlign : 'left' , cursor : 'pointer' , background : 'var(--task-card)' } }
2291+ onClick = { ( ) => navigate ( `/tasks/${ planet . id } ` ) }
2292+ >
21932293 < div style = { { fontWeight : 700 } } > { planet . title } </ div >
21942294 < div className = "meta" >
21952295 { getStatusLabel ( planet . status ) } · { planet . progress } % · { planet . currentStageLabel ? getStageLabel ( planet . currentStageLabel , planet . currentStageKey ) : getKindLabel ( planet . kind ) }
@@ -2219,6 +2319,7 @@ export default function TasksPage() {
22192319 < button
22202320 key = { task . id }
22212321 className = { `task-item ${ task . id === selectedTask ?. id ? 'active' : '' } ` }
2322+ data-status = { task . status }
22222323 type = "button"
22232324 onClick = { ( ) => navigate ( `/tasks/${ task . id } ` ) }
22242325 >
0 commit comments