mah-diaa commited on
Commit
a6e71a4
·
1 Parent(s): 599e97d

Complete UI overhaul - dark glassmorphism with backlight glow

Browse files

1. Much darker background (#050010) to accentuate glass effects
2. Removed stacking/layered backgrounds in chat and input areas
3. Added subtle backlight glow effects on panels
4. Single glass layer for chat messages - no nested backgrounds
5. Clean input box with single glass effect
6. Glowing buttons on hover
7. Subtle purple accent lighting throughout
8. Fixed washed-out appearance from stacked elements
9. Theme set to transparent backgrounds to prevent conflicts

Files changed (1) hide show
  1. app.py +298 -441
app.py CHANGED
@@ -1859,54 +1859,70 @@ Be educational and help the student understand the concept better. Keep it conci
1859
 
1860
  if __name__ == "__main__":
1861
  custom_css = """
1862
- /* Purple Color Palette - Exact from provided palette */
 
 
 
 
 
1863
  :root {
1864
- --purple-darkest: #10002B;
1865
- --purple-darker: #240046;
1866
- --purple-dark: #3C096C;
1867
- --purple-medium-dark: #5A189A;
1868
- --purple-medium: #7B2CBF;
1869
- --purple-bright: #9D4EDD;
 
 
1870
  --purple-light: #C77DFF;
1871
  --purple-lightest: #E0AAFF;
 
 
 
1872
  }
1873
 
1874
- /* Base Styles */
 
 
1875
  .gradio-container {
1876
- font-family: 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;
1877
- background: linear-gradient(135deg, var(--purple-darkest) 0%, var(--purple-darker) 30%, var(--purple-dark) 60%, var(--purple-medium-dark) 100%);
1878
- background-attachment: fixed;
 
 
 
 
1879
  min-height: 100vh;
1880
  padding: 1.5rem;
1881
  }
1882
 
1883
- /* Main content area */
1884
- .main-content {
1885
- background: rgba(16, 0, 43, 0.3);
1886
- backdrop-filter: blur(20px);
1887
- -webkit-backdrop-filter: blur(20px);
1888
- border-radius: 32px;
1889
- padding: 2rem;
1890
  }
1891
 
1892
- /* Glassmorphism Header - Enhanced */
 
 
1893
  .glass-header {
1894
  text-align: center;
1895
- padding: 3.5rem 2.5rem;
1896
  background: linear-gradient(135deg,
1897
- rgba(157, 78, 221, 0.2) 0%,
1898
- rgba(123, 44, 191, 0.25) 30%,
1899
- rgba(90, 24, 154, 0.2) 60%,
1900
- rgba(157, 78, 221, 0.15) 100%);
1901
- backdrop-filter: blur(25px) saturate(200%);
1902
- -webkit-backdrop-filter: blur(25px) saturate(200%);
1903
- border-radius: 32px;
1904
- border: 1.5px solid rgba(224, 170, 255, 0.35);
1905
- margin-bottom: 2.5rem;
1906
  box-shadow:
1907
- 0 12px 40px rgba(16, 0, 43, 0.5),
1908
- 0 0 0 1px rgba(224, 170, 255, 0.15) inset,
1909
- 0 0 60px rgba(157, 78, 221, 0.1);
 
1910
  color: white;
1911
  position: relative;
1912
  overflow: hidden;
@@ -1915,518 +1931,355 @@ if __name__ == "__main__":
1915
  .glass-header::before {
1916
  content: '';
1917
  position: absolute;
1918
- top: -50%;
1919
- left: -50%;
1920
- width: 200%;
1921
- height: 200%;
1922
- background: radial-gradient(circle, rgba(224, 170, 255, 0.1) 0%, transparent 70%);
1923
- animation: shimmer 8s ease-in-out infinite;
1924
- }
1925
-
1926
- @keyframes shimmer {
1927
- 0%, 100% { transform: translate(0, 0) rotate(0deg); }
1928
- 50% { transform: translate(20px, 20px) rotate(180deg); }
1929
  }
1930
 
1931
  .glass-header h1 {
1932
  margin: 0;
1933
- font-size: 2.8em;
1934
  font-weight: 700;
1935
- text-shadow: 0 4px 20px rgba(16, 0, 43, 0.5),
1936
- 0 2px 10px rgba(224, 170, 255, 0.3);
1937
- position: relative;
1938
- z-index: 1;
1939
- background: linear-gradient(135deg, #fff 0%, var(--purple-lightest) 100%);
1940
  -webkit-background-clip: text;
1941
  -webkit-text-fill-color: transparent;
1942
  background-clip: text;
 
1943
  }
1944
 
1945
  .glass-header p {
1946
- font-size: 1.3em;
1947
- margin-top: 0.8rem;
1948
  margin-bottom: 0;
1949
- opacity: 0.95;
1950
- position: relative;
1951
- z-index: 1;
1952
- color: var(--purple-lightest);
1953
- }
1954
-
1955
- /* Glass Panels - Enhanced glassmorphism */
1956
- .glass-panel {
1957
- background: linear-gradient(135deg,
1958
- rgba(224, 170, 255, 0.12) 0%,
1959
- rgba(199, 125, 255, 0.15) 50%,
1960
- rgba(224, 170, 255, 0.12) 100%);
1961
- backdrop-filter: blur(20px) saturate(180%);
1962
- -webkit-backdrop-filter: blur(20px) saturate(180%);
1963
- border-radius: 24px;
1964
- border: 1.5px solid rgba(224, 170, 255, 0.3);
1965
- box-shadow:
1966
- 0 8px 32px rgba(16, 0, 43, 0.35),
1967
- 0 0 0 1px rgba(224, 170, 255, 0.15) inset,
1968
- 0 0 40px rgba(157, 78, 221, 0.08);
1969
- padding: 1.75rem;
1970
- margin-bottom: 1.25rem;
1971
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
1972
- }
1973
-
1974
- .glass-panel:hover {
1975
- background: linear-gradient(135deg,
1976
- rgba(224, 170, 255, 0.18) 0%,
1977
- rgba(199, 125, 255, 0.22) 50%,
1978
- rgba(224, 170, 255, 0.18) 100%);
1979
- border-color: rgba(224, 170, 255, 0.5);
1980
- transform: translateY(-3px);
1981
- box-shadow:
1982
- 0 16px 48px rgba(16, 0, 43, 0.45),
1983
- 0 0 0 1px rgba(224, 170, 255, 0.25) inset,
1984
- 0 0 60px rgba(157, 78, 221, 0.15);
1985
- }
1986
-
1987
- .chat-header {
1988
- text-align: center;
1989
- background: linear-gradient(135deg,
1990
- rgba(199, 125, 255, 0.2) 0%,
1991
- rgba(157, 78, 221, 0.25) 100%) !important;
1992
- backdrop-filter: blur(20px) saturate(180%) !important;
1993
- -webkit-backdrop-filter: blur(20px) saturate(180%) !important;
1994
- border: 2px solid rgba(224, 170, 255, 0.4) !important;
1995
- border-radius: 32px !important;
1996
- padding: 2rem !important;
1997
- box-shadow:
1998
- 0 8px 32px rgba(16, 0, 43, 0.3),
1999
- 0 0 0 1px rgba(224, 170, 255, 0.2) inset !important;
2000
- }
2001
-
2002
- .chat-header h2 {
2003
- margin-top: 0;
2004
- color: white;
2005
- text-shadow: 0 2px 10px rgba(16, 0, 43, 0.3);
2006
- }
2007
-
2008
- .chat-header p {
2009
  color: var(--purple-lightest);
 
2010
  }
2011
 
2012
- /* Glass Tabs - Enhanced glassmorphism */
2013
- .glass-tabs-container, .gradio-tabs {
 
 
2014
  background: linear-gradient(135deg,
2015
- rgba(224, 170, 255, 0.12) 0%,
2016
- rgba(199, 125, 255, 0.18) 100%) !important;
2017
- backdrop-filter: blur(20px) saturate(200%) !important;
2018
- -webkit-backdrop-filter: blur(20px) saturate(200%) !important;
2019
- border-radius: 32px !important;
2020
- border: 2px solid rgba(224, 170, 255, 0.4) !important;
2021
- padding: 2rem !important;
 
2022
  box-shadow:
2023
- 0 12px 48px rgba(16, 0, 43, 0.35),
2024
- 0 0 0 1px rgba(224, 170, 255, 0.2) inset,
2025
- 0 0 60px rgba(157, 78, 221, 0.1) !important;
 
2026
  position: relative !important;
2027
- overflow: hidden !important;
2028
  }
2029
 
2030
- .glass-tabs-container > div, .gradio-tabs > div {
2031
- gap: 0.75rem !important;
 
 
 
 
 
 
 
2032
  }
2033
 
 
 
 
2034
  .glass-tabs-container > div > button,
2035
- .gradio-tabs > div > button,
2036
- .glass-tab-item {
2037
- background: linear-gradient(135deg,
2038
- rgba(224, 170, 255, 0.12) 0%,
2039
- rgba(199, 125, 255, 0.15) 100%) !important;
2040
- backdrop-filter: blur(12px) saturate(180%);
2041
- -webkit-backdrop-filter: blur(12px) saturate(180%);
2042
- border: 1.5px solid rgba(224, 170, 255, 0.3) !important;
2043
- border-radius: 18px !important;
2044
- color: var(--purple-lightest) !important;
2045
- padding: 0.875rem 1.75rem !important;
2046
- margin: 0.375rem !important;
2047
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;
2048
- font-weight: 600 !important;
2049
- font-size: 0.95rem !important;
2050
- box-shadow:
2051
- 0 2px 8px rgba(16, 0, 43, 0.2),
2052
- 0 0 0 1px rgba(224, 170, 255, 0.1) inset;
2053
  }
2054
 
2055
  .glass-tabs-container > div > button:hover,
2056
  .gradio-tabs > div > button:hover {
2057
- background: linear-gradient(135deg,
2058
- rgba(224, 170, 255, 0.22) 0%,
2059
- rgba(199, 125, 255, 0.28) 100%) !important;
2060
- border-color: rgba(224, 170, 255, 0.5) !important;
2061
- transform: translateY(-3px);
2062
- box-shadow:
2063
- 0 6px 20px rgba(157, 78, 221, 0.35),
2064
- 0 0 0 1px rgba(224, 170, 255, 0.2) inset;
2065
  }
2066
 
2067
  .glass-tabs-container > div > button.selected,
2068
  .gradio-tabs > div > button.selected {
2069
- background: linear-gradient(135deg,
2070
- rgba(157, 78, 221, 0.35) 0%,
2071
- rgba(123, 44, 191, 0.4) 50%,
2072
- rgba(90, 24, 154, 0.35) 100%) !important;
2073
- border-color: rgba(224, 170, 255, 0.6) !important;
2074
  color: white !important;
2075
  box-shadow:
2076
- 0 6px 24px rgba(157, 78, 221, 0.45),
2077
- 0 0 0 1px rgba(224, 170, 255, 0.35) inset,
2078
- 0 0 40px rgba(157, 78, 221, 0.2);
2079
- transform: translateY(-1px);
2080
  }
2081
 
2082
- /* Tab Content Areas - Enhanced */
2083
- .glass-tabs-container > div > div[style*="display"],
2084
- .gradio-tabs > div > div[style*="display"] {
2085
- background: linear-gradient(135deg,
2086
- rgba(224, 170, 255, 0.06) 0%,
2087
- rgba(199, 125, 255, 0.1) 100%) !important;
2088
- backdrop-filter: blur(15px) saturate(180%);
2089
- -webkit-backdrop-filter: blur(15px) saturate(180%);
2090
- border-radius: 24px;
2091
- padding: 2rem;
2092
- margin-top: 1.25rem;
2093
- border: 1.5px solid rgba(224, 170, 255, 0.2);
2094
- box-shadow:
2095
- 0 4px 20px rgba(16, 0, 43, 0.25),
2096
- 0 0 0 1px rgba(224, 170, 255, 0.1) inset;
2097
- }
2098
 
2099
- /* Glass Buttons - Enhanced glassmorphism */
2100
- button.primary, button[class*="primary"],
2101
- button[type="button"].primary {
2102
- background: linear-gradient(135deg,
2103
- rgba(157, 78, 221, 0.35) 0%,
2104
- rgba(123, 44, 191, 0.45) 50%,
2105
- rgba(90, 24, 154, 0.4) 100%) !important;
2106
- backdrop-filter: blur(15px) saturate(180%);
2107
- -webkit-backdrop-filter: blur(15px) saturate(180%);
2108
- border: 1.5px solid rgba(224, 170, 255, 0.45) !important;
2109
- border-radius: 28px !important;
2110
- color: white !important;
2111
- padding: 0.875rem 1.75rem !important;
2112
- font-weight: 600 !important;
2113
- font-size: 0.95rem !important;
2114
- box-shadow:
2115
- 0 6px 24px rgba(157, 78, 221, 0.35),
2116
- 0 0 0 1px rgba(224, 170, 255, 0.25) inset,
2117
- 0 0 30px rgba(157, 78, 221, 0.15);
2118
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;
2119
- text-shadow: 0 1px 3px rgba(16, 0, 43, 0.3);
2120
  }
2121
 
2122
- button.primary:hover, button[class*="primary"]:hover,
2123
- button[type="button"].primary:hover {
2124
- background: linear-gradient(135deg,
2125
- rgba(157, 78, 221, 0.45) 0%,
2126
- rgba(123, 44, 191, 0.55) 50%,
2127
- rgba(90, 24, 154, 0.5) 100%) !important;
2128
- border-color: rgba(224, 170, 255, 0.65) !important;
2129
- transform: translateY(-3px) scale(1.02);
2130
- box-shadow:
2131
- 0 10px 36px rgba(157, 78, 221, 0.45),
2132
- 0 0 0 1px rgba(224, 170, 255, 0.35) inset,
2133
- 0 0 50px rgba(157, 78, 221, 0.25);
2134
  }
2135
 
2136
- button.secondary, button[class*="secondary"],
2137
- button[type="button"].secondary {
2138
- background: linear-gradient(135deg,
2139
- rgba(224, 170, 255, 0.12) 0%,
2140
- rgba(199, 125, 255, 0.18) 100%) !important;
2141
- backdrop-filter: blur(12px) saturate(180%);
2142
- -webkit-backdrop-filter: blur(12px) saturate(180%);
2143
- border: 1.5px solid rgba(224, 170, 255, 0.35) !important;
2144
- border-radius: 28px !important;
2145
- color: var(--purple-lightest) !important;
2146
- padding: 0.75rem 1.5rem !important;
2147
- font-weight: 500 !important;
2148
- box-shadow:
2149
- 0 4px 16px rgba(16, 0, 43, 0.25),
2150
- 0 0 0 1px rgba(224, 170, 255, 0.15) inset;
2151
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;
2152
  }
2153
 
2154
- button.secondary:hover, button[class*="secondary"]:hover,
2155
- button[type="button"].secondary:hover {
2156
- background: linear-gradient(135deg,
2157
- rgba(224, 170, 255, 0.22) 0%,
2158
- rgba(199, 125, 255, 0.28) 100%) !important;
2159
- border-color: rgba(224, 170, 255, 0.55) !important;
2160
- transform: translateY(-3px);
 
2161
  box-shadow:
2162
- 0 8px 24px rgba(157, 78, 221, 0.3),
2163
- 0 0 0 1px rgba(224, 170, 255, 0.25) inset;
2164
  }
2165
 
2166
- /* Glass Input Fields - Enhanced */
2167
- input[type="text"], textarea, select,
2168
- .gradio-textbox input, .gradio-textbox textarea {
2169
- background: linear-gradient(135deg,
2170
- rgba(224, 170, 255, 0.08) 0%,
2171
- rgba(199, 125, 255, 0.12) 100%) !important;
2172
- backdrop-filter: blur(12px) saturate(180%);
2173
- -webkit-backdrop-filter: blur(12px) saturate(180%);
2174
- border: 1.5px solid rgba(224, 170, 255, 0.3) !important;
2175
- border-radius: 18px !important;
2176
- color: var(--purple-lightest) !important;
2177
- padding: 0.875rem 1.25rem !important;
2178
- transition: all 0.3s ease !important;
2179
- box-shadow:
2180
- 0 2px 8px rgba(16, 0, 43, 0.2),
2181
- 0 0 0 1px rgba(224, 170, 255, 0.1) inset;
2182
  }
2183
 
2184
- input[type="text"]:focus, textarea:focus, select:focus,
2185
- .gradio-textbox input:focus, .gradio-textbox textarea:focus {
2186
- background: linear-gradient(135deg,
2187
- rgba(224, 170, 255, 0.15) 0%,
2188
- rgba(199, 125, 255, 0.2) 100%) !important;
2189
- border-color: rgba(224, 170, 255, 0.6) !important;
2190
- box-shadow:
2191
- 0 0 0 4px rgba(157, 78, 221, 0.2),
2192
- 0 4px 16px rgba(157, 78, 221, 0.25),
2193
- 0 0 0 1px rgba(224, 170, 255, 0.2) inset;
2194
- outline: none;
2195
  }
2196
 
2197
- input[type="text"]::placeholder, textarea::placeholder {
2198
- color: rgba(224, 170, 255, 0.55) !important;
2199
- opacity: 0.8;
2200
- }
2201
 
2202
- /* Glass File Upload - Enhanced & Fully Rounded (for chat file uploads) */
2203
- .gradio-file, .gradio-file-upload,
2204
- .multimodal-textbox .file-upload-area,
2205
- .gradio-chatbot .file-upload-area {
2206
- background: linear-gradient(135deg,
2207
- rgba(224, 170, 255, 0.15) 0%,
2208
- rgba(199, 125, 255, 0.2) 100%) !important;
2209
- backdrop-filter: blur(20px) saturate(200%) !important;
2210
- -webkit-backdrop-filter: blur(20px) saturate(200%) !important;
2211
- border: 2.5px dashed rgba(224, 170, 255, 0.5) !important;
2212
- border-radius: 28px !important;
2213
- padding: 2rem !important;
2214
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;
2215
- box-shadow:
2216
- 0 8px 32px rgba(16, 0, 43, 0.35),
2217
- 0 0 0 1px rgba(224, 170, 255, 0.25) inset,
2218
- 0 0 40px rgba(157, 78, 221, 0.1) !important;
2219
  }
2220
 
2221
- .gradio-file:hover, .gradio-file-upload:hover,
2222
- .multimodal-textbox .file-upload-area:hover {
2223
- background: linear-gradient(135deg,
2224
- rgba(224, 170, 255, 0.22) 0%,
2225
- rgba(199, 125, 255, 0.28) 100%) !important;
2226
- border-color: rgba(224, 170, 255, 0.7) !important;
2227
- transform: translateY(-2px);
 
 
2228
  box-shadow:
2229
- 0 12px 40px rgba(157, 78, 221, 0.4),
2230
- 0 0 0 1px rgba(224, 170, 255, 0.35) inset,
2231
- 0 0 60px rgba(157, 78, 221, 0.15) !important;
2232
  }
2233
 
2234
- /* Quiz Block - Uses EXACT same styling as left sidebar (glass-tabs-container) */
2235
- /* All quiz elements inherit from glass-tabs-container styling automatically */
2236
-
2237
- /* Quiz feedback and explanation visibility - Force visibility when content exists */
2238
- .quiz-feedback,
2239
- .quiz-explanation {
2240
- display: block !important;
2241
- visibility: visible !important;
2242
- opacity: 1 !important;
2243
- margin: 1rem 0 !important;
2244
- z-index: 100 !important;
2245
- position: relative !important;
2246
  }
2247
 
2248
- /* Ensure feedback is visible even when Gradio tries to hide it */
2249
- .quiz-feedback[style*="display: none"],
2250
- .quiz-explanation[style*="display: none"] {
2251
- display: block !important;
2252
- visibility: visible !important;
2253
  }
2254
 
2255
- /* Make sure HTML content inside feedback is visible */
2256
- .quiz-feedback > div,
2257
- .quiz-explanation > div {
2258
- display: block !important;
2259
- visibility: visible !important;
2260
- opacity: 1 !important;
2261
  }
2262
 
2263
  /* ============================================
2264
- Clean Chat Interface - Minimal styling
2265
  ============================================ */
2266
-
2267
- /* Main chat container - clean and simple */
2268
- .glass-chatbot {
2269
- background: transparent !important;
2270
- border: none !important;
2271
- box-shadow: none !important;
2272
- }
2273
-
2274
- .glass-chatbot > div {
2275
- background: transparent !important;
2276
- border: none !important;
2277
- }
2278
-
2279
- /* Chat message bubbles - simple and clean */
2280
- .glass-chatbot .message {
2281
  background: rgba(157, 78, 221, 0.15) !important;
2282
- border: 1px solid rgba(200, 150, 255, 0.2) !important;
2283
- border-radius: 16px !important;
2284
- padding: 12px 16px !important;
2285
- margin: 8px 4px !important;
 
 
 
 
2286
  }
2287
 
2288
- /* Glass input styling */
2289
- .glass-input {
2290
- background: rgba(157, 78, 221, 0.1) !important;
2291
- border: 1px solid rgba(200, 150, 255, 0.3) !important;
2292
- border-radius: 16px !important;
 
 
2293
  }
2294
 
2295
- .glass-input textarea {
2296
- background: transparent !important;
 
 
2297
  color: white !important;
2298
- transition: all 0.2s ease !important;
 
 
2299
  }
2300
 
2301
- /* Button hover */
2302
- .gradio-chatbot button:hover,
2303
- .chatbot-container button:hover,
2304
- [class*="chatbot"] button:hover {
2305
- background: linear-gradient(
2306
- 135deg,
2307
- rgba(157, 78, 221, 0.85) 0%,
2308
- rgba(123, 44, 191, 0.95) 100%
2309
- ) !important;
2310
- transform: translateY(-1px) !important;
2311
  box-shadow:
2312
- 0 6px 20px rgba(123, 44, 191, 0.4),
2313
- 0 0 0 1px rgba(255, 255, 255, 0.15) inset !important;
 
2314
  }
2315
 
2316
- /* File attachment styling */
2317
- [class*="file"], [class*="attachment"],
2318
- .gradio-chatbot [class*="file"] {
2319
- background: linear-gradient(
2320
- 135deg,
2321
- rgba(255, 255, 255, 0.08) 0%,
2322
- rgba(200, 170, 255, 0.1) 100%
2323
- ) !important;
2324
- border: 1px solid rgba(255, 255, 255, 0.15) !important;
2325
- border-radius: 12px !important;
2326
- backdrop-filter: blur(15px) !important;
2327
- -webkit-backdrop-filter: blur(15px) !important;
 
 
 
 
 
 
 
 
2328
  }
2329
 
2330
- /* Placeholder text */
2331
- .gradio-chatbot input::placeholder,
2332
- .gradio-chatbot textarea::placeholder,
2333
- [class*="chatbot"] input::placeholder,
2334
- [class*="chatbot"] textarea::placeholder {
2335
- color: rgba(255, 255, 255, 0.5) !important;
2336
  }
2337
 
2338
- /* Markdown/Text Content */
2339
- .markdown, .markdown p, .markdown h1, .markdown h2, .markdown h3 {
2340
- color: var(--purple-lightest) !important;
 
2341
  }
2342
 
2343
- /* Scrollbar Styling */
 
 
2344
  ::-webkit-scrollbar {
2345
- width: 10px;
 
2346
  }
2347
 
2348
  ::-webkit-scrollbar-track {
2349
  background: rgba(16, 0, 43, 0.3);
2350
- border-radius: 16px;
2351
  }
2352
 
2353
  ::-webkit-scrollbar-thumb {
2354
- background: linear-gradient(135deg,
2355
- rgba(157, 78, 221, 0.6) 0%,
2356
- rgba(123, 44, 191, 0.7) 100%);
2357
- border-radius: 16px;
2358
- border: 2px solid rgba(16, 0, 43, 0.3);
2359
  }
2360
 
2361
  ::-webkit-scrollbar-thumb:hover {
2362
- background: linear-gradient(135deg,
2363
- rgba(157, 78, 221, 0.8) 0%,
2364
- rgba(123, 44, 191, 0.9) 100%);
2365
- }
2366
-
2367
- /* Smooth Transitions */
2368
- * {
2369
- transition: background-color 0.3s ease, border-color 0.3s ease,
2370
- box-shadow 0.3s ease, transform 0.3s ease !important;
2371
  }
2372
 
2373
- /* Button Hover Effects */
2374
- button {
2375
- transition: all 0.3s ease !important;
2376
- }
2377
-
2378
- button:hover {
2379
- transform: translateY(-2px) !important;
2380
  }
2381
 
2382
- /* Radio and Checkbox Styling */
2383
- input[type="radio"], input[type="checkbox"] {
2384
- accent-color: var(--purple-bright) !important;
 
 
2385
  }
2386
 
2387
- /* JSON Display - Enhanced */
2388
- .gradio-json, .json-container {
2389
- background: linear-gradient(135deg,
2390
- rgba(16, 0, 43, 0.5) 0%,
2391
- rgba(36, 0, 70, 0.45) 100%) !important;
2392
- backdrop-filter: blur(15px) saturate(180%);
2393
- -webkit-backdrop-filter: blur(15px) saturate(180%);
2394
- border: 1.5px solid rgba(224, 170, 255, 0.25) !important;
2395
- border-radius: 28px !important;
2396
- color: var(--purple-lightest) !important;
2397
- padding: 1.25rem !important;
2398
- box-shadow:
2399
- 0 4px 20px rgba(16, 0, 43, 0.3),
2400
- 0 0 0 1px rgba(224, 170, 255, 0.1) inset;
2401
  }
2402
 
2403
- /* Dropdown/Select Styling */
2404
- select, .gradio-dropdown select {
2405
- background: linear-gradient(135deg,
2406
- rgba(224, 170, 255, 0.1) 0%,
2407
- rgba(199, 125, 255, 0.15) 100%) !important;
2408
- backdrop-filter: blur(12px);
2409
- -webkit-backdrop-filter: blur(12px);
2410
- border: 1.5px solid rgba(224, 170, 255, 0.3) !important;
2411
- border-radius: 18px !important;
2412
- color: var(--purple-lightest) !important;
2413
- padding: 0.75rem 1rem !important;
2414
  }
2415
 
2416
- /* Slider Styling */
2417
- .gradio-slider input[type="range"] {
2418
- accent-color: var(--purple-bright) !important;
2419
  }
2420
 
2421
- /* Radio Button Styling */
2422
- .gradio-radio, input[type="radio"] {
2423
- accent-color: var(--purple-bright) !important;
 
 
2424
  }
2425
 
2426
- /* Label Styling */
2427
- label, .gradio-label {
2428
- color: var(--purple-lightest) !important;
2429
- font-weight: 500 !important;
2430
  }
2431
  """
2432
 
@@ -2438,8 +2291,12 @@ if __name__ == "__main__":
2438
  secondary_hue="purple",
2439
  neutral_hue="purple"
2440
  ).set(
2441
- body_background_fill="linear-gradient(135deg, #10002B 0%, #240046 50%, #3C096C 100%)",
2442
- body_background_fill_dark="linear-gradient(135deg, #10002B 0%, #240046 50%, #3C096C 100%)",
 
 
 
 
2443
  ),
