ReadyMedia commited on
Commit
285bacb
·
verified ·
1 Parent(s): 954e692

Funksjons- og designspesifikasjon for NTNU Crestron 10” Touchpanel (HTML5)

Browse files

Formål
Dette dokumentet beskriver funksjonalitet, menyer, grafisk profil, farger, typografi, ikoner, universell utforming og designkrav for HTML5-versjonen av NTNUs Crestron 10” touchpanel.
Panelet er det sentrale grensesnittet som lærere og ansatte møter i alle undervisningsrom, og fungerer som kontrollflaten for alt audiovisuelt utstyr i rommet. Herfra slår man på anlegget, velger hvilke kilder som skal vises på bildeflater, og styrer lyd, lys, blendingsgardiner, lerret og annet teknisk utstyr som er nødvendig for å gjennomføre undervisning.
Brukergruppen består både av erfarne ansatte og personer som aldri tidligere har brukt utstyret. Derfor er enkelhet og tydelighet avgjørende. Alle funksjoner skal være så intuitive som mulig, samtidig som de dekker behovene i undervisningssituasjoner. For å ivareta dette er panelet organisert med hovedmenyer for de mest brukte funksjonene, og undermenyer for utstyr og valg som benyttes mer sjelden.
I tillegg finnes det en egen tekniker-meny som kun kan åpnes med PIN-kode «00000». Denne er forbeholdt AV-ansvarlige og supportpersonell, og gir tilgang til funksjoner for feilsøking, statusvisning, oppsett og justeringer.
Enkelhet, gjenkjennbarhet og konsistens er helt sentralt i designet. Alle undervisningsrom skal ha samme logikk, struktur og grafiske uttrykk, slik at brukerne alltid møter et kjent grensesnitt uavhengig av rom.


Rammer
• Format: 16:9 liggende.
• Panelets fysiske størrelse: 10”.
• Input: kun touch. Alle knapper og elementer må være store nok til komfortabel bruk (minimum 44x44 px).
• Universell utforming: WCAG 2.1 AA minimum, helst AAA.

Overordnet stil
• Minimalistisk og rent design.
• Store hvite flater med tydelig avgrensede bokser
• Ingen unødvendige grafiske elementer – kun det som er funksjonelt.
• Høy kontrast mellom bakgrunn, ikoner og tekst.

Helhetsinntrykk
• Ryddig, oversiktlig og intuitivt.
• Enkelt nok for uerfarne brukere, men kraftig nok til å dekke alle behov.
• Designet skal være konsekvent i alle rom for gjenkjennelse og trygghet.

Funksjoner og beskrivelse av menyer:

Oppstart
Når skjermen berøres, våkner panelet.
Skjermen viser «Start rom». Når denne trykkes, trigges oppstart av systemet (lyd, bilde, kamera).

Standardoppsett ved oppstart:
• Bilde-meny vises som default i hovedfelt.

Fast topplinje (alltid synlig)
• Språkvalg: toggle mellom Norsk og English.
• NTNU-logo: sentrert, kun i NTNU-blå.
• Hjelp-knapp: åpner hjelpetekst eller QR-kode.
• Opptaksindikasjon: ikon som viser rødt/grønt avhengig av om opptak er aktivt/bestilt.
All tekst og info på knapper skal være tilgjengelig i både Norsk bokmål og Engelsk. Når man trigger mellom språk så skal de bytte på alle deler av designet.

Fast Høyre meny (alltid synlig)
• Programvolum opp/ned (fader som får fra 0-100%) samt + og – tegn under som også kan brukes.
• Mute-knapp for programlyd (Grønn = På, Rød = Av).

Fast bunnmeny (navigasjon)
Navigasjonslinjen er alltid synlig nederst. Knappene endrer innhold i hovedfeltet.
• Hovedmeny (ikon: hus)
• Bilde (ikon: skjerm/projektor)
• Lyd (ikon: høyttaler)
• Lys (ikon: lyspære)
• Gardin og lerret (ikon: rullegardin/lerret)
• Kamera (ikon: kamera)
• Tekniker (ikon: verktøy, skjult for lærere)
• Avslutt (ikon: power-symbol)

