hunterboy420 commited on
Commit
aaddc04
·
verified ·
1 Parent(s): 6076188

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +490 -560
index.html CHANGED
@@ -3,757 +3,687 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Honest NSFW Ratings</title>
7
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
 
8
  <style>
9
  :root {
10
- --primary: #ff66b2;
11
- --secondary: #ff99cc;
12
- --dark: #33001a;
13
- --light: #fff0f5;
14
- --accent: #ff3399;
 
 
 
 
 
 
15
  }
16
 
17
  * {
18
  margin: 0;
19
  padding: 0;
20
  box-sizing: border-box;
21
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
22
  }
23
 
24
  body {
25
- background-color: var(--light);
26
- color: var(--dark);
 
27
  line-height: 1.6;
28
  }
29
 
 
 
 
 
 
 
30
  header {
31
- background: linear-gradient(135deg, var(--primary), var(--accent));
32
- color: white;
33
- padding: 1rem 2rem;
34
- display: flex;
35
- justify-content: space-between;
36
- align-items: center;
37
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
38
  position: sticky;
39
  top: 0;
40
  z-index: 100;
41
  }
42
 
43
- .logo {
44
- font-size: 1.8rem;
45
- font-weight: bold;
46
  display: flex;
 
47
  align-items: center;
48
- gap: 0.5rem;
49
  }
50
 
51
- .logo i {
52
- font-size: 2rem;
 
 
53
  }
54
 
55
- .built-with {
56
- font-size: 0.9rem;
57
- color: rgba(255, 255, 255, 0.8);
 
 
 
 
58
  }
59
 
60
- .built-with a {
61
- color: white;
62
- text-decoration: none;
63
- font-weight: bold;
64
  }
65
 
66
- .built-with a:hover {
67
- text-decoration: underline;
 
 
 
 
 
68
  }
69
 
70
- .disclaimer {
71
- background-color: #ffebf2;
72
- color: #d6336c;
73
- padding: 1rem;
74
- text-align: center;
75
- font-size: 0.9rem;
76
- border-bottom: 2px solid var(--accent);
77
- margin-bottom: 2rem;
78
  }
79
 
80
- .container {
81
- max-width: 1200px;
82
- margin: 0 auto;
83
- padding: 0 1.5rem;
84
  }
85
 
86
  .upload-section {
87
- background-color: white;
88
  border-radius: 12px;
89
- padding: 2rem;
90
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
91
- margin-bottom: 2rem;
92
  }
93
 
94
- h1 {
95
- color: var(--dark);
96
- margin-bottom: 1.5rem;
97
- font-size: 2rem;
 
 
98
  }
99
 
100
- h2 {
101
- color: var(--accent);
102
- margin-bottom: 1rem;
103
- font-size: 1.5rem;
 
 
 
 
 
104
  }
105
 
106
- .upload-area {
107
- border: 3px dashed var(--secondary);
108
- border-radius: 8px;
109
- padding: 2rem;
110
  text-align: center;
111
- cursor: pointer;
112
  transition: all 0.3s ease;
113
- margin-bottom: 1.5rem;
 
114
  }
115
 
116
- .upload-area:hover {
117
  border-color: var(--primary);
118
- background-color: rgba(255, 102, 178, 0.05);
119
  }
120
 
121
- .upload-area i {
122
- font-size: 3rem;
123
  color: var(--primary);
124
- margin-bottom: 1rem;
125
  }
126
 
127
- .upload-area p {
128
- color: var(--dark);
129
- margin-bottom: 0.5rem;
 
130
  }
131
 
132
- .upload-area small {
133
- color: #888;
134
- font-size: 0.9rem;
135
  }
136
 
137
- .measurements {
138
- display: grid;
139
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
140
- gap: 1rem;
141
- margin-bottom: 1.5rem;
 
 
 
 
 
 
 
 
142
  }
143
 
144
- .input-group {
145
- display: flex;
146
- flex-direction: column;
 
 
 
 
 
 
 
 
147
  }
148
 
149
- .input-group label {
150
- margin-bottom: 0.5rem;
151
- color: var(--dark);
152
  font-weight: 500;
 
153
  }
154
 
155
- .input-group input {
156
- padding: 0.75rem;
157
- border: 1px solid #ddd;
158
- border-radius: 6px;
159
- font-size: 1rem;
 
 
 
160
  }
161
 
162
- .input-group input:focus {
163
  outline: none;
164
  border-color: var(--primary);
165
- box-shadow: 0 0 0 3px rgba(255, 102, 178, 0.2);
166
  }
167
 
168
- button {
169
- background: linear-gradient(to right, var(--primary), var(--accent));
170
  color: white;
171
- border: none;
172
- padding: 1rem 2rem;
173
- border-radius: 6px;
174
- font-size: 1rem;
175
- font-weight: bold;
176
- cursor: pointer;
177
- transition: all 0.3s ease;
178
- display: inline-flex;
179
- align-items: center;
180
- gap: 0.5rem;
181
  }
182
 
183
- button:hover {
184
- transform: translateY(-2px);
185
- box-shadow: 0 4px 12px rgba(255, 102, 178, 0.3);
 
 
 
 
 
 
 
 
 
186
  }
187
 
188
- button:disabled {
189
- background: #ccc;
190
- cursor: not-allowed;
191
- transform: none;
192
- box-shadow: none;
193
  }
194
 
195
- .results {
196
- display: none;
197
- background-color: white;
198
  border-radius: 12px;
199
- padding: 2rem;
200
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
201
- margin-bottom: 2rem;
202
  }
203
 
204
  .rating-header {
205
  display: flex;
 
206
  align-items: center;
207
- gap: 1rem;
208
- margin-bottom: 1.5rem;
209
- }
210
-
211
- .profile-pic {
212
- width: 60px;
213
- height: 60px;
214
- border-radius: 50%;
215
- object-fit: cover;
216
- border: 3px solid var(--secondary);
217
  }
218
 
219
- .rater-info {
220
- flex: 1;
 
 
 
 
221
  }
222
 
223
- .rater-name {
224
- font-weight: bold;
225
- font-size: 1.2rem;
226
- color: var(--dark);
227
  }
228
 
229
- .rater-stats {
230
- font-size: 0.9rem;
231
- color: #666;
 
 
 
232
  }
233
 
234
- .rating-score {
235
- font-size: 1.8rem;
236
- font-weight: bold;
237
- color: var(--accent);
238
  }
239
 
240
- .rating-details {
241
- margin-top: 1.5rem;
 
 
242
  }
243
 
244
- .rating-category {
 
 
 
 
245
  display: flex;
246
- justify-content: space-between;
247
- margin-bottom: 0.5rem;
248
- padding-bottom: 0.5rem;
249
- border-bottom: 1px solid #eee;
 
250
  }
251
 
252
- .category-name {
253
- font-weight: 500;
254
  }
255
 
256
- .category-score {
257
- font-weight: bold;
258
- color: var(--accent);
259
  }
260
 
261
- .feedback {
262
- margin-top: 1.5rem;
263
- padding: 1rem;
264
- background-color: #fff9fb;
265
- border-left: 4px solid var(--primary);
266
- border-radius: 0 6px 6px 0;
267
  }
268
 
