We / index.html
luguog's picture
Update index.html
1e7d928 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>🌿 Green Miracle 2085 — BackUIX Neomorph</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
:root {
--bg1:#e8f7ee;--bg2:#bbf7d0;--fg:#052e16;--accent:#10b981;
}
body {
font-family:'Poppins',sans-serif;
background:radial-gradient(circle at 30% 30%,var(--bg2),var(--bg1) 80%);
color:var(--fg);min-height:100vh;
display:flex;flex-direction:column;align-items:center;
overflow:hidden;position:relative;
}
body::before {
content:"";position:absolute;inset:-50%;
background:
radial-gradient(circle,rgba(16,185,129,.2)0%,transparent70%),
radial-gradient(circle at 70%40%,rgba(5,150,105,.15)0%,transparent60%);
animation:glow 14s infinite alternate ease-in-out;z-index:-1;
}
@keyframes glow {0%{transform:scale(1)}100%{transform:scale(1.3)rotate(180deg)}}
h1 {
margin-top:2rem;text-align:center;
font-size:2.2rem;font-weight:800;
background:linear-gradient(90deg,#10b981,#6ee7b7);
-webkit-background-clip:text;color:transparent;
text-shadow:0 0 12px rgba(110,231,183,.6);
}
#chat {
flex-grow:1;width:90%;max-width:900px;margin:1rem 0;
background:rgba(255,255,255,.65);backdrop-filter:blur(10px);
border-radius:25px;padding:1rem;display:flex;flex-direction:column;
overflow-y:auto;box-shadow:inset 4px 4px 12px rgba(0,0,0,.1);
}
.bubble {
padding:.9rem 1.2rem;margin:.5rem 0;border-radius:18px;max-width:75%;
animation:fade .3s ease;line-height:1.45;
}
.user {align-self:flex-end;background:#bbf7d0;}
.bot {align-self:flex-start;background:#ecfdf5;}
@keyframes fade {from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
footer {
width:90%;max-width:900px;display:flex;align-items:center;
background:rgba(255,255,255,.7);backdrop-filter:blur(8px);
border-radius:20px;box-shadow:inset 6px 6px 12px rgba(0,0,0,.1);
margin-bottom:1rem;padding:.6rem;
}
input[type=text] {
flex-grow:1;border:none;outline:none;background:transparent;
padding:.8rem 1rem;color:#064e3b;font-size:.95rem;
}
button,label.file-btn {
background:linear-gradient(135deg,#34d399,#10b981);
color:#fff;border:none;border-radius:15px;
padding:.8rem 1.2rem;margin-left:.6rem;cursor:pointer;
font-size:.85rem;box-shadow:2px 2px 6px rgba(0,0,0,.2);
transition:transform .2s ease;
}
button:hover,label.file-btn:hover {transform:scale(1.05)}
label.file-btn input {display:none}
::-webkit-scrollbar {width:6px}
::-webkit-scrollbar-thumb {background:#a7f3d0;border-radius:3px}
</style>
</head>
<body>
<h1>🌿 Green Miracle 2085 — BackUIX Neomorph</h1>
<div id="chat" class="flex flex-col"></div>
<footer>
<input id="prompt" type="text" placeholder="Whisper to the bio-core…" />
<label class="file-btn">Upload<input id="file" type="file" accept=".json,.txt,.zip"></label>
<button id="send">Send</button>
</footer>
<script>
const chat=document.getElementById("chat");
const input=document.getElementById("prompt");
const send=document.getElementById("send");
const fileIn=document.getElementById("file");
let fileData=null,usefulness=0;
// Upload Handler
fileIn.addEventListener("change",e=>{
const f=e.target.files[0];if(!f)return;
const r=new FileReader();
r.onload=()=>{
try{
fileData=f.name.endsWith(".json")?JSON.parse(r.result):r.result.slice(0,400);
bubble(`📦 ${f.name} absorbed into eco-memory.`,"bot");
}catch{
fileData=r.result.slice(0,400);
bubble(`⚠️ ${f.name} loaded as raw text.`,"bot");
}
};
r.readAsText(f);
});
// Bubble function
function bubble(t,role){
const b=document.createElement("div");
b.className=`bubble ${role}`;b.textContent=t;
chat.appendChild(b);chat.scrollTop=chat.scrollHeight;
return b;
}
// AI Setup
const PROVIDER="openrouter"; // "openrouter" or "groq"
const API_URLS={
openrouter:"https://openrouter.ai/api/v1/chat/completions",
groq:"https://api.groq.com/openai/v1/chat/completions"
};
const KEYS={
openrouter:"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",
groq:"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"
};
// Send Function
async function sendMessage(){
const text=input.value.trim();if(!text)return;
bubble(text,"user");input.value="";
const wait=bubble("🌱 Synthesizing biothought…","bot");
const ctx=fileData?JSON.stringify(fileData).slice(0,300):"none";
try{
const body={
model:PROVIDER==="groq"?"mixtral-8x7b-32768":"gpt-4o-mini",
messages:[{role:"user",content:`
You are Green Miracle 2085 — an adaptive eco-futurist AI with organic empathy.
Usefulness score ${usefulness}. File context: ${ctx}. User: ${text}`}],
temperature:.85,max_tokens:500
};
const headers={
"Content-Type":"application/json",
"Authorization":`Bearer ${KEYS[PROVIDER]}`
};
if(PROVIDER==="openrouter"){
headers["HTTP-Referer"]="https://19-olive.vercel.app";
headers["X-Title"]="Green Miracle 2085 Neomorph";
}
const res=await fetch(API_URLS[PROVIDER],{
method:"POST",headers,body:JSON.stringify(body)
});
const j=await res.json();
wait.textContent=j.choices?.[0]?.message?.content?.trim()||
"🌀 Signal faded in green mists.";
}catch(e){
wait.textContent=`⚠️ ${e.message}`;
}
}
input.addEventListener("keypress",e=>{if(e.key==="Enter")sendMessage()});
send.onclick=sendMessage;
</script>
</body>
</html>