Hovedfelt per menyvalg
• Minimalistisk og rent design.
• Store hvite flater med tydelig avgrensede bokser for kilder og destinasjoner.





Bilde:
Hovedfelt
• Delt i to seksjoner:
o Kilder øverst: bokser med ikoner og tekst (NTNU PC, Laptop HDMI, Dokumentkamera).
o Destinasjoner nederst: egne bokser for Projektor 1, Projektor 2 (ev. 3), med instruksjonstekst «Dra kilde hit».
o Bredde settes av kilde koksene, men destinasjon boksene skal tilpasse størrelse og midstille samt fylle feltet i menyen.
• Når en kilde dras ned til en destinasjon, legges ikon + tekst synlig inn i boksen for å bekrefte valget.
• Dersom man drar bort en kilde, blir destinasjonen tom igjen.
• Drar man ned en ny kilde til samme destinasjon, erstatter den forrige.
• Boksene skal ha avrundede hjørner og en lett skygge for å tydeliggjøre interaktive områder.


Denne menyen brukes til å rute kilder til destinasjoner ved hjelp av Drag’n Drop.
• Øverste linje viser alle kilder i en egen boks: NTNU-PC, Laptop, Dokumentkamera, Bilde Av.
• Nederste del viser destinasjoner, én boks per skjerm/projektor. Standardoppsett er to destinasjoner: «Projektor 01» og «Projektor 02», men i noen rom finnes én eller tre.

Bruk av Drag’n Drop
• Brukeren trykker og holder på ønsket kilde (ikon + tekst).
• Når kilden dras ned til en destinasjonsboks, legges ikonet med tekst synlig der som en tydelig indikasjon på valgt kilde.
• Dersom man drar en ny kilde til en destinasjon som allerede har en kilde, erstattes den forrige automatisk.
• Dersom brukeren drar kilden ut av destinasjonsboksen, blir destinasjonen tom igjen.
• Høyttalerikon i høyre hjørne på destinasjonsboksen viser hvilken kilde som gir programlyd. Sist rutet kilde blir lydkilden (grønn = aktiv, rød = inaktiv).