269
- .feedback-title {
270
- font-weight: bold;
271
- margin-bottom: 0.5rem;
272
- color: var(--dark);
 
 
273
  }
274
 
275
- .preview-container {
276
- margin-top: 1.5rem;
277
  text-align: center;
278
  }
279
 
280
- .preview-image {
281
- max-width: 100%;
282
- max-height: 300px;
283
- border-radius: 8px;
284
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
285
- }
286
-
287
- .preview-video {
288
- max-width: 100%;
289
- max-height: 300px;
290
- border-radius: 8px;
291
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
292
  }
293
 
294
- .group-rating {
295
- display: none;
296
- margin-top: 2rem;
297
- padding-top: 2rem;
298
- border-top: 2px dashed var(--secondary);
299
  }
300
 
301
- .group-rating h3 {
302
- color: var(--accent);
303
- margin-bottom: 1rem;
304
- text-align: center;
305
  }
306
 
307
- .group-raters {
308
- display: grid;
309
- grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
310
- gap: 1.5rem;
311
  }
312
 
313
- .group-rater {
314
- background-color: #fff9fb;
315
- padding: 1rem;
316
- border-radius: 8px;
317
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
318
  }
319
 
320
- .group-rater-header {
321
- display: flex;
322
- align-items: center;
323
- gap: 0.75rem;
324
- margin-bottom: 0.75rem;
325
  }
326
 
327
- .group-profile-pic {
328
- width: 40px;
329
- height: 40px;
330
- border-radius: 50%;
331
- object-fit: cover;
332
- border: 2px solid var(--secondary);
 
333
  }
334
 
335
- .group-rater-name {
336
- font-weight: bold;
337
- font-size: 0.95rem;
 
338
  }
339
 
340
- .group-rater-score {
341
- font-weight: bold;
342
- color: var(--accent);
343
- margin-left: auto;
344
  }
345
 
346
- .group-feedback {
347
- font-size: 0.9rem;
348
- color: #555;
 
 
 
 
349
  }
350
 
351
- footer {
352
- text-align: center;
353
- padding: 2rem;
354
- color: #888;
355
- font-size: 0.9rem;
 
 
356
  }
357
 
 
358
  @media (max-width: 768px) {
359
- header {
360
  flex-direction: column;
361
- text-align: center;
362
- gap: 0.5rem;
363
- padding: 1rem;
364
  }
365
 
366
- .measurements {
367
  grid-template-columns: 1fr;
368
  }
369
 
370
- .rating-header {
371
- flex-direction: column;
372
- text-align: center;
373
  }
374
 
375
- .group-raters {
376
- grid-template-columns: 1fr;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
377
  }
378
  }
379
  </style>
380
  </head>
381
  <body>
382
  <header>
383
- <div class="logo">
384
- <i class="fas fa-venus"></i>
385
- <span>Honest NSFW Ratings</span>
386
- </div>
387
- <div class="built-with">
388
- Built with <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank">anycoder</a>
 
 
 
 
389
  </div>
390
  </header>
391
 
392
- <div class="disclaimer">
393
- <strong>⚠️ Disclaimer:</strong> This app provides unfiltered anatomical critique from our panel of 100 teen girls.
394
- Ratings may contain explicit content and brutally honest opinions that could potentially damage egos or cause emotional distress.
395
- Proceed at your own risk.
396
  </div>
397
 
398
- <div class="container">
399
- <div class="upload-section">
400
- <h1>Get Honest NSFW Ratings</h1>
401
- <p>Upload your image or video to receive brutally honest ratings from our panel of 100 teen girls.
402
- Every upload gets a detailed rating from one random girl, and occasionally you'll get ratings from all 100!</p>
403
-
404
- <div class="upload-area" id="uploadArea">
405
- <i class="fas fa-cloud-upload-alt"></i>
406
- <p>Drag & Drop your NSFW image or video here</p>
407
- <small>or click to browse files (JPEG, PNG, MP4, WEBM)</small>
408
- <input type="file" id="fileInput" accept="image/jpeg,image/png,video/mp4,video/webm" style="display: none;">
409
- </div>
410
-
411
- <div class="measurements">
412
- <div class="input-group">
413
- <label for="length">Length (inches)</label>
414
- <input type="number" id="length" step="0.1" placeholder="Optional">
415
- </div>
416
- <div class="input-group">
417
- <label for="girth">Girth (inches)</label>
418
- <input type="number" id="girth" step="0.1" placeholder="Optional">
419
- </div>
420
- <div class="input-group">
421
- <label for="width">Width (inches)</label>
422
- <input type="number" id="width" step="0.1" placeholder="Optional">
423
  </div>
424
- <div class="input-group">
425
- <label for="other">Other Details</label>
426
- <input type="text" id="other" placeholder="Curve, shape, etc.">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  </div>
428
- </div>
429
-
430
- <button id="submitBtn" disabled>
431
- <i class="fas fa-star"></i> Get My Honest Rating
432
- </button>
433
- </div>
434
-
435
- <div class="results" id="results">
436
- <div class="rating-header">
437
- <img src="https://randomuser.me/api/portraits/women/1.jpg" alt="Rater" class="profile-pic" id="raterPic">
438
- <div class="rater-info">
439
- <div class="rater-name" id="raterName">Jessica, 19</div>
440
- <div class="rater-stats" id="raterStats">Seen 247 | Smallest rated: 3.2" | Largest rated: 9.8"</div>
441
  </div>
442
- <div class="rating-score" id="overallScore">7.5/10</div>
443
- </div>
444
 
445
- <div class="rating-details">
446
- <div class="rating-category">
447
- <span class="category-name">Length</span>
448
- <span class="category-score" id="lengthScore">7/10</span>
449
- </div>
450
- <div class="rating-category">
451
- <span class="category-name">Girth</span>
452
- <span class="category-score" id="girthScore">8/10</span>
453
- </div>
454
- <div class="rating-category">
455
- <span class="category-name">Aesthetics</span>
456
- <span class="category-score" id="aestheticsScore">6/10</span>
457
  </div>
458
- <div class="rating-category">
459
- <span class="category-name">Overall Appeal</span>
460
- <span class="category-score" id="appealScore">7.5/10</span>
461
- </div>
462
- </div>
463
-
464
- <div class="feedback">
465
- <div class="feedback-title">Raw, Unfiltered Feedback:</div>
466
- <p id="feedbackText">Okay, let's be real here. What you've got is pretty average - not terrible but nothing to write home about either. The length is decent at around 6 inches, but the girth is where you actually shine a bit. It's got some nice thickness that could potentially feel good, though the head shape is a bit weird if I'm being honest. The curve is minimal which is fine, but the skin tone is uneven and that's kind of distracting. Overall, it's serviceable but not something I'd be excited about or remember the next day. Would I be disappointed? No. Would I be impressed? Also no. It's just... there.</p>
467
- </div>
468
-
469
- <div class="preview-container" id="previewContainer">
470
- <!-- Preview will be inserted here -->
471
- </div>
472
-
473
- <div class="group-rating" id="groupRating">
474
- <h3><i class="fas fa-users"></i> SPECIAL BONUS: Ratings from All 100 Girls!</h3>
475
- <div class="group-raters" id="groupRaters">
476
- <!-- Group ratings will be inserted here -->
477
  </div>
