parth036 commited on
Commit
863224b
·
verified ·
1 Parent(s): 09cfb62

Upload folder using huggingface_hub

Browse files
anxiety_app/static/app.css CHANGED
@@ -1,191 +1,176 @@
1
  :root {
2
- --bg: #0b0f14;
3
- --bg-soft: #0f151c;
4
- --surface: #151c25;
5
- --surface-2: #1b242f;
6
- --border: #243040;
7
- --text: #e6edf3;
8
- --muted: #93a1b1;
9
- --primary: #6366f1;
10
- --primary-2: #8b5cf6;
11
- --face: #38bdf8;
12
- --voice: #fb7185;
13
- --phq: #34d399;
14
- --danger: #f87171;
15
- --radius: 16px;
16
- --shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
17
- --maxw: 1080px;
18
  }
19
 
20
  * { box-sizing: border-box; }
21
-
22
  html, body { margin: 0; padding: 0; }
23
 
24
  body {
25
- background:
26
- radial-gradient(900px 500px at 80% -10%, rgba(99, 102, 241, 0.18), transparent 60%),
27
- radial-gradient(700px 500px at 0% 0%, rgba(139, 92, 246, 0.12), transparent 55%),
28
- var(--bg);
29
- color: var(--text);
30
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
31
- line-height: 1.6;
 
 
32
  min-height: 100vh;
33
  display: flex;
34
  flex-direction: column;
 
35
  }
36
 
37
- .container { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 20px; }
38
 
39
- /* ---------- header / nav ---------- */
40
- .site-header {
41
- position: sticky;
42
- top: 0;
43
- z-index: 50;
44
- backdrop-filter: blur(10px);
45
- background: rgba(11, 15, 20, 0.72);
46
- border-bottom: 1px solid var(--border);
47
- }
48
- .header-inner { display: flex; align-items: center; justify-content: space-between; height: 64px; }
49
- .brand { font-weight: 800; font-size: 1.15rem; text-decoration: none; color: var(--text); letter-spacing: -0.02em; }
50
- .brand-mark { color: var(--primary-2); margin-right: 4px; }
51
- .brand-accent { color: var(--muted); font-weight: 600; }
52
- .nav { display: flex; gap: 4px; }
53
  .nav a {
54
- color: var(--muted);
55
- text-decoration: none;
56
- font-weight: 500;
57
- font-size: 0.95rem;
58
- padding: 8px 14px;
59
- border-radius: 10px;
60
- transition: all 0.15s ease;
61
  }
62
- .nav a:hover { color: var(--text); background: var(--surface); }
63
- .nav a.active { color: var(--text); background: var(--surface-2); }
64
 
65
  /* ---------- layout ---------- */
66
- .main { flex: 1; padding: 40px 20px 64px; width: 100%; max-width: var(--maxw); margin: 0 auto; }
67
- .page-title { font-size: 1.9rem; font-weight: 800; letter-spacing: -0.02em; margin: 0 0 6px; }
68
- .page-sub { color: var(--muted); margin: 0 0 28px; }
69
 
70
  /* ---------- hero ---------- */
71
- .hero { text-align: center; padding: 48px 0 16px; }
72
- .hero h1 { font-size: clamp(2rem, 5vw, 3.4rem); font-weight: 800; letter-spacing: -0.03em; margin: 0 0 16px; }
73
- .hero h1 .grad {
74
- background: linear-gradient(120deg, var(--primary), var(--primary-2));
75
- -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
76
- }
77
- .hero p { color: var(--muted); font-size: 1.12rem; max-width: 640px; margin: 0 auto 28px; }
78
- .hero-cta { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
79
-
80
- /* ---------- cards ---------- */
81
- .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 20px; margin-top: 40px; }
82
  .card {
83
- background: linear-gradient(180deg, var(--surface), var(--bg-soft));
84
- border: 1px solid var(--border);
85
- border-radius: var(--radius);
86
- padding: 26px;
87
- text-decoration: none;
88
- color: var(--text);
89
- display: block;
90
- transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
91
  }
