<!DOCTYPE html> <html lang="sv"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>AI-Körkort – 25 Basuppdrag | AINNOVA</title> <style> :root { --primary-color: #9fe754; --primary-dark: #8dd246; --text-color: #333; --subtitle-color: #666; --border-color: #e0e0e0; --background-light: #f9f9f9; }

* {box-sizing: border-box; margin: 0; padding: 0;}

body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
  max-width: 900px;
  margin: 0 auto;
  padding: 20px;
  line-height: 1.5;
  color: var(--text-color);
  background-color: #fafafa;
}

h1, h2, h3 {color: var(--text-color); margin-bottom: 15px;}

.header {
  text-align: center;
  margin-bottom: 20px;
}

.logo {
  height: 28px;
  vertical-align: middle;
  margin-right: 8px;
}

.title {
  font-weight: bold;
  font-size: 24px;
  margin-bottom: 5px;
}

.subtitle {
  font-style: italic;
  margin-bottom: 10px;
  color: var(--subtitle-color);
  font-size: 14px;
}

.section {
  margin-bottom: 20px;
  background-color: #fff;
  border-radius: 10px;
  padding: 15px 20px;
  box-shadow: 0 3px 8px rgba(0,0,0,0.1);
}

.section h2 {
  display: flex;
  align-items: center;
  font-size: 18px;
  margin-bottom: 15px;
}

.info-field {
  display: flex;
  margin-bottom: 15px;
  align-items: center;
}

.info-field label {
  width: 70px;
  font-weight: bold;
}

.info-field input {
  flex: 1;
  border: none;
  border-bottom: 2px solid var(--border-color);
  padding: 8px 5px;
  font-size: 16px;
  transition: border-color 0.2s;
}

.info-field input:focus {
  outline: none;
  border-color: var(--primary-color);
}

.badge-levels {
  margin-top: 15px;
  font-size: 0.95em;
  color: var(--subtitle-color);
  text-align: center;
  background-color: var(--background-light);
  padding: 10px;
  border-radius: 6px;
}

.table-responsive {
  width: 100%;
  overflow-x: auto;
}

.tasks-table {
  width: 100%;
  border-collapse: collapse;
}

.tasks-table th {
  text-align: left;
  padding: 10px 15px;
  border-bottom: 2px solid var(--border-color);
  font-weight: 600;
  font-size: 14px;
}

.tasks-table th:first-child {
  width: 60px;
  text-align: center;
}

.tasks-table td {
  padding: 10px 15px;
  border-bottom: 1px solid var(--border-color);
  vertical-align: top;
}

.tasks-table tr:last-child td {
  border-bottom: none;
}

.custom-checkbox {
  display: block;
  position: relative;
  width: 24px;
  height: 24px;
  margin: 0 auto;
}

.custom-checkbox input {
  position: absolute;
  opacity: 0;
  cursor: pointer;
}

.checkmark {
  position: absolute;
  top: 0;
  left: 0;
  height: 24px;
  width: 24px;
  background-color: #fff;
  border: 2px solid #ddd;
  border-radius: 4px;
  transition: all 0.2s;
}

.custom-checkbox:hover input ~ .checkmark {
  border-color: var(--primary-dark);
}

.custom-checkbox input:checked ~ .checkmark {
  background-color: var(--primary-color);
  border-color: var(--primary-color);
}

.checkmark:after {
  content: "";
  position: absolute;
  display: none;
  left: 8px;
  top: 4px;
  width: 5px;
  height: 10px;
  border: solid white;
  border-width: 0 3px 3px 0;
  transform: rotate(45deg);
}

.custom-checkbox input:checked ~ .checkmark:after {
  display: block;
}

.task-title {
  font-weight: 600;
}

.task-description {
  color: var(--subtitle-color);
  font-size: 0.95em;
}

.summary {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
}

.summary-item {
  flex: 1;
  min-width: 200px;
  border: 1px solid var(--border-color);
  padding: 15px;
  border-radius: 8px;
  background-color: var(--background-light);
  text-align: center;
}