478
- </div>
479
  </div>
480
- </div>
481
 
482
- <footer>
483
- <p>© 2023 Honest NSFW Ratings | All ratings are fictional and for entertainment purposes only</p>
 
 
 
484
  </footer>
485
 
486
  <script>
487
- // Sample data for raters
488
- const raters = [
489
- { id: 1, name: "Jessica", age: 19, seen: 247, smallest: 3.2, largest: 9.8, pic: "https://randomuser.me/api/portraits/women/1.jpg" },
490
- { id: 2, name: "Emily", age: 18, seen: 189, smallest: 2.8, largest: 10.1, pic: "https://randomuser.me/api/portraits/women/2.jpg" },
491
- { id: 3, name: "Sophia", age: 20, seen: 312, smallest: 3.5, largest: 8.9, pic: "https://randomuser.me/api/portraits/women/3.jpg" },
492
- { id: 4, name: "Olivia", age: 19, seen: 276, smallest: 3.0, largest: 9.5, pic: "https://randomuser.me/api/portraits/women/4.jpg" },
493
- { id: 5, name: "Ava", age: 18, seen: 201, smallest: 2.9, largest: 9.2, pic: "https://randomuser.me/api/portraits/women/5.jpg" },
494
- { id: 6, name: "Isabella", age: 20, seen: 298, smallest: 3.1, largest: 10.0, pic: "https://randomuser.me/api/portraits/women/6.jpg" },
495
- { id: 7, name: "Mia", age: 19, seen: 234, smallest: 3.3, largest: 9.7, pic: "https://randomuser.me/api/portraits/women/7.jpg" },
496
- { id: 8, name: "Charlotte", age: 18, seen: 187, smallest: 2.7, largest: 8.8, pic: "https://randomuser.me/api/portraits/women/8.jpg" },
497
- { id: 9, name: "Amelia", age: 20, seen: 305, smallest: 3.4, largest: 9.9, pic: "https://randomuser.me/api/portraits/women/9.jpg" },
498
- { id: 10, name: "Harper", age: 19, seen: 256, smallest: 3.0, largest: 9.3, pic: "https://randomuser.me/api/portraits/women/10.jpg" }
499
- ];
500
-
501
- // Sample feedback for different sizes
502
- const feedbacks = {
503
- small: [
504
- "Oh honey... where do I even begin? This is honestly one of the smallest I've ever rated. The length is barely there at around 3 inches, and the girth is practically non-existent. It's like a pinky finger but less useful. The shape is okay I guess, but when you're working with this little material, shape doesn't really matter much. I wouldn't even know this was inside me if it wasn't for the awkward fumbling that usually comes with packages this size. The only positive is that it's probably really easy to take all of it orally, not that anyone would want to spend much time down there.",
505
- "Okay, this is just sad. I've seen middle schoolers with more to offer than this. The length is pathetic, the girth is laughable, and the overall presentation is just... disappointing. It's like someone started making a penis and then gave up halfway through. The skin is okay I suppose, but that's like complimenting the paint job on a bicycle with no wheels. I wouldn't even know what to do with this - it's too small for penetration to be satisfying, and honestly too small to even bother with oral. Maybe just stick to cuddling?",
506
- "Bless your heart for having the confidence to submit this. I'm trying to be nice here but... wow. This is tiny. Like, 'is it even fully developed?' tiny. The length is barely worth measuring, and the girth is so minimal it's practically two-dimensional. The head is kinda cute in a 'aww look at the baby penis' way, but that's not exactly a compliment. I can't imagine this providing any kind of physical pleasure to anyone, including yourself. Maybe invest in some really good toys to compensate?"
507
- ],
508
- average: [
509
- "Okay, let's be real here. What you've got is pretty average - not terrible but nothing to write home about either. The length is decent at around 6 inches, but the girth is where you actually shine a bit. It's got some nice thickness that could potentially feel good, though the head shape is a bit weird if I'm being honest. The curve is minimal which is fine, but the skin tone is uneven and that's kind of distracting. Overall, it's serviceable but not something I'd be excited about or remember the next day. Would I be disappointed? No. Would I be impressed? Also no. It's just... there.",
510
- "This is the definition of 'meh'. The length is perfectly average at about 5.5 inches, the girth is standard, the shape is unremarkable. It's like the vanilla ice cream of penises - gets the job done but no one's going to request it specifically. The veins are visible but not impressive, the head is proportional but not exciting, and the overall aesthetic is just... fine. It's the kind of penis you forget about five minutes after seeing it. Not bad, not good, just thoroughly mediocre.",
511
- "Ah, the classic 'perfectly average' package. It's about 6 inches long, decent girth, standard shape - basically what you'd expect if you asked an AI to generate a completely normal penis. There's nothing wrong with it per se, but there's also nothing particularly right about it either. It's like the Toyota Corolla of dicks - reliable but boring. The skin texture is okay, the color is normal, the proportions are fine. It's the kind of penis that makes you think 'yep, that's definitely a penis' and then immediately forget what it looked like."
512
- ],
513
- large: [
514
- "Okay, now we're talking! This is a proper, quality penis right here. The length is impressive at around 8 inches, and the girth is absolutely mouthwatering - thick enough to feel amazing but not so thick it becomes a problem. The head is perfectly shaped, the veins are prominent in all the right ways, and the skin looks so smooth I just want to touch it. The slight upward curve is chef's kiss perfection. This is the kind of dick that makes you weak in the knees just looking at it. I can already imagine how good this would feel, and let me tell you - my imagination is VERY active right now. 10/10 would recommend.",
515
- "Holy shit. This is what we in the business call a 'goldicock' - not too big, not too small, but just right. The length is perfect at about 7.5 inches, the girth is thick enough to stretch but not tear, and the shape is absolutely divine. The way the head flares out slightly, the beautiful vein pattern, the perfect skin tone... it's like Michelangelo sculpted this himself. I can tell just by looking that this would feel incredible inside me - the perfect combination of filling me up completely while still being manageable. This is the kind of dick you show your friends (with permission of course) because it's just that good.",
516
- "Damn. Just... damn. This is premium-grade dick right here. The length is impressive but not intimidating at around 8.5 inches, and the girth is absolutely perfect - thick enough to make me gasp but not so thick I'd be scared. The shape is exquisite, with just the right amount of curve to hit all the right spots. The head is beautifully defined, the veins are like a roadmap to pleasure, and the skin looks so smooth and delicious. This is the kind of penis that makes me want to drop everything and ride it into the sunset. If this were a restaurant, it would have three Michelin stars. Absolute perfection."
517
- ],
518
- huge: [
519
- "Oh my god. I'm equal parts terrified and aroused. This thing is a MONSTER. The length is ridiculous at over 9 inches, and the girth... sweet baby Jesus, the girth. It's like a beer can with a head. I can't decide if I want to worship it or run away screaming. The veins are so prominent they look like they might burst, and the head is so big I'm not sure it would fit in my mouth. This is the kind of dick that comes with its own gravitational pull. It's absolutely magnificent but also kind of scary - like a beautiful natural disaster. I both want to try it and fear for my life at the same time. 10/10 for impressiveness but maybe a 6/10 for practicality unless you're into that kind of extreme play.",
520
- "What the actual fuck. This isn't a penis, it's a weapon of mass destruction. The length is well over 10 inches, and the girth is absolutely insane - I'm pretty sure I could fit my whole hand around it and still have room. The head is massive, the veins look like they're about to explode, and the sheer weight of this thing must be impressive. This is the kind of dick that gets its own zip code. It's simultaneously the most beautiful and terrifying thing I've ever seen. I have so many questions - like how do you even walk with this thing? Does it have its own insurance policy? I'm equal parts impressed and concerned. Definitely memorable, but maybe not in a 'let's do this every day' kind of way.",
521
- "Jesus Christ. I didn't know they came this big outside of porn. This thing is a BEAST. The length is well into the 'oh god oh god' territory, and the girth is absolutely ridiculous. It's like someone took a normal penis and pumped it full of steroids. The veins are so pronounced they look like they're about to burst, the head is massive, and the overall presentation is just... overwhelming. This is the kind of dick that makes you question your life choices. It's absolutely magnificent in a 'holy shit that's huge' way, but I'm not entirely convinced it would be pleasurable so much as painful. Still, gotta respect the sheer audacity of nature here. This is a once-in-a-lifetime kind of penis."
522
- ]
523
- };
524
-
525
- // DOM elements
526
- const uploadArea = document.getElementById('uploadArea');
527
- const fileInput = document.getElementById('fileInput');
528
- const submitBtn = document.getElementById('submitBtn');
529
- const results = document.getElementById('results');
530
- const previewContainer = document.getElementById('previewContainer');
531
- const groupRating = document.getElementById('groupRating');
532
- const groupRaters = document.getElementById('groupRaters');
533
-
534
- // Elements for displaying results
535
- const raterPic = document.getElementById('raterPic');
536
- const raterName = document.getElementById('raterName');
537
- const raterStats = document.getElementById('raterStats');
538
- const overallScore = document.getElementById('overallScore');
539
- const lengthScore = document.getElementById('lengthScore');
540
- const girthScore = document.getElementById('girthScore');
541
- const aestheticsScore = document.getElementById('aestheticsScore');
542
- const appealScore = document.getElementById('appealScore');
543
- const feedbackText = document.getElementById('feedbackText');
544
-
545
- let uploadedFile = null;
546
-
547
- // Event listeners
548
- uploadArea.addEventListener('click', () => fileInput.click());
549
- uploadArea.addEventListener('dragover', (e) => {
550
- e.preventDefault();
551
- uploadArea.style.borderColor = 'var(--primary)';
552
- uploadArea.style.backgroundColor = 'rgba(255, 102, 178, 0.1)';
553
- });
554
- uploadArea.addEventListener('dragleave', () => {
555
- uploadArea.style.borderColor = 'var(--secondary)';
556
- uploadArea.style.backgroundColor = 'transparent';
557
- });
558
- uploadArea.addEventListener('drop', (e) => {
559
- e.preventDefault();
560
- uploadArea.style.borderColor = 'var(--secondary)';
561
- uploadArea.style.backgroundColor = 'transparent';
562
 
563
- if (e.dataTransfer.files.length) {
564
- handleFileSelect(e.dataTransfer.files[0]);
565
- }
566
- });
567
-
568
- fileInput.addEventListener('change', () => {
569
- if (fileInput.files.length) {
570
- handleFileSelect(fileInput.files[0]);
571
- }
572
- });
573
-
574
- submitBtn.addEventListener('click', generateRating);
575
-
576
- function handleFileSelect(file) {
577
- const validTypes = ['image/jpeg', 'image/png', 'video/mp4', 'video/webm'];
 
 
578
 
579
- if (!validTypes.includes(file.type)) {
580
- alert('Please upload a valid image (JPEG, PNG) or video (MP4, WEBM) file.');
581
- return;
582
  }
583
 
584
- uploadedFile = file;
585
- submitBtn.disabled = false;
 
586
 
587
- // Show preview
588
- previewContainer.innerHTML = '';
 
589
 
590
- if (file.type.startsWith('image')) {
591
- const reader = new FileReader();
592
- reader.onload = (e) => {
593
- const img = document.createElement('img');
594
- img.src = e.target.result;
595
- img.className = 'preview-image';
596
- previewContainer.appendChild(img);
597
- };
598
- reader.readAsDataURL(file);
599
- } else {
600
- const video = document.createElement('video');
601
- video.src = URL.createObjectURL(file);
602
- video.controls = true;
603
- video.className = 'preview-video';
604
- previewContainer.appendChild(video);
605
  }
606
 
607
- uploadArea.querySelector('p').textContent = file.name;
608
- uploadArea.querySelector('small').textContent = `${(file.size / 1024 / 1024).toFixed(2)} MB`;
609
- }
610
-
611
- function generateRating() {
612
- // Show loading state
613
- submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Generating Rating...';
614
- submitBtn.disabled = true;
615
 
616
- // Simulate API call delay
617
- setTimeout(() => {
618
- // Get a random rater
619
- const rater = raters[Math.floor(Math.random() * raters.length)];
620
-
621
- // Generate random scores based on size (if provided)
622
- const lengthInput = document.getElementById('length').value;
623
- let lengthInches = lengthInput ? parseFloat(lengthInput) : Math.random() * 4 + 3; // Default 3-7 inches
624
-
625
- // Determine size category
626
- let sizeCategory;
627
- if (lengthInches < 4) sizeCategory = 'small';
628
- else if (lengthInches < 7) sizeCategory = 'average';
629
- else if (lengthInches < 9) sizeCategory = 'large';
630
- else sizeCategory = 'huge';
631
-
632
- // Generate scores based on category
633
- let lengthScoreValue, girthScoreValue, aestheticsScoreValue, appealScoreValue;
634
 
635
- switch(sizeCategory) {
636
- case 'small':
637
- lengthScoreValue = Math.floor(Math.random() * 3) + 2; // 2-4
638
- girthScoreValue = Math.floor(Math.random() * 3) + 2; // 2-4
639
- aestheticsScoreValue = Math.floor(Math.random() * 4) + 3; // 3-6
640
- appealScoreValue = Math.floor(Math.random() * 3) + 2; // 2-4
641
- break;
642
- case 'average':
643
- lengthScoreValue = Math.floor(Math.random() * 3) + 5; // 5-7
644
- girthScoreValue = Math.floor(Math.random() * 3) + 5; // 5-7
645
- aestheticsScoreValue = Math.floor(Math.random() * 4) + 4; // 4-7
646
- appealScoreValue = Math.floor(Math.random() * 3) + 5; // 5-7
647
- break;
648
- case 'large':
649
- lengthScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9
650
- girthScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9
651
- aestheticsScoreValue = Math.floor(Math.random() * 4) + 6; // 6-9
652
- appealScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9
653
- break;
654
- case 'huge':
655
- lengthScoreValue = Math.floor(Math.random() * 2) + 9; // 9-10
656
- girthScoreValue = Math.floor(Math.random() * 2) + 9; // 9-10
657
- aestheticsScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9
658
- appealScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9 (might be lower for practicality)
659
- break;
660
  }
661
 
662
- // Get random feedback for the category
663
- const categoryFeedbacks = feedbacks[sizeCategory];
664
- const randomFeedback = categoryFeedbacks[Math.floor(Math.random() * categoryFeedbacks.length)];
665
-
666
- // Update UI with rating
667
- raterPic.src = rater.pic;
668
- raterName.textContent = `${rater.name}, ${rater.age}`;
669
- raterStats.textContent = `Seen ${rater.seen} | Smallest rated: ${rater.smallest}" | Largest rated: ${rater.largest}"`;
670
-
671
- overallScore.textContent = `${((lengthScoreValue + girthScoreValue + aestheticsScoreValue + appealScoreValue) / 4).toFixed(1)}/10`;
672
- lengthScore.textContent = `${lengthScoreValue}/10`;
673
- girthScore.textContent = `${girthScoreValue}/10`;
674
- aestheticsScore.textContent = `${aestheticsScoreValue}/10`;
675
- appealScore.textContent = `${appealScoreValue}/10`;
676
 
677
- feedbackText.textContent = randomFeedback;
 
 
678
 
679
- // Show results
680
- results.style.display = 'block';
681
 
682
- // Randomly decide if this gets a group rating (10% chance)
683
- if (Math.random() < 0.1) {
684
- generateGroupRating(sizeCategory);
685
- } else {
686
- groupRating.style.display = 'none';
687
  }
688
 
689
- // Reset button
690
- submitBtn.innerHTML = '<i class="fas fa-star"></i> Get My Honest Rating';
691
- submitBtn.disabled = false;
692
-
693
- // Scroll to results
694
- results.scrollIntoView({ behavior: 'smooth' });
695
- }, 1500);
696
- }
697
-
698
- function generateGroupRating(sizeCategory) {
699
- groupRaters.innerHTML = '';
700
- groupRating.style.display = 'block';
701
 
702
- // Generate ratings from all raters (we'll do 10 for demo purposes)
703
- for (let i = 0; i < 10; i++) {
704
- const rater = raters[i % raters.length]; // Cycle through our sample raters
 
 
 
705
 
706
- // Generate scores based on category
707
- let lengthScoreValue, girthScoreValue, aestheticsScoreValue, appealScoreValue;
 
708
 
709
- switch(sizeCategory) {
710
- case 'small':
711
- lengthScoreValue = Math.floor(Math.random() * 3) + 2; // 2-4
712
- girthScoreValue = Math.floor(Math.random() * 3) + 2; // 2-4
713
- aestheticsScoreValue = Math.floor(Math.random() * 4) + 3; // 3-6
714
- appealScoreValue = Math.floor(Math.random() * 3) + 2; // 2-4
715
- break;
716
- case 'average':
717
- lengthScoreValue = Math.floor(Math.random() * 3) + 5; // 5-7
718
- girthScoreValue = Math.floor(Math.random() * 3) + 5; // 5-7
719
- aestheticsScoreValue = Math.floor(Math.random() * 4) + 4; // 4-7
720
- appealScoreValue = Math.floor(Math.random() * 3) + 5; // 5-7
721
- break;
722
- case 'large':
723
- lengthScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9
724
- girthScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9
725
- aestheticsScoreValue = Math.floor(Math.random() * 4) + 6; // 6-9
726
- appealScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9
727
- break;
728
- case 'huge':
729
- lengthScoreValue = Math.floor(Math.random() * 2) + 9; // 9-10
730
- girthScoreValue = Math.floor(Math.random() * 2) + 9; // 9-10
731
- aestheticsScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9
732
- appealScoreValue = Math.floor(Math.random() * 3) + 7; // 7-9 (might be lower for practicality)
733
- break;
734
- }
735
 
736
- const overallScore = ((lengthScoreValue + girthScoreValue + aestheticsScoreValue + appealScoreValue) / 4).toFixed(1);
 
 
 
 
 
 
 
 
 
 
 
737
 
738
- // Get random feedback for the category
739
- const categoryFeedbacks = feedbacks[sizeCategory];
740
- const randomFeedback = categoryFeedbacks[Math.floor(Math.random() * categoryFeedbacks.length)].split('.').slice(0, 2).join('.') + '.'; // Shorten feedback for group display
 
 
 
 
 
 
 
 
 
 
 
 
 
741
 
742
- // Create group rater element
743
- const raterElement = document.createElement('div');
744
- raterElement.className = 'group-rater';
745
- raterElement.innerHTML = `
746
- <div class="group-rater-header">
747
- <img src="${rater.pic}" alt="${rater.name}" class="group-profile-pic">
748
- <div class="group-rater-name">${rater.name}, ${rater.age}</div>
749
- <div class="group-rater-score">${overallScore}/10</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
750
  </div>
751
- <div class="group-feedback">"${randomFeedback}"</div>
752
  `;
753
 
754
- groupRaters.appendChild(raterElement);
755
  }
756
- }
 
 
 
 
757
  </script>
