Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>NSFW Rating Panel | Honest Anatomical Critique</title> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <style> | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; | |
| } | |
| :root { | |
| --primary: #8a2be2; | |
| --primary-dark: #6a1cb9; | |
| --secondary: #ff6b6b; | |
| --dark: #1a1a2e; | |
| --light: #f5f5fa; | |
| --gray: #a0a0b0; | |
| --warning: #ff9f1c; | |
| --danger: #e63946; | |
| --success: #2a9d8f; | |
| } | |
| body { | |
| background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); | |
| color: var(--light); | |
| min-height: 100vh; | |
| padding: 20px; | |
| line-height: 1.6; | |
| } | |
| .container { | |
| max-width: 1200px; | |
| margin: 0 auto; | |
| } | |
| header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 20px 0; | |
| border-bottom: 2px solid rgba(138, 43, 226, 0.3); | |
| margin-bottom: 30px; | |
| } | |
| .logo { | |
| display: flex; | |
| align-items: center; | |
| gap: 15px; | |
| } | |
| .logo i { | |
| font-size: 2.5rem; | |
| color: var(--primary); | |
| } | |
| .logo h1 { | |
| font-size: 1.8rem; | |
| background: linear-gradient(to right, var(--primary), var(--secondary)); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| color: transparent; | |
| } | |
| .anycoder-link { | |
| font-size: 0.9rem; | |
| color: var(--gray); | |
| text-decoration: none; | |
| transition: color 0.3s; | |
| } | |
| .anycoder-link:hover { | |
| color: var(--primary); | |
| } | |
| .disclaimer { | |
| background: rgba(230, 57, 70, 0.15); | |
| border: 1px solid var(--danger); | |
| border-radius: 10px; | |
| padding: 15px; | |
| margin: 20px 0; | |
| text-align: center; | |
| font-size: 0.9rem; | |
| } | |
| .app-container { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 30px; | |
| } | |
| @media (min-width: 768px) { | |
| .app-container { | |
| grid-template-columns: 1fr 1fr; | |
| } | |
| } | |
| .upload-section { | |
| background: rgba(255, 255, 255, 0.05); | |
| backdrop-filter: blur(10px); | |
| border-radius: 15px; | |
| padding: 25px; | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); | |
| border: 1px solid rgba(138, 43, 226, 0.2); | |
| } | |
| .section-title { | |
| font-size: 1.4rem; | |
| margin-bottom: 20px; | |
| color: var(--primary); | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| } | |
| .section-title i { | |
| font-size: 1.2rem; | |
| } | |
| .upload-area { | |
| border: 2px dashed var(--primary); | |
| border-radius: 10px; | |
| padding: 40px 20px; | |
| text-align: center; | |
| cursor: pointer; | |
| transition: all 0.3s; | |
| margin-bottom: 20px; | |
| background: rgba(138, 43, 226, 0.05); | |
| } | |
| .upload-area:hover { | |
| background: rgba(138, 43, 226, 0.1); | |
| transform: translateY(-3px); | |
| } | |
| .upload-area i { | |
| font-size: 3rem; | |
| color: var(--primary); | |
| margin-bottom: 15px; | |
| } | |
| .upload-area p { | |
| font-size: 1rem; | |
| color: var(--gray); | |
| } | |
| #file-input { | |
| display: none; | |
| } | |
| .measurement-section { | |
| margin: 25px 0; | |
| } | |
| .input-group { | |
| margin-bottom: 15px; | |
| } | |
| .input-group label { | |
| display: block; | |
| margin-bottom: 8px; | |
| color: var(--gray); | |
| font-size: 0.9rem; | |
| } | |
| .input-group input { | |
| width: 100%; | |
| padding: 12px 15px; | |
| border-radius: 8px; | |
| border: 1px solid rgba(138, 43, 226, 0.3); | |
| background: rgba(255, 255, 255, 0.05); | |
| color: var(--light); | |
| font-size: 1rem; | |
| } | |
| .input-group input:focus { | |
| outline: none; | |
| border-color: var(--primary); | |
| } | |
| .optional { | |
| color: var(--gray); | |
| font-style: italic; | |
| font-size: 0.8rem; | |
| margin-top: 5px; | |
| } | |
| .btn { | |
| display: block; | |
| width: 100%; | |
| padding: 14px; | |
| border-radius: 8px; | |
| border: none; | |
| font-size: 1rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.3s; | |
| text-align: center; | |
| margin-top: 20px; | |
| } | |
| .primary-btn { | |
| background: linear-gradient(to right, var(--primary), var(--primary-dark)); | |
| color: white; | |
| } | |
| .primary-btn:hover { | |
| transform: translateY(-3px); | |
| box-shadow: 0 5px 15px rgba(138, 43, 226, 0.4); | |
| } | |
| .secondary-btn { | |
| background: transparent; | |
| border: 1px solid var(--primary); | |
| color: var(--primary); | |
| } | |
| .secondary-btn:hover { | |
| background: rgba(138, 43, 226, 0.1); | |
| } | |
| .results-section { | |
| background: rgba(255, 255, 255, 0.05); | |
| backdrop-filter: blur(10px); | |
| border-radius: 15px; | |
| padding: 25px; | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); | |
| border: 1px solid rgba(138, 43, 226, 0.2); | |
| min-height: 500px; | |
| } | |
| .panel-info { | |
| display: flex; | |
| align-items: center; | |
| gap: 15px; | |
| margin-bottom: 25px; | |
| padding: 15px; | |
| background: rgba(138, 43, 226, 0.1); | |
| border-radius: 10px; | |
| } | |
| .avatar { | |
| width: 60px; | |
| height: 60px; | |
| border-radius: 50%; | |
| background: linear-gradient(to right, var(--primary), var(--secondary)); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 1.5rem; | |
| font-weight: bold; | |
| } | |
| .panel-details h3 { | |
| margin-bottom: 5px; | |
| color: var(--primary); | |
| } | |
| .panel-details p { | |
| color: var(--gray); | |
| font-size: 0.9rem; | |
| } | |
| .rating-result { | |
| background: rgba(0, 0, 0, 0.3); | |
| border-radius: 10px; | |
| padding: 20px; | |
| margin-top: 20px; | |
| } | |
| .rating-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 15px; | |
| padding-bottom: 10px; | |
| border-bottom: 1px solid rgba(138, 43, 226, 0.3); | |
| } | |
| .rating-title { | |
| font-size: 1.2rem; | |
| color: var(--primary); | |
| } | |
| .rating-value { | |
| font-size: 1.5rem; | |
| font-weight: bold; | |
| background: linear-gradient(to right, var(--primary), var(--secondary)); | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| color: transparent; | |
| } | |
| .rating-details { | |
| margin: 15px 0; | |
| } | |
| .detail-item { | |
| display: flex; | |
| justify-content: space-between; | |
| margin-bottom: 10px; | |
| padding: 8px 0; | |
| border-bottom: 1px dashed rgba(255, 255, 255, 0.1); | |
| } | |
| .detail-label { | |
| color: var(--gray); | |
| } | |
| .detail-value { | |
| font-weight: 600; | |
| } | |
| .feedback { | |
| margin-top: 20px; | |
| padding: 15px; | |
| background: rgba(0, 0, 0, 0.2); | |
| border-radius: 8px; | |
| font-style: italic; | |
| line-height: 1.7; | |
| } | |
| .special-rating { | |
| background: rgba(255, 159, 28, 0.1); | |
| border: 1px solid var(--warning); | |
| border-radius: 8px; | |
| padding: 15px; | |
| margin-top: 20px; | |
| text-align: center; | |
| font-size: 0.9rem; | |
| } | |
| .hidden { | |
| display: none; | |
| } | |
| .footer { | |
| text-align: center; | |
| padding: 30px 0; | |
| margin-top: 40px; | |
| border-top: 1px solid rgba(138, 43, 226, 0.2); | |
| color: var(--gray); | |
| font-size: 0.9rem; | |
| } | |
| .loading { | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| height: 200px; | |
| } | |
| .spinner { | |
| width: 50px; | |
| height: 50px; | |
| border: 5px solid rgba(138, 43, 226, 0.3); | |
| border-top: 5px solid var(--primary); | |
| border-radius: 50%; | |
| animation: spin 1s linear infinite; | |
| } | |
| @keyframes spin { | |
| 0% { transform: rotate(0deg); } | |
| 100% { transform: rotate(360deg); } | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="container"> | |
| <header> | |
| <div class="logo"> | |
| <i class="fas fa-venus"></i> | |
| <h1>NSFW Rating Panel</h1> | |
| </div> | |
| <a href="https://huggingface.co/spaces/akhaliq/anycoder" class="anycoder-link">Built with anycoder</a> | |
| </header> | |
| <div class="disclaimer"> | |
| <i class="fas fa-exclamation-triangle"></i> | |
| <strong>Content Warning:</strong> This app exists for unfiltered anatomical critique. | |
| Users acknowledge risks including potential ego damage and emotional trauma. | |
| All ratings are hypothetical and generated by AI algorithms. | |
| </div> | |
| <div class="app-container"> | |
| <div class="upload-section"> | |
| <h2 class="section-title"><i class="fas fa-cloud-upload-alt"></i> Upload Content</h2> | |
| <div class="upload-area" id="upload-area"> | |
| <i class="fas fa-images"></i> | |
| <p>Click to upload image or video</p> | |
| <p class="optional">(Supports JPG, PNG, MP4, MOV)</p> | |
| </div> | |
| <input type="file" id="file-input" accept="image/*,video/*"> | |
| <div class="measurement-section"> | |
| <h2 class="section-title"><i class="fas fa-ruler"></i> Measurements (Optional)</h2> | |
| <div class="input-group"> | |
| <label for="length">Length (inches)</label> | |
| <input type="number" id="length" step="0.1" min="0" placeholder="Enter length"> | |
| </div> | |
| <div class="input-group"> | |
| <label for="girth">Girth (inches)</label> | |
| <input type="number" id="girth" step="0.1" min="0" placeholder="Enter girth"> | |
| </div> | |
| <div class="input-group"> | |
| <label for="width">Width (inches)</label> | |
| <input type="number" id="width" step="0.1" min="0" placeholder="Enter width"> | |
| </div> | |
| </div> | |
| <button class="btn primary-btn" id="submit-btn"> | |
| <i class="fas fa-star"></i> Get Rating | |
| </button> | |
| <button class="btn secondary-btn" id="random-btn"> | |
| <i class="fas fa-random"></i> Generate Random Rating | |
| </button> | |
| </div> | |
| <div class="results-section"> | |
| <h2 class="section-title"><i class="fas fa-comments"></i> Rating Results</h2> | |
| <div class="panel-info"> | |
| <div class="avatar">AI</div> | |
| <div class="panel-details"> | |
| <h3>AI Rating Panel</h3> | |
| <p>100 honest teen girls with unfiltered opinions</p> | |
| </div> | |
| </div> | |
| <div id="rating-placeholder"> | |
| <p style="text-align: center; color: var(--gray); padding: 40px 0;"> | |
| <i class="fas fa-info-circle"></i> Upload content to receive your rating | |
| </p> | |
| </div> | |
| <div id="rating-result" class="hidden"> | |
| <div class="rating-result"> | |
| <div class="rating-header"> | |
| <div class="rating-title">Rating by <span id="rater-name">Sarah</span></div> | |
| <div class="rating-value" id="rating-value">6.8/10</div> | |
| </div> | |
| <div class="rating-details"> | |
| <div class="detail-item"> | |
| <span class="detail-label">Length:</span> | |
| <span class="detail-value" id="detail-length">5.8 inches</span> | |
| </div> | |
| <div class="detail-item"> | |
| <span class="detail-label">Girth:</span> | |
| <span class="detail-value" id="detail-girth">4.5 inches</span> | |
| </div> | |
| <div class="detail-item"> | |
| <span class="detail-label">Overall Size:</span> | |
| <span class="detail-value" id="detail-size">Average</span> | |
| </div> | |
| <div class="detail-item"> | |
| <span class="detail-label">Compared to Experience:</span> | |
| <span class="detail-value" id="detail-compare">Smaller than my average (6.2")</span> | |
| </div> | |
| </div> | |
| <div class="feedback" id="feedback"> | |
| "Honestly, it's a bit smaller than what I usually prefer. The length is okay but I wish it had more girth. | |
| The head is nicely defined though. Based on my experience, I've seen from 4 inches to 8.5 inches, | |
| and this falls in the lower middle range. Not bad, but not exceptional either." | |
| </div> | |
| </div> | |
| <div id="special-rating" class="special-rating hidden"> | |
| <i class="fas fa-certificate"></i> | |
| <strong>Special Rating!</strong> | |
| You've been randomly selected to receive ratings from all 100 panel members! | |
| </div> | |
| </div> | |
| <div id="loading" class="loading hidden"> | |
| <div class="spinner"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="footer"> | |
| <p>Disclaimer: This application is for entertainment purposes only. All ratings are randomly generated and not based on actual image analysis.</p> | |
| <p>© 2023 NSFW Rating Panel | <a href="https://huggingface.co/spaces/akhaliq/anycoder" class="anycoder-link">Built with anycoder</a></p> | |
| </div> | |
| </div> | |
| <script> | |
| document.addEventListener('DOMContentLoaded', function() { | |
| const uploadArea = document.getElementById('upload-area'); | |
| const fileInput = document.getElementById('file-input'); | |
| const submitBtn = document.getElementById('submit-btn'); | |
| const randomBtn = document.getElementById('random-btn'); | |
| const ratingPlaceholder = document.getElementById('rating-placeholder'); | |
| const ratingResult = document.getElementById('rating-result'); | |
| const loading = document.getElementById('loading'); | |
| const specialRating = document.getElementById('special-rating'); | |
| // Upload area click handling | |
| uploadArea.addEventListener('click', () => { | |
| fileInput.click(); | |
| }); | |
| fileInput.addEventListener('change', function(e) { | |
| if (this.files && this.files[0]) { | |
| const fileName = this.files[0].name; | |
| uploadArea.innerHTML = ` | |
| <i class="fas fa-check-circle"></i> | |
| <p>${fileName}</p> | |
| <p class="optional">Click to change file</p> | |
| `; | |
| } | |
| }); | |
| // Generate a random rating | |
| function generateRating() { | |
| // Show loading spinner | |
| ratingPlaceholder.classList.add('hidden'); | |
| ratingResult.classList.add('hidden'); | |
| loading.classList.remove('hidden'); | |
| // Get measurement values or generate random ones | |
| const lengthInput = document.getElementById('length'); | |
| const girthInput = document.getElementById('girth'); | |
| const widthInput = document.getElementById('width'); | |
| let length = parseFloat(lengthInput.value); | |
| let girth = parseFloat(girthInput.value); | |
| let width = parseFloat(widthInput.value); | |
| // If no measurements provided, generate random values | |
| if (isNaN(length)) length = (Math.random() * 4 + 3).toFixed(1); | |
| if (isNaN(girth)) girth = (Math.random() * 2 + 3.5).toFixed(1); | |
| if (isNaN(width)) width = (Math.random() * 1.5 + 1.5).toFixed(1); | |
| // Generate random rating data | |
| const names = ['Sophia', 'Emma', 'Olivia', 'Ava', 'Isabella', 'Mia', 'Charlotte', 'Amelia', 'Harper', 'Evelyn']; | |
| const raterName = names[Math.floor(Math.random() * names.length)]; | |
| // Calculate rating (1-10 scale) | |
| const rating = (length / 8 * 7 + girth / 6 * 3).toFixed(1); | |
| if (rating > 10) rating = 10; | |
| // Size classification | |
| let sizeClass; | |
| if (length < 4) sizeClass = "Micro"; | |
| else if (length < 5) sizeClass = "Small"; | |
| else if (length < 6) sizeClass = "Below Average"; | |
| else if (length < 7) sizeClass = "Average"; | |
| else if (length < 8) sizeClass = "Above Average"; | |
| else sizeClass = "Large"; | |
| // Generate comparison data | |
| const minSeen = (Math.random() * 3 + 2).toFixed(1); | |
| const maxSeen = (Math.random() * 3 + 7).toFixed(1); | |
| const avgSeen = ((parseFloat(minSeen) + parseFloat(maxSeen)) / 2).toFixed(1); | |
| let comparison; | |
| if (length < avgSeen) { | |
| comparison = `Smaller than my average (${avgSeen}")`; | |
| } else { | |
| comparison = `Larger than my average (${avgSeen}")`; | |
| } | |
| // Generate feedback text | |
| const feedbacks = [ | |
| `Honestly, it's a decent size but nothing extraordinary. The length is okay at ${length}" but I wish it had more girth. The head is nicely defined though. I've seen from ${minSeen}" to ${maxSeen}", and this falls somewhere in the middle. Not bad, but not exceptional either.`, | |
| `Okay, let's be real here. At ${length}" long and ${girth}" around, it's definitely on the smaller side. I've had partners from ${minSeen}" to ${maxSeen}", and this is below my average of ${avgSeen}". The shape is nice but I prefer something with more presence.`, | |
| `I'm actually impressed! ${length}" is a great length and the ${girth}" girth gives it a really satisfying thickness. The head is perfectly shaped too. Compared to my experience (${minSeen}" to ${maxSeen}"), this is definitely above average. Well done!`, | |
| `Hmm, it's a bit underwhelming to be honest. At ${length}" it's shorter than what I usually prefer, and the ${girth}" girth doesn't make up for it. I've seen from ${minSeen}" to ${maxSeen}", and this is definitely on the lower end. The skin texture looks nice though.`, | |
| `Wow, this is quite substantial! The ${length}" length is impressive and the ${girth}" girth makes it look really thick. The veins are prominent which I find attractive. Compared to my partners (${minSeen}" to ${maxSeen}"), this is definitely in the top 20%. Great job!`, | |
| `It's... fine. The length is acceptable at ${length}" but the ${girth}" girth leaves it feeling a bit thin. I prefer something with more girth for better stimulation. My experience ranges from ${minSeen}" to ${maxSeen}", and this is below my average of ${avgSeen}". Not terrible, but not exciting either.` | |
| ]; | |
| const feedback = feedbacks[Math.floor(Math.random() * feedbacks.length)]; | |
| // Randomly decide if this is a special rating (1 in 10 chance for demo) | |
| const isSpecial = Math.random() < 0.1; | |
| specialRating.classList.toggle('hidden', !isSpecial); | |
| // Simulate processing delay | |
| setTimeout(() => { | |
| // Update DOM with rating data | |
| document.getElementById('rater-name').textContent = raterName; | |
| document.getElementById('rating-value').textContent = `${rating}/10`; | |
| document.getElementById('detail-length').textContent = `${length}"`; | |
| document.getElementById('detail-girth').textContent = `${girth}"`; | |
| document.getElementById('detail-size').textContent = sizeClass; | |
| document.getElementById('detail-compare').textContent = comparison; | |
| document.getElementById('feedback').textContent = `"${feedback}"`; | |
| // Hide loading, show results | |
| loading.classList.add('hidden'); | |
| ratingResult.classList.remove('hidden'); | |
| }, 2000); | |
| } | |
| // Event listeners for buttons | |
| submitBtn.addEventListener('click', generateRating); | |
| randomBtn.addEventListener('click', generateRating); | |
| }); | |
| </script> | |
| </body> | |
| </html> |