app fix
Browse files
app.py
CHANGED
|
@@ -122,22 +122,22 @@ CUSTOM_CSS = """
|
|
| 122 |
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
|
| 123 |
|
| 124 |
:root {
|
| 125 |
-
--
|
| 126 |
-
--
|
| 127 |
-
--
|
| 128 |
-
--bg-0: #
|
| 129 |
-
--card:
|
| 130 |
-
--card-border:
|
| 131 |
-
--text-
|
| 132 |
-
--text-
|
|
|
|
| 133 |
}
|
| 134 |
|
| 135 |
.gradio-container {
|
| 136 |
background:
|
| 137 |
-
radial-gradient(ellipse 900px 520px at 50% -8%, rgba(
|
| 138 |
-
radial-gradient(ellipse 700px 600px at 100% 20%, rgba(
|
| 139 |
-
radial-gradient(ellipse
|
| 140 |
-
radial-gradient(ellipse 1400px 900px at 50% 0%, #14172a 0%, var(--bg-0) 60%) !important;
|
| 141 |
background-attachment: fixed !important;
|
| 142 |
font-family: 'Inter', sans-serif !important;
|
| 143 |
position: relative;
|
|
@@ -146,15 +146,15 @@ CUSTOM_CSS = """
|
|
| 146 |
content: "";
|
| 147 |
position: fixed; inset: 0; pointer-events: none; z-index: 0;
|
| 148 |
background-image:
|
| 149 |
-
linear-gradient(rgba(
|
| 150 |
-
linear-gradient(90deg, rgba(
|
| 151 |
background-size: 48px 48px;
|
| 152 |
mask-image: radial-gradient(ellipse 1000px 600px at 50% 0%, black 0%, transparent 70%);
|
| 153 |
}
|
| 154 |
::-webkit-scrollbar { width: 10px; height: 10px; }
|
| 155 |
::-webkit-scrollbar-track { background: var(--bg-0); }
|
| 156 |
-
::-webkit-scrollbar-thumb { background: #
|
| 157 |
-
::-webkit-scrollbar-thumb:hover { background: var(--
|
| 158 |
|
| 159 |
@keyframes revealUp {
|
| 160 |
from { opacity: 0; transform: translateY(22px); }
|
|
@@ -185,22 +185,21 @@ CUSTOM_CSS = """
|
|
| 185 |
letter-spacing: -0.025em !important;
|
| 186 |
line-height: 1.05 !important;
|
| 187 |
margin-bottom: 6px !important;
|
| 188 |
-
background: linear-gradient(135deg, #
|
| 189 |
-webkit-background-clip: text;
|
| 190 |
background-clip: text;
|
| 191 |
-webkit-text-fill-color: transparent;
|
| 192 |
-
filter: drop-shadow(0 2px 28px rgba(139,124,246,0.18));
|
| 193 |
}
|
| 194 |
#hero-headline {
|
| 195 |
display: inline-block;
|
| 196 |
-
color: #
|
| 197 |
font-family: 'Space Grotesk', sans-serif !important;
|
| 198 |
font-weight: 600 !important;
|
| 199 |
font-size: 18px !important;
|
| 200 |
margin-top: 10px !important;
|
| 201 |
padding: 6px 18px !important;
|
| 202 |
-
background: linear-gradient(90deg, rgba(
|
| 203 |
-
border: 1px solid rgba(
|
| 204 |
border-radius: 999px;
|
| 205 |
}
|
| 206 |
.status-badge {
|
|
@@ -210,14 +209,14 @@ CUSTOM_CSS = """
|
|
| 210 |
}
|
| 211 |
.dot {
|
| 212 |
width: 8px; height: 8px; border-radius: 50%;
|
| 213 |
-
background: var(--
|
| 214 |
-
box-shadow: 0 0
|
| 215 |
display: inline-block; animation: pulse 2.2s infinite;
|
| 216 |
}
|
| 217 |
@keyframes pulse {
|
| 218 |
-
0% { box-shadow: 0 0 0 0 rgba(
|
| 219 |
-
70% { box-shadow: 0 0 0 9px rgba(
|
| 220 |
-
100% { box-shadow: 0 0 0 0 rgba(
|
| 221 |
}
|
| 222 |
#hero-contact {
|
| 223 |
display: flex !important; flex-wrap: wrap; justify-content: center; gap: 8px; align-items: center;
|
|
@@ -229,13 +228,13 @@ CUSTOM_CSS = """
|
|
| 229 |
transition: all .18s ease;
|
| 230 |
}
|
| 231 |
#hero-contact a:hover {
|
| 232 |
-
color: #
|
| 233 |
-
background: linear-gradient(90deg, var(--
|
| 234 |
border-color: transparent;
|
| 235 |
}
|
| 236 |
|
| 237 |
.section-label {
|
| 238 |
-
font-family: 'JetBrains Mono', monospace !important; color: var(--
|
| 239 |
letter-spacing: 0.12em !important; text-transform: uppercase; font-size: 12.5px !important;
|
| 240 |
font-weight: 600 !important;
|
| 241 |
}
|
|
@@ -244,8 +243,7 @@ CUSTOM_CSS = """
|
|
| 244 |
background: var(--card) !important;
|
| 245 |
border: 1px solid var(--card-border) !important;
|
| 246 |
border-radius: 18px !important;
|
| 247 |
-
|
| 248 |
-
box-shadow: 0 20px 60px -20px rgba(0,0,0,0.6), inset 0 1px 0 rgba(255,255,255,0.04) !important;
|
| 249 |
padding: 22px !important;
|
| 250 |
position: relative;
|
| 251 |
z-index: 1;
|
|
@@ -262,14 +260,14 @@ CUSTOM_CSS = """
|
|
| 262 |
}
|
| 263 |
.gradio-container button:hover { transform: translateY(-2px); }
|
| 264 |
button.primary, button[class*="primary"] {
|
| 265 |
-
background: linear-gradient(135deg, var(--
|
| 266 |
border: none !important;
|
| 267 |
-
box-shadow: 0 8px
|
| 268 |
-
color: #
|
| 269 |
font-weight: 700 !important;
|
| 270 |
}
|
| 271 |
button.primary:hover, button[class*="primary"]:hover {
|
| 272 |
-
box-shadow: 0 12px
|
| 273 |
}
|
| 274 |
|
| 275 |
.tabs > .tab-nav {
|
|
@@ -281,6 +279,7 @@ button.primary:hover, button[class*="primary"]:hover {
|
|
| 281 |
display: inline-flex !important;
|
| 282 |
gap: 2px !important;
|
| 283 |
margin-bottom: 18px;
|
|
|
|
| 284 |
}
|
| 285 |
.tabs > .tab-nav button {
|
| 286 |
font-family: 'JetBrains Mono', monospace !important;
|
|
@@ -293,10 +292,10 @@ button.primary:hover, button[class*="primary"]:hover {
|
|
| 293 |
margin: 0 !important;
|
| 294 |
}
|
| 295 |
.tabs > .tab-nav button.selected {
|
| 296 |
-
background: linear-gradient(135deg, var(--
|
| 297 |
-
color: #
|
| 298 |
font-weight: 700 !important;
|
| 299 |
-
box-shadow: 0 6px
|
| 300 |
}
|
| 301 |
|
| 302 |
.proj-card {
|
|
@@ -304,12 +303,13 @@ button.primary:hover, button[class*="primary"]:hover {
|
|
| 304 |
border: 1px solid var(--card-border) !important;
|
| 305 |
border-radius: 14px !important;
|
| 306 |
padding: 18px !important;
|
|
|
|
| 307 |
transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease !important;
|
| 308 |
}
|
| 309 |
.proj-card:hover {
|
| 310 |
transform: translateY(-4px);
|
| 311 |
-
border-color: rgba(
|
| 312 |
-
box-shadow: 0 16px
|
| 313 |
}
|
| 314 |
|
| 315 |
.gr-accordion, [class*="accordion"] {
|
|
@@ -320,7 +320,7 @@ button.primary:hover, button[class*="primary"]:hover {
|
|
| 320 |
border-radius: 14px !important;
|
| 321 |
overflow: hidden !important;
|
| 322 |
border: 1px solid var(--card-border) !important;
|
| 323 |
-
box-shadow: 0 12px
|
| 324 |
}
|
| 325 |
.cv-table table { font-size: 13.5px !important; }
|
| 326 |
.cv-table thead th {
|
|
@@ -328,11 +328,11 @@ button.primary:hover, button[class*="primary"]:hover {
|
|
| 328 |
text-transform: uppercase !important;
|
| 329 |
font-size: 10.5px !important;
|
| 330 |
letter-spacing: 0.08em !important;
|
| 331 |
-
color: var(--
|
| 332 |
-
background: rgba(
|
| 333 |
}
|
| 334 |
-
.cv-table tbody tr:nth-child(even) { background: rgba(
|
| 335 |
-
.cv-table tbody tr:hover { background: rgba(
|
| 336 |
"""
|
| 337 |
|
| 338 |
with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
|
|
@@ -343,9 +343,9 @@ with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
|
|
| 343 |
<div class="status-badge"><span class="dot"></span> resume · live · self-querying</div>
|
| 344 |
<div id="hero-name">Angkit Sarma</div>
|
| 345 |
<div><span id="hero-headline">AI/ML Engineer — Agentic Systems & LLM Applications</span></div>
|
| 346 |
-
<p id="hero-bio" style="color:#
|
| 347 |
4+ years building and shipping ML and generative AI systems — from a 50%-faster semantic
|
| 348 |
-
search pipeline to <b style="color:#
|
| 349 |
at the Flexday AI Hackathon. Ask the panel below anything about my experience — it's a live
|
| 350 |
TF-IDF retrieval engine running over this résumé's own content.
|
| 351 |
</p>
|
|
@@ -437,7 +437,7 @@ with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
|
|
| 437 |
gr.Markdown("**Predictive Allocation** — ML Deployment Pipeline\n\n*Python · Azure SQL · Azure Blob · DevOps*\n\nRe-engineered end-to-end training/deployment pipeline; hardened security with Snyk and Wiz.")
|
| 438 |
gr.HTML(
|
| 439 |
'<p style="font-family:\'JetBrains Mono\',monospace; font-size:13px; margin-top:14px;">'
|
| 440 |
-
'<a href="https://github.com/angkit-hash" target="_blank" style="color:#
|
| 441 |
'→ View source & more projects on GitHub</a></p>'
|
| 442 |
)
|
| 443 |
|
|
@@ -466,4 +466,4 @@ with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
|
|
| 466 |
)
|
| 467 |
|
| 468 |
if __name__ == "__main__":
|
| 469 |
-
demo.launch(css=CUSTOM_CSS, theme=gr.themes.Base(primary_hue="
|
|
|
|
| 122 |
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
|
| 123 |
|
| 124 |
:root {
|
| 125 |
+
--blue: #2563eb;
|
| 126 |
+
--blue-deep: #0ea5e9;
|
| 127 |
+
--cyan: #06b6d4;
|
| 128 |
+
--bg-0: #f7fafc;
|
| 129 |
+
--card: #ffffff;
|
| 130 |
+
--card-border: #e2e8f0;
|
| 131 |
+
--text-heading: #0f172a;
|
| 132 |
+
--text-dim: #475569;
|
| 133 |
+
--text-faint: #94a3b8;
|
| 134 |
}
|
| 135 |
|
| 136 |
.gradio-container {
|
| 137 |
background:
|
| 138 |
+
radial-gradient(ellipse 900px 520px at 50% -8%, rgba(37,99,235,0.07) 0%, transparent 62%),
|
| 139 |
+
radial-gradient(ellipse 700px 600px at 100% 20%, rgba(6,182,212,0.06) 0%, transparent 55%),
|
| 140 |
+
radial-gradient(ellipse 1400px 900px at 50% 0%, #eef4ff 0%, var(--bg-0) 55%) !important;
|
|
|
|
| 141 |
background-attachment: fixed !important;
|
| 142 |
font-family: 'Inter', sans-serif !important;
|
| 143 |
position: relative;
|
|
|
|
| 146 |
content: "";
|
| 147 |
position: fixed; inset: 0; pointer-events: none; z-index: 0;
|
| 148 |
background-image:
|
| 149 |
+
linear-gradient(rgba(15,23,42,0.03) 1px, transparent 1px),
|
| 150 |
+
linear-gradient(90deg, rgba(15,23,42,0.03) 1px, transparent 1px);
|
| 151 |
background-size: 48px 48px;
|
| 152 |
mask-image: radial-gradient(ellipse 1000px 600px at 50% 0%, black 0%, transparent 70%);
|
| 153 |
}
|
| 154 |
::-webkit-scrollbar { width: 10px; height: 10px; }
|
| 155 |
::-webkit-scrollbar-track { background: var(--bg-0); }
|
| 156 |
+
::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 8px; }
|
| 157 |
+
::-webkit-scrollbar-thumb:hover { background: var(--blue); }
|
| 158 |
|
| 159 |
@keyframes revealUp {
|
| 160 |
from { opacity: 0; transform: translateY(22px); }
|
|
|
|
| 185 |
letter-spacing: -0.025em !important;
|
| 186 |
line-height: 1.05 !important;
|
| 187 |
margin-bottom: 6px !important;
|
| 188 |
+
background: linear-gradient(135deg, #0f172a 0%, #1d4ed8 60%, #06b6d4 100%);
|
| 189 |
-webkit-background-clip: text;
|
| 190 |
background-clip: text;
|
| 191 |
-webkit-text-fill-color: transparent;
|
|
|
|
| 192 |
}
|
| 193 |
#hero-headline {
|
| 194 |
display: inline-block;
|
| 195 |
+
color: #1d4ed8 !important;
|
| 196 |
font-family: 'Space Grotesk', sans-serif !important;
|
| 197 |
font-weight: 600 !important;
|
| 198 |
font-size: 18px !important;
|
| 199 |
margin-top: 10px !important;
|
| 200 |
padding: 6px 18px !important;
|
| 201 |
+
background: linear-gradient(90deg, rgba(37,99,235,0.08), rgba(6,182,212,0.08));
|
| 202 |
+
border: 1px solid rgba(37,99,235,0.25);
|
| 203 |
border-radius: 999px;
|
| 204 |
}
|
| 205 |
.status-badge {
|
|
|
|
| 209 |
}
|
| 210 |
.dot {
|
| 211 |
width: 8px; height: 8px; border-radius: 50%;
|
| 212 |
+
background: var(--blue);
|
| 213 |
+
box-shadow: 0 0 10px 2px rgba(37,99,235,0.55);
|
| 214 |
display: inline-block; animation: pulse 2.2s infinite;
|
| 215 |
}
|
| 216 |
@keyframes pulse {
|
| 217 |
+
0% { box-shadow: 0 0 0 0 rgba(37,99,235,.45), 0 0 10px 2px rgba(37,99,235,0.55); }
|
| 218 |
+
70% { box-shadow: 0 0 0 9px rgba(37,99,235,0), 0 0 10px 2px rgba(37,99,235,0.55); }
|
| 219 |
+
100% { box-shadow: 0 0 0 0 rgba(37,99,235,0), 0 0 10px 2px rgba(37,99,235,0.55); }
|
| 220 |
}
|
| 221 |
#hero-contact {
|
| 222 |
display: flex !important; flex-wrap: wrap; justify-content: center; gap: 8px; align-items: center;
|
|
|
|
| 228 |
transition: all .18s ease;
|
| 229 |
}
|
| 230 |
#hero-contact a:hover {
|
| 231 |
+
color: #ffffff !important;
|
| 232 |
+
background: linear-gradient(90deg, var(--blue), var(--cyan));
|
| 233 |
border-color: transparent;
|
| 234 |
}
|
| 235 |
|
| 236 |
.section-label {
|
| 237 |
+
font-family: 'JetBrains Mono', monospace !important; color: var(--blue) !important;
|
| 238 |
letter-spacing: 0.12em !important; text-transform: uppercase; font-size: 12.5px !important;
|
| 239 |
font-weight: 600 !important;
|
| 240 |
}
|
|
|
|
| 243 |
background: var(--card) !important;
|
| 244 |
border: 1px solid var(--card-border) !important;
|
| 245 |
border-radius: 18px !important;
|
| 246 |
+
box-shadow: 0 20px 50px -24px rgba(15,23,42,0.18), 0 4px 12px -6px rgba(15,23,42,0.06) !important;
|
|
|
|
| 247 |
padding: 22px !important;
|
| 248 |
position: relative;
|
| 249 |
z-index: 1;
|
|
|
|
| 260 |
}
|
| 261 |
.gradio-container button:hover { transform: translateY(-2px); }
|
| 262 |
button.primary, button[class*="primary"] {
|
| 263 |
+
background: linear-gradient(135deg, var(--blue) 0%, var(--cyan) 100%) !important;
|
| 264 |
border: none !important;
|
| 265 |
+
box-shadow: 0 8px 20px -8px rgba(37,99,235,0.45) !important;
|
| 266 |
+
color: #ffffff !important;
|
| 267 |
font-weight: 700 !important;
|
| 268 |
}
|
| 269 |
button.primary:hover, button[class*="primary"]:hover {
|
| 270 |
+
box-shadow: 0 12px 28px -8px rgba(6,182,212,0.5) !important;
|
| 271 |
}
|
| 272 |
|
| 273 |
.tabs > .tab-nav {
|
|
|
|
| 279 |
display: inline-flex !important;
|
| 280 |
gap: 2px !important;
|
| 281 |
margin-bottom: 18px;
|
| 282 |
+
box-shadow: 0 2px 8px -4px rgba(15,23,42,0.08);
|
| 283 |
}
|
| 284 |
.tabs > .tab-nav button {
|
| 285 |
font-family: 'JetBrains Mono', monospace !important;
|
|
|
|
| 292 |
margin: 0 !important;
|
| 293 |
}
|
| 294 |
.tabs > .tab-nav button.selected {
|
| 295 |
+
background: linear-gradient(135deg, var(--blue) 0%, var(--cyan) 100%) !important;
|
| 296 |
+
color: #ffffff !important;
|
| 297 |
font-weight: 700 !important;
|
| 298 |
+
box-shadow: 0 6px 16px -6px rgba(37,99,235,0.5);
|
| 299 |
}
|
| 300 |
|
| 301 |
.proj-card {
|
|
|
|
| 303 |
border: 1px solid var(--card-border) !important;
|
| 304 |
border-radius: 14px !important;
|
| 305 |
padding: 18px !important;
|
| 306 |
+
box-shadow: 0 2px 8px -4px rgba(15,23,42,0.06);
|
| 307 |
transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease !important;
|
| 308 |
}
|
| 309 |
.proj-card:hover {
|
| 310 |
transform: translateY(-4px);
|
| 311 |
+
border-color: rgba(37,99,235,0.35) !important;
|
| 312 |
+
box-shadow: 0 16px 36px -18px rgba(37,99,235,0.28) !important;
|
| 313 |
}
|
| 314 |
|
| 315 |
.gr-accordion, [class*="accordion"] {
|
|
|
|
| 320 |
border-radius: 14px !important;
|
| 321 |
overflow: hidden !important;
|
| 322 |
border: 1px solid var(--card-border) !important;
|
| 323 |
+
box-shadow: 0 12px 28px -20px rgba(15,23,42,0.2);
|
| 324 |
}
|
| 325 |
.cv-table table { font-size: 13.5px !important; }
|
| 326 |
.cv-table thead th {
|
|
|
|
| 328 |
text-transform: uppercase !important;
|
| 329 |
font-size: 10.5px !important;
|
| 330 |
letter-spacing: 0.08em !important;
|
| 331 |
+
color: var(--blue) !important;
|
| 332 |
+
background: rgba(37,99,235,0.06) !important;
|
| 333 |
}
|
| 334 |
+
.cv-table tbody tr:nth-child(even) { background: rgba(15,23,42,0.015) !important; }
|
| 335 |
+
.cv-table tbody tr:hover { background: rgba(37,99,235,0.05) !important; }
|
| 336 |
"""
|
| 337 |
|
| 338 |
with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
|
|
|
|
| 343 |
<div class="status-badge"><span class="dot"></span> resume · live · self-querying</div>
|
| 344 |
<div id="hero-name">Angkit Sarma</div>
|
| 345 |
<div><span id="hero-headline">AI/ML Engineer — Agentic Systems & LLM Applications</span></div>
|
| 346 |
+
<p id="hero-bio" style="color:#475569; max-width:680px; margin-top:16px; line-height:1.6;">
|
| 347 |
4+ years building and shipping ML and generative AI systems — from a 50%-faster semantic
|
| 348 |
+
search pipeline to <b style="color:#0f172a">INFERA</b>, an agentic AI tool that won 1st place
|
| 349 |
at the Flexday AI Hackathon. Ask the panel below anything about my experience — it's a live
|
| 350 |
TF-IDF retrieval engine running over this résumé's own content.
|
| 351 |
</p>
|
|
|
|
| 437 |
gr.Markdown("**Predictive Allocation** — ML Deployment Pipeline\n\n*Python · Azure SQL · Azure Blob · DevOps*\n\nRe-engineered end-to-end training/deployment pipeline; hardened security with Snyk and Wiz.")
|
| 438 |
gr.HTML(
|
| 439 |
'<p style="font-family:\'JetBrains Mono\',monospace; font-size:13px; margin-top:14px;">'
|
| 440 |
+
'<a href="https://github.com/angkit-hash" target="_blank" style="color:#0ea5e9; text-decoration:none; border-bottom:1px solid #0ea5e9;">'
|
| 441 |
'→ View source & more projects on GitHub</a></p>'
|
| 442 |
)
|
| 443 |
|
|
|
|
| 466 |
)
|
| 467 |
|
| 468 |
if __name__ == "__main__":
|
| 469 |
+
demo.launch(css=CUSTOM_CSS, theme=gr.themes.Base(primary_hue="blue", neutral_hue="slate"))
|