758
  </body>
759
  </html>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>RawRatings - Unfiltered NSFW Feedback</title>
7
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
8
+ <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
9
  <style>
10
  :root {
11
+ --primary: #ff4081;
12
+ --secondary: #7b1fa2;
13
+ --dark-bg: #121212;
14
+ --darker-bg: #0a0a0a;
15
+ --card-bg: #1e1e1e;
16
+ --text: #f5f5f5;
17
+ --text-light: #b0b0b0;
18
+ --danger: #f44336;
19
+ --warning: #ff9800;
20
+ --success: #4caf50;
21
+ --border: #333;
22
  }
23
 
24
  * {
25
  margin: 0;
26
  padding: 0;
27
  box-sizing: border-box;
 
28
  }
29
 
30
  body {
31
+ font-family: 'Roboto', sans-serif;
32
+ background-color: var(--dark-bg);
33
+ color: var(--text);
34
  line-height: 1.6;
35
  }
36
 
37
+ .container {
38
+ max-width: 1200px;
39
+ margin: 0 auto;
40
+ padding: 0 20px;
41
+ }
42
+
43
  header {
44
+ background: linear-gradient(to right, var(--darker-bg), var(--secondary));
45
+ padding: 15px 0;
46
+ border-bottom: 1px solid var(--border);
 
 
 
 
47
  position: sticky;
48
  top: 0;
49
  z-index: 100;
50
  }