Lyd
• Justering av mikrofonvolum opp/ned på fader. (Mic1, Mic2, Mic3, Mic4) og en mute knapp for hver mikrofon.
• Mulighet til å velge eller overstyre hvilken kilde som sender ut programlyd. (list alle bildekilder og mulighet til å velge blandt de hvem som skal gå ut på anelegget. Denne overstyrer da funksjon som vbruker siste valgte kilde.
Lys
Presets med Av/På-funksjon:
• Alt lys Av/På
• Podielys Av/På
• Tavlelys Av/På
• Videolys Av/På
Faders (0–100 %):
• Lys i sal
• Lys på podie

Gardin og lerret
• Lerret 1 og 2: opp, ned, stopp.
• Gardiner: opp, ned, stopp.

Kamera (lærer)
Preset-basert styring:
• Tavle (default ved oppstart)
• Kateter
• Podium
• Tavle venstre
• Tavle midt
• Tavle høyre
Egne knapper for tracking: Kamera tracking På / Av.

Avslutt
• Dialog med valg: Avslutt, Tilbake til hovedmeny, Avbryt.
• Tilbakemeldingsspørsmål: «Hvordan fungerte rommet i dag?»
• Bruker velger grønn, gul eller rød smiley. Resultat lagres og vises i teknikermeny + eksternt system.

Teknikermeny (skjult for lærere)
Passordbeskyttet meny med avanserte funksjoner.
Valg:
• Systeminnstillinger
• Lydmikser
• Videomikser
• Pare mikrofon
• Kamera (full PTZ)
• Tilbakemeldinger
• Feilsøking
Systeminnstillinger
Endring av teknikerpassord. Viser Crestron-versjon, sist endret, programmerer/firma.
Lydmikser
Inputs: Mic1–Mic4, mute og ±20 dB justering.
Outputs: Panopto, ZoomRom, tappinger, med ±20 dB justering.
Videomikser
Ruting til Panopto input 1–3 og tappinger.
Pare mikrofon
«Pair now»-knapper for Sennheiser-mottakere.
Kamera (tekniker)
Full PTZ-kontroll. Lagre og overskrive presets.
Tilbakemeldinger
Oversikt over antall grønne/gule/røde smileys siste måned.
Feilsøking
Viser status for alle enheter. Panelet pinger enheter hvert minutt, viser grønn/rød status.

Grafisk profil
Farger
Primærfarge: NTNU-blå
• RGB: 0,80,158
• HEX: #00509e
• CMYK: 100,75,0,5
Sekundærfarger: sort og grå.
Støttefarger (med lys/mørk variasjon):
• Lys blå (#6096d0, #3e628a, #cfdaf1)
• Blågrå (#253a55, #9db7e1)
• Beige (#7d705a, #eee5d5)
• Brun (#3d3732, #e0d0af)
• Oransje (#ef8114, #f4ac67, #90552a, #fdd9b5)
• Turkis (#3cbfbe, #2e7578, #d1eaeb)
• Gul (#f7d019, #fbdf7b, #8d7835, #fdf0c4)
• Lilla (#b01b81, #c871ac, #75225e, #e3bcda)
• Mørk lilla (#482776, #7f619c, #372557, #beafd0)
• Grønn (#bcd025, #7c8934, #ebf0c4)
Bruk alltid NTNU-blå som grunnmur. Støttefarger kun i kombinasjon med blå, og maksimalt én per skjermbilde.

Skrifttyper og typografi
• Open Sans er obligatorisk. Arial kun som fallback.
• Tre nivåer:
o Nivå 1: Hovedtitler og viktige knapper. Open Sans Bold, 18–20 pt.
o Nivå 2: Menyelementer og navigasjon. Open Sans Semibold, 16–18 pt.
o Nivå 3: Brødtekst og status. Open Sans Regular, 14–16 pt.
• Linjeavstand: 120–140 % av fontstørrelse.
• Ingen bruk av kursiv eller versaler i hele ord.
• Bold brukes kun for hierarki, ikke i løpende tekst.

Ikoner
Ikoner skal være universelt gjenkjennelige og alltid ledsages av tekst.
Standard: hus (hovedmeny), skjerm/projektor (bilde), høyttaler (lyd), lyspære (lys), rullegardin (gardin/lerret), kamera (kamera), verktøy (tekniker), power (avslutt).
Ikonfarge: hvit på blå bakgrunn, blå på lys bakgrunn.

Layout og universell utforming
• God avstand mellom interaktive elementer for å unngå feiltrykk.
• Tydelig kontrast mellom aktiv og inaktiv status.
• Luftige flater og asymmetrisk balanse (jf. NTNUs designprinsipper).

Files changed (2) hide show
  1. README.md +8 -5
  2. index.html +268 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Edutouch Control Hub
3
- emoji: 🏃
4
- colorFrom: indigo
5
- colorTo: gray
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: EduTouch Control Hub 🎛️
3
+ colorFrom: purple
4
+ colorTo: green
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://deepsite.hf.co).
index.html CHANGED
@@ -1,19 +1,269 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>EduTouch Control Hub</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://unpkg.com/feather-icons"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
10
+ <script>
11
+ tailwind.config = {
12
+ theme: {
13
+ extend: {
14
+ colors: {
15
+ ntnu: {
16
+ DEFAULT: '#00509e',
17
+ 100: '#cfdaf1',
18
+ 500: '#00509e',
19
+ 700: '#253a55',
20
+ 900: '#0a1a2d'
21
+ },
22
+ accent: {
23
+ green: '#bcd025',
24
+ red: '#ef4444',
25
+ yellow: '#f7d019',
26
+ orange: '#ef8114'
27
+ }
28
+ },
29
+ fontFamily: {
30
+ sans: ['Open Sans', 'Arial', 'sans-serif']
31
+ }
32
+ }
33
+ }
34
+ }
35
+ </script>
36
+ <style>
37
+ @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;600;700&display=swap');
38
+ body {
39
+ font-family: 'Open Sans', sans-serif;
40
+ touch-action: manipulation;
41
+ }
42
+ .drag-source {
43
+ touch-action: none;
44
+ user-select: none;
45
+ }
46
+ .drop-target {
47
+ transition: all 0.2s ease;
48
+ }
49
+ .drop-target.active {
50
+ box-shadow: 0 0 0 2px #00509e;
51
+ }
52
+ .icon-btn {
53
+ min-width: 44px;
54
+ min-height: 44px;
55
+ }
56
+ </style>
57
+ </head>
58
+ <body class="bg-ntnu-100 text-ntnu-900 h-screen overflow-hidden flex flex-col">
59
+ <!-- Top Bar -->
60
+ <header class="bg-ntnu-500 text-white p-2 flex items-center justify-between">
61
+ <div class="flex items-center space-x-4">
62
+ <button class="icon-btn p-2 rounded-full hover:bg-ntnu-700 transition">
63
+ <i data-feather="globe"></i>
64
+ </button>
65
+ <span class="font-bold">NO/EN</span>
66
+ </div>
67
+ <div class="flex-1 flex justify-center">
68
+ <img src="http://static.photos/white/320x240/1" alt="NTNU Logo" class="h-10">
69
+ </div>
70
+ <div class="flex items-center space-x-4">
71
+ <button class="icon-btn p-2 rounded-full hover:bg-ntnu-700 transition">
72
+ <i data-feather="help-circle"></i>
73
+ </button>
74
+ <div class="w-8 h-8 rounded-full bg-accent-red flex items-center justify-center">
75
+ <i data-feather="circle" class="text-white" fill="currentColor"></i>
76
+ </div>
77
+ </div>
78
+ </header>
79
+
80
+ <!-- Main Content -->
81
+ <main class="flex-1 flex overflow-hidden">
82
+ <!-- Right Audio Panel -->
83
+ <div class="w-20 bg-ntnu-700 text-white flex flex-col items-center p-4 space-y-6">
84
+ <div class="text-center">
85
+ <p class="text-sm mb-1">Volume</p>
86
+ <input type="range" min="0" max="100" value="75"
87
+ class="w-8 h-32 -rotate-90 mt-16 accent-white">
88
+ </div>
89
+ <button class="icon-btn bg-accent-green rounded-full p-2 flex flex-col items-center">
90
+ <i data-feather="volume-2" class="text-white"></i>
91
+ <span class="text-xs mt-1">Mute</span>
92
+ </button>
93
+ </div>
94
+
95
+ <!-- Central Content -->
96
+ <div class="flex-1 p-6 overflow-auto">
97
+ <div class="max-w-4xl mx-auto">
98
+ <h1 class="text-2xl font-bold mb-6 text-ntnu-900">Bilde</h1>
99
+
100
+ <!-- Sources Section -->
101
+ <div class="mb-8">
102
+ <h2 class="text-lg font-semibold mb-4">Kilder</h2>
103
+ <div class="grid grid-cols-3 gap-4">
104
+ <div class="drag-source bg-white rounded-lg shadow-md p-4 flex flex-col items-center justify-center cursor-move"
105
+ draggable="true" data-source="ntnu-pc">
106
+ <i data-feather="monitor" class="text-ntnu-500 w-10 h-10 mb-2"></i>
107
+ <span class="font-medium">NTNU PC</span>
108
+ </div>
109
+ <div class="drag-source bg-white rounded-lg shadow-md p-4 flex flex-col items-center justify-center cursor-move"
110
+ draggable="true" data-source="laptop">
111
+ <i data-feather="laptop" class="text-ntnu-500 w-10 h-10 mb-2"></i>
112
+ <span class="font-medium">Laptop HDMI</span>
113
+ </div>
114
+ <div class="drag-source bg-white rounded-lg shadow-md p-4 flex flex-col items-center justify-center cursor-move"
115
+ draggable="true" data-source="doc-cam">
116
+ <i data-feather="video" class="text-ntnu-500 w-10 h-10 mb-2"></i>
117
+ <span class="font-medium">Dokumentkamera</span>
118
+ </div>
119
+ </div>
120
+ </div>
121
+
122
+ <!-- Destinations Section -->
123
+ <div>
124
+ <h2 class="text-lg font-semibold mb-4">Destinasjoner</h2>
125
+ <div class="grid grid-cols-2 gap-6">
126
+ <div class="drop-target bg-white rounded-lg shadow-md p-6 h-48 flex flex-col justify-center items-center border-2 border-dashed border-ntnu-100"
127
+ data-destination="projector-1">
128
+ <p class="text-ntnu-700 mb-4">Dra kilde hit</p>
129
+ <div class="source-placeholder hidden flex-col items-center">
130
+ <i data-feather="monitor" class="text-ntnu-500 w-10 h-10 mb-2"></i>
131
+ <span class="font-medium"></span>
132
+ <div class="mt-4 w-8 h-8 rounded-full bg-accent-green flex items-center justify-center">
133
+ <i data-feather="volume-2" class="text-white w-4 h-4"></i>
134
+ </div>
135
+ </div>
136
+ <span class="mt-4 font-medium">Projektor 1</span>
137
+ </div>
138
+ <div class="drop-target bg-white rounded-lg shadow-md p-6 h-48 flex flex-col justify-center items-center border-2 border-dashed border-ntnu-100"
139
+ data-destination="projector-2">
140
+ <p class="text-ntnu-700 mb-4">Dra kilde hit</p>
141
+ <div class="source-placeholder hidden flex-col items-center">
142
+ <i data-feather="monitor" class="text-ntnu-500 w-10 h-10 mb-2"></i>
143
+ <span class="font-medium"></span>
144
+ <div class="mt-4 w-8 h-8 rounded-full bg-ntnu-100 flex items-center justify-center">
145
+ <i data-feather="volume-x" class="text-ntnu-700 w-4 h-4"></i>
146
+ </div>
147
+ </div>
148
+ <span class="mt-4 font-medium">Projektor 2</span>
149
+ </div>
150
+ </div>
151
+ </div>
152
+ </div>
153
+ </div>
154
+ </main>
155
+
156
+ <!-- Bottom Navigation -->
157
+ <nav class="bg-white shadow-lg p-2">
158
+ <div class="flex justify-around max-w-2xl mx-auto">
159
+ <button class="icon-btn flex flex-col items-center text-ntnu-500">
160
+ <i data-feather="home" class="w-6 h-6"></i>
161
+ <span class="text-xs mt-1">Hjem</span>
162
+ </button>
163
+ <button class="icon-btn flex flex-col items-center text-ntnu-500 bg-ntnu-100 rounded-lg">
164
+ <i data-feather="monitor" class="w-6 h-6"></i>
165
+ <span class="text-xs mt-1">Bilde</span>
166
+ </button>
167
+ <button class="icon-btn flex flex-col items-center text-ntnu-500">
168
+ <i data-feather="volume-2" class="w-6 h-6"></i>
169
+ <span class="text-xs mt-1">Lyd</span>
170
+ </button>
171
+ <button class="icon-btn flex flex-col items-center text-ntnu-500">
172
+ <i data-feather="sun" class="w-6 h-6"></i>
173
+ <span class="text-xs mt-1">Lys</span>
174
+ </button>
175
+ <button class="icon-btn flex flex-col items-center text-ntnu-500">
176
+ <i data-feather="layers" class="w-6 h-6"></i>
177
+ <span class="text-xs mt-1">Gardin</span>
178
+ </button>
179
+ <button class="icon-btn flex flex-col items-center text-ntnu-500">
180
+ <i data-feather="video" class="w-6 h-6"></i>
181
+ <span class="text-xs mt-1">Kamera</span>
182
+ </button>
183
+ <button class="icon-btn flex flex-col items-center text-ntnu-500">
184
+ <i data-feather="settings" class="w-6 h-6"></i>
185
+ <span class="text-xs mt-1">Tekniker</span>
186
+ </button>
187
+ <button class="icon-btn flex flex-col items-center text-ntnu-500">
188
+ <i data-feather="power" class="w-6 h-6"></i>
189
+ <span class="text-xs mt-1">Avslutt</span>
190
+ </button>
191
+ </div>
192
+ </nav>
193
+
194
+ <script>
195
+ feather.replace();
196
+
197
+ // Drag and Drop functionality
198
+ document.addEventListener('DOMContentLoaded', () => {
199
+ const dragSources = document.querySelectorAll('.drag-source');
200
+ const dropTargets = document.querySelectorAll('.drop-target');
201
+
202
+ let draggedItem = null;
203
+
204
+ // Drag start
205
+ dragSources.forEach(source => {
206
+ source.addEventListener('dragstart', (e) => {
207
+ draggedItem = source;
208
+ e.dataTransfer.setData('text/plain', source.dataset.source);
209
+ setTimeout(() => {
210
+ source.classList.add('opacity-0');
211
+ }, 0);
212
+ });
213
+
214
+ source.addEventListener('dragend', () => {
215
+ source.classList.remove('opacity-0');
216
+ });
217
+ });
218
+
219
+ // Drag over
220
+ dropTargets.forEach(target => {
221
+ target.addEventListener('dragover', (e) => {
222
+ e.preventDefault();
223
+ target.classList.add('active');
224
+ });
225
+
226
+ target.addEventListener('dragleave', () => {
227
+ target.classList.remove('active');
228
+ });
229
+
230
+ target.addEventListener('drop', (e) => {
231
+ e.preventDefault();
232
+ target.classList.remove('active');
233
+
234
+ if (draggedItem) {
235
+ const sourceType = draggedItem.dataset.source;
236
+ const placeholder = target.querySelector('.source-placeholder');
237
+ const icon = placeholder.querySelector('i');
238
+ const text = placeholder.querySelector('span');
239
+
240
+ // Update placeholder with dragged item content
241
+ const draggedIcon = draggedItem.querySelector('i');
242
+ const draggedText = draggedItem.querySelector('span');
243
+
244
+ icon.setAttribute('data-feather', draggedIcon.getAttribute('data-feather'));
245
+ text.textContent = draggedText.textContent;
246
+
247
+ placeholder.classList.remove('hidden');
248
+ target.querySelector('p').classList.add('hidden');
249
+
250
+ // Update audio indicator (green for last selected)
251
+ const audioIndicators = document.querySelectorAll('.drop-target .source-placeholder > div');
252
+ audioIndicators.forEach(indicator => {
253
+ indicator.classList.remove('bg-accent-green');
254
+ indicator.classList.add('bg-ntnu-100');
255
+ indicator.querySelector('i').setAttribute('data-feather', 'volume-x');
256
+ });
257
+
258
+ target.querySelector('.source-placeholder > div').classList.remove('bg-ntnu-100');
259
+ target.querySelector('.source-placeholder > div').classList.add('bg-accent-green');
260
+ target.querySelector('.source-placeholder > div i').setAttribute('data-feather', 'volume-2');
261
+
262
+ feather.replace();
263
+ }
264
+ });
265
+ });
266
+ });
267
+ </script>
268
+ </body>
269
  </html>