yufei184905 commited on
Commit
f3e45d6
·
verified ·
1 Parent(s): 3567c5c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +133 -213
app.py CHANGED
@@ -1874,7 +1874,7 @@ def check_gradio_share_links_status(session_role=""):
1874
 
1875
 
1876
  # -----------------------------------------------------------------------------
1877
- # CSS Styles — Ivory / Burgundy / Rose-Gold redesign + Myanmar font
1878
  # -----------------------------------------------------------------------------
1879
  FONT_FILENAME = os.getenv("VIP_MYANMAR_FONT", "Burma013-Regular.ttf").strip() or "Burma013-Regular.ttf"
1880
 
@@ -1913,35 +1913,35 @@ MYANMAR_FONT_CSS = _load_embedded_myanmar_font_css()
1913
 
1914
  CUSTOM_CSS = MYANMAR_FONT_CSS + r"""
1915
  :root {
1916
- --page: #f6f0eb;
1917
- --page-2: #efe4dc;
1918
- --surface: #fffaf6;
1919
- --surface-2: #f9efe9;
1920
- --surface-3: #f2e3da;
1921
- --ink: #2d1f24;
1922
- --text: #3a2730;
1923
- --muted: #7f6972;
1924
- --muted-2: #9b858d;
1925
- --burgundy: #7b2945;
1926
- --burgundy-deep: #5d1832;
1927
- --rose: #b45d78;
1928
- --rose-soft: #d99aae;
1929
- --gold: #b58a4b;
1930
- --gold-soft: #e7cfaa;
1931
- --green: #2f7d63;
1932
- --amber: #a86f21;
1933
- --red: #b5424f;
1934
- --line: rgba(103, 69, 80, .14);
1935
- --line-strong: rgba(123, 41, 69, .30);
1936
- --shadow: 0 18px 48px rgba(87, 53, 64, .10);
1937
- --shadow-soft: 0 8px 24px rgba(87, 53, 64, .08);
1938
  --font-main: 'Burma013YF', 'Noto Sans Myanmar', 'Myanmar Text', 'Pyidaungsu', 'Segoe UI', sans-serif;
1939
  }
1940
 
1941
  * {
1942
  box-sizing: border-box;
1943
  scrollbar-width: thin;
1944
- scrollbar-color: rgba(123, 41, 69, .24) rgba(255,255,255,.35);
1945
  }
1946
 
1947
  html, body, .gradio-container,
@@ -1964,9 +1964,9 @@ body, .gradio-container {
1964
 
1965
  body {
1966
  background:
1967
- radial-gradient(circle at 8% 0%, rgba(180, 93, 120, .16), transparent 27%),
1968
- radial-gradient(circle at 96% 10%, rgba(181, 138, 75, .12), transparent 24%),
1969
- linear-gradient(180deg, #fbf6f2 0%, #f5eee9 44%, #eee3dc 100%) !important;
1970
  }
1971
 
1972
  .gradio-container {
@@ -1984,10 +1984,10 @@ body {
1984
  min-height: 188px;
1985
  padding: 34px 38px;
1986
  margin-bottom: 22px;
1987
- border: 1px solid rgba(123, 41, 69, .14);
1988
  border-radius: 28px;
1989
  background:
1990
- linear-gradient(115deg, rgba(255,250,246,.97), rgba(248,235,228,.96)),
1991
  var(--surface);
1992
  box-shadow: var(--shadow);
1993
  }
@@ -2002,7 +2002,7 @@ body {
2002
  line-height: 1;
2003
  font-weight: 900;
2004
  letter-spacing: -24px;
2005
- color: rgba(123, 41, 69, .055);
2006
  pointer-events: none;
2007
  }
2008
 
@@ -2011,10 +2011,11 @@ body {
2011
  position: absolute;
2012
  left: 30px;
2013
  bottom: 0;
2014
- width: 145px;
2015
  height: 5px;
2016
  border-radius: 999px 999px 0 0;
2017
- background: linear-gradient(90deg, var(--burgundy), var(--rose), var(--gold));
 
2018
  }
2019
 
2020
  .hero-badge {
@@ -2025,25 +2026,26 @@ body {
2025
  align-items: center;
2026
  gap: 8px;
2027
  padding: 7px 12px;
2028
- border: 1px solid rgba(181, 138, 75, .30);
2029
  border-radius: 999px;
2030
- color: #7a5527;
2031
- background: rgba(255, 248, 233, .84);
2032
  font-size: 11px;
2033
  font-weight: 800;
2034
  letter-spacing: 1.1px;
2035
- box-shadow: 0 4px 14px rgba(181,138,75,.08);
2036
  }
2037
 
2038
  .hero h1 {
2039
  position: relative;
2040
  z-index: 1;
2041
  margin: 14px 0 8px;
2042
- color: var(--burgundy-deep) !important;
2043
  font-size: clamp(30px, 4vw, 46px);
2044
  line-height: 1.15;
2045
  font-weight: 900;
2046
  letter-spacing: -.8px;
 
2047
  }
2048
 
2049
  .hero p {
@@ -2060,31 +2062,29 @@ body {
2060
  .glass-card, .login-card {
2061
  border: 1px solid var(--line) !important;
2062
  border-radius: 22px !important;
2063
- background: rgba(255, 250, 246, .92) !important;
2064
  box-shadow: var(--shadow-soft) !important;
2065
  padding: 24px !important;
2066
- backdrop-filter: blur(12px);
2067
  }
2068
 
2069
  .glass-card:hover {
2070
- border-color: rgba(123, 41, 69, .22) !important;
2071
- box-shadow: 0 14px 36px rgba(87,53,64,.11) !important;
2072
  }
2073
 
2074
  .login-card {
2075
  max-width: 500px !important;
2076
  margin: 34px auto !important;
2077
  padding: 32px !important;
2078
- border-top: 4px solid var(--burgundy) !important;
2079
  }
2080
 
2081
- .section-title {
2082
- margin-bottom: 16px;
2083
- }
2084
 
2085
  .section-title h2 {
2086
  margin: 0 0 7px;
2087
- color: var(--burgundy-deep) !important;
2088
  font-size: 20px;
2089
  font-weight: 900;
2090
  letter-spacing: -.15px;
@@ -2102,12 +2102,11 @@ body {
2102
  position: relative;
2103
  overflow: hidden;
2104
  min-height: 116px;
2105
- border: 1px solid rgba(123, 41, 69, .12) !important;
2106
  border-radius: 20px !important;
2107
- background:
2108
- linear-gradient(145deg, rgba(255,253,251,.98), rgba(249,239,233,.95)) !important;
2109
  padding: 15px 18px !important;
2110
- box-shadow: 0 10px 28px rgba(87,53,64,.07) !important;
2111
  }
2112
 
2113
  .stat-card::before {
@@ -2117,7 +2116,7 @@ body {
2117
  left: 0;
2118
  width: 100%;
2119
  height: 4px;
2120
- background: linear-gradient(90deg, var(--burgundy), var(--rose-soft));
2121
  }
2122
 
2123
  .stat-card label,
@@ -2127,7 +2126,7 @@ body {
2127
  }
2128
 
2129
  .stat-card input {
2130
- color: var(--burgundy-deep) !important;
2131
  background: transparent !important;
2132
  border: 0 !important;
2133
  font-size: 28px !important;
@@ -2137,47 +2136,40 @@ body {
2137
  box-shadow: none !important;
2138
  }
2139
 
2140
- .amount-card::before {
2141
- background: linear-gradient(90deg, var(--gold), #d6b36f);
2142
- }
2143
-
2144
- .amount-card input {
2145
- color: #8a6028 !important;
2146
- }
2147
 
2148
  /* ---------- Inputs ---------- */
2149
  .gradio-container input:not([type="range"]),
2150
  .gradio-container textarea,
2151
  .gradio-container select {
2152
  color: var(--ink) !important;
2153
- background: #fffdfb !important;
2154
- border: 1px solid rgba(103, 69, 80, .18) !important;
2155
  border-radius: 13px !important;
2156
- box-shadow: inset 0 1px 0 rgba(255,255,255,.65) !important;
2157
  }
2158
 
2159
  .gradio-container input::placeholder,
2160
- .gradio-container textarea::placeholder {
2161
- color: #b09ca4 !important;
2162
- }
2163
 
2164
  .gradio-container input:focus,
2165
  .gradio-container textarea:focus,
2166
  .gradio-container select:focus {
2167
- border-color: rgba(123, 41, 69, .50) !important;
2168
- box-shadow: 0 0 0 4px rgba(180, 93, 120, .10) !important;
2169
  outline: none !important;
2170
  }
2171
 
2172
  /* ---------- Buttons ---------- */
2173
  .primary-action, .admin-action {
2174
  min-height: 49px !important;
2175
- border: 1px solid rgba(93, 24, 50, .20) !important;
2176
  border-radius: 14px !important;
2177
  padding: 10px 20px !important;
2178
- color: #fffaf7 !important;
2179
- background: linear-gradient(110deg, var(--burgundy-deep), var(--burgundy) 55%, var(--rose)) !important;
2180
- box-shadow: 0 10px 24px rgba(123, 41, 69, .20) !important;
2181
  font-size: 14px !important;
2182
  font-weight: 900 !important;
2183
  transition: transform .18s ease, box-shadow .18s ease, filter .18s ease !important;
@@ -2185,35 +2177,35 @@ body {
2185
 
2186
  .primary-action:hover, .admin-action:hover {
2187
  transform: translateY(-2px);
2188
- filter: saturate(1.06) brightness(1.02);
2189
- box-shadow: 0 14px 28px rgba(123, 41, 69, .25) !important;
2190
  }
2191
 
2192
  button.secondary,
2193
  button[aria-label="secondary"] {
2194
- color: var(--burgundy-deep) !important;
2195
- background: #fffaf6 !important;
2196
- border-color: rgba(123, 41, 69, .20) !important;
2197
  border-radius: 12px !important;
2198
  }
2199
 
2200
  button.secondary:hover,
2201
  button[aria-label="secondary"]:hover {
2202
- background: #f7e9e7 !important;
 
 
2203
  }
2204
 
2205
  /* ---------- Tabs ---------- */
2206
- .tabs {
2207
- gap: 15px !important;
2208
- }
2209
 
2210
  .tab-nav {
2211
  padding: 7px !important;
2212
  margin-bottom: 16px !important;
2213
  border: 1px solid var(--line) !important;
2214
  border-radius: 16px !important;
2215
- background: rgba(255, 250, 246, .80) !important;
2216
- box-shadow: 0 7px 20px rgba(87,53,64,.06) !important;
2217
  }
2218
 
2219
  .tab-nav button {
@@ -2223,9 +2215,9 @@ button[aria-label="secondary"]:hover {
2223
  }
2224
 
2225
  .tab-nav button.selected {
2226
- color: #fffaf6 !important;
2227
- background: linear-gradient(110deg, var(--burgundy-deep), var(--burgundy)) !important;
2228
- box-shadow: 0 7px 18px rgba(123, 41, 69, .18) !important;
2229
  }
2230
 
2231
  /* ---------- Tables ---------- */
@@ -2233,41 +2225,32 @@ button[aria-label="secondary"]:hover {
2233
  border: 1px solid var(--line) !important;
2234
  border-radius: 16px !important;
2235
  overflow: hidden !important;
2236
- background: #fffdfb !important;
2237
- box-shadow: 0 7px 22px rgba(87,53,64,.06) !important;
2238
  }
2239
 
2240
- .dataframe table {
2241
- background: #fffdfb !important;
2242
- }
2243
 
2244
  .dataframe th {
2245
- color: #fff9f5 !important;
2246
- background: linear-gradient(180deg, #71304a, #5d1832) !important;
2247
- border-color: rgba(255,255,255,.10) !important;
2248
  font-size: 12px !important;
2249
  font-weight: 900 !important;
2250
  }
2251
 
2252
  .dataframe td {
2253
- color: var(--ink) !important;
2254
- background: #fffdfb !important;
2255
- border-color: rgba(103, 69, 80, .09) !important;
2256
  font-size: 12px !important;
2257
  }
2258
 
2259
- .dataframe tbody tr:nth-child(even) td {
2260
- background: #fbf4ef !important;
2261
- }
2262
-
2263
- .dataframe tbody tr:hover td {
2264
- background: #f5e6e5 !important;
2265
- }
2266
 
2267
  /* ---------- Gradio service monitor ---------- */
2268
- .gradio-monitor-wrap {
2269
- padding: 16px 18px !important;
2270
- }
2271
 
2272
  .gradio-monitor-head {
2273
  display: flex;
@@ -2279,16 +2262,12 @@ button[aria-label="secondary"]:hover {
2279
 
2280
  .gradio-monitor-head h3 {
2281
  margin: 0;
2282
- color: var(--burgundy-deep);
2283
  font-size: 17px;
2284
  font-weight: 900;
2285
  }
2286
 
2287
- .gradio-monitor-head p {
2288
- margin: 4px 0 0;
2289
- color: var(--muted);
2290
- font-size: 12px;
2291
- }
2292
 
2293
  .gradio-service-card {
2294
  display: flex;
@@ -2298,7 +2277,7 @@ button[aria-label="secondary"]:hover {
2298
  padding: 15px 17px;
2299
  border: 1px solid var(--line);
2300
  border-radius: 15px;
2301
- background: #fffdfb;
2302
  }
2303
 
2304
  .gradio-service-title {
@@ -2320,57 +2299,28 @@ button[aria-label="secondary"]:hover {
2320
  font-size: 10px;
2321
  font-weight: 900;
2322
  letter-spacing: .35px;
2323
- background: rgba(255,255,255,.64);
2324
- }
2325
-
2326
- .gradio-service-detail {
2327
- margin-top: 5px;
2328
- color: var(--muted);
2329
- font-size: 12px;
2330
- }
2331
-
2332
- .gradio-service-meta {
2333
- display: flex;
2334
- flex-wrap: wrap;
2335
- justify-content: flex-end;
2336
- gap: 7px 12px;
2337
- color: var(--muted-2);
2338
- font-size: 11px;
2339
  }
2340
 
 
 
2341
  .gradio-service-meta b { color: var(--ink); }
2342
- .gradio-service-meta a { color: var(--burgundy) !important; text-decoration: none; font-weight: 850; }
2343
 
2344
- .service-ok {
2345
- border-color: rgba(47, 125, 99, .24);
2346
- background: rgba(47, 125, 99, .055);
2347
- }
2348
- .service-ok .service-dot,
2349
- .service-ok .service-pill { color: var(--green); }
2350
-
2351
- .service-warn {
2352
- border-color: rgba(168, 111, 33, .25);
2353
- background: rgba(168, 111, 33, .055);
2354
- }
2355
- .service-warn .service-dot,
2356
- .service-warn .service-pill { color: var(--amber); }
2357
-
2358
- .service-down {
2359
- border-color: rgba(181, 66, 79, .24);
2360
- background: rgba(181, 66, 79, .055);
2361
- }
2362
- .service-down .service-dot,
2363
- .service-down .service-pill { color: var(--red); }
2364
-
2365
- .service-idle .service-dot,
2366
- .service-idle .service-pill { color: var(--muted); }
2367
 
2368
  /* ---------- Generated key ---------- */
2369
  .key-output textarea {
2370
  min-height: 60px !important;
2371
- color: var(--burgundy-deep) !important;
2372
- background: linear-gradient(180deg, #fffaf4, #f7ece6) !important;
2373
- border: 1px dashed rgba(181, 138, 75, .55) !important;
2374
  font-family: 'SFMono-Regular', Consolas, 'Myanmar Text', monospace !important;
2375
  font-size: 18px !important;
2376
  font-weight: 900 !important;
@@ -2382,34 +2332,29 @@ button[aria-label="secondary"]:hover {
2382
  display: inline-block;
2383
  padding: 4px 9px;
2384
  border-radius: 999px;
2385
- color: #2f6f59;
2386
- background: rgba(47, 125, 99, .08);
2387
- border: 1px solid rgba(47, 125, 99, .18);
2388
  font-size: 11px;
2389
  font-weight: 900;
2390
  }
2391
 
2392
  .permission-badge.restricted {
2393
- color: #8a6028;
2394
- background: rgba(181, 138, 75, .09);
2395
- border-color: rgba(181, 138, 75, .24);
2396
  }
2397
 
2398
  /* ---------- Markdown / alerts ---------- */
2399
- .gradio-container .prose {
2400
- color: var(--text) !important;
2401
- }
2402
-
2403
- .gradio-container .prose strong {
2404
- color: var(--burgundy-deep) !important;
2405
- }
2406
 
2407
  .login-error-alert {
2408
  padding: 12px 14px;
2409
- border: 1px solid rgba(181,66,79,.25);
2410
  border-radius: 13px;
2411
- color: #8f2938;
2412
- background: rgba(181,66,79,.06);
2413
  }
2414
 
2415
  /* ---------- Footer ---------- */
@@ -2424,54 +2369,29 @@ button[aria-label="secondary"]:hover {
2424
  }
2425
 
2426
  @media (max-width: 760px) {
2427
- .gradio-container {
2428
- padding: 12px 10px 30px !important;
2429
- }
2430
- .hero {
2431
- min-height: 155px;
2432
- padding: 25px 21px;
2433
- border-radius: 20px;
2434
- }
2435
- .hero::before {
2436
- right: 11px;
2437
- top: -18px;
2438
- font-size: 125px;
2439
- }
2440
- .hero::after {
2441
- left: 20px;
2442
- width: 100px;
2443
- }
2444
- .glass-card, .login-card {
2445
- padding: 16px !important;
2446
- border-radius: 16px !important;
2447
- }
2448
- .stat-card {
2449
- min-height: 102px;
2450
- }
2451
- .stat-card input {
2452
- font-size: 23px !important;
2453
- }
2454
- .gradio-service-card {
2455
- align-items: flex-start;
2456
- flex-direction: column;
2457
- }
2458
- .gradio-service-meta {
2459
- justify-content: flex-start;
2460
- }
2461
  }
2462
  """