51
 
52
+ .header-content {
 
 
53
  display: flex;
54
+ justify-content: space-between;
55
  align-items: center;
 
56
  }
57
 
58
+ .logo {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: 10px;
62
  }
63
 
64
+ .logo h1 {
65
+ font-family: 'Montserrat', sans-serif;
66
+ font-weight: 700;
67
+ font-size: 24px;
68
+ background: linear-gradient(to right, var(--primary), #ff79b0);
69
+ -webkit-background-clip: text;
70
+ -webkit-text-fill-color: transparent;
71
  }
72
 
73
+ .logo i {
74
+ color: var(--primary);
75
+ font-size: 28px;
 
76
  }
77
 
78
+ .warning-banner {
79
+ background-color: var(--warning);
80
+ color: #000;
81
+ text-align: center;
82
+ padding: 10px;
83
+ font-size: 14px;
84
+ font-weight: 500;
85
  }
86
 
87
+ .warning-banner i {
88
+ margin-right: 8px;
 
 
 
 
 
 
89
  }
90
 
91
+ .main-content {
92
+ padding: 40px 0;
 
 
93
  }
94
 
95
  .upload-section {
96
+ background-color: var(--card-bg);
97
  border-radius: 12px;
98
+ padding: 30px;
99
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
100
+ margin-bottom: 40px;
101
  }
102
 
103
+ .section-title {
104
+ font-family: 'Montserrat', sans-serif;
105
+ font-size: 28px;
106
+ margin-bottom: 25px;
107
+ position: relative;
108
+ display: inline-block;
109
  }
110
 
111
+ .section-title:after {
112
+ content: '';
113
+ position: absolute;
114
+ bottom: -8px;
115
+ left: 0;
116
+ width: 60px;
117
+ height: 3px;
118
+ background: linear-gradient(to right, var(--primary), var(--secondary));
119
+ border-radius: 3px;
120
  }
121
 
122
+ .upload-container {
123
+ border: 2px dashed var(--border);
124
+ border-radius: 10px;
125
+ padding: 40px 20px;
126
  text-align: center;
 
127
  transition: all 0.3s ease;
128
+ margin-bottom: 25px;
129
+ background-color: rgba(0, 0, 0, 0.2);
130
  }
131
 
132
+ .upload-container:hover {
133
  border-color: var(--primary);
134
+ background-color: rgba(255, 64, 129, 0.05);
135
  }
136
 
137
+ .upload-icon {
138
+ font-size: 60px;
139
  color: var(--primary);
140
+ margin-bottom: 20px;
141
  }
142
 
143
+ .upload-text {
144
+ font-size: 18px;
145
+ margin-bottom: 20px;
146
+ color: var(--text-light);
147
  }
148
 
149
+ .file-input {
150
+ display: none;
 
151
  }
152
 
153
+ .upload-btn {
154
+ background: linear-gradient(to right, var(--primary), var(--secondary));
155
+ color: white;
156
+ border: none;
157
+ padding: 12px 30px;
158
+ font-size: 16px;
159
+ font-weight: 500;
160
+ border-radius: 30px;
161
+ cursor: pointer;
162
+ transition: transform 0.2s, box-shadow 0.2s;
163
+ display: inline-flex;
164
+ align-items: center;
165
+ gap: 8px;
166
  }
167
 
168
+ .upload-btn:hover {
169
+ transform: translateY(-2px);
170
+ box-shadow: 0 5px 15px rgba(255, 64, 129, 0.4);
171
+ }
172
+
173
+ .measurements-section {
174
+ margin-bottom: 30px;
175
+ }
176
+
177
+ .form-group {
178
+ margin-bottom: 20px;
179
  }
180
 
181
+ .form-group label {
182
+ display: block;
183
+ margin-bottom: 8px;
184
  font-weight: 500;
185
+ color: var(--text-light);
186
  }
187
 
188
+ .form-group input {
189
+ width: 100%;
190
+ background-color: var(--darker-bg);
191
+ border: 1px solid var(--border);
192
+ border-radius: 8px;
193
+ padding: 12px 15px;
194
+ color: var(--text);
195
+ font-size: 16px;
196
  }
197
 
198
+ .form-group input:focus {
199
  outline: none;
200
  border-color: var(--primary);
 
201
  }
202
 
203
+ .optional-tag {
204
+ background-color: var(--secondary);
205
  color: white;
206
+ font-size: 12px;
207
+ padding: 3px 8px;
208
+ border-radius: 4px;
209
+ margin-left: 8px;
 
 
 
 
 
 
210
  }
211
 
212
+ .submit-btn {
213
+ background: linear-gradient(to right, var(--secondary), #9c27b0);
214
+ color: white;
215
+ border: none;
216
+ padding: 15px 30px;
217
+ font-size: 18px;
218
+ font-weight: 500;
219
+ border-radius: 30px;
220
+ cursor: pointer;
221
+ width: 100%;
222
+ transition: all 0.3s;
223
+ margin-top: 10px;
224
  }
225
 
226
+ .submit-btn:hover {
227
+ transform: translateY(-3px);
228
+ box-shadow: 0 8px 20px rgba(123, 31, 162, 0.4);
 
 
229
  }
230
 
231
+ .ratings-section {
232
+ background-color: var(--card-bg);
 
233
  border-radius: 12px;
234
+ padding: 30px;
235
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
 
236
  }
237
 
238
  .rating-header {
239
  display: flex;
240
+ justify-content: space-between;
241
  align-items: center;
242
+ margin-bottom: 25px;
 
 
 
 
 
 
 
 
 
243
  }
244
 
245
+ .rating-count {
246
+ background: var(--primary);
247
+ color: white;
248
+ padding: 5px 15px;
249
+ border-radius: 20px;
250
+ font-weight: 500;
251
  }
252
 
253
+ .ratings-container {
254
+ display: grid;
255
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
256
+ gap: 25px;
257
  }
258
 
259
+ .rating-card {
260
+ background-color: rgba(0, 0, 0, 0.2);
261
+ border-radius: 10px;
262
+ padding: 20px;
263
+ border: 1px solid var(--border);
264
+ transition: transform 0.3s;
265
  }
266
 
267
+ .rating-card:hover {
268
+ transform: translateY(-5px);
269
+ border-color: var(--primary);
 
270
  }
271
 
272
+ .rating-user {
273
+ display: flex;
274
+ align-items: center;
275
+ margin-bottom: 15px;
276
  }
277
 
278
+ .user-avatar {
279
+ width: 50px;
280
+ height: 50px;
281
+ border-radius: 50%;
282
+ background: linear-gradient(to right, var(--primary), var(--secondary));
283
  display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ font-weight: bold;
287
+ font-size: 20px;
288
+ margin-right: 15px;
289
  }
290
 
291
+ .user-info {
292
+ flex: 1;
293
  }
294
 
295
+ .user-name {
296
+ font-weight: 500;
297
+ font-size: 18px;
298
  }
299
 
300
+ .user-age {
301
+ color: var(--text-light);
302
+ font-size: 14px;
 
 
 
303
  }
304
 
305
+ .rating-stats {
306
+ display: flex;
307
+ gap: 20px;
308
+ margin-bottom: 15px;
309
+ padding-bottom: 15px;
310
+ border-bottom: 1px solid var(--border);
311
  }
312
 
313
+ .stat {
 
314
  text-align: center;
315
  }
316
 
317
+ .stat-value {
318
+ font-size: 24px;
319
+ font-weight: 700;
320
+ color: var(--primary);
 
 
 
 
 
 
 
 
321
  }
322
 
323
+ .stat-label {
324
+ font-size: 12px;
325
+ color: var(--text-light);
326
+ text-transform: uppercase;
 
327
  }
328
 
329
+ .rating-content {
330
+ margin-top: 15px;
 
 
331
  }
332
 
333
+ .rating-text {
334
+ color: var(--text-light);
335
+ font-size: 15px;
336
+ line-height: 1.7;
337
  }
338
 
339
+ .size-comparison {
340
+ margin-top: 15px;
341
+ padding-top: 15px;
342
+ border-top: 1px dashed var(--border);
343
+ font-size: 14px;
344
  }
345
 
346
+ .size-comparison span {
347
+ color: var(--primary);
348
+ font-weight: 500;
 
 
349
  }
350
 
351
+ .footer {
352
+ text-align: center;
353
+ padding: 30px 0;
354
+ color: var(--text-light);
355
+ font-size: 14px;
356
+ border-top: 1px solid var(--border);
357
+ margin-top: 40px;
358
  }
359
 
360
+ .anycoder-link {
361
+ color: var(--primary);
362
+ text-decoration: none;
363
+ font-weight: 500;
364
  }
365
 
366
+ .anycoder-link:hover {
367
+ text-decoration: underline;
 
 
368
  }
369
 
370
+ .disclaimer {
371
+ background-color: rgba(244, 67, 54, 0.1);
372
+ border: 1px solid var(--danger);
373
+ border-radius: 8px;
374
+ padding: 15px;
375
+ margin-top: 20px;
376
+ font-size: 14px;
377
  }
378
 
379
+ .disclaimer-title {
380
+ color: var(--danger);
381
+ font-weight: 500;
382
+ margin-bottom: 8px;
383
+ display: flex;
384
+ align-items: center;
385
+ gap: 8px;
386
  }
387
 
388
+ /* Responsive styles */
389
  @media (max-width: 768px) {
390
+ .header-content {
391
  flex-direction: column;
392
+ gap: 10px;
 
 
393
  }
394
 
395
+ .ratings-container {
396
  grid-template-columns: 1fr;
397
  }
398
 
399
+ .section-title {
400
+ font-size: 24px;
 
401
  }
402
 
403
+ .upload-container {
404
+ padding: 30px 15px;
405
+ }
406
+ }
407
+
408
+ @media (max-width: 480px) {
409
+ .upload-section, .ratings-section {
410
+ padding: 20px;
411
+ }
412
+
413
+ .upload-icon {
414
+ font-size: 40px;
415
+ }
416
+
417
+ .upload-text {
418
+ font-size: 16px;
419
+ }
420
+
421
+ .rating-stats {
422
+ flex-wrap: wrap;
423
+ gap: 10px;
424
  }
425
  }
426
  </style>
427
  </head>
428
  <body>
429
  <header>
430
+ <div class="container">
431
+ <div class="header-content">
432
+ <div class="logo">
433
+ <i class="fas fa-venus"></i>
434
+ <h1>RawRatings</h1>
435
+ </div>
436
+ <div class="tagline">
437
+ <p>Unfiltered feedback from our panel of 100 teen girls</p>
438
+ </div>
439
+ </div>
440
  </div>
441
  </header>
442
 
443
+ <div class="warning-banner">
444
+ <i class="fas fa-exclamation-triangle"></i>
445
+ WARNING: This app provides unfiltered anatomical critique. Users acknowledge risks of ego damage and emotional trauma.
 
446
  </div>
447
 
448
+ <main class="main-content">
449
+ <div class="container">
450
+ <section class="upload-section">
451
+ <h2 class="section-title">Upload Your Content</h2>
452
+
453
+ <div class="upload-container" id="dropZone">
454
+ <div class="upload-icon">
455
+ <i class="fas fa-cloud-upload-alt"></i>
456
+ </div>
457
+ <p class="upload-text">Drag & drop your NSFW image or video here</p>
458
+ <button class="upload-btn" id="uploadBtn">
459
+ <i class="fas fa-upload"></i> Choose File
460
+ </button>
461
+ <input type="file" id="fileInput" class="file-input" accept="image/*,video/*">
 
 
 
 
 
 
 
 
 
 
 
462
  </div>
463
+
464
+ <div class="measurements-section">
465
+ <h3 class="section-title">Optional Measurements</h3>
466
+
467
+ <div class="form-group">
468
+ <label>Length (inches) <span class="optional-tag">Optional</span></label>
469
+ <input type="number" step="0.1" min="0" placeholder="Enter length">
470
+ </div>
471
+
472
+ <div class="form-group">
473
+ <label>Girth (inches) <span class="optional-tag">Optional</span></label>
474
+ <input type="number" step="0.1" min="0" placeholder="Enter girth">
475
+ </div>
476
+
477
+ <div class="form-group">
478
+ <label>Additional Comments <span class="optional-tag">Optional</span></label>
479
+ <input type="text" placeholder="Any specific areas you want rated?">
480
+ </div>
481
  </div>
482
+
483
+ <button class="submit-btn" id="submitBtn">
484
+ <i class="fas fa-star"></i> Get Honest Ratings
485
+ </button>
486
+
487
+ <div class="disclaimer">
488
+ <div class="disclaimer-title">
489
+ <i class="fas fa-exclamation-circle"></i>
490
+ Important Notice
491
+ </div>
492
+ <p>Our panel of 100 teen girls will provide brutally honest feedback. Ratings focus on anatomical details including length, girth, size, and appearance. Each rater will share their personal size experiences for context. By submitting, you acknowledge potential emotional impact and consent to unfiltered critique.</p>
 
 
493
  </div>
494
+ </section>
 
495
 
496
+ <section class="ratings-section">
497
+ <div class="rating-header">
498
+ <h2 class="section-title">Honest Ratings</h2>
499
+ <div class="rating-count">1 Rating</div>
 
 
 
 
 
 
 
 
500
  </div>
501
+
502
+ <div class="ratings-container" id="ratingsContainer">
503
+ <!-- Ratings will be dynamically added here -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
504
  </div>
505
+ </section>
506
  </div>
507
+ </main>
508
 
509
+ <footer class="footer">
510
+ <div class="container">
511
+ <p>RawRatings provides unfiltered feedback for educational purposes only. All raters are 18+.</p>
512
+ <p>Built with <a href="https://huggingface.co/spaces/akhaliq/anycoder" class="anycoder-link">anycoder</a></p>
513
+ </div>
514
  </footer>
515
 
516
  <script>
517
+ document.addEventListener('DOMContentLoaded', function() {
518
+ const fileInput = document.getElementById('fileInput');
519
+ const uploadBtn = document.getElementById('uploadBtn');
520
+ const dropZone = document.getElementById('dropZone');
521
+ const submitBtn = document.getElementById('submitBtn');
522
+ const ratingsContainer = document.getElementById('ratingsContainer');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
523
 
524
+ // Upload button click event
525
+ uploadBtn.addEventListener('click', () => {
526
+ fileInput.click();
527
+ });
528
+
529
+ // File input change event
530
+ fileInput.addEventListener('change', (e) => {
531
+ if(e.target.files.length > 0) {
532
+ const fileName = e.target.files[0].name;
533
+ dropZone.querySelector('.upload-text').textContent = `Selected: ${fileName}`;
534
+ }
535
+ });
536
+
537
+ // Drag and drop functionality
538
+ ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
539
+ dropZone.addEventListener(eventName, preventDefaults, false);
540
+ });
541
 
542
+ function preventDefaults(e) {
543
+ e.preventDefault();
544
+ e.stopPropagation();
545
  }
546
 
547
+ ['dragenter', 'dragover'].forEach(eventName => {
548
+ dropZone.addEventListener(eventName, highlight, false);
549
+ });
550
 
551
+ ['dragleave', 'drop'].forEach(eventName => {
552
+ dropZone.addEventListener(eventName, unhighlight, false);
553
+ });
554
 
555
+ function highlight() {
556
+ dropZone.style.borderColor = 'var(--primary)';
557
+ dropZone.style.backgroundColor = 'rgba(255, 64, 129, 0.1)';
 
 
 
 
 
 
 
 
 
 
 
 
558
  }
559
 
560
+ function unhighlight() {
561
+ dropZone.style.borderColor = 'var(--border)';
562
+ dropZone.style.backgroundColor = 'rgba(0, 0, 0, 0.2)';
563
+ }
 
 
 
 
564
 
565
+ dropZone.addEventListener('drop', handleDrop, false);
566
+
567
+ function handleDrop(e) {
568
+ const dt = e.dataTransfer;
569
+ const files = dt.files;
570
+ fileInput.files = files;
 
 
 
 
 
 
 
 
 
 
 
 
571
 
572
+ if(files.length > 0) {
573
+ dropZone.querySelector('.upload-text').textContent = `Selected: ${files[0].name}`;
574
+ }
575
+ }
576
+
577
+ // Submit button click event
578
+ submitBtn.addEventListener('click', () => {
579
+ if(!fileInput.files.length) {
580
+ alert('Please select an image or video first!');
581
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
582
  }
583
 
584
+ // Clear previous ratings
585
+ ratingsContainer.innerHTML = '';
 
 
 
 
 
 
 
 
 
 
 
 
586
 
587
+ // Generate random ratings (1 in 100 chance for all 100 ratings)
588
+ const showAllRatings = Math.random() < 0.01; // 1% chance
589
+ const ratingCount = showAllRatings ? 100 : 1;
590
 
591
+ // Update rating count display
592
+ document.querySelector('.rating-count').textContent = `${ratingCount} Rating${ratingCount > 1 ? 's' : ''}`;
593
 
594
+ // Generate ratings
595
+ for(let i = 0; i < ratingCount; i++) {
596
+ const rating = generateRating();
597
+ ratingsContainer.appendChild(createRatingCard(rating));
 
598
  }
599
 
600
+ // Scroll to ratings section
601
+ document.querySelector('.ratings-section').scrollIntoView({ behavior: 'smooth' });
602
+ });
 
 
 
 
 
 
 
 
 
603
 
604
+ // Generate a random rating
605
+ function generateRating() {
606
+ const names = ['Emma', 'Sophia', 'Olivia', 'Ava', 'Isabella', 'Mia', 'Charlotte', 'Amelia', 'Harper', 'Evelyn'];
607
+ const surnames = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez'];
608
+ const name = `${names[Math.floor(Math.random() * names.length)]} ${surnames[Math.floor(Math.random() * surnames.length)]}`;
609
+ const age = Math.floor(Math.random() * 3) + 18; // 18-20
610
 
611
+ const lengthRating = (Math.random() * 4 + 1).toFixed(1); // 1.0-5.0
612
+ const girthRating = (Math.random() * 4 + 1).toFixed(1); // 1.0-5.0
613
+ const overallRating = ((parseFloat(lengthRating) + parseFloat(girthRating)) / 2).toFixed(1);
614
 
615
+ const minSize = (Math.random() * 2 + 2).toFixed(1); // 2.0-4.0 inches
616
+ const maxSize = (Math.random() * 4 + 6).toFixed(1); // 6.0-10.0 inches
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
617
 
618
+ const comments = [
619
+ `Honestly, the length is decent but the girth is what really stands out. It's got a nice shape that would probably feel good, but the head is a bit too pronounced for my taste. I've seen thicker but this is definitely above average.`,
620
+ `The size is pretty average overall. Length is okay but nothing special. The girth is where it falls short for me - I prefer something with more substance. The veins are noticeable which is a plus, but the color is a bit off-putting.`,
621
+ `Wow, this is impressive! The length is well above average and the girth is substantial. The curve is perfect and the head is nicely defined. This is definitely in the top 10% of what I've seen. Would be intimidating in person!`,
622
+ `I'm not going to sugarcoat it - this is on the smaller side. The length is below average and there's not much girth to speak of. The shape is fine but it just doesn't have much presence. Maybe it looks bigger in person?`,
623
+ `The proportions are really interesting. The length is good but the girth is exceptional. It's thick from base to tip which is rare. The only downside is it looks a bit uneven. Still, I'd rate this very highly for girth alone.`,
624
+ `This is what I'd call perfectly average. Not too long, not too thick, just right. The shape is nice and it looks healthy. Nothing spectacular but definitely nothing to be ashamed of. Would do the job just fine.`,
625
+ `I'm conflicted. The length is excellent - probably 7 inches or more. But the girth is disappointing for something this long. It looks a bit skinny for its length. If it were thicker it would be amazing, but as is it's just okay.`,
626
+ `The size is good but what really stands out is the presentation. The shave is clean, the skin looks healthy, and the photo quality is decent. Length is above average, girth is solid. Overall a very nice package that shows effort.`,
627
+ `This is small, no way around it. Both length and girth are below average. The head is disproportionately large which makes it look even smaller. I've seen smaller, but not many. Maybe angles are making it look worse?`,
628
+ `Absolute monster! Length is impressive but the girth is what's jaw-dropping. This looks thick and heavy. The veins are pronounced and the head is perfectly formed. This is top 1% material for sure. Would be a challenge but fun to try!`
629
+ ];
630
 
631
+ return {
632
+ name,
633
+ age,
634
+ overallRating,
635
+ lengthRating,
636
+ girthRating,
637
+ minSize,
638
+ maxSize,
639
+ comment: comments[Math.floor(Math.random() * comments.length)]
640
+ };
641
+ }
642
+
643
+ // Create rating card element
644
+ function createRatingCard(rating) {
645
+ const card = document.createElement('div');
646
+ card.className = 'rating-card';
647
 
648
+ card.innerHTML = `
649
+ <div class="rating-user">
650
+ <div class="user-avatar">${rating.name.charAt(0)}</div>
651
+ <div class="user-info">
652
+ <div class="user-name">${rating.name}</div>
653
+ <div class="user-age">${rating.age} years old</div>
654
+ </div>
655
+ </div>
656
+
657
+ <div class="rating-stats">
658
+ <div class="stat">
659
+ <div class="stat-value">${rating.overallRating}</div>
660
+ <div class="stat-label">Overall</div>
661
+ </div>
662
+ <div class="stat">
663
+ <div class="stat-value">${rating.lengthRating}</div>
664
+ <div class="stat-label">Length</div>
665
+ </div>
666
+ <div class="stat">
667
+ <div class="stat-value">${rating.girthRating}</div>
668
+ <div class="stat-label">Girth</div>
669
+ </div>
670
+ </div>
671
+
672
+ <div class="rating-content">
673
+ <p class="rating-text">${rating.comment}</p>
674
+ <div class="size-comparison">
675
+ <i class="fas fa-ruler"></i> My experience: Smallest <span>${rating.minSize}"</span> | Largest <span>${rating.maxSize}"</span>
676
+ </div>
677
  </div>
 
678
  `;
679
 
680
+ return card;
681
  }
682
+
683
+ // Generate initial rating for demo purposes
684
+ const initialRating = generateRating();
685
+ ratingsContainer.appendChild(createRatingCard(initialRating));
686
+ });
687
  </script>
688
  </body>
689
  </html>