wisdomstore's picture
Add 2 files
7ffe182 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ghibli Style Converter</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root {
--ghibli-blue: #68A7D3;
--ghibli-green: #7FB881;
--ghibli-yellow: #F9DD69;
--ghibli-brown: #9B6A4A;
--ghibli-pink: #FE9A9A;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Courier New', monospace;
}
body {
background-color: #f5f5f5;
background-image:
linear-gradient(45deg, transparent 20%, rgba(104, 167, 211, 0.1) 20%),
linear-gradient(-45deg, transparent 20%, rgba(123, 184, 125, 0.1) 20%);
background-size: 40px 40px;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
padding: 2rem;
}
header {
text-align: center;
margin-bottom: 2rem;
position: relative;
}
h1 {
color: var(--ghibli-brown);
font-size: 2.5rem;
margin-bottom: 0.5rem;
text-shadow: 2px 2px 0px rgba(0,0,0,0.1);
position: relative;
display: inline-block;
}
h1::after {
content: "";
position: absolute;
bottom: -10px;
left: 0;
width: 100%;
height: 4px;
background: linear-gradient(90deg, var(--ghibli-blue), var(--ghibli-green), var(--ghibli-yellow), var(--ghibli-pink));
border-radius: 2px;
}
.subtitle {
color: var(--ghibli-green);
font-style: italic;
font-size: 1.2rem;
}
.main-container {
background-color: rgba(255, 255, 255, 0.9);
border-radius: 20px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
padding: 2rem;
width: 100%;
max-width: 900px;
position: relative;
overflow: hidden;
border: 2px solid var(--ghibli-blue);
}
.main-container::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 15px;
background: linear-gradient(90deg, var(--ghibli-blue), var(--ghibli-green), var(--ghibli-yellow), var(--ghibli-pink));
}
.converter-box {
display: flex;
flex-direction: column;
align-items: center;
gap: 2rem;
}
.image-upload {
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
}
.upload-area {
width: 300px;
height: 300px;
border: 3px dashed var(--ghibli-blue);
border-radius: 15px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
cursor: pointer;
transition: all 0.3s ease;
background-color: rgba(104, 167, 211, 0.1);
position: relative;
overflow: hidden;
}
.upload-area:hover {
background-color: rgba(104, 167, 211, 0.2);
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
.upload-icon {
font-size: 4rem;
color: var(--ghibli-blue);
margin-bottom: 1rem;
}
.upload-text {
color: var(--ghibli-brown);
font-size: 1.1rem;
text-align: center;
padding: 0 1rem;
}
#file-input {
display: none;
}
.preview-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 2rem;
width: 100%;
margin-top: 1rem;
}
.preview-box {
flex: 1;
min-width: 250px;
max-width: 350px;
text-align: center;
}
.preview-title {
color: var(--ghibli-brown);
margin-bottom: 0.5rem;
font-weight: bold;
font-size: 1.2rem;
}
.preview-image {
width: 100%;
height: 250px;
object-fit: contain;
border: 2px solid var(--ghibli-brown);
border-radius: 10px;
background-color: #f9f6f2;
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
.controls {
display: flex;
flex-direction: column;
align-items: center;
gap: 1.5rem;
width: 100%;
}
.style-options {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 1rem;
width: 100%;
}
.style-option {
padding: 0.8rem 1.5rem;
border-radius: 50px;
background-color: var(--ghibli-green);
color: white;
border: none;
cursor: pointer;
transition: all 0.3s ease;
font-weight: bold;
box-shadow: 0 3px 5px rgba(0,0,0,0.2);
display: flex;
align-items: center;
gap: 0.5rem;
}
.style-option:hover {
transform: translateY(-3px);
box-shadow: 0 5px 10px rgba(0,0,0,0.2);
}
.style-option.active {
background-color: var(--ghibli-blue);
transform: scale(1.05);
}
.style-option i {
font-size: 1.1rem;
}
.convert-btn {
padding: 1rem 2rem;
border-radius: 50px;
background-color: var(--ghibli-pink);
color: white;
border: none;
cursor: pointer;
font-size: 1.1rem;
font-weight: bold;
transition: all 0.3s ease;
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
display: flex;
align-items: center;
gap: 0.5rem;
}
.convert-btn:hover {
background-color: #fe7a7a;
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0,0,0,0.2);
}
.convert-btn i {
font-size: 1.2rem;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.2); }
100% { transform: scale(1); }
}
.download-btn {
padding: 1rem 2rem;
border-radius: 50px;
background-color: var(--ghibli-yellow);
color: #8a6d3b;
border: none;
cursor: pointer;
font-size: 1.1rem;
font-weight: bold;
transition: all 0.3s ease;
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
display: flex;
align-items: center;
gap: 0.5rem;
display: none;
}
.download-btn:hover {
background-color: #f8d247;
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0,0,0,0.2);
}
.loading {
display: none;
flex-direction: column;
align-items: center;
gap: 1rem;
margin: 1rem 0;
}
.loading-spinner {
width: 50px;
height: 50px;
border: 5px solid rgba(104, 167, 211, 0.2);
border-radius: 50%;
border-top-color: var(--ghibli-blue);
animation: spin 1s ease-in-out infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.loading-text {
color: var(--ghibli-brown);
font-style: italic;
}
.soot-sprite {
position: absolute;
width: 30px;
height: 30px;
background-color: #333;
border-radius: 50%;
opacity: 0.7;
animation: float 6s ease-in-out infinite;
z-index: -1;
}
@keyframes float {
0% { transform: translateY(0) rotate(0deg); }
50% { transform: translateY(-20px) rotate(5deg); }
100% { transform: translateY(0) rotate(0deg); }
}
footer {
margin-top: 2rem;
text-align: center;
color: var(--ghibli-brown);
font-size: 0.9rem;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.preview-container {
flex-direction: column;
align-items: center;
}
.preview-box {
max-width: 100%;
}
h1 {
font-size: 2rem;
}
.subtitle {
font-size: 1rem;
}
}
</style>
</head>
<body>
<header>
<h1>Ghibli Style Converter</h1>
<p class="subtitle">Transform your photos into Studio Ghibli magical artwork</p>
</header>
<main class="main-container">
<div class="converter-box">
<div class="image-upload">
<input type="file" id="file-input" accept="image/*">
<div class="upload-area" id="upload-area">
<i class="fas fa-cloud-upload-alt upload-icon"></i>
<p class="upload-text">Click to upload an image or drag and drop</p>
</div>
</div>
<div class="preview-container">
<div class="preview-box">
<h3 class="preview-title">Original Image</h3>
<img id="original-preview" class="preview-image" src="data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='250' viewBox='0 0 300 250'%3E%3Crect width='300' height='250' fill='%23f9f6f2'/%3E%3Ctext x='150' y='125' font-family='Arial' font-size='14' fill='%239B6A4A' text-anchor='middle'%3EUPLOAD AN IMAGE TO BEGIN%3C/text%3E%3C/svg%3E" alt="Original Preview">
</div>
<div class="preview-box">
<h3 class="preview-title">Ghibli Style</h3>
<img id="ghibli-preview" class="preview-image" src="data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='250' viewBox='0 0 300 250'%3E%3Crect width='300' height='250' fill='%23f9f6f2'/%3E%3Ctext x='150' y='125' font-family='Arial' font-size='14' fill='%239B6A4A' text-anchor='middle'%3EPROCESSED IMAGE WILL APPEAR HERE%3C/text%3E%3C/svg%3E" alt="Ghibli Preview">
</div>
</div>
<div class="controls">
<div class="style-options">
<button class="style-option
</html>