.summary-item-title {
  font-weight: 600;
  margin-bottom: 10px;
  color: var(--subtitle-color);
  text-transform: uppercase;
  font-size: 0.9em;
  letter-spacing: 1px;
}

.summary-value {
  font-size: 28px;
  font-weight: bold;
}

.bronze { color: #cd7f32; }
.silver { color: #a8a9ad; }
.gold { color: #d4af37; }
.platinum { color: #e5e4e2; }

.instructions {
  background-color: #f0f7ea;
  padding: 15px;
  border-radius: 8px;
  border-left: 4px solid var(--primary-color);
  margin-bottom: 20px;
}

.instructions h3 {
  margin-bottom: 10px;
}

ol {
  margin-left: 25px;
  padding-left: 10px;
}

.instructions li, .section li {
  margin-bottom: 5px;
}

.btn-container {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px;
  margin-top: 20px;
}

.btn {
  background-color: var(--primary-color);
  color: var(--text-color);
  border: none;
  padding: 10px 20px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 16px;
  font-weight: 600;
  transition: all 0.2s;
  box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

.btn:hover {
  background-color: var(--primary-dark);
  transform: translateY(-2px);
  box-shadow: 0 4px 8px rgba(0,0,0,0.15);
}

.btn-secondary {
  background-color: #f1f1f1;
  color: #555;
}

.btn-secondary:hover {
  background-color: #e0e0e0;
}

.copyright {
  margin-top: 20px;
  padding: 15px;
  background-color: #f5f5f5;
  border-radius: 8px;
  font-size: 0.9em;
  color: var(--subtitle-color);
  text-align: center;
  line-height: 1.5;
}

footer {
  text-align: center;
  margin-top: 20px;
  color: var(--subtitle-color);
  font-size: 0.9em;
  padding-bottom: 20px;
}

@media print {
  @page {
    margin: 1cm;
    size: portrait;
  }

  body {
    font-size: 12pt;
    background-color: white;
    padding: 0;
  }

  .section {
    box-shadow: none;
    border: 1px solid #ddd;
    break-inside: avoid;
    page-break-inside: avoid;
    margin-bottom: 15px;
  }

  .btn-container, .instructions {
    display: none;
  }

  .custom-checkbox input:checked ~ .checkmark {
    background-color: var(--primary-color) !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  .checkmark {
    border: 2px solid #999 !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  .summary-value {
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  /* Forcera checklistan att börja på en ny sida */
  .checklist-section {
    page-break-before: always;
    break-before: always;
  }

  .copyright, footer {
    page-break-before: avoid;
    break-before: avoid;
  }
}

@media screen and (max-width: 768px) {
  .tasks-table {
    min-width: 600px;
  }

  .btn {
    width: 100%;
  }
}

@media screen and (max-width: 600px) {
  .section {
    padding: 12px 15px;
  }

  .info-field {
    flex-direction: column;
    align-items: flex-start;
  }

  .info-field label {
    width: 100%;
    margin-bottom: 5px;
  }

  .summary-item {
    min-width: 100%;
  }

  /* Mobilanpassad tabellvy */
  .tasks-table, .tasks-table thead, .tasks-table tbody, .tasks-table th, .tasks-table td, .tasks-table tr {
    display: block;
  }

  .tasks-table thead tr {
    position: absolute;
    top: -9999px;
    left: -9999px;
  }

  .tasks-table tr {
    border: 1px solid #ccc;
    margin-bottom: 10px;
    border-radius: 5px;
  }

  .tasks-table td {
    border: none;
    position: relative;
    padding-left: 15px;
    text-align: left;
  }

  .tasks-table td:first-child {
    padding: 10px 15px;
    text-align: left;
    border-bottom: 1px solid #eee;
    background-color: #f9f9f9;
  }

  .tasks-table td:nth-child(2) {
    font-weight: bold;
    padding-top: 15px;
  }

  .custom-checkbox {
    margin: 0;
  }

  /* Återställ tabellens minimum bredd */
  .tasks-table {
    min-width: initial;
  }

  .table-responsive {
    overflow-x: visible;
  }
}

</style> </head> <body> <div class="header"> <h1 class="title"> <img src="https://valingeveckan.wordpress.com/wp-content/uploads/2025/04/namnlos-design-4-1.png" alt="AINNOVA Logo" class="logo"> AI-Körkort – 25 Basuppdrag </h1> <div class="subtitle">Interaktiv checklista • Sparas automatiskt i din webbläsare</div> </div>

<div class="section"> <h2> <img src="https://valingeveckan.wordpress.com/wp-content/uploads/2025/04/namnlos-design-4-1.png" alt="AINNOVA Icon" class="logo"> Deltagarinfo </h2> <div class="info-field"> <label for="name">Namn:</label> <input type="text" id="name" placeholder="Ditt namn"> </div> <div class="info-field"> <label for="start">Start:</label> <input type="text" id="start" placeholder="Startdatum"> </div> <div class="info-field"> <label for="end">Slut:</label> <input type="text" id="end" placeholder="Slutdatum"> </div> <div class="badge-levels"> <strong>Badge-nivåer:</strong> Bronze = 1–4 ✓ • Silver = 5–14 ✓ • Guld = 15–24 ✓ • Platina = 25 ✓ </div> </div>

<div class="section"> <h2> <img src="https://valingeveckan.wordpress.com/wp-content/uploads/2025/04/namnlos-design-4-1.png" alt="AINNOVA Icon" class="logo"> Summering </h2> <div class="summary"> <div class="summary-item"> <div class="summary-item-title">ANTAL AVKLARADE</div> <div id="count-value" class="summary-value">0</div> </div> <div class="summary-item"> <div class="summary-item-title">BADGE-NIVÅ</div> <div id="badge-value" class="summary-value">-</div> </div> </div> </div>

<div class="section"> <h2> <img src="https://valingeveckan.wordpress.com/wp-content/uploads/2025/04/namnlos-design-4-1.png" alt="AINNOVA Icon" class="logo"> Så skapar du ditt examensbevis </h2> <ol> <li>Slutför uppgifterna och bocka av dem i listan</li> <li>När du är klar, klicka på "Spara som PDF"</li> <li>Du kan också skriva ut sidan genom att klicka på "Skriv ut"</li> <li>Om du behöver börja om, klicka på "Nollställ"</li> </ol> <div class="btn-container"> <button id="print-btn" class="btn" onclick="window.print()">Skriv ut</button> <button id="pdf-btn" class="btn" onclick="window.print()">Spara som PDF</button> <button id="reset-btn" class="btn btn-secondary">Nollställ</button> </div> </div>

<!-- Checklistan sist, med en klass för att kontrollera sidbrytning vid utskrift --> <div class="section checklist-section"> <h2> <img src="https://valingeveckan.wordpress.com/wp-content/uploads/2025/04/namnlos-design-4-1.png" alt="AINNOVA Icon" class="logo"> Checklista </h2> <div class="table-responsive"> <table class="tasks-table"> <thead> <tr> <th>✓</th> <th>Uppdrag</th> <th>Beskrivning</th> </tr> </thead> <tbody id="tasks-container"> <!-- Task items will be inserted here by JavaScript --> </tbody> </table> </div> </div>

<div class="copyright"> AINNOVA AB är ett registrerat varumärke. Vi samlar inte dina uppgifter men garanterar att du får en lärorik resa genom våra examensuppgifter. Våra examensbevis kan du kalla "Learning by doing" i ditt CV. "Jag gick AINNOVAS kurs och gjorde alla delmoment." </div>

<footer> <p>Version 6.0 – Interaktiv och självständig • Sparar automatiskt dina framsteg</p> </footer>

<script> // Förbättrade och tydligare uppdragsbeskrivningar const tasks = [ { id: 1, title: "100-ordsnovell", description: "Berätta en historia på exakt 100 ord där AI räddar dagen. Var kreativ och koncis!" }, { id: 2, title: "5 bild-idéer", description: "Föreslå fem kreativa bildkoncept till din nästa presentation (t.ex. metaforer, diagram eller illustrationer)." }, { id: 3, title: "Stilbyte", description: "Skriv om valfri text i tre olika stilar (t.ex. formell, poetisk och humoristisk)." }, { id: 4, title: "Promptpoesi", description: "Skapa en effektiv prompt som får AI att skriva en sonett med 14 verser om ett ämne du väljer." }, { id: 5, title: "Explain-like-I'm-5", description: "Förklara ett komplext begrepp (t.ex. AI, kvantfysik eller finanskrisen) så enkelt att ett barn förstår." }, { id: 6, title: "Lightning-talk-script", description: "Skriv ett 3-minuters presentationsmanus om ett AI-ämne du är intresserad av." }, { id: 7, title: "Lista & Bulletify", description: "Ta en lång text och omvandla den till en tydlig och strukturerad punktlista." }, { id: 8, title: "Mini-quiz", description: "Skapa 5 intressanta flervalsfrågor med facit inom ett ämne du brinner för." }, { id: 9, title: "One-pager-sammanfattning", description: "Kondensera en längre text eller artikel till en koncis sammanfattning som får plats på en A4-sida." }, { id: 10, title: "Bias-bingo", description: "Identifiera tre olika kognitiva biaser (tankefel) i en text du väljer. Förklara varför det är bias." }, { id: 11, title: "Fact-check light", description: "Ta ett påstående och hitta tre olika källhänvisningar som antingen styrker eller motbevisar det." }, { id: 12, title: "Hallucinationstest", description: "Ställ en klurig fråga till en AI och se om den hittar på svar. Dokumentera resultatet." }, { id: 13, title: "För- & nackdelar", description: "Lista 3 fördelar och 3 nackdelar med ett AI-verktyg du har provat eller vill prova." }, { id: 14, title: "Tonalitets-analys", description: "Analysera känslan (positiv/neutral/negativ) i 5 sociala medie-inlägg och motivera din bedömning." }, { id: 15, title: "Policy-pitch", description: "Skriv en halvsida med förslag på etiska regler för AI-användning i en organisation." }, { id: 16, title: "Futuristens brev", description: "Skriv ett brev från år 2035 där du beskriver hur AI har förändrat ditt yrke eller bransch." }, { id: 17, title: "Risklista", description: "Identifiera och beskriv de 3 största riskerna med generativ AI i skolan eller utbildningssammanhang." }, { id: 18, title: "Möjlighets-karta", description: "Beskriv fem positiva sätt som AI kan förbättra din vardag eller ditt arbete." }, { id: 19, title: "Ethics FAQ", description: "Skapa en kort FAQ med 5 vanliga frågor och svar om upphovsrätt kopplat till AI-genererat innehåll." }, { id: 20, title: "Daglig todolista", description: "Prioritera och strukturera dagens uppgifter på ett effektivt sätt med hjälp av AI." }, { id: 21, title: "Inbox Zero-tips", description: "Utveckla 3 strategier för att effektivt rensa och hantera din e-post för bättre produktivitet." }, { id: 22, title: "Fokus-timer-idéer", description: "Beskriv 5 olika tekniker för djup fokus under 25-minuterspass (t.ex. Pomodoro-varianter)." }, { id: 23, title: "Kreativ paus", description: "Sammanställ 10 korta mikropauser (2-5 min) som boostar kreativitet och återhämtning." }, { id: 24, title: "Kvälls-reflektion", description: "Formulera 3 kraftfulla frågor för daglig reflektion som utvecklar självinsikt och inlärning." }, { id: 25, title: "Bonus-uppdrag", description: "Skapa ditt eget AI-relaterade uppdrag och genomför det. Var kreativ!" } ];

// DOM elements
const tasksContainer = document.getElementById("tasks-container");
const nameInput = document.getElementById("name");
const startInput = document.getElementById("start");
const endInput = document.getElementById("end");
const countValue = document.getElementById("count-value");
const badgeValue = document.getElementById("badge-value");
const resetBtn = document.getElementById("reset-btn");

// State
let completedTasks = [];

// Load saved data
function loadSavedData() {
  try {
    const savedData = localStorage.getItem("aiKorkortData");
    if (savedData) {
      const data = JSON.parse(savedData);
      nameInput.value = data.name || "";
      startInput.value = data.start || "";
      endInput.value = data.end || "";
      completedTasks = data.completedTasks || [];
    }
  } catch (e) {
    console.log("Kunde inte ladda sparad data:", e);
    completedTasks = [];
  }
}

// Save data
function saveData() {
  try {
    const data = {
      name: nameInput.value,
      start: startInput.value,
      end: endInput.value,
      completedTasks: completedTasks
    };
    localStorage.setItem("aiKorkortData", JSON.stringify(data));
  } catch (e) {
    console.log("Kunde inte spara data:", e);
  }
}

// Render tasks
function renderTasks() {
  tasksContainer.innerHTML = "";
  tasks.forEach(task => {
    const isCompleted = completedTasks.includes(task.id);

    const taskRow = document.createElement("tr");

    taskRow.innerHTML = `
      <td>
        <label class="custom-checkbox">
          <input type="checkbox" id="task-${task.id}" ${isCompleted ? "checked" : ""}>
          <span class="checkmark"></span>
        </label>
      </td>
      <td>
        <span class="task-title">${task.title}</span>
      </td>
      <td class="task-description">${task.description}</td>
    `;

    const checkbox = taskRow.querySelector(`#task-${task.id}`);
    checkbox.addEventListener("change", () => {
      if (checkbox.checked) {
        if (!completedTasks.includes(task.id)) {
          completedTasks.push(task.id);
        }
      } else {
        completedTasks = completedTasks.filter(id => id !== task.id);
      }
      updateSummary();
      saveData();
    });

    tasksContainer.appendChild(taskRow);
  });
}

// Update summary
function updateSummary() {
  const count = completedTasks.length;
  countValue.textContent = count;

  let badge = "-";
  let badgeClass = "";

  if (count >= 1 && count <= 4) {
    badge = "Bronze";
    badgeClass = "bronze";
  } else if (count >= 5 && count <= 14) {
    badge = "Silver";
    badgeClass = "silver";
  } else if (count >= 15 && count <= 24) {
    badge = "Guld";
    badgeClass = "gold";
  } else if (count === 25) {
    badge = "Platina";
    badgeClass = "platinum";
  }

  badgeValue.textContent = badge;
  badgeValue.className = "summary-value " + badgeClass;
}

// Initialize
function init() {
  // Sätt upp händelsehanterare för reset-knappen
  resetBtn.addEventListener("click", () => {
    if (confirm("Är du säker på att du vill nollställa alla framsteg?")) {
      localStorage.removeItem("aiKorkortData");
      nameInput.value = "";
      startInput.value = "";
      endInput.value = "";
      completedTasks = [];
      renderTasks();
      updateSummary();
    }
  });

  // Läs in sparad data
  loadSavedData();

  // Rendera uppgifter
  renderTasks();

  // Uppdatera sammanfattning
  updateSummary();

  // Lägg till händelsehanterare för input-fält
  nameInput.addEventListener("input", saveData);
  startInput.addEventListener("input", saveData);
  endInput.addEventListener("input", saveData);

  // Sätt dagens datum som standardvärde för startdatum om tomt
  if (!startInput.value) {
    const today = new Date();
    const day = String(today.getDate()).padStart(2, '0');
    const month = String(today.getMonth() + 1).padStart(2, '0');
    const year = today.getFullYear();
    startInput.value = `${year}-${month}-${day}`;
    saveData();
  }
}

// Starta appen
document.addEventListener("DOMContentLoaded", init);

</script> </body> </html>