@dssp/project 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
@@ -124,7 +124,12 @@ export class ProjectDetail extends ScopedElementsMixin(PageView) {
124
124
 
125
125
  img {
126
126
  width: 42%;
127
- height: fit-content;
127
+ height: auto;
128
+ aspect-ratio: 1920 / 1080;
129
+ }
130
+ img[no-image] {
131
+ object-fit: contain;
132
+ opacity: 0.5;
128
133
  }
129
134
 
130
135
  div[row] {
@@ -138,10 +143,13 @@ export class ProjectDetail extends ScopedElementsMixin(PageView) {
138
143
  }
139
144
 
140
145
  div[left-bottom] {
141
- img {
146
+ [building-complex-img] {
142
147
  width: 100%;
143
148
  aspect-ratio: 2 / 1;
144
149
  }
150
+ img {
151
+ opacity: 0.5;
152
+ }
145
153
 
146
154
  div[subject] {
147
155
  margin-bottom: 7px;
@@ -360,7 +368,10 @@ export class ProjectDetail extends ScopedElementsMixin(PageView) {
360
368
  <div left-top>
361
369
  <h3>기본 정보</h3>
362
370
  <div content-1>
363
- <img project-img src=${this.project.mainPhoto?.fullpath || ''} />
371
+ <img
372
+ ?no-image=${!this.project.mainPhoto?.fullpath}
373
+ src=${this.project.mainPhoto?.fullpath || '/assets/images/no-image.png'}
374
+ />
364
375
 
365
376
  <div>
366
377
  <div row>
@@ -412,7 +423,9 @@ export class ProjectDetail extends ScopedElementsMixin(PageView) {
412
423
 
413
424
  <div left-bottom>
414
425
  <h3>조감도(BIM도면)</h3>
415
- <img src=${this.project.buildingComplex?.drawing?.fullpath || ''} />
426
+ ${this.project.buildingComplex?.drawing?.fullpath
427
+ ? html`<div building-complex-img></div>`
428
+ : html`<img building-complex-img src="/assets/images/img-building-complex-default.jpg" />`}
416
429
  <div>
417
430
  <div subject bold>개별 단지 상세정보 바로가기</div>
418
431
  <div building-container>
@@ -162,6 +162,10 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
162
162
  width: 285px;
163
163
  background-color: #cccccc80;
164
164
  }
165
+ img[project-img][no-image] {
166
+ object-fit: contain;
167
+ opacity: 0.5;
168
+ }
165
169
 
166
170
  span[project-info] {
167
171
  flex: 0.45;
@@ -252,7 +256,11 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
252
256
  return html`
253
257
  <div project-container>
254
258
  <a href=${`project-detail/${project.id}`}>
255
- <img project-img src=${project.mainPhoto?.fullpath || ''} />
259
+ <img
260
+ ?no-image=${!project.mainPhoto?.fullpath}
261
+ project-img
262
+ src=${project.mainPhoto?.fullpath || '/assets/images/no-image.png'}
263
+ />
256
264
 
257
265
  <span project-info>
258
266
  <div name>${project.name}</div>
@@ -79,6 +79,10 @@ export class ProjectScheduleListPage extends ScopedElementsMixin(PageView) {
79
79
  width: 285px;
80
80
  background-color: #cccccc80;
81
81
  }
82
+ img[project-img][no-image] {
83
+ object-fit: contain;
84
+ opacity: 0.5;
85
+ }
82
86
 
83
87
  span[project-info] {
84
88
  flex: 0.45;
@@ -169,7 +173,11 @@ export class ProjectScheduleListPage extends ScopedElementsMixin(PageView) {
169
173
  return html`
170
174
  <div project-container>
171
175
  <a href=${`project-schedule/${project.id}`}>
172
- <img project-img src=${project.mainPhoto?.fullpath || ''} />
176
+ <img
177
+ ?no-image=${!project.mainPhoto?.fullpath}
178
+ project-img
179
+ src=${project.mainPhoto?.fullpath || '/assets/images/no-image.png'}
180
+ />
173
181
 
174
182
  <span project-info>
175
183
  <div name>${project.name}</div>
@@ -181,14 +189,12 @@ export class ProjectScheduleListPage extends ScopedElementsMixin(PageView) {
181
189
 
182
190
  <span project-state>
183
191
  <div progress>
184
- <md-linear-progress buffer="100" max="100" value=${project.totalProgress || 0}>
185
- </md-linear-progress>
192
+ <md-linear-progress buffer="100" max="100" value=${project.totalProgress || 0}> </md-linear-progress>
186
193
  <span>전체</span>
187
194
  <span>${project.totalProgress || 0}%</span>
188
195
  </div>
189
196
  <div progress>
190
- <md-linear-progress buffer="100" max="100" value=${project.weeklyProgress || 0}>
191
- </md-linear-progress>
197
+ <md-linear-progress buffer="100" max="100" value=${project.weeklyProgress || 0}> </md-linear-progress>
192
198
  <span>주간</span>
193
199
  <span>${project.weeklyProgress || 0}%</span>
194
200
  </div>
@@ -203,14 +209,12 @@ export class ProjectScheduleListPage extends ScopedElementsMixin(PageView) {
203
209
  <span>${project.inspPassRate || 0}%</span>
204
210
  </div>
205
211
  <div progress>
206
- <md-linear-progress buffer="100" max="100" value=${project.robotProgressRate || 0}>
207
- </md-linear-progress>
212
+ <md-linear-progress buffer="100" max="100" value=${project.robotProgressRate || 0}> </md-linear-progress>
208
213
  <span>Robot Progress</span>
209
214
  <span>${project.robotProgressRate || 0}%</span>
210
215
  </div>
211
216
  <div progress>
212
- <md-linear-progress buffer="100" max="100" value=${project.structuralSafetyRate || 0}>
213
- </md-linear-progress>
217
+ <md-linear-progress buffer="100" max="100" value=${project.structuralSafetyRate || 0}> </md-linear-progress>
214
218
  <span>Structural safety</span>
215
219
  <span>${project.structuralSafetyRate || 0}%</span>
216
220
  </div>
@@ -21,8 +21,9 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
21
21
  static styles = [
22
22
  css`
23
23
  :host {
24
- display: grid;
25
- grid-template-rows: 75px auto;
24
+ display: flex;
25
+ flex-direction: column;
26
+
26
27
  color: #4e5055;
27
28
 
28
29
  width: 100%;
@@ -72,10 +73,13 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
72
73
  }
73
74
 
74
75
  div[body] {
76
+ flex: 1;
77
+
75
78
  display: flex;
76
79
  flex-direction: column;
77
80
  margin: 0px 25px 25px 25px;
78
81
  gap: 15px;
82
+ overflow: hidden;
79
83
 
80
84
  h3 {
81
85
  color: #2e79be;
@@ -88,29 +92,13 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
88
92
  border-radius: 5px;
89
93
  }
90
94
 
91
- div[chart-container] {
95
+ ox-gantt {
92
96
  flex: 1;
93
- flex-direction: column;
94
- border: 1px solid #cccccc80;
95
-
96
- div[chart] {
97
- flex: 0.7;
98
- background: #03a9f44d;
97
+ box-sizing: border-box;
98
+ overflow: hidden;
99
99
 
100
- ox-gantt {
101
- max-width: 91vw;
102
- aspect-ratio: 3 / 1;
103
- box-sizing: border-box;
104
-
105
- background-color: var(--md-sys-color-primary-container);
106
- color: var(--md-sys-color-on-primary-container);
107
- }
108
- }
109
-
110
- div[table] {
111
- flex: 0.3;
112
- background: #8fd170b8;
113
- }
100
+ background-color: var(--md-sys-color-primary-container);
101
+ color: var(--md-sys-color-on-primary-container);
114
102
  }
115
103
 
116
104
  div[select-container] {
@@ -182,6 +170,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
182
170
  dependsOn: '',
183
171
  length: '5d',
184
172
  tags: ['active'],
173
+ resources: [{ type: '철근/형틀공', allocated: 6 }],
185
174
  children: []
186
175
  },
187
176
  {
@@ -195,6 +184,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
195
184
  dependsOn: '1',
196
185
  length: '1d',
197
186
  tags: ['milestone'],
187
+ resources: [{ type: '철근/형틀공', allocated: 6 }],
198
188
  children: []
199
189
  },
200
190
  {
@@ -220,7 +210,35 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
220
210
  dependsOn: '',
221
211
  length: '4d',
222
212
  tags: ['done'],
223
- children: []
213
+ children: [
214
+ {
215
+ id: '3-1-1',
216
+ title: 'Coding-A',
217
+ type: 'task',
218
+ // section: developmentSection,
219
+ startDate: '2023-01-07',
220
+ endDate: '2023-01-10',
221
+ progress: 60,
222
+ dependsOn: '',
223
+ length: '4d',
224
+ tags: ['active'],
225
+ resources: [{ type: '창호공', allocated: 5 }],
226
+ children: []
227
+ },
228
+ {
229
+ id: '3-1-2',
230
+ title: 'Coding-B',
231
+ type: 'task',
232
+ // section: developmentSection,
233
+ startDate: '2023-01-11',
234
+ endDate: '2023-01-15',
235
+ dependsOn: '3-1-1',
236
+ length: '5d',
237
+ tags: ['active'],
238
+ resources: [{ type: '창호공', allocated: 3 }],
239
+ children: []
240
+ }
241
+ ]
224
242
  },
225
243
  {
226
244
  id: '3-2',
@@ -232,6 +250,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
232
250
  dependsOn: '3-1',
233
251
  length: '5d',
234
252
  tags: ['active'],
253
+ resources: [{ type: '창호공', allocated: 6 }],
235
254
  children: []
236
255
  }
237
256
  ]
@@ -247,6 +266,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
247
266
  dependsOn: '1',
248
267
  length: '1d',
249
268
  tags: ['done'],
269
+ resources: [{ type: '방수공', allocated: 5 }],
250
270
  children: []
251
271
  },
252
272
  {
@@ -259,6 +279,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
259
279
  dependsOn: '4',
260
280
  length: '1d',
261
281
  tags: ['milestone'],
282
+ resources: [{ type: '목공', allocated: 3 }],
262
283
  children: []
263
284
  },
264
285
  {
@@ -271,6 +292,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
271
292
  dependsOn: '5',
272
293
  length: '1d',
273
294
  tags: ['milestone'],
295
+ resources: [{ type: '금속공', allocated: 1 }],
274
296
  children: []
275
297
  },
276
298
  {
@@ -283,6 +305,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
283
305
  dependsOn: '6',
284
306
  length: '1d',
285
307
  tags: ['milestone'],
308
+ resources: [{ type: '타일공', allocated: 6 }],
286
309
  children: []
287
310
  },
288
311
  {
@@ -295,6 +318,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
295
318
  dependsOn: '7',
296
319
  length: '1d',
297
320
  tags: ['critical'],
321
+ resources: [{ type: '창호공', allocated: 7 }],
298
322
  children: []
299
323
  },
300
324
  {
@@ -307,6 +331,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
307
331
  dependsOn: '8',
308
332
  length: '1d',
309
333
  tags: ['active'],
334
+ resources: [{ type: '도배공', allocated: 8 }],
310
335
  children: []
311
336
  },
312
337
  {
@@ -319,6 +344,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
319
344
  dependsOn: '9',
320
345
  length: '1d',
321
346
  tags: ['critical'],
347
+ resources: [{ type: '조적공', allocated: 6 }],
322
348
  children: []
323
349
  },
324
350
  {
@@ -331,6 +357,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
331
357
  dependsOn: '9',
332
358
  length: '1d',
333
359
  tags: ['milestone'],
360
+ resources: [{ type: '철근/형틀공', allocated: 6 }],
334
361
  children: []
335
362
  },
336
363
  {
@@ -342,8 +369,37 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
342
369
  endDate: '2023-01-23',
343
370
  dependsOn: '9',
344
371
  length: '1d',
372
+ resources: [{ type: '방수공', allocated: 6 }],
345
373
  tags: ['milestone'],
346
- children: []
374
+ children: [
375
+ {
376
+ id: '12-1',
377
+ title: 'Coding-A',
378
+ type: 'task',
379
+ // section: developmentSection,
380
+ startDate: '2023-01-07',
381
+ endDate: '2023-01-10',
382
+ progress: 60,
383
+ dependsOn: '',
384
+ length: '4d',
385
+ tags: ['done'],
386
+ resources: [{ type: '방수공', allocated: 6 }],
387
+ children: []
388
+ },
389
+ {
390
+ id: '12-2',
391
+ title: 'Coding-B',
392
+ type: 'task',
393
+ // section: developmentSection,
394
+ startDate: '2023-01-11',
395
+ endDate: '2023-01-15',
396
+ dependsOn: '12-1',
397
+ length: '5d',
398
+ tags: ['active'],
399
+ resources: [{ type: '조적공', allocated: 6 }],
400
+ children: []
401
+ }
402
+ ]
347
403
  },
348
404
  {
349
405
  id: '13',
@@ -367,6 +423,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
367
423
  dependsOn: '13',
368
424
  length: '1d',
369
425
  tags: ['milestone'],
426
+ resources: [{ type: '금속공', allocated: 1 }],
370
427
  children: []
371
428
  },
372
429
  {
@@ -390,6 +447,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
390
447
  endDate: '2023-02-05',
391
448
  dependsOn: '15',
392
449
  length: '1d',
450
+ resources: [{ type: '창호공', allocated: 1 }],
393
451
  tags: ['active'],
394
452
  children: []
395
453
  },
@@ -427,6 +485,7 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
427
485
  dependsOn: '18',
428
486
  length: '1d',
429
487
  tags: ['milestone'],
488
+ resources: [{ type: '창호공', allocated: 7 }],
430
489
  children: []
431
490
  }
432
491
  ]
@@ -449,27 +508,20 @@ export class ProjectSchedule extends ScopedElementsMixin(PageView) {
449
508
  </div>
450
509
 
451
510
  <div body>
452
- <div chart-container>
453
- <div chart>
454
- <ox-gantt
455
- from-date=${new Date(this.fromDate).toISOString().split('T')[0]}
456
- to-date=${new Date(this.toDate).toISOString().split('T')[0]}
457
- .timeScale=${this.timeScale}
458
- .tasks=${this.tasks}
459
- @date-range-selected=${(e: CustomEvent) => {
460
- console.log('date-range-selected', e.detail)
461
- }}
462
- @task-clicked=${(e: CustomEvent) => {
463
- console.log('task-clicked', e.detail)
464
- }}
465
- ?extend-grid-lines=${this.extendGridLines}
466
- >
467
- </ox-gantt>
468
- </div>
469
- <div table>
470
- <table></table>
471
- </div>
472
- </div>
511
+ <ox-gantt
512
+ from-date=${new Date(this.fromDate).toISOString().split('T')[0]}
513
+ to-date=${new Date(this.toDate).toISOString().split('T')[0]}
514
+ .timeScale=${this.timeScale}
515
+ .tasks=${this.tasks}
516
+ @date-range-selected=${(e: CustomEvent) => {
517
+ console.log('date-range-selected', e.detail)
518
+ }}
519
+ @task-clicked=${(e: CustomEvent) => {
520
+ console.log('task-clicked', e.detail)
521
+ }}
522
+ ?extend-grid-lines=${this.extendGridLines}
523
+ >
524
+ </ox-gantt>
473
525
  <div select-container>
474
526
  <div date>
475
527
  <span name>기간선택</span>
@@ -89,6 +89,10 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
89
89
  aspect-ratio: 2;
90
90
  background-color: #cccccc80;
91
91
  }
92
+ img[project-img][no-image] {
93
+ object-fit: contain;
94
+ opacity: 0.5;
95
+ }
92
96
 
93
97
  span[project-info] {
94
98
  flex: 0.45;
@@ -208,7 +212,11 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
208
212
 
209
213
  return html`
210
214
  <div project-container>
211
- <img project-img src=${project.mainPhoto?.fullpath || ''} />
215
+ <img
216
+ ?no-image=${!project.mainPhoto?.fullpath}
217
+ project-img
218
+ src=${project.mainPhoto?.fullpath || '/assets/images/no-image.png'}
219
+ />
212
220
 
213
221
  <span project-info>
214
222
  <div name>${project.name}</div>
@@ -47,7 +47,7 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
47
47
  };
48
48
  }
49
49
  render() {
50
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
50
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
51
51
  return html `
52
52
  <div header>
53
53
  <h2>${this.project.name}</h2>
@@ -69,12 +69,15 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
69
69
  <div left-top>
70
70
  <h3>기본 정보</h3>
71
71
  <div content-1>
72
- <img project-img src=${((_a = this.project.mainPhoto) === null || _a === void 0 ? void 0 : _a.fullpath) || ''} />
72
+ <img
73
+ ?no-image=${!((_a = this.project.mainPhoto) === null || _a === void 0 ? void 0 : _a.fullpath)}
74
+ src=${((_b = this.project.mainPhoto) === null || _b === void 0 ? void 0 : _b.fullpath) || '/assets/images/no-image.png'}
75
+ />
73
76
 
74
77
  <div>
75
78
  <div row>
76
79
  <span>- 면적 : </span>
77
- <span>${(_b = this.project.buildingComplex) === null || _b === void 0 ? void 0 : _b.area}</span>
80
+ <span>${(_c = this.project.buildingComplex) === null || _c === void 0 ? void 0 : _c.area}</span>
78
81
  </div>
79
82
  <div row>
80
83
  <span>- 착공 ~ 준공 : </span>
@@ -82,19 +85,19 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
82
85
  </div>
83
86
  <div row>
84
87
  <span>- 발주처 : </span>
85
- <span>${(_c = this.project.buildingComplex) === null || _c === void 0 ? void 0 : _c.clientCompany}</span>
88
+ <span>${(_d = this.project.buildingComplex) === null || _d === void 0 ? void 0 : _d.clientCompany}</span>
86
89
  </div>
87
90
  <div row>
88
91
  <span>- 건설사 : </span>
89
- <span>${(_d = this.project.buildingComplex) === null || _d === void 0 ? void 0 : _d.constructionCompany}</span>
92
+ <span>${(_e = this.project.buildingComplex) === null || _e === void 0 ? void 0 : _e.constructionCompany}</span>
90
93
  </div>
91
94
  <div row>
92
95
  <span>- 감리사 : </span>
93
- <span>${(_e = this.project.buildingComplex) === null || _e === void 0 ? void 0 : _e.supervisoryCompany}</span>
96
+ <span>${(_f = this.project.buildingComplex) === null || _f === void 0 ? void 0 : _f.supervisoryCompany}</span>
94
97
  </div>
95
98
  <div row>
96
99
  <span>- 설계사 : </span>
97
- <span>${(_f = this.project.buildingComplex) === null || _f === void 0 ? void 0 : _f.designCompany}</span>
100
+ <span>${(_g = this.project.buildingComplex) === null || _g === void 0 ? void 0 : _g.designCompany}</span>
98
101
  </div>
99
102
  </div>
100
103
  </div>
@@ -102,30 +105,32 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
102
105
  <div content-2>
103
106
  <div row>
104
107
  <span>- 건설구분 : </span>
105
- <span>${(_g = this.project.buildingComplex) === null || _g === void 0 ? void 0 : _g.constructionType}</span>
108
+ <span>${(_h = this.project.buildingComplex) === null || _h === void 0 ? void 0 : _h.constructionType}</span>
106
109
  </div>
107
110
  <div row>
108
111
  <span>- 공사금액 : </span>
109
- <span>${(_h = this.project.buildingComplex) === null || _h === void 0 ? void 0 : _h.constructionCost}</span>
112
+ <span>${(_j = this.project.buildingComplex) === null || _j === void 0 ? void 0 : _j.constructionCost}</span>
110
113
  </div>
111
114
  <div row>
112
115
  <span>- 세대수 : </span>
113
- <span>${(_j = this.project.buildingComplex) === null || _j === void 0 ? void 0 : _j.householdCount}</span>
116
+ <span>${(_k = this.project.buildingComplex) === null || _k === void 0 ? void 0 : _k.householdCount}</span>
114
117
  </div>
115
118
  <div row>
116
119
  <span>- 기타 : </span>
117
- <span>${(_k = this.project.buildingComplex) === null || _k === void 0 ? void 0 : _k.etc}</span>
120
+ <span>${(_l = this.project.buildingComplex) === null || _l === void 0 ? void 0 : _l.etc}</span>
118
121
  </div>
119
122
  </div>
120
123
  </div>
121
124
 
122
125
  <div left-bottom>
123
126
  <h3>조감도(BIM도면)</h3>
124
- <img src=${((_m = (_l = this.project.buildingComplex) === null || _l === void 0 ? void 0 : _l.drawing) === null || _m === void 0 ? void 0 : _m.fullpath) || ''} />
127
+ ${((_o = (_m = this.project.buildingComplex) === null || _m === void 0 ? void 0 : _m.drawing) === null || _o === void 0 ? void 0 : _o.fullpath)
128
+ ? html `<div building-complex-img></div>`
129
+ : html `<img building-complex-img src="/assets/images/img-building-complex-default.jpg" />`}
125
130
  <div>
126
131
  <div subject bold>개별 단지 상세정보 바로가기</div>
127
132
  <div building-container>
128
- ${(_p = (_o = this.project.buildingComplex) === null || _o === void 0 ? void 0 : _o.buildings) === null || _p === void 0 ? void 0 : _p.map(building => {
133
+ ${(_q = (_p = this.project.buildingComplex) === null || _p === void 0 ? void 0 : _p.buildings) === null || _q === void 0 ? void 0 : _q.map(building => {
129
134
  return html `<md-outlined-button href=${`building-complex-detail/${this.project.id}?buildingId=${building.id}`}>
130
135
  ${building.name}
131
136
  </md-outlined-button>`;
@@ -414,7 +419,12 @@ ProjectDetail.styles = [
414
419
 
415
420
  img {
416
421
  width: 42%;
417
- height: fit-content;
422
+ height: auto;
423
+ aspect-ratio: 1920 / 1080;
424
+ }
425
+ img[no-image] {
426
+ object-fit: contain;
427
+ opacity: 0.5;
418
428
  }
419
429
 
420
430
  div[row] {
@@ -428,10 +438,13 @@ ProjectDetail.styles = [
428
438
  }
429
439
 
430
440
  div[left-bottom] {
431
- img {
441
+ [building-complex-img] {
432
442
  width: 100%;
433
443
  aspect-ratio: 2 / 1;
434
444
  }
445
+ img {
446
+ opacity: 0.5;
447
+ }
435
448
 
436
449
  div[subject] {
437
450
  margin-bottom: 7px;