2444
  css=custom_css,
2445
  mcp_server=True # Enable MCP server mode
 
1859
 
1860
  if __name__ == "__main__":
1861
  custom_css = """
1862
+ /* ============================================
1863
+ GNOSIS - Dark Glassmorphism Theme
1864
+ Deep purple/black background with glowing glass
1865
+ ============================================ */
1866
+
1867
+ /* Color Palette - Darker base for better glass contrast */
1868
  :root {
1869
+ --bg-darkest: #050010;
1870
+ --bg-darker: #0a0018;
1871
+ --bg-dark: #10002B;
1872
+ --purple-deep: #1a0035;
1873
+ --purple-dark: #240046;
1874
+ --purple-medium: #3C096C;
1875
+ --purple-bright: #7B2CBF;
1876
+ --purple-glow: #9D4EDD;
1877
  --purple-light: #C77DFF;
1878
  --purple-lightest: #E0AAFF;
1879
+ --glass-white: rgba(255, 255, 255, 0.03);
1880
+ --glass-border: rgba(157, 78, 221, 0.3);
1881
+ --glow-color: rgba(157, 78, 221, 0.5);
1882
  }
1883
 
1884
+ /* ============================================
1885
+ Base Container - Very Dark Background
1886
+ ============================================ */
1887
  .gradio-container {
1888
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
1889
+ background:
1890
+ radial-gradient(ellipse at 20% 20%, rgba(60, 9, 108, 0.15) 0%, transparent 50%),
1891
+ radial-gradient(ellipse at 80% 80%, rgba(123, 44, 191, 0.1) 0%, transparent 50%),
1892
+ radial-gradient(ellipse at 50% 50%, rgba(26, 0, 53, 0.5) 0%, transparent 70%),
1893
+ linear-gradient(180deg, var(--bg-darkest) 0%, var(--bg-darker) 50%, var(--bg-dark) 100%) !important;
1894
+ background-attachment: fixed !important;
1895
  min-height: 100vh;
1896
  padding: 1.5rem;
1897
  }
1898
 
1899
+ /* Remove all default Gradio backgrounds */
1900
+ .gradio-container > div,
1901
+ .gradio-container .contain,
1902
+ .gradio-container .wrap {
1903
+ background: transparent !important;
 
 
1904
  }
1905
 
1906
+ /* ============================================
1907
+ Glass Header with Backlight Glow
1908
+ ============================================ */
1909
  .glass-header {
1910
  text-align: center;
1911
+ padding: 2.5rem 2rem;
1912
  background: linear-gradient(135deg,
1913
+ rgba(157, 78, 221, 0.08) 0%,
1914
+ rgba(123, 44, 191, 0.12) 50%,
1915
+ rgba(60, 9, 108, 0.08) 100%);
1916
+ backdrop-filter: blur(40px) saturate(150%);
1917
+ -webkit-backdrop-filter: blur(40px) saturate(150%);
1918
+ border-radius: 24px;
1919
+ border: 1px solid rgba(157, 78, 221, 0.2);
1920
+ margin-bottom: 2rem;
 
1921
  box-shadow:
1922
+ 0 0 80px rgba(157, 78, 221, 0.15),
1923
+ 0 0 40px rgba(157, 78, 221, 0.1),
1924
+ 0 20px 60px rgba(0, 0, 0, 0.5),
1925
+ inset 0 1px 0 rgba(255, 255, 255, 0.05);
1926
  color: white;
1927
  position: relative;
1928
  overflow: hidden;
 
1931
  .glass-header::before {
1932
  content: '';
1933
  position: absolute;
1934
+ top: 0;
1935
+ left: 0;
1936
+ right: 0;
1937
+ height: 1px;
1938
+ background: linear-gradient(90deg, transparent, rgba(224, 170, 255, 0.3), transparent);
 
 
 
 
 
 
1939
  }
1940
 
1941
  .glass-header h1 {
1942
  margin: 0;
1943
+ font-size: 2.5em;
1944
  font-weight: 700;
1945
+ background: linear-gradient(135deg, #fff 0%, var(--purple-lightest) 50%, var(--purple-light) 100%);
 
 
 
 
1946
  -webkit-background-clip: text;
1947
  -webkit-text-fill-color: transparent;
1948
  background-clip: text;
1949
+ text-shadow: 0 0 40px rgba(224, 170, 255, 0.5);
1950
  }
1951
 
1952
  .glass-header p {
1953
+ font-size: 1.1em;
1954
+ margin-top: 0.5rem;
1955
  margin-bottom: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1956
  color: var(--purple-lightest);
1957
+ opacity: 0.8;
1958
  }
1959
 
1960
+ /* ============================================
1961
+ Glass Panels with Backlight Effect
1962
+ ============================================ */
1963
+ .glass-panel, .glass-tabs-container, .gradio-tabs {
1964
  background: linear-gradient(135deg,
1965
+ rgba(255, 255, 255, 0.02) 0%,
1966
+ rgba(157, 78, 221, 0.05) 50%,
1967
+ rgba(255, 255, 255, 0.02) 100%) !important;
1968
+ backdrop-filter: blur(30px) saturate(120%) !important;
1969
+ -webkit-backdrop-filter: blur(30px) saturate(120%) !important;
1970
+ border-radius: 20px !important;
1971
+ border: 1px solid rgba(157, 78, 221, 0.15) !important;
1972
+ padding: 1.5rem !important;
1973
  box-shadow:
1974
+ 0 0 60px rgba(157, 78, 221, 0.08),
1975
+ 0 0 30px rgba(157, 78, 221, 0.05),
1976
+ 0 15px 40px rgba(0, 0, 0, 0.4),
1977
+ inset 0 1px 0 rgba(255, 255, 255, 0.03) !important;
1978
  position: relative !important;
 
1979
  }
1980
 
1981
+ .glass-panel::before, .glass-tabs-container::before {
1982
+ content: '';
1983
+ position: absolute;
1984
+ top: 0;
1985
+ left: 20%;
1986
+ right: 20%;
1987
+ height: 1px;
1988
+ background: linear-gradient(90deg, transparent, rgba(199, 125, 255, 0.2), transparent);
1989
+ pointer-events: none;
1990
  }
1991
 
1992
+ /* ============================================
1993
+ Tab Buttons - Subtle Glass
1994
+ ============================================ */
1995
  .glass-tabs-container > div > button,
1996
+ .gradio-tabs > div > button {
1997
+ background: rgba(157, 78, 221, 0.08) !important;
1998
+ backdrop-filter: blur(10px);
1999
+ border: 1px solid rgba(157, 78, 221, 0.15) !important;
2000
+ border-radius: 12px !important;
2001
+ color: var(--purple-light) !important;
2002
+ padding: 0.75rem 1.25rem !important;
2003
+ margin: 0.25rem !important;
2004
+ font-weight: 500 !important;
2005
+ font-size: 0.9rem !important;
2006
+ transition: all 0.3s ease !important;
 
 
 
 
 
 
 
2007
  }
2008
 
2009
  .glass-tabs-container > div > button:hover,
2010
  .gradio-tabs > div > button:hover {
2011
+ background: rgba(157, 78, 221, 0.15) !important;
2012
+ border-color: rgba(157, 78, 221, 0.3) !important;
2013
+ box-shadow: 0 0 20px rgba(157, 78, 221, 0.2);
 
 
 
 
 
2014
  }
2015
 
2016
  .glass-tabs-container > div > button.selected,
2017
  .gradio-tabs > div > button.selected {
2018
+ background: linear-gradient(135deg, rgba(157, 78, 221, 0.2) 0%, rgba(123, 44, 191, 0.25) 100%) !important;
2019
+ border-color: rgba(199, 125, 255, 0.4) !important;
 
 
 
2020
  color: white !important;
2021
  box-shadow:
2022
+ 0 0 30px rgba(157, 78, 221, 0.3),
2023
+ inset 0 1px 0 rgba(255, 255, 255, 0.1);
 
 
2024
  }
2025
 
2026
+ /* ============================================
2027
+ CHAT AREA - Clean, No Stacking
2028
+ ============================================ */
 
 
 
 
 
 
 
 
 
 
 
 
 
2029
 
2030
+ /* Chat container - single glass layer only */
2031
+ .chat-header {
2032
+ background: transparent !important;
2033
+ border: none !important;
2034
+ box-shadow: none !important;
2035
+ padding: 1rem !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2036
  }
2037
 
2038
+ /* Remove ALL nested backgrounds in chatbot */
2039
+ .gradio-chatbot,
2040
+ .gradio-chatbot > div,
2041
+ .gradio-chatbot > div > div,
2042
+ .gradio-chatbot .wrap,
2043
+ .gradio-chatbot .contain,
2044
+ [class*="chatbot"],
2045
+ [class*="chatbot"] > div {
2046
+ background: transparent !important;
2047
+ border: none !important;
2048
+ box-shadow: none !important;
 
2049
  }
2050
 
2051
+ /* Chat message area - subtle dark background */
2052
+ .gradio-chatbot .messages,
2053
+ .gradio-chatbot [class*="message-wrap"],
2054
+ .gradio-chatbot [class*="bot"],
2055
+ .gradio-chatbot [class*="user"] {
2056
+ background: transparent !important;
 
 
 
 
 
 
 
 
 
 
2057
  }
2058
 
2059
+ /* Individual message bubbles */
2060
+ .gradio-chatbot .message,
2061
+ .gradio-chatbot [class*="message"]:not([class*="messages"]) {
2062
+ background: rgba(157, 78, 221, 0.08) !important;
2063
+ border: 1px solid rgba(157, 78, 221, 0.15) !important;
2064
+ border-radius: 16px !important;
2065
+ padding: 12px 16px !important;
2066
+ margin: 6px 0 !important;
2067
  box-shadow:
2068
+ 0 0 20px rgba(157, 78, 221, 0.05),
2069
+ 0 4px 12px rgba(0, 0, 0, 0.2) !important;
2070
  }
2071
 
2072
+ /* User messages - slightly different tint */
2073
+ .gradio-chatbot [class*="user"] .message,
2074
+ .gradio-chatbot .user {
2075
+ background: rgba(123, 44, 191, 0.12) !important;
2076
+ border-color: rgba(123, 44, 191, 0.2) !important;
2077
+ margin-left: 20% !important;
 
 
 
 
 
 
 
 
 
 
2078
  }
2079
 
2080
+ /* Bot messages */
2081
+ .gradio-chatbot [class*="bot"] .message,
2082
+ .gradio-chatbot .bot {
2083
+ background: rgba(60, 9, 108, 0.15) !important;
2084
+ border-color: rgba(157, 78, 221, 0.15) !important;
2085
+ margin-right: 20% !important;
 
 
 
 
 
2086
  }
2087
 
2088
+ /* ============================================
2089
+ INPUT BOX - Single Clean Glass Layer
2090
+ ============================================ */
 
2091
 
2092
+ /* Remove all nested input backgrounds */
2093
+ .multimodal-textbox,
2094
+ .multimodal-textbox > div,
2095
+ .multimodal-textbox .wrap,
2096
+ [class*="textbox"],
2097
+ [class*="textbox"] > div,
2098
+ .gradio-textbox,
2099
+ .gradio-textbox > div {
2100
+ background: transparent !important;
2101
+ border: none !important;
2102
+ box-shadow: none !important;
 
 
 
 
 
 
2103
  }
2104
 
2105
+ /* Main input container - single glass effect */
2106
+ .multimodal-textbox,
2107
+ .glass-input {
2108
+ background: rgba(157, 78, 221, 0.06) !important;
2109
+ backdrop-filter: blur(20px) !important;
2110
+ -webkit-backdrop-filter: blur(20px) !important;
2111
+ border: 1px solid rgba(157, 78, 221, 0.2) !important;
2112
+ border-radius: 16px !important;
2113
+ padding: 0.5rem !important;
2114
  box-shadow:
2115
+ 0 0 40px rgba(157, 78, 221, 0.08),
2116
+ 0 8px 24px rgba(0, 0, 0, 0.3),
2117
+ inset 0 1px 0 rgba(255, 255, 255, 0.03) !important;
2118
  }
2119
 
2120
+ /* Textarea inside input */
2121
+ .multimodal-textbox textarea,
2122
+ .glass-input textarea,
2123
+ textarea {
2124
+ background: transparent !important;
2125
+ border: none !important;
2126
+ color: var(--purple-lightest) !important;
2127
+ font-size: 0.95rem !important;
2128
+ padding: 0.75rem 1rem !important;
2129
+ box-shadow: none !important;
 
 
2130
  }
2131
 
2132
+ textarea:focus {
2133
+ outline: none !important;
2134
+ box-shadow: none !important;
 
 
2135
  }
2136
 
2137
+ textarea::placeholder {
2138
+ color: rgba(199, 125, 255, 0.4) !important;
 
 
 
 
2139
  }
2140
 
2141
  /* ============================================
2142
+ Buttons with Glow Effect
2143
  ============================================ */
2144
+ button, .gradio-button {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2145
  background: rgba(157, 78, 221, 0.15) !important;
2146
+ backdrop-filter: blur(10px);
2147
+ border: 1px solid rgba(157, 78, 221, 0.25) !important;
2148
+ border-radius: 12px !important;
2149
+ color: var(--purple-lightest) !important;
2150
+ padding: 0.6rem 1.2rem !important;
2151
+ font-weight: 500 !important;
2152
+ transition: all 0.3s ease !important;
2153
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
2154
  }
2155
 
2156
+ button:hover, .gradio-button:hover {
2157
+ background: rgba(157, 78, 221, 0.25) !important;
2158
+ border-color: rgba(199, 125, 255, 0.4) !important;
2159
+ box-shadow:
2160
+ 0 0 30px rgba(157, 78, 221, 0.3),
2161
+ 0 6px 20px rgba(0, 0, 0, 0.3) !important;
2162
+ transform: translateY(-2px) !important;
2163
  }
2164
 
2165
+ /* Primary button with stronger glow */
2166
+ button.primary, button[class*="primary"] {
2167
+ background: linear-gradient(135deg, rgba(157, 78, 221, 0.3) 0%, rgba(123, 44, 191, 0.35) 100%) !important;
2168
+ border-color: rgba(199, 125, 255, 0.35) !important;
2169
  color: white !important;
2170
+ box-shadow:
2171
+ 0 0 25px rgba(157, 78, 221, 0.2),
2172
+ 0 6px 20px rgba(0, 0, 0, 0.3);
2173
  }
2174
 
2175
+ button.primary:hover, button[class*="primary"]:hover {
2176
+ background: linear-gradient(135deg, rgba(157, 78, 221, 0.4) 0%, rgba(123, 44, 191, 0.45) 100%) !important;
 
 
 
 
 
 
 
 
2177
  box-shadow:
2178
+ 0 0 40px rgba(157, 78, 221, 0.4),
2179
+ 0 0 20px rgba(157, 78, 221, 0.2),
2180
+ 0 8px 25px rgba(0, 0, 0, 0.4) !important;
2181
  }
2182
 
2183
+ /* ============================================
2184
+ Quiz Panel Styling
2185
+ ============================================ */
2186
+ .quiz-feedback, .quiz-explanation {
2187
+ display: block !important;
2188
+ visibility: visible !important;
2189
+ opacity: 1 !important;
2190
+ margin: 0.75rem 0 !important;
2191
+ }
2192
+
2193
+ /* Radio options with glow on hover */
2194
+ .gradio-radio label,
2195
+ input[type="radio"] + label {
2196
+ background: rgba(157, 78, 221, 0.05) !important;
2197
+ border: 1px solid rgba(157, 78, 221, 0.15) !important;
2198
+ border-radius: 10px !important;
2199
+ padding: 0.75rem 1rem !important;
2200
+ margin: 0.3rem 0 !important;
2201
+ transition: all 0.3s ease !important;
2202
+ color: var(--purple-light) !important;
2203
  }
2204
 
2205
+ .gradio-radio label:hover {
2206
+ background: rgba(157, 78, 221, 0.12) !important;
2207
+ border-color: rgba(157, 78, 221, 0.3) !important;
2208
+ box-shadow: 0 0 20px rgba(157, 78, 221, 0.15);
 
 
2209
  }
2210
 
2211
+ .gradio-radio input:checked + label {
2212
+ background: rgba(157, 78, 221, 0.2) !important;
2213
+ border-color: rgba(199, 125, 255, 0.4) !important;
2214
+ box-shadow: 0 0 25px rgba(157, 78, 221, 0.25);
2215
  }
2216
 
2217
+ /* ============================================
2218
+ Scrollbar - Subtle
2219
+ ============================================ */
2220
  ::-webkit-scrollbar {
2221
+ width: 8px;
2222
+ height: 8px;
2223
  }
2224
 
2225
  ::-webkit-scrollbar-track {
2226
  background: rgba(16, 0, 43, 0.3);
2227
+ border-radius: 10px;
2228
  }
2229
 
2230
  ::-webkit-scrollbar-thumb {
2231
+ background: rgba(157, 78, 221, 0.3);
2232
+ border-radius: 10px;
 
 
 
2233
  }
2234
 
2235
  ::-webkit-scrollbar-thumb:hover {
2236
+ background: rgba(157, 78, 221, 0.5);
 
 
 
 
 
 
 
 
2237
  }
2238
 
2239
+ /* ============================================
2240
+ Text and Labels
2241
+ ============================================ */
2242
+ .markdown, .markdown p, .markdown h1, .markdown h2, .markdown h3,
2243
+ label, .gradio-label, span, p {
2244
+ color: var(--purple-lightest) !important;
 
2245
  }
2246
 
2247
+ /* Accordion styling */
2248
+ .gradio-accordion {
2249
+ background: transparent !important;
2250
+ border: 1px solid rgba(157, 78, 221, 0.15) !important;
2251
+ border-radius: 12px !important;
2252
  }
2253
 
2254
+ .gradio-accordion > div:first-child {
2255
+ background: rgba(157, 78, 221, 0.08) !important;
2256
+ border-radius: 12px !important;
 
 
 
 
 
 
 
 
 
 
 
2257
  }
2258
 
2259
+ /* File upload */
2260
+ .gradio-file, .gradio-file-upload {
2261
+ background: rgba(157, 78, 221, 0.05) !important;
2262
+ border: 2px dashed rgba(157, 78, 221, 0.2) !important;
2263
+ border-radius: 16px !important;
2264
+ transition: all 0.3s ease !important;
 
 
 
 
 
2265
  }
2266
 
2267
+ .gradio-file:hover, .gradio-file-upload:hover {
2268
+ border-color: rgba(157, 78, 221, 0.4) !important;
2269
+ box-shadow: 0 0 30px rgba(157, 78, 221, 0.15);
2270
  }
2271
 
2272
+ /* JSON Display */
2273
+ .gradio-json {
2274
+ background: rgba(16, 0, 43, 0.4) !important;
2275
+ border: 1px solid rgba(157, 78, 221, 0.15) !important;
2276
+ border-radius: 12px !important;
2277
  }
2278
 
2279
+ /* Disable aggressive transitions on everything */
2280
+ * {
2281
+ transition: background-color 0.2s ease, border-color 0.2s ease,
2282
+ box-shadow 0.2s ease, transform 0.2s ease;
2283
  }
2284
  """
2285
 
 
2291
  secondary_hue="purple",
2292
  neutral_hue="purple"
2293
  ).set(
2294
+ body_background_fill="#050010",
2295
+ body_background_fill_dark="#050010",
2296
+ block_background_fill="transparent",
2297
+ block_background_fill_dark="transparent",
2298
+ panel_background_fill="transparent",
2299
+ panel_background_fill_dark="transparent",
2300
  ),
2301
  css=custom_css,
2302
  mcp_server=True # Enable MCP server mode