2026-01-20 07:31:23 +08:00
/* Modern Dark Theme - Slate/Blue Palette */
: root {
--bg-color : # 0f172a ; /* Slate 900 */
--card-bg : # 1e293b ; /* Slate 800 */
--card-border : # 334155 ; /* Slate 700 */
--text-primary : # f1f5f9 ; /* Slate 100 */
--text-secondary : # 94a3b8 ; /* Slate 400 */
--accent-color : # 3b82f6 ; /* Blue 500 */
--accent-hover : # 2563eb ; /* Blue 600 */
--success-color : # 10b981 ; /* Emerald 500 */
--table-header-bg : # 0f172a ;
--table-row-hover : # 334155 ;
--scrollbar-thumb : # 475569 ;
--scrollbar-track : # 0f172a ;
}
body {
margin : 0 ;
font-family : 'Inter' , system-ui , -apple-system , BlinkMacSystemFont , "Segoe UI" , Roboto , sans-serif ;
background-color : var ( --bg-color ) ;
color : var ( --text-primary ) ;
height : 100vh ;
overflow : hidden ;
background-image : radial-gradient ( circle at 50 % 0 % , # 1e293b 0 % , # 0f172a 100 % ) ;
}
# app {
display : flex ;
flex-direction : column ; /* Changed to column to include header */
height : 100vh ;
padding : 16px ;
gap : 16px ;
box-sizing : border-box ;
}
/* Header Styling */
. dashboard-header {
display : flex ;
justify-content : space-between ;
align-items : center ;
padding : 0 8px ;
flex : 0 0 auto ;
}
. dashboard-title {
font-size : 24px ;
font-weight : 700 ;
background : linear-gradient ( to right , # 60a5fa , # a78bfa ) ;
-webkit-background-clip : text ;
-webkit-text-fill-color : transparent ;
letter-spacing : -0 . 5px ;
}
/* Main Layout */
. main-content {
display : flex ;
flex : 1 ;
gap : 16px ;
min-height : 0 ; /* Important for nested scrolling */
}
. left-panel {
flex : 3 ;
display : flex ;
flex-direction : column ;
gap : 16px ;
min-width : 0 ;
}
. right-panel {
flex : 2 ;
display : flex ;
flex-direction : column ;
background-color : var ( --card-bg ) ;
border-radius : 12px ;
border : 1px solid var ( --card-border ) ;
box-shadow : 0 4px 6px -1px rgba ( 0 , 0 , 0 , 0 . 1 ) , 0 2px 4px -1px rgba ( 0 , 0 , 0 , 0 . 06 ) ;
padding : 20px ;
min-width : 0 ;
}
/* Cards */
. card {
background-color : var ( --card-bg ) ;
border : 1px solid var ( --card-border ) ;
border-radius : 12px ;
box-shadow : 0 4px 6px -1px rgba ( 0 , 0 , 0 , 0 . 1 ) , 0 2px 4px -1px rgba ( 0 , 0 , 0 , 0 . 06 ) ;
display : flex ;
flex-direction : column ;
overflow : hidden ;
}
/* Controls */
. controls {
display : flex ;
gap : 12px ;
align-items : center ;
}
. btn-primary {
padding : 8px 16px ;
border-radius : 8px ;
border : none ;
background : linear-gradient ( 135deg , var ( --accent-color ) , var ( --accent-hover ) ) ;
color : white ;
font-weight : 600 ;
cursor : pointer ;
transition : all 0 . 2s ease ;
box-shadow : 0 2px 4px rgba ( 59 , 130 , 246 , 0 . 3 ) ;
font-size : 14px ;
}
. btn-primary : hover : not ( : disabled ) {
transform : translateY ( -1px ) ;
box-shadow : 0 4px 6px rgba ( 59 , 130 , 246 , 0 . 4 ) ;
}
. btn-primary : disabled {
opacity : 0 . 6 ;
cursor : not-allowed ;
transform : none ;
filter : grayscale ( 0 . 5 ) ;
}
/* Station List / Table */
. station-list {
flex : 1 ; /* Give it space */
min-height : 0 ;
@ apply card ; /* Conceptually using card styles */
background-color : var ( --card-bg ) ;
border : 1px solid var ( --card-border ) ;
border-radius : 12px ;
display : flex ;
flex-direction : column ;
overflow : hidden ;
}
. station-list-header {
padding : 16px 20px ;
border-bottom : 1px solid var ( --card-border ) ;
font-size : 16px ;
font-weight : 600 ;
color : var ( --text-primary ) ;
background-color : rgba ( 15 , 23 , 42 , 0 . 5 ) ;
}
. station-table-container {
flex : 1 ;
overflow-y : auto ;
scrollbar-width : thin ;
scrollbar-color : var ( --scrollbar-thumb ) var ( --scrollbar-track ) ;
}
. station-table {
width : 100 % ;
border-collapse : separate ; /* Changed for border-radius support if needed, but sticky needs collapse usually or specific handling. Keeping collapse for alignment. */
border-collapse : collapse ;
font-size : 14px ;
}
. station-table th {
background-color : var ( --table-header-bg ) ;
color : var ( --text-secondary ) ;
font-weight : 600 ;
text-transform : uppercase ;
font-size : 12px ;
letter-spacing : 0 . 05em ;
padding : 12px 16px ;
position : sticky ;
top : 0 ;
z-index : 10 ;
border-bottom : 1px solid var ( --card-border ) ;
box-shadow : 0 1px 2px rgba ( 0 , 0 , 0 , 0 . 2 ) ;
}
. station-table td {
padding : 12px 16px ;
border-bottom : 1px solid var ( --card-border ) ;
color : var ( --text-primary ) ;
transition : background-color 0 . 15s ;
}
. station-table tbody tr : hover td {
background-color : var ( --table-row-hover ) ;
}
. station-table tbody tr : last-child td {
border-bottom : none ;
}
/* Chart */
# chart {
flex : 1 ;
min-height : 300px ;
background-color : var ( --card-bg ) ;
border : 1px solid var ( --card-border ) ;
border-radius : 12px ;
padding : 16px ;
box-sizing : border-box ;
}
/* AI Analysis Section */
. ai-title {
font-size : 18px ;
font-weight : 700 ;
color : var ( --text-primary ) ;
margin-bottom : 16px ;
display : flex ;
align-items : center ;
gap : 8px ;
}
. ai-title :: before {
content : '' ;
display : block ;
width : 4px ;
height : 18px ;
background-color : var ( --accent-color ) ;
border-radius : 2px ;
}
. ai-box {
flex : 1 ;
background-color : rgba ( 15 , 23 , 42 , 0 . 3 ) ; /* Slightly darker inner bg */
border-radius : 8px ;
border : 1px solid var ( --card-border ) ;
padding : 16px ;
overflow-y : auto ;
font-size : 14px ;
line-height : 1 . 7 ;
color : # cbd5e1 ; /* Slate 300 */
scrollbar-width : thin ;
scrollbar-color : var ( --scrollbar-thumb ) transparent ;
}
. ai-question {
background-color : rgba ( 59 , 130 , 246 , 0 . 1 ) ;
border-left : 3px solid var ( --accent-color ) ;
padding : 12px ;
border-radius : 0 4px 4px 0 ;
margin-bottom : 16px ;
}
. ai-question . label {
font-size : 12px ;
color : var ( --accent-color ) ;
font-weight : 700 ;
margin-bottom : 4px ;
text-transform : uppercase ;
}
. ai-question . question-text {
font-size : 14px ;
color : var ( --text-primary ) ;
}
. ai-result {
margin-top : 16px ;
}
/* Markdown Styling in AI Result */
. ai-result h1 , . ai-result h2 , . ai-result h3 {
color : var ( --text-primary ) ;
margin-top : 20px ;
margin-bottom : 10px ;
font-weight : 600 ;
}
. ai-result strong {
color : # 60a5fa ; /* Blue 400 */
}
. ai-result ul {
padding-left : 20px ;
}
. ai-result li {
margin-bottom : 6px ;
}
. ai-result p {
margin-bottom : 12px ;
}
/* Custom Scrollbar Webkit */
:: -webkit-scrollbar {
width : 8px ;
height : 8px ;
}
:: -webkit-scrollbar-track {
background : transparent ;
}
:: -webkit-scrollbar-thumb {
background : var ( --scrollbar-thumb ) ;
border-radius : 4px ;
}
:: -webkit-scrollbar-thumb : hover {
background : # 64748b ;
}
2026-01-18 16:08:46 +08:00