|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@import url('https://fonts.googleapis.com/css2?family=Almarai:wght@300;400;700;800&display=swap'); |
|
@import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@300;400;500;700;800;900&display=swap'); |
|
@import url('https://fonts.googleapis.com/css2?family=Cairo:wght@300;400;500;600;700;800;900;1000&display=swap'); |
|
|
|
:root { |
|
--font-family-primary: 'Almarai', 'Tajawal', sans-serif; |
|
--font-family-secondary: 'Tajawal', 'Cairo', sans-serif; |
|
--font-family-heading: 'Cairo', 'Almarai', sans-serif; |
|
|
|
--primary-color: #0B6E4F; |
|
--primary-light: rgba(11, 110, 79, 0.1); |
|
--primary-gradient: linear-gradient(135deg, #0B6E4F 0%, #08875D 100%); |
|
--secondary-color: #08603a; |
|
--accent-color: #FFB100; |
|
--accent-light: rgba(255, 177, 0, 0.1); |
|
--tertiary-color: #5754FF; |
|
--quaternary-color: #f43f5e; |
|
} |
|
|
|
|
|
body, .main-container, .stApp, .stMarkdown, h1, h2, h3, h4, h5, h6, p, div, |
|
input, textarea, select, button, th, td, li, span, a, label { |
|
font-family: var(--font-family-primary) !important; |
|
direction: rtl !important; |
|
text-align: right !important; |
|
} |
|
|
|
|
|
h1, h2, h3 { |
|
font-family: var(--font-family-heading) !important; |
|
font-weight: 700 !important; |
|
} |
|
|
|
|
|
.stTextInput div, .stTextArea div, .stSelectbox div, .stMultiSelect div, |
|
.stNumberInput div, .stDateInput div, .stSlider div, .stFileUploader div { |
|
direction: rtl !important; |
|
text-align: right !important; |
|
} |
|
|
|
|
|
button, div[data-testid="stButton"] { |
|
direction: rtl !important; |
|
} |
|
|
|
|
|
select, option, .stSelectbox div, div[data-baseweb="select"] { |
|
text-align: right !important; |
|
direction: rtl !important; |
|
} |
|
|
|
|
|
.stSidebar .sidebar-content, |
|
div[data-testid="stSidebar"] { |
|
direction: rtl !important; |
|
text-align: right !important; |
|
left: auto !important; |
|
right: 0 !important; |
|
border-left: 1px solid #e6e6e6 !important; |
|
border-right: none !important; |
|
padding-left: 1rem !important; |
|
padding-right: 1rem !important; |
|
} |
|
|
|
.stSidebar div { |
|
direction: rtl !important; |
|
text-align: right !important; |
|
} |
|
|
|
|
|
.stApp .main-container { |
|
flex-direction: row-reverse !important; |
|
} |
|
|
|
|
|
input, textarea, .stTextInput input, .stTextArea textarea { |
|
text-align: right !important; |
|
direction: rtl !important; |
|
padding-right: 10px !important; |
|
} |
|
|
|
|
|
.nav-link-horizontal, .nav-link { |
|
text-align: right !important; |
|
direction: rtl !important; |
|
} |
|
|
|
.stOptionMenu div:has(> ul) { |
|
direction: rtl !important; |
|
} |
|
|
|
|
|
.stOptionMenu li { |
|
text-align: right !important; |
|
direction: rtl !important; |
|
} |
|
|
|
|
|
.fas, .fa, .far, .fal, .fab { |
|
margin-left: 5px !important; |
|
margin-right: 0 !important; |
|
} |
|
|
|
|
|
.dataframe, table, div[data-testid="stTable"] { |
|
direction: rtl !important; |
|
text-align: right !important; |
|
} |
|
|
|
th, td { |
|
text-align: right !important; |
|
} |
|
|
|
|
|
.js-plotly-plot .plotly { |
|
direction: rtl !important; |
|
} |
|
|
|
|
|
.stImage img, div[data-testid="stImage"] { |
|
direction: rtl !important; |
|
} |
|
|
|
|
|
.stAlert, .stWarning, .stError, .stInfo, .stSuccess { |
|
direction: rtl !important; |
|
text-align: right !important; |
|
border-right: 5px solid var(--primary-color) !important; |
|
border-left: none !important; |
|
padding-right: 15px !important; |
|
} |
|
|
|
|
|
.main .block-container { |
|
padding-right: 2rem !important; |
|
padding-left: 1rem !important; |
|
max-width: 1200px !important; |
|
} |
|
|
|
|
|
section[data-testid="stSidebar"] { |
|
background: white !important; |
|
border-left: 1px solid #f0f0f0 !important; |
|
border-right: none !important; |
|
} |
|
|
|
|
|
.stApp { |
|
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%) !important; |
|
} |
|
|
|
|
|
@media (max-width: 768px) { |
|
.main .block-container { |
|
padding-right: 1rem !important; |
|
padding-left: 1rem !important; |
|
} |
|
|
|
h1 { |
|
font-size: 1.8rem !important; |
|
} |
|
|
|
h2 { |
|
font-size: 1.4rem !important; |
|
} |
|
} |
|
|
|
|
|
|
|
details, summary { |
|
direction: rtl !important; |
|
text-align: right !important; |
|
} |
|
|
|
|
|
div[role="radiogroup"], div[data-testid="stRadio"], div[data-testid="stCheckbox"] { |
|
direction: rtl !important; |
|
text-align: right !important; |
|
} |
|
|
|
|
|
div[data-testid="stSlider"] { |
|
direction: rtl !important; |
|
} |
|
|
|
|
|
.notification-card { |
|
direction: rtl !important; |
|
text-align: right !important; |
|
border-right: 4px solid var(--primary-color) !important; |
|
border-left: none !important; |
|
} |
|
|
|
.stOptionMenu ul { |
|
direction: rtl !important; |
|
padding-right: 0 !important; |
|
} |
|
|
|
|
|
.stOptionMenu span, .stOptionMenu a, .stOptionMenu div { |
|
color: #2C3E50 !important; |
|
font-weight: normal !important; |
|
} |
|
|
|
.stOptionMenu [data-baseweb="tab"], .stOptionMenu [data-baseweb="tab-list"] { |
|
direction: rtl !important; |
|
} |
|
|
|
|
|
.stOptionMenu { |
|
color: var(--gray-800) !important; |
|
} |
|
|
|
.sidebar-menu { |
|
color: var(--gray-800) !important; |
|
} |
|
|
|
.stOptionMenu span, .stOptionMenu label, .stOptionMenu div { |
|
color: var(--gray-800) !important; |
|
text-shadow: none !important; |
|
} |
|
|
|
|
|
.sidebar-menu-item { |
|
background-color: rgba(240, 242, 245, 0.5) !important; |
|
margin-bottom: 4px !important; |
|
border-radius: 4px !important; |
|
transition: all 0.2s ease-in-out !important; |
|
} |
|
|
|
.sidebar-menu-item:hover { |
|
background-color: rgba(222, 226, 230, 0.8) !important; |
|
} |
|
|
|
.sidebar-menu-item.active { |
|
background-color: var(--primary-color) !important; |
|
color: white !important; |
|
} |
|
|
|
.sidebar-menu-item.active span, .sidebar-menu-item.active label, .sidebar-menu-item.active div { |
|
color: white !important; |
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) !important; |
|
} |
|
|
|
|
|
.card, .metric-card, .alert, .callout, .project-card, .list-container, .tab-content { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
|
|
.block-icon { |
|
direction: rtl; |
|
} |
|
|
|
|
|
h1, h2, h3, h4, h5, h6 { |
|
padding-right: 10px; |
|
padding-left: 0; |
|
margin-right: 0; |
|
margin-left: 0; |
|
border-right: 4px solid #1E88E5; |
|
border-left: none; |
|
} |
|
|
|
.button-icon, .fa, .fas, .far, .fab { |
|
margin-left: 0.5rem; |
|
margin-right: 0; |
|
} |
|
|
|
|
|
ul, ol { |
|
padding-right: 20px; |
|
padding-left: 0; |
|
} |
|
|
|
li { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
|
|
.indented { |
|
margin-right: 1.5rem; |
|
margin-left: 0; |
|
} |
|
|
|
|
|
ul { |
|
list-style-position: inside; |
|
} |
|
|
|
|
|
.row-flex { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
|
|
.plotly-chart text { |
|
direction: rtl; |
|
} |
|
|
|
|
|
table { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
|
|
.tab-item { |
|
margin-left: 0; |
|
margin-right: 0; |
|
} |
|
|
|
|
|
.alert-icon, .callout-icon { |
|
margin-left: 0.8rem; |
|
margin-right: 0; |
|
} |
|
|
|
|
|
.search-icon { |
|
left: auto; |
|
right: 1rem; |
|
} |
|
|
|
.search-input { |
|
padding-left: 1rem; |
|
padding-right: 3rem; |
|
} |
|
|
|
|
|
.dialog { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
.dialog-header { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
|
|
.chat-message-incoming { |
|
align-self: flex-start; |
|
border-bottom-left-radius: 0; |
|
border-bottom-right-radius: 10px; |
|
} |
|
|
|
.chat-message-outgoing { |
|
align-self: flex-end; |
|
border-bottom-right-radius: 0; |
|
border-bottom-left-radius: 10px; |
|
} |
|
|
|
.chat-avatar { |
|
margin-right: 0; |
|
margin-left: 0.8rem; |
|
} |
|
|
|
|
|
form { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
|
|
.form-buttons { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
|
|
.status-indicator { |
|
margin-right: 0; |
|
margin-left: 0.5rem; |
|
} |
|
|
|
|
|
.topbar { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
|
|
.info-bar { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
|
|
.number, .date { |
|
direction: ltr; |
|
display: inline-block; |
|
} |
|
|
|
|
|
.breadcrumbs { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
.breadcrumbs-separator { |
|
transform: rotate(180deg); |
|
} |
|
|
|
|
|
.progress-container { |
|
direction: rtl; |
|
} |
|
|
|
|
|
.overflow-auto { |
|
direction: rtl; |
|
} |
|
|
|
|
|
.consecutive-items > * + * { |
|
margin-right: 1rem; |
|
margin-left: 0; |
|
} |
|
|
|
|
|
.note, .aside { |
|
border-right: 4px solid #ccc; |
|
border-left: none; |
|
padding-right: 1rem; |
|
padding-left: 0; |
|
} |
|
|
|
|
|
.project-list-item { |
|
padding-right: 0; |
|
padding-left: 1rem; |
|
} |
|
|
|
|
|
.stButton, .stCheckbox, .stRadio { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
.stExpander { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
.stTabs { |
|
direction: rtl; |
|
} |
|
|
|
.stDataFrame { |
|
direction: rtl; |
|
} |
|
|
|
.stFileUploader { |
|
direction: rtl; |
|
} |
|
|
|
|
|
.timeline { |
|
direction: rtl; |
|
} |
|
|
|
.timeline-item { |
|
padding-right: 2rem; |
|
padding-left: 0; |
|
border-right: 2px solid #ccc; |
|
border-left: none; |
|
} |
|
|
|
.timeline-item::before { |
|
right: -8px; |
|
left: auto; |
|
} |
|
|
|
|
|
.checkbox-label, .switch-label { |
|
padding-right: 2rem; |
|
padding-left: 0; |
|
} |
|
|
|
.checkbox-custom, .switch-custom { |
|
right: 0; |
|
left: auto; |
|
} |
|
|
|
|
|
.dropdown-content { |
|
text-align: right; |
|
} |
|
|
|
|
|
.toast { |
|
right: 1rem; |
|
left: auto; |
|
} |
|
|
|
|
|
.stProgress { |
|
direction: rtl; |
|
} |
|
|
|
.stProgress > div > div { |
|
direction: rtl; |
|
} |
|
|
|
|
|
|
|
|
|
.calculation-card { |
|
direction: rtl; |
|
text-align: right; |
|
border-left: none !important; |
|
border-right: var(--border-width-lg) solid var(--primary-color) !important; |
|
} |
|
|
|
.calculation-header { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
.calculation-controls { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
.calculation-formula { |
|
direction: ltr; |
|
text-align: left; |
|
} |
|
|
|
|
|
.ai-insight-card { |
|
direction: rtl; |
|
text-align: right; |
|
border-left: none !important; |
|
border-right: var(--border-width-lg) solid var(--tertiary-color) !important; |
|
} |
|
|
|
.ai-insight-header { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
.ai-insight-icon { |
|
margin-right: var(--spacing-md); |
|
margin-left: 0; |
|
} |
|
|
|
.ai-insight-content { |
|
border-left: none; |
|
border-right: 3px solid var(--tertiary-color); |
|
} |
|
|
|
.ai-insight-tag { |
|
margin-right: var(--spacing-sm); |
|
margin-left: 0; |
|
} |
|
|
|
|
|
.ai-chat-container { |
|
direction: rtl; |
|
} |
|
|
|
.ai-chat-messages { |
|
direction: rtl; |
|
} |
|
|
|
.ai-message { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
.ai-message-avatar, .user-message-avatar { |
|
margin-right: var(--spacing-md); |
|
margin-left: 0; |
|
} |
|
|
|
.ai-message-content { |
|
border-top-left-radius: 0; |
|
border-top-right-radius: var(--border-radius); |
|
} |
|
|
|
.user-message-content { |
|
border-top-left-radius: 0; |
|
border-top-right-radius: var(--border-radius); |
|
} |
|
|
|
.ai-chat-footer { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
.ai-chat-input { |
|
margin-right: var(--spacing-sm); |
|
margin-left: 0; |
|
} |
|
|
|
|
|
.project-card-enhanced { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
.project-card-stats { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
.project-tag { |
|
margin-right: var(--spacing-sm); |
|
margin-left: 0; |
|
} |
|
|
|
|
|
.timeline-container { |
|
direction: rtl; |
|
} |
|
|
|
.timeline-line { |
|
right: auto; |
|
left: 50px; |
|
} |
|
|
|
.timeline-item { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
.timeline-icon { |
|
margin-right: var(--spacing-lg); |
|
margin-left: 0; |
|
} |
|
|
|
|
|
.assistant-container { |
|
flex-direction: row-reverse; |
|
} |
|
|
|
.assistant-history-item { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
|
|
@media (max-width: 768px) { |
|
|
|
.sidebar-menu-item { |
|
padding-right: 0.5rem; |
|
padding-left: 0.5rem; |
|
} |
|
|
|
.timeline-icon { |
|
margin-right: 0; |
|
margin-bottom: var(--spacing-sm); |
|
} |
|
|
|
.timeline-line { |
|
left: 20px; |
|
right: auto; |
|
} |
|
} |
|
|
|
|
|
.tender-table { |
|
width: 100%; |
|
direction: rtl; |
|
border-collapse: separate; |
|
border-spacing: 0; |
|
margin-bottom: 2rem; |
|
} |
|
|
|
.tender-table th { |
|
background-color: var(--primary-color); |
|
color: white; |
|
text-align: right; |
|
padding: 0.8rem 1rem; |
|
font-weight: 700; |
|
position: sticky; |
|
top: 0; |
|
z-index: 10; |
|
} |
|
|
|
.tender-table tr:nth-child(even) { |
|
background-color: rgba(11, 110, 79, 0.05); |
|
} |
|
|
|
.tender-table td { |
|
padding: 0.8rem 1rem; |
|
text-align: right; |
|
border-bottom: 1px solid rgba(0, 0, 0, 0.05); |
|
} |
|
|
|
.tender-table tr:hover { |
|
background-color: rgba(11, 110, 79, 0.1); |
|
} |
|
|
|
|
|
.item-analysis-container { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
.item-analysis-card { |
|
background-color: white; |
|
border-radius: 8px; |
|
border-right: 4px solid var(--primary-color); |
|
border-left: none; |
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); |
|
padding: 1.5rem; |
|
margin-bottom: 1.5rem; |
|
transition: transform 0.3s ease; |
|
} |
|
|
|
.item-analysis-card:hover { |
|
transform: translateY(-5px); |
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1); |
|
} |
|
|
|
.item-analysis-header { |
|
display: flex; |
|
flex-direction: row-reverse; |
|
justify-content: space-between; |
|
margin-bottom: 1rem; |
|
padding-bottom: 0.8rem; |
|
border-bottom: 1px solid rgba(0, 0, 0, 0.1); |
|
} |
|
|
|
.item-analysis-title { |
|
font-size: 1.2rem; |
|
font-weight: 700; |
|
color: var(--primary-color); |
|
} |
|
|
|
.item-analysis-badge { |
|
font-size: 0.8rem; |
|
font-weight: 500; |
|
padding: 0.3rem 0.8rem; |
|
border-radius: 20px; |
|
} |
|
|
|
.item-analysis-badge-high { |
|
background-color: rgba(239, 68, 68, 0.1); |
|
color: #DC2626; |
|
} |
|
|
|
.item-analysis-badge-medium { |
|
background-color: rgba(245, 158, 11, 0.1); |
|
color: #D97706; |
|
} |
|
|
|
.item-analysis-badge-low { |
|
background-color: rgba(16, 185, 129, 0.1); |
|
color: #059669; |
|
} |
|
|
|
.item-details { |
|
display: flex; |
|
flex-direction: column; |
|
gap: 0.8rem; |
|
} |
|
|
|
.item-detail-row { |
|
display: flex; |
|
flex-direction: row-reverse; |
|
justify-content: space-between; |
|
} |
|
|
|
.item-detail-label { |
|
font-weight: 600; |
|
font-size: 0.9rem; |
|
color: #4B5563; |
|
} |
|
|
|
.item-detail-value { |
|
font-weight: 400; |
|
font-size: 0.9rem; |
|
} |
|
|
|
|
|
.price-comparison-chart { |
|
direction: rtl; |
|
text-align: right; |
|
background-color: white; |
|
border-radius: 8px; |
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); |
|
padding: 1.5rem; |
|
margin-bottom: 2rem; |
|
} |
|
|
|
.price-comparison-title { |
|
font-size: 1.2rem; |
|
font-weight: 700; |
|
color: var(--primary-color); |
|
margin-bottom: 1rem; |
|
} |
|
|
|
.price-legend { |
|
display: flex; |
|
flex-direction: row-reverse; |
|
gap: 1.5rem; |
|
margin-top: 1rem; |
|
} |
|
|
|
.price-legend-item { |
|
display: flex; |
|
flex-direction: row-reverse; |
|
align-items: center; |
|
gap: 0.5rem; |
|
} |
|
|
|
.price-legend-color { |
|
width: 12px; |
|
height: 12px; |
|
border-radius: 2px; |
|
} |
|
|
|
.price-legend-label { |
|
font-size: 0.8rem; |
|
color: #4B5563; |
|
} |
|
|
|
|
|
.risk-analysis-section { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
.risk-category { |
|
margin-bottom: 1.5rem; |
|
} |
|
|
|
.risk-category-header { |
|
background-color: white; |
|
padding: 1rem 1.5rem; |
|
border-radius: 8px; |
|
display: flex; |
|
flex-direction: row-reverse; |
|
justify-content: space-between; |
|
align-items: center; |
|
margin-bottom: 1rem; |
|
cursor: pointer; |
|
} |
|
|
|
.risk-category-icon { |
|
width: 24px; |
|
height: 24px; |
|
border-radius: 50%; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
margin-left: 0.8rem; |
|
margin-right: 0; |
|
color: white; |
|
} |
|
|
|
.risk-category-title { |
|
font-weight: 700; |
|
font-size: 1rem; |
|
} |
|
|
|
.risk-items { |
|
background-color: white; |
|
border-radius: 8px; |
|
padding: 1rem; |
|
margin-right: 2rem; |
|
margin-left: 0; |
|
} |
|
|
|
.risk-item { |
|
padding: 1rem; |
|
border-right: 3px solid; |
|
border-left: none; |
|
margin-bottom: 1rem; |
|
border-radius: 0 4px 4px 0; |
|
} |
|
|
|
.risk-item-high { |
|
border-right-color: #DC2626; |
|
background-color: rgba(239, 68, 68, 0.05); |
|
} |
|
|
|
.risk-item-medium { |
|
border-right-color: #D97706; |
|
background-color: rgba(245, 158, 11, 0.05); |
|
} |
|
|
|
.risk-item-low { |
|
border-right-color: #059669; |
|
background-color: rgba(16, 185, 129, 0.05); |
|
} |
|
|
|
.risk-item-title { |
|
font-weight: 600; |
|
font-size: 0.95rem; |
|
margin-bottom: 0.5rem; |
|
} |
|
|
|
.risk-item-description { |
|
font-size: 0.85rem; |
|
color: #4B5563; |
|
} |
|
|
|
|
|
.report-container { |
|
direction: rtl; |
|
text-align: right; |
|
} |
|
|
|
.report-header { |
|
background-color: white; |
|
border-radius: 8px; |
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); |
|
padding: 2rem; |
|
margin-bottom: 2rem; |
|
text-align: center; |
|
} |
|
|
|
.report-title { |
|
font-size: 1.5rem; |
|
font-weight: 800; |
|
color: var(--primary-color); |
|
margin-bottom: 0.5rem; |
|
} |
|
|
|
.report-subtitle { |
|
font-size: 1rem; |
|
color: #6B7280; |
|
margin-bottom: 1.5rem; |
|
} |
|
|
|
.report-metadata { |
|
display: flex; |
|
flex-direction: row-reverse; |
|
justify-content: center; |
|
gap: 3rem; |
|
margin-top: 1.5rem; |
|
} |
|
|
|
.report-metadata-item { |
|
display: flex; |
|
flex-direction: column; |
|
align-items: center; |
|
} |
|
|
|
.report-metadata-label { |
|
font-size: 0.8rem; |
|
color: #9CA3AF; |
|
margin-bottom: 0.3rem; |
|
} |
|
|
|
.report-metadata-value { |
|
font-weight: 700; |
|
font-size: 1rem; |
|
color: #1F2937; |
|
} |