92
- a.card:hover { transform: translateY(-4px); border-color: #36506e; box-shadow: var(--shadow); }
93
- .card .ic { width: 46px; height: 46px; border-radius: 12px; display: grid; place-items: center; font-size: 1.5rem; margin-bottom: 14px; }
94
- .ic.face { background: rgba(56, 189, 248, 0.15); }
95
- .ic.voice { background: rgba(251, 113, 133, 0.15); }
96
- .ic.phq { background: rgba(52, 211, 153, 0.15); }
97
- .card h3 { margin: 0 0 6px; font-size: 1.2rem; }
98
- .card p { margin: 0; color: var(--muted); font-size: 0.95rem; }
 
 
 
 
99
 
100
  /* ---------- panel ---------- */
101
- .panel {
102
- background: linear-gradient(180deg, var(--surface), var(--bg-soft));
103
- border: 1px solid var(--border);
104
- border-radius: var(--radius);
105
- padding: 28px;
106
- box-shadow: var(--shadow);
107
- }
108
  .center { text-align: center; }
109
 
110
  /* ---------- buttons ---------- */
111
  .btn {
112
  display: inline-flex; align-items: center; gap: 8px; justify-content: center;
113
- font: inherit; font-weight: 600; font-size: 1rem;
114
- padding: 12px 22px; border-radius: 12px; border: 1px solid transparent;
115
- cursor: pointer; text-decoration: none; transition: all 0.15s ease; color: #fff;
116
  }
117
- .btn:disabled { opacity: 0.45; cursor: not-allowed; }
118
- .btn-primary { background: linear-gradient(120deg, var(--primary), var(--primary-2)); }
119
- .btn-primary:not(:disabled):hover { filter: brightness(1.08); transform: translateY(-1px); }
120
- .btn-face { background: linear-gradient(120deg, #0ea5e9, #38bdf8); }
121
- .btn-voice { background: linear-gradient(120deg, #f43f5e, #fb7185); }
122
- .btn-ghost { background: var(--surface-2); border-color: var(--border); color: var(--text); }
123
- .btn-ghost:not(:disabled):hover { border-color: #3a5273; }
 
 
 
124
 
125
  /* ---------- media capture ---------- */
126
- .stage { position: relative; display: inline-block; border-radius: 14px; overflow: hidden; border: 1px solid var(--border); max-width: 100%; }
127
  .stage video { display: block; background: #000; width: 100%; height: auto; max-width: 640px; }
128
  .stage canvas { position: absolute; left: 0; top: 0; width: 100%; height: 100%; }
129
- .controls { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin: 20px 0 8px; }
130
 
131
- .status { color: var(--muted); min-height: 1.5em; margin: 8px 0; }
132
- .result {
133
- font-size: 1.5rem; font-weight: 800; margin: 12px 0 0; letter-spacing: -0.01em;
134
- }
135
  .result:empty { display: none; }
136
 
137
- /* signal chips */
138
- .chips { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-top: 16px; }
139
- .chip { font-size: 0.85rem; padding: 6px 12px; border-radius: 999px; border: 1px solid var(--border); background: var(--surface-2); color: var(--muted); }
140
- .chip b { color: var(--text); }
141
 
142
- /* mic pulse */
143
  .mic-orb {
144
- width: 92px; height: 92px; border-radius: 50%; margin: 6px auto 18px;
145
- display: grid; place-items: center; font-size: 2rem;
146
- background: rgba(251, 113, 133, 0.14); border: 1px solid rgba(251, 113, 133, 0.4);
147
  }
148
  .mic-orb.recording { animation: pulse 1.1s ease-in-out infinite; }
149
  @keyframes pulse {
150
- 0% { box-shadow: 0 0 0 0 rgba(251, 113, 133, 0.45); }
151
- 70% { box-shadow: 0 0 0 20px rgba(251, 113, 133, 0); }
152
- 100% { box-shadow: 0 0 0 0 rgba(251, 113, 133, 0); }
153
  }
154
- audio { width: 100%; max-width: 420px; margin-top: 14px; }
155
 
156
  /* ---------- PHQ-9 ---------- */
157
- .q { border: 1px solid var(--border); border-radius: 14px; padding: 16px 18px; margin-bottom: 14px; background: var(--surface); }
158
- .q-text { font-weight: 600; margin-bottom: 12px; }
159
- .q-text .num { color: var(--muted); margin-right: 8px; }
160
- .opts { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
 
161
  .opt { position: relative; }
162
  .opt input { position: absolute; opacity: 0; inset: 0; cursor: pointer; }
163
  .opt span {
164
- display: block; text-align: center; padding: 10px 6px; border-radius: 10px;
165
- border: 1px solid var(--border); background: var(--surface-2); color: var(--muted);
166
- font-size: 0.85rem; cursor: pointer; transition: all 0.12s ease;
167
  }
168
- .opt input:checked + span { border-color: var(--phq); background: rgba(52, 211, 153, 0.16); color: var(--text); font-weight: 600; }
169
- .opt:hover span { border-color: #3a5273; }
170
 
171
- .scorecard { margin-top: 20px; padding: 22px; border-radius: 14px; border: 1px solid var(--border); background: var(--surface-2); }
172
  .scorecard:empty { display: none; }
173
- .score-num { font-size: 2.4rem; font-weight: 800; }
174
- .sev { display: inline-block; padding: 4px 12px; border-radius: 999px; font-weight: 600; font-size: 0.9rem; }
175
- .sev-minimal { background: rgba(52,211,153,0.18); color: #6ee7b7; }
176
- .sev-mild { background: rgba(250,204,21,0.16); color: #fde047; }
177
- .sev-moderate { background: rgba(251,146,60,0.16); color: #fdba74; }
178
- .sev-modsevere { background: rgba(248,113,113,0.16); color: #fca5a5; }
179
- .sev-severe { background: rgba(239,68,68,0.22); color: #fecaca; }
180
- .crisis { margin-top: 14px; padding: 14px 16px; border-radius: 12px; border: 1px solid rgba(248,113,113,0.4); background: rgba(248,113,113,0.1); color: #fecaca; font-size: 0.92rem; }
181
-
182
- /* ---------- disclaimer / footer ---------- */
183
- .note { color: var(--muted); font-size: 0.9rem; max-width: 640px; margin: 18px auto 0; }
184
- .site-footer { border-top: 1px solid var(--border); padding: 22px 0; color: var(--muted); font-size: 0.88rem; }
185
- .site-footer p { margin: 0; text-align: center; }
186
-
187
- @media (max-width: 560px) {
 
 
 
 
 
188
  .opts { grid-template-columns: repeat(2, 1fr); }
189
- .brand-accent { display: none; }
190
- .nav a { padding: 8px 10px; }
191
  }
 
1
  :root {
2
+ --paper: #f3eee3; /* warm cream */
3
+ --paper-2: #fbf8f1; /* card surface */
4
+ --ink: #211f1a; /* near-black, warm */
5
+ --ink-soft: #5d584d; /* muted */
6
+ --line: #ddd3c1; /* warm hairline */
7
+ --line-strong: #c7bba3;
8
+ --pine: #2c6e54; /* primary accent */
9
+ --pine-deep: #1f5240;
10
+ --clay: #bd5d39; /* secondary accent */
11
+ --ochre: #b9892f; /* tertiary accent */
12
+ --danger: #a3331f;
13
+ --radius: 4px;
14
+ --maxw: 1060px;
15
+ --serif: "Fraunces", Georgia, "Times New Roman", serif;
16
+ --sans: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
 
17
  }
18
 
19
  * { box-sizing: border-box; }
 
20
  html, body { margin: 0; padding: 0; }
21
 
22
  body {
23
+ background-color: var(--paper);
24
+ background-image:
25
+ linear-gradient(var(--line) 1px, transparent 1px),
26
+ linear-gradient(90deg, var(--line) 1px, transparent 1px);
27
+ background-size: 100% 100%, 0 0; /* grid hook, kept subtle/off by default */
28
+ color: var(--ink);
29
+ font-family: var(--sans);
30
+ font-size: 17px;
31
+ line-height: 1.65;
32
  min-height: 100vh;
33
  display: flex;
34
  flex-direction: column;
35
+ -webkit-font-smoothing: antialiased;
36
  }
37
 
38
+ .container { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 24px; }
39
 
40
+ /* ---------- header ---------- */
41
+ .site-header { border-bottom: 1px solid var(--line-strong); background: var(--paper); }
42
+ .header-inner { display: flex; align-items: baseline; justify-content: space-between; height: 70px; max-width: var(--maxw); margin: 0 auto; padding: 0 24px; }
43
+ .brand { font-family: var(--serif); font-weight: 600; font-size: 1.4rem; letter-spacing: -0.01em; text-decoration: none; color: var(--ink); }
44
+ .brand-mark { color: var(--pine); margin-right: 2px; }
45
+ .brand-accent { font-style: italic; color: var(--ink-soft); font-weight: 400; }
46
+ .nav { display: flex; gap: 22px; }
 
 
 
 
 
 
 
47
  .nav a {
48
+ position: relative; color: var(--ink-soft); text-decoration: none; font-weight: 500;
49
+ font-size: 0.92rem; letter-spacing: 0.02em; text-transform: uppercase; padding: 4px 0;
50
+ }
51
+ .nav a:hover { color: var(--ink); }
52
+ .nav a.active { color: var(--ink); }
53
+ .nav a.active::after {
54
+ content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 2px; background: var(--clay);
55
  }
 
 
56
 
57
  /* ---------- layout ---------- */
58
+ .main { flex: 1; width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 48px 24px 72px; }
59
+ .page-title { font-family: var(--serif); font-weight: 600; font-size: 2.4rem; line-height: 1.1; letter-spacing: -0.02em; margin: 0 0 10px; }
60
+ .page-sub { color: var(--ink-soft); font-size: 1.05rem; margin: 0 0 32px; max-width: 60ch; }
61
 
62
  /* ---------- hero ---------- */
63
+ .hero { padding: 28px 0 8px; border-bottom: 1px solid var(--line-strong); margin-bottom: 8px; }
64
+ .eyebrow { font-size: 0.8rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--clay); font-weight: 600; margin: 0 0 18px; }
65
+ .hero h1 { font-family: var(--serif); font-weight: 600; font-size: clamp(2.6rem, 6vw, 4.6rem); line-height: 1.02; letter-spacing: -0.03em; margin: 0 0 22px; max-width: 16ch; }
66
+ .hero h1 .grad { font-style: italic; color: var(--pine); }
67
+ .hero p { color: var(--ink-soft); font-size: 1.2rem; max-width: 56ch; margin: 0 0 30px; }
68
+ .hero-cta { display: flex; gap: 14px; flex-wrap: wrap; }
69
+
70
+ /* ---------- editorial index cards ---------- */
71
+ .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 0; margin-top: 52px; border-top: 1px solid var(--line-strong); }
 
 
72
  .card {
73
+ position: relative; padding: 30px 26px 30px 0; text-decoration: none; color: var(--ink);
74
+ border-bottom: 1px solid var(--line); display: block; transition: padding-left 0.2s ease;
 
 
 
 
 
 
75
  }
76
+ .grid .card { border-right: 1px solid var(--line); padding-left: 22px; }
77
+ .grid .card:last-child { border-right: none; }
78
+ a.card:hover { padding-left: 30px; }
79
+ a.card:hover .card-no { color: var(--clay); }
80
+ .card-no { font-family: var(--serif); font-size: 1.1rem; color: var(--line-strong); font-weight: 600; display: block; margin-bottom: 16px; transition: color 0.2s ease; }
81
+ .card h3 { font-family: var(--serif); font-weight: 600; font-size: 1.5rem; margin: 0 0 8px; letter-spacing: -0.01em; }
82
+ .card p { margin: 0; color: var(--ink-soft); font-size: 0.98rem; }
83
+ .card .arrow { margin-top: 16px; color: var(--pine); font-weight: 600; font-size: 0.9rem; letter-spacing: 0.04em; text-transform: uppercase; }
84
+
85
+ /* keep old emoji-circle hook harmless if present */
86
+ .ic { display: none; }
87
 
88
  /* ---------- panel ---------- */
89
+ .panel { background: var(--paper-2); border: 1px solid var(--line-strong); border-radius: var(--radius); padding: 32px; }
 
 
 
 
 
 
90
  .center { text-align: center; }
91
 
92
  /* ---------- buttons ---------- */
93
  .btn {
94
  display: inline-flex; align-items: center; gap: 8px; justify-content: center;
95
+ font-family: var(--sans); font-weight: 600; font-size: 0.98rem; letter-spacing: 0.01em;
96
+ padding: 13px 26px; border-radius: 2px; border: 1px solid var(--ink); cursor: pointer;
97
+ text-decoration: none; transition: all 0.15s ease; background: var(--ink); color: var(--paper);
98
  }
99
+ .btn:disabled { opacity: 0.4; cursor: not-allowed; }
100
+ .btn:not(:disabled):hover { transform: translate(-2px, -2px); box-shadow: 4px 4px 0 var(--ink); }
101
+ .btn-primary { background: var(--pine); border-color: var(--pine-deep); color: #fff; }
102
+ .btn-primary:not(:disabled):hover { box-shadow: 4px 4px 0 var(--pine-deep); }
103
+ .btn-face { background: var(--pine); border-color: var(--pine-deep); color: #fff; }
104
+ .btn-face:not(:disabled):hover { box-shadow: 4px 4px 0 var(--pine-deep); }
105
+ .btn-voice { background: var(--clay); border-color: #8f4225; color: #fff; }
106
+ .btn-voice:not(:disabled):hover { box-shadow: 4px 4px 0 #8f4225; }
107
+ .btn-ghost { background: transparent; color: var(--ink); border-color: var(--line-strong); }
108
+ .btn-ghost:not(:disabled):hover { border-color: var(--ink); box-shadow: 4px 4px 0 var(--line-strong); }
109
 
110
  /* ---------- media capture ---------- */
111
+ .stage { position: relative; display: inline-block; overflow: hidden; border: 1px solid var(--ink); max-width: 100%; background: #000; }
112
  .stage video { display: block; background: #000; width: 100%; height: auto; max-width: 640px; }
113
  .stage canvas { position: absolute; left: 0; top: 0; width: 100%; height: 100%; }
114
+ .controls { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; margin: 22px 0 8px; }
115
 
116
+ .status { color: var(--ink-soft); min-height: 1.5em; margin: 8px 0; }
117
+ .result { font-family: var(--serif); font-size: 1.7rem; font-weight: 600; margin: 14px 0 0; letter-spacing: -0.01em; color: var(--pine); }
 
 
118
  .result:empty { display: none; }
119
 
120
+ .chips { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-top: 18px; }
121
+ .chip { font-size: 0.82rem; letter-spacing: 0.04em; text-transform: uppercase; padding: 6px 14px; border-radius: 999px; border: 1px solid var(--line-strong); background: var(--paper); color: var(--ink-soft); }
122
+ .chip b { color: var(--ink); font-family: var(--serif); }
 
123
 
 
124
  .mic-orb {
125
+ width: 96px; height: 96px; border-radius: 50%; margin: 4px auto 20px; display: grid; place-items: center;
126
+ font-size: 2.1rem; background: var(--paper); border: 1.5px solid var(--clay);
 
127
  }
128
  .mic-orb.recording { animation: pulse 1.1s ease-in-out infinite; }
129
  @keyframes pulse {
130
+ 0% { box-shadow: 0 0 0 0 rgba(189, 93, 57, 0.4); }
131
+ 70% { box-shadow: 0 0 0 20px rgba(189, 93, 57, 0); }
132
+ 100% { box-shadow: 0 0 0 0 rgba(189, 93, 57, 0); }
133
  }
134
+ audio { width: 100%; max-width: 420px; margin-top: 16px; }
135
 
136
  /* ---------- PHQ-9 ---------- */
137
+ .q { border-bottom: 1px solid var(--line); padding: 20px 0; }
138
+ .q:first-child { padding-top: 4px; }
139
+ .q-text { font-weight: 500; font-size: 1.05rem; margin-bottom: 14px; }
140
+ .q-text .num { font-family: var(--serif); color: var(--clay); margin-right: 10px; font-weight: 600; }
141
+ .opts { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
142
  .opt { position: relative; }
143
  .opt input { position: absolute; opacity: 0; inset: 0; cursor: pointer; }
144
  .opt span {
145
+ display: block; text-align: center; padding: 11px 6px; border-radius: 2px; border: 1px solid var(--line-strong);
146
+ background: var(--paper); color: var(--ink-soft); font-size: 0.86rem; cursor: pointer; transition: all 0.12s ease;
 
147
  }
148
+ .opt input:checked + span { border-color: var(--pine); background: var(--pine); color: #fff; font-weight: 600; }
149
+ .opt:hover span { border-color: var(--ink); }
150
 
151
+ .scorecard { margin-top: 26px; padding: 26px; border: 1px solid var(--ink); border-radius: var(--radius); background: var(--paper); }
152
  .scorecard:empty { display: none; }
153
+ .score-num { font-family: var(--serif); font-size: 3rem; font-weight: 600; line-height: 1; }
154
+ .sev { display: inline-block; padding: 5px 14px; border-radius: 999px; font-weight: 600; font-size: 0.9rem; letter-spacing: 0.02em; border: 1px solid currentColor; }
155
+ .sev-minimal { color: var(--pine); }
156
+ .sev-mild { color: var(--ochre); }
157
+ .sev-moderate { color: var(--clay); }
158
+ .sev-modsevere { color: #a83a1e; }
159
+ .sev-severe { color: var(--danger); }
160
+ .crisis { margin-top: 16px; padding: 16px 18px; border-radius: var(--radius); border: 1px solid var(--danger); background: rgba(163, 51, 31, 0.07); color: var(--danger); font-size: 0.95rem; }
161
+
162
+ /* ---------- misc ---------- */
163
+ .note { color: var(--ink-soft); font-size: 0.92rem; max-width: 64ch; margin: 22px auto 0; }
164
+ .note.center { margin-left: auto; margin-right: auto; }
165
+ .site-footer { border-top: 1px solid var(--line-strong); padding: 26px 0; color: var(--ink-soft); font-size: 0.9rem; background: var(--paper); }
166
+ .site-footer p { margin: 0 auto; text-align: center; max-width: var(--maxw); padding: 0 24px; }
167
+
168
+ @media (max-width: 720px) {
169
+ .grid { grid-template-columns: 1fr; }
170
+ .grid .card { border-right: none; padding-left: 0; }
171
+ }
172
+ @media (max-width: 520px) {
173
  .opts { grid-template-columns: repeat(2, 1fr); }
174
+ .nav { gap: 14px; }
175
+ body { font-size: 16px; }
176
  }
anxiety_app/templates/base.html CHANGED
@@ -6,7 +6,7 @@
6
  <title>{% block title %}AffectScreening{% endblock %}</title>
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
10
  <link rel="stylesheet" href="{{ url_for('static', filename='app.css') }}">
11
  {% block head %}{% endblock %}
12
  </head>
 
6
  <title>{% block title %}AffectScreening{% endblock %}</title>
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,900&family=Work+Sans:wght@400;500;600&display=swap" rel="stylesheet">
10
  <link rel="stylesheet" href="{{ url_for('static', filename='app.css') }}">
11
  {% block head %}{% endblock %}
12
  </head>
anxiety_app/templates/index.html CHANGED
@@ -3,33 +3,41 @@
3
 
4
  {% block content %}
5
  <section class="hero">
6
- <h1>Multimodal <span class="grad">Affect</span> &amp; Well-being Screening</h1>
7
- <p>Recognize emotional cues from your face and voice with deep learning, alongside the
8
- clinically validated PHQ-9 questionnaire all running in your browser.</p>
 
9
  <div class="hero-cta">
10
- <a class="btn btn-primary" href="{{ url_for('main.face') }}">Try face detection</a>
11
  <a class="btn btn-ghost" href="{{ url_for('main.phq') }}">Take the PHQ-9</a>
12
  </div>
13
  </section>
14
 
15
  <div class="grid">
16
  <a class="card" href="{{ url_for('main.face') }}">
17
- <div class="ic face">🙂</div>
18
  <h3>Facial emotion</h3>
19
- <p>Stream your webcam and a CNN (FER2013) classifies expressions in real time.</p>
 
 
20
  </a>
21
  <a class="card" href="{{ url_for('main.voice') }}">
22
- <div class="ic voice">🎙️</div>
23
  <h3>Speech emotion</h3>
24
- <p>Record a few seconds and a 1-D CNN (RAVDESS) predicts gender + emotion from your voice.</p>
 
 
25
  </a>
26
  <a class="card" href="{{ url_for('main.phq') }}">
27
- <div class="ic phq">📋</div>
28
  <h3>PHQ-9 screening</h3>
29
- <p>Answer the standard 9-item depression-screening questionnaire and get a scored result.</p>
 
 
30
  </a>
31
  </div>
32
 
33
- <p class="note center">Emotion recognition is a supplementary cue, <strong>not a diagnosis</strong>.
34
- The PHQ-9 is the only clinically validated component here.</p>
 
35
  {% endblock %}
 
3
 
4
  {% block content %}
5
  <section class="hero">
6
+ <p class="eyebrow">Multimodal emotion recognition · PHQ-9</p>
7
+ <h1>Reading well-being from a <span class="grad">face</span>, a voice, and a questionnaire.</h1>
8
+ <p>A research demo that pairs deep-learning emotion recognition with the clinically
9
+ validated PHQ-9 — all running in your browser, nothing stored.</p>
10
  <div class="hero-cta">
11
+ <a class="btn btn-primary" href="{{ url_for('main.face') }}">Try face detection &rarr;</a>
12
  <a class="btn btn-ghost" href="{{ url_for('main.phq') }}">Take the PHQ-9</a>
13
  </div>
14
  </section>
15
 
16
  <div class="grid">
17
  <a class="card" href="{{ url_for('main.face') }}">
18
+ <span class="card-no">01</span>
19
  <h3>Facial emotion</h3>
20
+ <p>Your webcam streams to a convolutional network trained on FER2013, classifying
21
+ expression frame by frame.</p>
22
+ <div class="arrow">Open &rarr;</div>
23
  </a>
24
  <a class="card" href="{{ url_for('main.voice') }}">
25
+ <span class="card-no">02</span>
26
  <h3>Speech emotion</h3>
27
+ <p>Record a few seconds; a 1-D CNN trained on RAVDESS predicts a combined gender
28
+ and emotion class from your voice.</p>
29
+ <div class="arrow">Open &rarr;</div>
30
  </a>
31
  <a class="card" href="{{ url_for('main.phq') }}">
32
+ <span class="card-no">03</span>
33
  <h3>PHQ-9 screening</h3>
34
+ <p>The standard nine-item depression-screening questionnaire, scored with severity
35
+ bands and guidance.</p>
36
+ <div class="arrow">Open &rarr;</div>
37
  </a>
38
  </div>
39
 
40
+ <p class="note">Emotion recognition is a supplementary signal, <strong>not a diagnosis</strong>.
41
+ The PHQ-9 is the only clinically validated component, and it is a screening aid — not a substitute
42
+ for a clinician.</p>
43
  {% endblock %}