3030 .filter-btn .active { background : rgba (242 , 169 , 0 , 0.1 ); }
3131
3232 .trader-header { display : flex; align-items : center; gap : 25px ; background : linear-gradient (90deg , rgba (26 , 26 , 26 , 1 ) 0% , rgba (26 , 26 , 26 , 0 ) 100% ); padding : 15px ; border-left : 5px solid var (--primary ); margin : 2.5rem 0 1.5rem 0 ; cursor : pointer; }
33- .trader-portrait { width : 120px ; height : 120px ; border : 2px solid var (--primary ); object-fit : cover; object-position : center top; background : # 222 ; }
33+
34+ .trader-portrait {
35+ width : 120px ;
36+ height : 120px ;
37+ border : 2px solid var (--primary );
38+ object-fit : cover;
39+ object-position : center top; /* Исправляет положение лица доктора */
40+ background : # 222 ;
41+ }
42+
3443 .trader-info h2 { color : var (--primary ); margin : 0 ; text-transform : uppercase; font-size : 1.6rem ; }
3544
3645 .quest-grid { display : grid; grid-template-columns : repeat (auto-fill, minmax (320px , 1fr )); gap : 1rem ; margin-bottom : 3rem ; }
37- .quest-card { background : var (--card-bg ); border : 1px solid var (--border ); padding : 1rem ; display : flex; flex-direction : column; min-height : 380 px ; transition : 0.2s ; }
46+ .quest-card { background : var (--card-bg ); border : 1px solid var (--border ); padding : 1rem ; display : flex; flex-direction : column; min-height : 400 px ; transition : 0.2s ; }
3847 .q-header { display : flex; justify-content : space-between; align-items : center; margin-bottom : 0.8rem ; border-bottom : 1px solid var (--border ); padding-bottom : 0.5rem ; }
48+
3949 .q-title { color : var (--primary ); font-weight : bold; text-transform : uppercase; font-size : 0.9rem ; }
4050 .q-title-clickable { color : var (--primary ); font-weight : bold; text-transform : uppercase; font-size : 0.9rem ; cursor : pointer; text-decoration : underline; text-underline-offset : 3px ; text-decoration-color : rgba (242 , 169 , 0 , 0.3 ); }
4151
6575 .modal { display : none; position : fixed; z-index : 1000 ; left : 0 ; top : 0 ; width : 100% ; height : 100% ; background : rgba (0 , 0 , 0 , 0.95 ); backdrop-filter : blur (8px ); }
6676 .modal-content { background : var (--card-bg ); margin : 5% auto; padding : 25px ; border : 1px solid var (--primary ); width : 90% ; max-width : 1100px ; position : relative; overflow-y : auto; max-height : 85vh ; }
6777 .close-modal { position : absolute; right : 20px ; top : 15px ; color : var (--primary ); font-size : 2.5rem ; cursor : pointer; }
78+
6879 .location-pics { display : grid; grid-template-columns : repeat (auto-fit, minmax (280px , 1fr )); gap : 15px ; margin-top : 25px ; }
69- .location-img { width : 100% ; display : block; border : 1px solid var (--border ); background : # 111 ; }
70- .location-img img { width : 100% ; display : block; }
80+ .location-img { width : 100% ; display : block; border : 1px solid var (--border ); background : # 111 ; overflow : hidden; }
81+
82+ /* Убирает лишнюю полоску снизу на фото */
83+ .location-img img {
84+ width : 100% ;
85+ height : 250px ;
86+ display : block;
87+ object-fit : cover;
88+ }
89+
90+ .pic-box { display : flex; flex-direction : column; gap : 5px ; }
91+ .pic-label { font-size : 0.65rem ; color : var (--primary ); text-transform : uppercase; letter-spacing : 1px ; }
92+
7193 # modalTraderLoc { font-style : italic; border-left : 2px solid var (--primary ); padding-left : 15px ; margin : 15px 0 ; color : # fff ; line-height : 1.6 ; }
7294 </ style >
7395</ head >
@@ -118,17 +140,8 @@ <h1>VOSTOK-HELP</h1>
118140 < div class ="quest-card " id ="q_4 "> < div class ="q-header "> < span class ="q-title "> Coffee Reserve</ span > < span class ="diff diff-easy "> EASY</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Кофе</ li > < li > Кофейный фильтр</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Карта</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_4') "> ВЫПОЛНЕНО</ button > </ div >
119141
120142 < div class ="quest-card " id ="q_5 ">
121- < div class ="q-header ">
122- < span class ="q-title "> Sweaty Business</ span >
123- < span class ="diff diff-inter "> INTER</ span >
124- </ div >
125- < div >
126- < span class ="section-label "> Требуется:</ span >
127- < ul class ="needs-list ">
128- < li > Дезодорант</ li >
129- < li > Влажные салфетки</ li >
130- </ ul >
131- < span class ="section-label "> Награда:</ span >
143+ < div class ="q-header "> < span class ="q-title "> Sweaty Business</ span > < span class ="diff diff-inter "> INTER</ span > </ div >
144+ < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Дезодорант</ li > < li > Влажные салфетки</ li > </ ul > < span class ="section-label "> Награда:</ span >
132145 < ul class ="rewards ">
133146 < li > Рыбацкий жилет</ li >
134147 < li > Удочка</ li >
@@ -158,42 +171,16 @@ <h1>VOSTOK-HELP</h1>
158171 < div class ="trader-info "> < h2 > Доктор</ h2 > < p > Локация: School (Школа)</ p > </ div >
159172 </ div >
160173 < div class ="quest-grid ">
161- < div class ="quest-card " id ="q_11 ">
162- < div class ="q-header " onclick ="openQuestHelp('Nasty Draft', 'Бывший учитель ОБЖ латает щели в окнах школы, чтобы спасти пациентов клиники от холода.', null, null) ">
163- < span class ="q-title-clickable "> Nasty Draft</ span >
164- < span class ="diff diff-easy "> EASY</ span >
165- </ div >
166- < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Армированный скотч</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Салфетки</ li > </ ul > </ div >
167- < button class ="status-btn " onclick ="toggleQ('q_11') "> ВЫПОЛНЕНО</ button >
168- </ div >
169- < div class ="quest-card " id ="q_12 ">
170- < div class ="q-header " onclick ="openQuestHelp('Steady Hands', 'Доктору нужно унять дрожь в руках перед операциями. Секрет от Снабженца.', null, null) ">
171- < span class ="q-title-clickable "> Steady Hands</ span >
172- < span class ="diff diff-easy "> EASY</ span >
173- </ div >
174- < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Сигары</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Термоодеяло</ li > </ ul > </ div >
175- < button class ="status-btn " onclick ="toggleQ('q_12') "> ВЫПОЛНЕНО</ button >
176- </ div >
177- < div class ="quest-card " id ="q_13 ">
178- < div class ="q-header " onclick ="openQuestHelp('Bookworm', 'Доктор коротает время между пациентами за чтением любой литературы.', null, null) ">
179- < span class ="q-title-clickable "> Bookworm</ span >
180- < span class ="diff diff-easy "> EASY</ span >
181- </ div >
182- < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Книга (Детская)</ li > < li > Книга (Кулинарная)</ li > < li > Книга (О рыбалке)</ li > < li > Книга (Религиозная)</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Медицинский шкаф</ li > </ ul > </ div >
183- < button class ="status-btn " onclick ="toggleQ('q_13') "> ВЫПОЛНЕНО</ button >
184- </ div >
185- < div class ="quest-card " id ="q_14 ">
186- < div class ="q-header " onclick ="openQuestHelp('Dice Master', 'Доктор подозревает Снабженца в мошенничестве и хочет свой набор для игры.', null, null) ">
187- < span class ="q-title-clickable "> Dice Master</ span >
188- < span class ="diff diff-easy "> EASY</ span >
189- </ div >
190- < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Настольная игра</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Шкафчик</ li > < li > Тележка</ li > </ ul > </ div >
191- < button class ="status-btn " onclick ="toggleQ('q_14') "> ВЫПОЛНЕНО</ button >
192- </ div >
174+ < div class ="quest-card " id ="q_11 "> < div class ="q-header "> < span class ="q-title "> Nasty Draft</ span > < span class ="diff diff-easy "> EASY</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Армированный скотч</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Салфетки</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_11') "> ВЫПОЛНЕНО</ button > </ div >
175+ < div class ="quest-card " id ="q_12 "> < div class ="q-header "> < span class ="q-title "> Steady Hands</ span > < span class ="diff diff-easy "> EASY</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Сигары</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Термоодеяло</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_12') "> ВЫПОЛНЕНО</ button > </ div >
176+ < div class ="quest-card " id ="q_13 "> < div class ="q-header "> < span class ="q-title "> Bookworm</ span > < span class ="diff diff-easy "> EASY</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Книга (Детская)</ li > < li > Книга (Кулинарная)</ li > < li > Книга (О рыбалке)</ li > < li > Книга (Религиозная)</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Медицинский шкаф</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_13') "> ВЫПОЛНЕНО</ button > </ div >
177+ < div class ="quest-card " id ="q_14 "> < div class ="q-header "> < span class ="q-title "> Dice Master</ span > < span class ="diff diff-easy "> EASY</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Настольная игра</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Шкафчик</ li > < li > Тележка</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_14') "> ВЫПОЛНЕНО</ button > </ div >
178+
193179 < div class ="quest-card " id ="q_15 "> < div class ="q-header "> < span class ="q-title "> Night Surgery</ span > < span class ="diff diff-inter "> INTER</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Налобный фонарь</ li > < li > Батарейки</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Энергетик</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_15') "> ВЫПОЛНЕНО</ button > </ div >
194180 < div class ="quest-card " id ="q_16 "> < div class ="q-header "> < span class ="q-title "> Infections</ span > < span class ="diff diff-inter "> INTER</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Антисептик</ li > < li > Антибиотики</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Бинт</ li > < li > Тряпки</ li > < li > Обезболивающее</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_16') "> ВЫПОЛНЕНО</ button > </ div >
195181 < div class ="quest-card " id ="q_17 "> < div class ="q-header "> < span class ="q-title "> Hypovolemia</ span > < span class ="diff diff-inter "> INTER</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Физраствор (3 шт.)</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Гидрозатвор</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_17') "> ВЫПОЛНЕНО</ button > </ div >
196182 < div class ="quest-card " id ="q_18 "> < div class ="q-header "> < span class ="q-title "> Mouth Organ</ span > < span class ="diff diff-hard "> HARD</ span > </ div > < div > < span class ="section-label "> Требуется:</ span > < ul class ="needs-list "> < li > Губная гармошка</ li > </ ul > < span class ="section-label "> Награда:</ span > < ul class ="rewards "> < li > Аптечка (3 шт.)</ li > </ ul > </ div > < button class ="status-btn " onclick ="toggleQ('q_18') "> ВЫПОЛНЕНО</ button > </ div >
183+
197184 < div class ="quest-card " id ="q_19 ">
198185 < div class ="q-header " onclick ="openQuestHelp('Patient Report', 'Нужно забрать отчет из школьного спортзала. Там был пункт экстренной помощи.', 'gymn-cor.jpg', 'gymn.jpg') ">
199186 < span class ="q-title-clickable "> Patient Report</ span >
@@ -213,7 +200,7 @@ <h1>VOSTOK-HELP</h1>
213200 const config = [ { l :'label1' , c :'imgCont1' , s :img1 , t :"ЗДАНИЕ:" } , { l :'label2' , c :'imgCont2' , s :img2 , t :"КОРИДОР:" } , { l :'label3' , c :'imgCont3' , s :img3 , t :"КАБИНЕТ:" } ] ;
214201 config . forEach ( item => {
215202 const box = document . getElementById ( item . l ) . parentElement ;
216- if ( item . s ) { box . style . display = 'flex' ; document . getElementById ( item . l ) . innerText = item . t ; document . getElementById ( item . c ) . innerHTML = `<img src="${ item . s } " class="location-img" >` ; }
203+ if ( item . s ) { box . style . display = 'flex' ; document . getElementById ( item . l ) . innerText = item . t ; document . getElementById ( item . c ) . innerHTML = `<img src="${ item . s } ">` ; }
217204 else { box . style . display = 'none' ; }
218205 } ) ;
219206 document . getElementById ( 'traderModal' ) . style . display = 'block' ;
@@ -245,32 +232,24 @@ <h1>VOSTOK-HELP</h1>
245232 }
246233
247234 function changeCount ( btn , val ) {
248- const li = btn . closest ( 'li' ) ;
249- const span = li . querySelector ( '.count-val' ) ;
250- const target = parseInt ( li . dataset . target ) ;
235+ const li = btn . closest ( 'li' ) ; const span = li . querySelector ( '.count-val' ) ; const target = parseInt ( li . dataset . target ) ;
251236 let current = Math . max ( 0 , Math . min ( target , parseInt ( span . innerText ) + val ) ) ;
252-
253237 span . innerText = current ;
254238 localStorage . setItem ( li . closest ( '.quest-card' ) . id + '_count' , current ) ;
255-
256- if ( current === target ) li . classList . add ( 'item-found' ) ;
257- else li . classList . remove ( 'item-found' ) ;
239+ if ( current === target ) li . classList . add ( 'item-found' ) ; else li . classList . remove ( 'item-found' ) ;
258240 }
259241
260242 function setupChecklist ( ) {
261243 document . querySelectorAll ( '.needs-list li' ) . forEach ( ( li , index ) => {
262244 const qId = li . closest ( '.quest-card' ) . id ;
263-
264245 if ( li . classList . contains ( 'has-counter' ) ) {
265246 const saved = localStorage . getItem ( qId + '_count' ) || 0 ;
266- const target = parseInt ( li . dataset . target ) ;
267247 li . querySelector ( '.count-val' ) . innerText = saved ;
268- if ( parseInt ( saved ) === target ) li . classList . add ( 'item-found' ) ;
269-
248+ if ( parseInt ( saved ) === parseInt ( li . dataset . target ) ) li . classList . add ( 'item-found' ) ;
270249 li . onclick = function ( e ) {
271250 if ( e . target . tagName === 'BUTTON' ) return ;
272- const isDone = this . classList . contains ( 'item-found' ) ;
273- const newVal = isDone ? 0 : target ;
251+ const target = parseInt ( this . dataset . target ) ;
252+ const newVal = this . classList . contains ( 'item-found' ) ? 0 : target ;
274253 this . querySelector ( '.count-val' ) . innerText = newVal ;
275254 localStorage . setItem ( qId + '_count' , newVal ) ;
276255 this . classList . toggle ( 'item-found' ) ;
@@ -289,12 +268,9 @@ <h1>VOSTOK-HELP</h1>
289268 function updateStats ( ) {
290269 const total = document . querySelectorAll ( '.quest-card' ) . length ;
291270 const done = document . querySelectorAll ( '.quest-card.completed' ) . length ;
292- const tEl = document . getElementById ( 'total-q' ) ;
293- const dEl = document . getElementById ( 'done-q' ) ;
294- const lEl = document . getElementById ( 'left-q' ) ;
295- if ( tEl ) tEl . innerText = total ;
296- if ( dEl ) dEl . innerText = done ;
297- if ( lEl ) lEl . innerText = total - done ;
271+ document . getElementById ( 'total-q' ) . innerText = total ;
272+ document . getElementById ( 'done-q' ) . innerText = done ;
273+ document . getElementById ( 'left-q' ) . innerText = total - done ;
298274 }
299275
300276 function initApp ( ) {
0 commit comments