2463
 
2464
 
2465
  theme = gr.themes.Soft(
2466
- primary_hue="rose",
2467
- secondary_hue="amber",
2468
- neutral_hue="stone",
2469
  radius_size="lg",
2470
  ).set(
2471
- body_background_fill="#f6f0eb",
2472
- body_text_color="#3a2730",
2473
- block_background_fill="#fffaf6",
2474
- block_border_color="rgba(103, 69, 80, 0.14)",
2475
  )
2476
 
2477
 
 
1874
 
1875
 
1876
  # -----------------------------------------------------------------------------
1877
+ # CSS Styles — Midnight Neon redesign + Myanmar font
1878
  # -----------------------------------------------------------------------------
1879
  FONT_FILENAME = os.getenv("VIP_MYANMAR_FONT", "Burma013-Regular.ttf").strip() or "Burma013-Regular.ttf"
1880
 
 
1913
 
1914
  CUSTOM_CSS = MYANMAR_FONT_CSS + r"""
1915
  :root {
1916
+ --page: #070b14;
1917
+ --page-2: #0a1020;
1918
+ --surface: #0e1628;
1919
+ --surface-2: #121d33;
1920
+ --surface-3: #18243c;
1921
+ --surface-4: #1d2b47;
1922
+ --ink: #e8edf8;
1923
+ --text: #d7deed;
1924
+ --muted: #98a6be;
1925
+ --muted-2: #74849f;
1926
+ --purple: #7c5cff;
1927
+ --purple-2: #a855f7;
1928
+ --cyan: #22d3ee;
1929
+ --cyan-deep: #0891b2;
1930
+ --gold: #f6c453;
1931
+ --green: #2dd4a7;
1932
+ --amber: #f59e0b;
1933
+ --red: #fb7185;
1934
+ --line: rgba(148, 163, 184, .16);
1935
+ --line-strong: rgba(124, 92, 255, .42);
1936
+ --shadow: 0 20px 60px rgba(0, 0, 0, .42);
1937
+ --shadow-soft: 0 10px 30px rgba(0, 0, 0, .30);
1938
  --font-main: 'Burma013YF', 'Noto Sans Myanmar', 'Myanmar Text', 'Pyidaungsu', 'Segoe UI', sans-serif;
1939
  }
1940
 
1941
  * {
1942
  box-sizing: border-box;
1943
  scrollbar-width: thin;
1944
+ scrollbar-color: rgba(124, 92, 255, .48) rgba(7, 11, 20, .75);
1945
  }
1946
 
1947
  html, body, .gradio-container,
 
1964
 
1965
  body {
1966
  background:
1967
+ radial-gradient(circle at 12% 0%, rgba(124, 92, 255, .18), transparent 30%),
1968
+ radial-gradient(circle at 92% 10%, rgba(34, 211, 238, .10), transparent 26%),
1969
+ linear-gradient(180deg, #070b14 0%, #09101d 48%, #050913 100%) !important;
1970
  }
1971
 
1972
  .gradio-container {
 
1984
  min-height: 188px;
1985
  padding: 34px 38px;
1986
  margin-bottom: 22px;
1987
+ border: 1px solid rgba(124, 92, 255, .28);
1988
  border-radius: 28px;
1989
  background:
1990
+ linear-gradient(115deg, rgba(14, 22, 40, .98), rgba(10, 16, 32, .98)),
1991
  var(--surface);
1992
  box-shadow: var(--shadow);
1993
  }
 
2002
  line-height: 1;
2003
  font-weight: 900;
2004
  letter-spacing: -24px;
2005
+ color: rgba(124, 92, 255, .08);
2006
  pointer-events: none;
2007
  }
2008
 
 
2011
  position: absolute;
2012
  left: 30px;
2013
  bottom: 0;
2014
+ width: 168px;
2015
  height: 5px;
2016
  border-radius: 999px 999px 0 0;
2017
+ background: linear-gradient(90deg, var(--purple), var(--cyan), var(--gold));
2018
+ box-shadow: 0 0 22px rgba(34, 211, 238, .30);
2019
  }
2020
 
2021
  .hero-badge {
 
2026
  align-items: center;
2027
  gap: 8px;
2028
  padding: 7px 12px;
2029
+ border: 1px solid rgba(34, 211, 238, .30);
2030
  border-radius: 999px;
2031
+ color: #8be9f7;
2032
+ background: rgba(34, 211, 238, .08);
2033
  font-size: 11px;
2034
  font-weight: 800;
2035
  letter-spacing: 1.1px;
2036
+ box-shadow: 0 0 22px rgba(34, 211, 238, .06);
2037
  }
2038
 
2039
  .hero h1 {
2040
  position: relative;
2041
  z-index: 1;
2042
  margin: 14px 0 8px;
2043
+ color: #eef2ff !important;
2044
  font-size: clamp(30px, 4vw, 46px);
2045
  line-height: 1.15;
2046
  font-weight: 900;
2047
  letter-spacing: -.8px;
2048
+ text-shadow: 0 0 24px rgba(124, 92, 255, .22);
2049
  }
2050
 
2051
  .hero p {
 
2062
  .glass-card, .login-card {
2063
  border: 1px solid var(--line) !important;
2064
  border-radius: 22px !important;
2065
+ background: rgba(14, 22, 40, .94) !important;
2066
  box-shadow: var(--shadow-soft) !important;
2067
  padding: 24px !important;
2068
+ backdrop-filter: blur(14px);
2069
  }
2070
 
2071
  .glass-card:hover {
2072
+ border-color: rgba(124, 92, 255, .34) !important;
2073
+ box-shadow: 0 14px 38px rgba(0, 0, 0, .38) !important;
2074
  }
2075
 
2076
  .login-card {
2077
  max-width: 500px !important;
2078
  margin: 34px auto !important;
2079
  padding: 32px !important;
2080
+ border-top: 4px solid var(--purple) !important;
2081
  }
2082
 
2083
+ .section-title { margin-bottom: 16px; }
 
 
2084
 
2085
  .section-title h2 {
2086
  margin: 0 0 7px;
2087
+ color: #e9e7ff !important;
2088
  font-size: 20px;
2089
  font-weight: 900;
2090
  letter-spacing: -.15px;
 
2102
  position: relative;
2103
  overflow: hidden;
2104
  min-height: 116px;
2105
+ border: 1px solid rgba(124, 92, 255, .20) !important;
2106
  border-radius: 20px !important;
2107
+ background: linear-gradient(145deg, rgba(18,29,51,.98), rgba(11,18,34,.98)) !important;
 
2108
  padding: 15px 18px !important;
2109
+ box-shadow: 0 10px 28px rgba(0,0,0,.26) !important;
2110
  }
2111
 
2112
  .stat-card::before {
 
2116
  left: 0;
2117
  width: 100%;
2118
  height: 4px;
2119
+ background: linear-gradient(90deg, var(--purple), var(--cyan));
2120
  }
2121
 
2122
  .stat-card label,
 
2126
  }
2127
 
2128
  .stat-card input {
2129
+ color: #c9c2ff !important;
2130
  background: transparent !important;
2131
  border: 0 !important;
2132
  font-size: 28px !important;
 
2136
  box-shadow: none !important;
2137
  }
2138
 
2139
+ .amount-card::before { background: linear-gradient(90deg, var(--gold), var(--cyan)); }
2140
+ .amount-card input { color: #ffd97a !important; }
 
 
 
 
 
2141
 
2142
  /* ---------- Inputs ---------- */
2143
  .gradio-container input:not([type="range"]),
2144
  .gradio-container textarea,
2145
  .gradio-container select {
2146
  color: var(--ink) !important;
2147
+ background: #0a1221 !important;
2148
+ border: 1px solid rgba(148, 163, 184, .20) !important;
2149
  border-radius: 13px !important;
2150
+ box-shadow: inset 0 1px 0 rgba(255,255,255,.025) !important;
2151
  }
2152
 
2153
  .gradio-container input::placeholder,
2154
+ .gradio-container textarea::placeholder { color: #65758f !important; }
 
 
2155
 
2156
  .gradio-container input:focus,
2157
  .gradio-container textarea:focus,
2158
  .gradio-container select:focus {
2159
+ border-color: rgba(124, 92, 255, .72) !important;
2160
+ box-shadow: 0 0 0 4px rgba(124, 92, 255, .12) !important;
2161
  outline: none !important;
2162
  }
2163
 
2164
  /* ---------- Buttons ---------- */
2165
  .primary-action, .admin-action {
2166
  min-height: 49px !important;
2167
+ border: 1px solid rgba(124, 92, 255, .36) !important;
2168
  border-radius: 14px !important;
2169
  padding: 10px 20px !important;
2170
+ color: #f4f2ff !important;
2171
+ background: linear-gradient(110deg, #5b46d8, var(--purple) 55%, var(--purple-2)) !important;
2172
+ box-shadow: 0 10px 26px rgba(124, 92, 255, .22) !important;
2173
  font-size: 14px !important;
2174
  font-weight: 900 !important;
2175
  transition: transform .18s ease, box-shadow .18s ease, filter .18s ease !important;
 
2177
 
2178
  .primary-action:hover, .admin-action:hover {
2179
  transform: translateY(-2px);
2180
+ filter: saturate(1.08) brightness(1.06);
2181
+ box-shadow: 0 14px 32px rgba(124, 92, 255, .32) !important;
2182
  }
2183
 
2184
  button.secondary,
2185
  button[aria-label="secondary"] {
2186
+ color: #b9c5dc !important;
2187
+ background: #111b2f !important;
2188
+ border-color: rgba(148, 163, 184, .22) !important;
2189
  border-radius: 12px !important;
2190
  }
2191
 
2192
  button.secondary:hover,
2193
  button[aria-label="secondary"]:hover {
2194
+ color: #8be9f7 !important;
2195
+ background: #16243d !important;
2196
+ border-color: rgba(34, 211, 238, .28) !important;
2197
  }
2198
 
2199
  /* ---------- Tabs ---------- */
2200
+ .tabs { gap: 15px !important; }
 
 
2201
 
2202
  .tab-nav {
2203
  padding: 7px !important;
2204
  margin-bottom: 16px !important;
2205
  border: 1px solid var(--line) !important;
2206
  border-radius: 16px !important;
2207
+ background: rgba(9, 16, 29, .90) !important;
2208
+ box-shadow: 0 7px 20px rgba(0,0,0,.22) !important;
2209
  }
2210
 
2211
  .tab-nav button {
 
2215
  }
2216
 
2217
  .tab-nav button.selected {
2218
+ color: #f2f0ff !important;
2219
+ background: linear-gradient(110deg, #4f3bc5, var(--purple)) !important;
2220
+ box-shadow: 0 7px 18px rgba(124, 92, 255, .24) !important;
2221
  }
2222
 
2223
  /* ---------- Tables ---------- */
 
2225
  border: 1px solid var(--line) !important;
2226
  border-radius: 16px !important;
2227
  overflow: hidden !important;
2228
+ background: #0b1323 !important;
2229
+ box-shadow: 0 7px 22px rgba(0,0,0,.24) !important;
2230
  }
2231
 
2232
+ .dataframe table { background: #0b1323 !important; }
 
 
2233
 
2234
  .dataframe th {
2235
+ color: #dff9ff !important;
2236
+ background: linear-gradient(180deg, #183555, #10233a) !important;
2237
+ border-color: rgba(148,163,184,.10) !important;
2238
  font-size: 12px !important;
2239
  font-weight: 900 !important;
2240
  }
2241
 
2242
  .dataframe td {
2243
+ color: #cbd5e6 !important;
2244
+ background: #0b1323 !important;
2245
+ border-color: rgba(148,163,184,.08) !important;
2246
  font-size: 12px !important;
2247
  }
2248
 
2249
+ .dataframe tbody tr:nth-child(even) td { background: #0e182a !important; }
2250
+ .dataframe tbody tr:hover td { background: #15223a !important; }
 
 
 
 
 
2251
 
2252
  /* ---------- Gradio service monitor ---------- */
2253
+ .gradio-monitor-wrap { padding: 16px 18px !important; }
 
 
2254
 
2255
  .gradio-monitor-head {
2256
  display: flex;
 
2262
 
2263
  .gradio-monitor-head h3 {
2264
  margin: 0;
2265
+ color: #d8d4ff;
2266
  font-size: 17px;
2267
  font-weight: 900;
2268
  }
2269
 
2270
+ .gradio-monitor-head p { margin: 4px 0 0; color: var(--muted); font-size: 12px; }
 
 
 
 
2271
 
2272
  .gradio-service-card {
2273
  display: flex;
 
2277
  padding: 15px 17px;
2278
  border: 1px solid var(--line);
2279
  border-radius: 15px;
2280
+ background: #0b1425;
2281
  }
2282
 
2283
  .gradio-service-title {
 
2299
  font-size: 10px;
2300
  font-weight: 900;
2301
  letter-spacing: .35px;
2302
+ background: rgba(255,255,255,.025);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2303
  }
2304
 
2305
+ .gradio-service-detail { margin-top: 5px; color: var(--muted); font-size: 12px; }
2306
+ .gradio-service-meta { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 7px 12px; color: var(--muted-2); font-size: 11px; }
2307
  .gradio-service-meta b { color: var(--ink); }
2308
+ .gradio-service-meta a { color: var(--cyan) !important; text-decoration: none; font-weight: 850; }
2309
 
2310
+ .service-ok { border-color: rgba(45, 212, 167, .25); background: rgba(45, 212, 167, .055); }
2311
+ .service-ok .service-dot, .service-ok .service-pill { color: var(--green); }
2312
+ .service-warn { border-color: rgba(245, 158, 11, .25); background: rgba(245, 158, 11, .055); }
2313
+ .service-warn .service-dot, .service-warn .service-pill { color: var(--amber); }
2314
+ .service-down { border-color: rgba(251, 113, 133, .25); background: rgba(251, 113, 133, .055); }
2315
+ .service-down .service-dot, .service-down .service-pill { color: var(--red); }
2316
+ .service-idle .service-dot, .service-idle .service-pill { color: var(--muted); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2317
 
2318
  /* ---------- Generated key ---------- */
2319
  .key-output textarea {
2320
  min-height: 60px !important;
2321
+ color: #8be9f7 !important;
2322
+ background: linear-gradient(180deg, #0a1728, #0a1221) !important;
2323
+ border: 1px dashed rgba(34, 211, 238, .50) !important;
2324
  font-family: 'SFMono-Regular', Consolas, 'Myanmar Text', monospace !important;
2325
  font-size: 18px !important;
2326
  font-weight: 900 !important;
 
2332
  display: inline-block;
2333
  padding: 4px 9px;
2334
  border-radius: 999px;
2335
+ color: #63e6c7;
2336
+ background: rgba(45, 212, 167, .08);
2337
+ border: 1px solid rgba(45, 212, 167, .20);
2338
  font-size: 11px;
2339
  font-weight: 900;
2340
  }
2341
 
2342
  .permission-badge.restricted {
2343
+ color: #ffd166;
2344
+ background: rgba(246, 196, 83, .08);
2345
+ border-color: rgba(246, 196, 83, .22);
2346
  }
2347
 
2348
  /* ---------- Markdown / alerts ---------- */
2349
+ .gradio-container .prose { color: var(--text) !important; }
2350
+ .gradio-container .prose strong { color: #bcb5ff !important; }
 
 
 
 
 
2351
 
2352
  .login-error-alert {
2353
  padding: 12px 14px;
2354
+ border: 1px solid rgba(251,113,133,.28);
2355
  border-radius: 13px;
2356
+ color: #ff9aae;
2357
+ background: rgba(251,113,133,.07);
2358
  }
2359
 
2360
  /* ---------- Footer ---------- */
 
2369
  }
2370
 
2371
  @media (max-width: 760px) {
2372
+ .gradio-container { padding: 12px 10px 30px !important; }
2373
+ .hero { min-height: 155px; padding: 25px 21px; border-radius: 20px; }
2374
+ .hero::before { right: 11px; top: -18px; font-size: 125px; }
2375
+ .hero::after { left: 20px; width: 110px; }
2376
+ .glass-card, .login-card { padding: 16px !important; border-radius: 16px !important; }
2377
+ .stat-card { min-height: 102px; }
2378
+ .stat-card input { font-size: 23px !important; }
2379
+ .gradio-service-card { align-items: flex-start; flex-direction: column; }
2380
+ .gradio-service-meta { justify-content: flex-start; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2381
  }
2382
  """
2383
 
2384
 
2385
  theme = gr.themes.Soft(
2386
+ primary_hue="indigo",
2387
+ secondary_hue="cyan",
2388
+ neutral_hue="slate",
2389
  radius_size="lg",
2390
  ).set(
2391
+ body_background_fill="#070b14",
2392
+ body_text_color="#d7deed",
2393
+ block_background_fill="#0e1628",
2394
+ block_border_color="rgba(148, 163, 184, 0.16)",
2395
  )
2396
 
2397