diff --git a/.gitignore b/.gitignore
index 4521b94..c63272a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+/_scripts
node_modules
package-lock.json
pnpm-lock.yaml
diff --git a/index.html b/index.html
index b034e28..9581bec 100644
--- a/index.html
+++ b/index.html
@@ -4,159 +4,8 @@
Koodiklinikka nimilappu generaattori
-
-
+
+
diff --git a/script.js b/script.js
new file mode 100644
index 0000000..293fb0b
--- /dev/null
+++ b/script.js
@@ -0,0 +1,51 @@
+function handleImage(file, element) {
+ if (file && file.type.startsWith("image/")) {
+ const reader = new FileReader();
+ reader.onload = (event) => {
+ if (event.target) {
+ element.src = event.target.result;
+ }
+ };
+ reader.readAsDataURL(file);
+ } else {
+ alert("Please drop an image file.");
+ }
+}
+
+function handleUpload(event) {
+ event.preventDefault();
+ const element = event.target.parentElement.querySelector("img");
+ handleImage(event.target.files[0], element);
+}
+
+const handleDrop = (e) => {
+ e.preventDefault();
+ const element = e.currentTarget;
+ const file = e.dataTransfer.files[0];
+ handleImage(file, element);
+};
+
+const handleDragOver = (e) => {
+ e.stopPropagation();
+ e.preventDefault();
+};
+
+const handleAdd = () => {
+ const laput = document.querySelector(".laput");
+ const template = document.querySelector("#lappu-template");
+ const lisalappuButton = document.querySelector(".lisalappu");
+ const clone = template.content.cloneNode(true);
+ laput.insertBefore(clone, lisalappuButton);
+};
+
+const handleYeet = (event) => {
+ const lappu = event.target;
+ if (lappu.classList.contains("lappu")) {
+ lappu.parentNode.removeChild(lappu);
+ event.preventDefault();
+ }
+};
+
+const handleBoot = () => {
+ handleAdd();
+};
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..73463ac
--- /dev/null
+++ b/style.css
@@ -0,0 +1,97 @@
+@import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
+
+* {
+ box-sizing: border-box;
+ padding: 0;
+ margin: 0;
+}
+
+body {
+ margin: 10mm;
+ font-family: Inter,
+ system-ui,
+ -apple-system,
+ BlinkMacSystemFont,
+ "Segoe UI",
+ Roboto,
+ Oxygen,
+ Ubuntu,
+ Cantarell,
+ "Open Sans",
+ "Helvetica Neue",
+ sans-serif;
+}
+
+.laput {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 5mm;
+}
+
+.lisalappu {
+ width: 85mm;
+ height: 54mm;
+ color: #aaa;
+ background: transparent;
+ border: 1px dashed #aaa;
+ font-size: 3em;
+ cursor: pointer;
+}
+
+.lisalappu:hover {
+ background: #f0f0f0;
+}
+
+@media print {
+ .lisalappu {
+ display: none;
+ }
+
+ body {
+ margin: unset;
+ }
+
+ input {
+ display: none;
+ }
+}
+
+.lappu {
+ width: 85mm;
+ height: 54mm;
+ border: 1px solid black;
+ padding: 10mm;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.lappu figure {
+ position: relative;
+ user-select: none;
+ width: 30%;
+ aspect-ratio: 1/1;
+ margin: 0 auto;
+ border-radius: 100%;
+ overflow: hidden;
+}
+
+.lappu figure input {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+ cursor: pointer;
+}
+
+.lappu .username {
+ font-size: 16px;
+ font-weight: 400;
+ opacity: 0.8;
+ margin-top: 0.5rem;
+}
+
+.lappu .nimi {
+ font-size: 21px;
+ margin-top: 1rem;
+}