Youngger9765 commited on
Commit
14bd9e9
·
1 Parent(s): 5a12f56

更新 index.html 模板,調整樣式與新增 logo

Browse files

- 將背景顏色改為淺綠色,提升整體視覺效果
- 調整按鈕、標題及文字顏色,增強可讀性
- 新增 logo 圖片以提升品牌識別度
- 優化各區塊的邊框與陰影效果,增強層次感

此次更新旨在改善使用者體驗,提供更清晰的視覺效果與品牌形象。

Files changed (2) hide show
  1. templates/index.html +129 -109
  2. templates/logo.png +0 -0
templates/index.html CHANGED
@@ -11,15 +11,15 @@
11
 
12
  body {
13
  font-family: 'Noto Sans TC', sans-serif;
14
- background: #f5f5f5;
15
  min-height: 100vh;
16
  }
17
 
18
  .glass-effect {
19
  background: rgba(255, 255, 255, 0.95);
20
  backdrop-filter: blur(10px);
21
- box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
22
- border: 1px solid rgba(255, 255, 255, 0.18);
23
  }
24
 
25
  .editor-container {
@@ -39,23 +39,26 @@
39
  }
40
 
41
  .btn-primary {
42
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
 
 
43
  transition: all 0.3s ease;
44
  }
45
 
46
  .btn-primary:hover {
47
  transform: translateY(-2px);
48
- box-shadow: 0 10px 20px rgba(0,0,0,0.2);
 
49
  }
50
 
51
  .tab-active {
52
- border-bottom: 3px solid #667eea;
53
- color: #667eea;
54
  }
55
 
56
  .preview-frame {
57
  background: white;
58
- border: 1px solid #e5e7eb;
59
  border-radius: 8px;
60
  padding: 20px;
61
  }
@@ -74,8 +77,9 @@
74
  bottom: 20px;
75
  right: 20px;
76
  padding: 16px 24px;
77
- background: #10b981;
78
- color: white;
 
79
  border-radius: 8px;
80
  display: none;
81
  animation: slideIn 0.3s ease;
@@ -232,13 +236,13 @@
232
 
233
  @keyframes progressPulse {
234
  0% {
235
- box-shadow: 0 0 0 4px rgba(113, 221, 177, 0.2);
236
  }
237
  50% {
238
- box-shadow: 0 0 0 8px rgba(113, 221, 177, 0.1);
239
  }
240
  100% {
241
- box-shadow: 0 0 0 4px rgba(113, 221, 177, 0.2);
242
  }
243
  }
244
 
@@ -282,7 +286,7 @@
282
  .progress-title {
283
  font-size: 14px;
284
  font-weight: 600;
285
- color: #2C6E49;
286
  white-space: nowrap;
287
  }
288
 
@@ -303,7 +307,7 @@
303
  }
304
 
305
  .progress-connector.completed {
306
- background: linear-gradient(90deg, #71DDB1 0%, #5EC99D 100%);
307
  }
308
 
309
  .progress-inline .progress-step {
@@ -325,7 +329,7 @@
325
  font-weight: bold;
326
  font-size: 10px;
327
  transition: all 0.3s ease;
328
- border: 2px solid #e9ecef;
329
  background: white;
330
  color: #6c757d;
331
  }
@@ -337,17 +341,17 @@
337
  }
338
 
339
  .progress-inline .progress-step.active .step-icon {
340
- background: #71DDB1;
341
- color: white;
342
- border-color: #71DDB1;
343
  animation: progressPulse 2s infinite;
344
- box-shadow: 0 0 0 2px rgba(113, 221, 177, 0.2);
345
  }
346
 
347
  .progress-inline .progress-step.completed .step-icon {
348
- background: #28a745;
349
- color: white;
350
- border-color: #28a745;
351
  }
352
 
353
  .progress-inline .progress-step.error .step-icon {
@@ -366,7 +370,7 @@
366
  font-weight: bold;
367
  font-size: 10px;
368
  transition: all 0.3s ease;
369
- border: 2px solid #e9ecef;
370
  background: white;
371
  color: #6c757d;
372
  }
@@ -495,14 +499,14 @@
495
  <div class="glass-effect rounded-xl p-6 mb-6">
496
  <div class="flex items-center justify-between">
497
  <div>
498
- <h1 class="text-3xl font-bold text-gray-800 flex items-center">
499
- <i class="fas fa-file-code mr-3 text-green-600"></i>
500
  樂寫網徵文比賽 HTML 建立器
501
  </h1>
502
- <p class="text-gray-600 mt-2">輕鬆建立精美的徵文比賽頁面</p>
503
  </div>
504
- <div class="text-gray-600" id="info-text">
505
- <i class="fas fa-info-circle mr-2"></i>
506
  填寫變數後點擊「套用變數並生成 HTML」
507
  </div>
508
 
@@ -540,8 +544,8 @@
540
  <!-- Left Panel - Editor -->
541
  <div class="space-y-4">
542
  <!-- Only Variables Tab -->
543
- <h3 class="text-lg font-medium text-gray-700 mb-4">
544
- <i class="fas fa-cog mr-2"></i>變數設定
545
  </h3>
546
 
547
  <!-- Variables Content -->
@@ -563,8 +567,8 @@
563
  body {
564
  font-family: 'Noto Sans TC', 'Microsoft JhengHei', sans-serif;
565
  line-height: 1.6;
566
- color: #333;
567
- background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
568
  }
569
 
570
  .container {
@@ -574,32 +578,34 @@
574
  }
575
 
576
  .header {
577
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
578
- color: white;
579
  text-align: center;
580
  padding: 60px 20px;
581
  border-radius: 20px;
582
  margin-bottom: 30px;
583
- box-shadow: 0 20px 40px rgba(0,0,0,0.1);
 
584
  }
585
 
586
  .header h1 {
587
  font-size: 2.5rem;
588
  margin-bottom: 15px;
589
  font-weight: 700;
 
590
  }
591
 
592
  .header h2 {
593
  font-size: 1.8rem;
594
  margin-bottom: 20px;
595
  font-weight: 400;
596
- opacity: 0.9;
597
  }
598
 
599
  .header p {
600
  font-size: 1.2rem;
601
  margin-bottom: 30px;
602
- opacity: 0.8;
603
  line-height: 1.8;
604
  }
605
 
@@ -622,19 +628,20 @@
622
  }
623
 
624
  .btn-primary {
625
- background: #438951;
626
- color: white;
 
627
  }
628
 
629
  .btn-secondary {
630
  background: transparent;
631
- color: white;
632
- border: 2px solid white;
633
  }
634
 
635
  .btn:hover {
636
  transform: translateY(-3px);
637
- box-shadow: 0 10px 25px rgba(0,0,0,0.2);
638
  }
639
 
640
  .card {
@@ -642,7 +649,8 @@
642
  border-radius: 20px;
643
  padding: 40px;
644
  margin-bottom: 30px;
645
- box-shadow: 0 15px 35px rgba(0,0,0,0.1);
 
646
  transition: transform 0.3s ease;
647
  }
648
 
@@ -651,16 +659,19 @@
651
  }
652
 
653
  .card h2 {
654
- color: #333;
655
  font-size: 2rem;
656
  margin-bottom: 25px;
657
- border-bottom: 3px solid #438951;
658
  padding-bottom: 10px;
659
  }
660
 
661
  .highlight {
662
- color: #F44444;
663
  font-weight: bold;
 
 
 
664
  }
665
 
666
  /* Flow Design Styles */
@@ -669,11 +680,11 @@
669
  padding: 20px;
670
  border-radius: 10px;
671
  margin-bottom: 25px;
672
- border-left: 5px solid #438951;
673
  }
674
 
675
  .target-section h3, .method-section h3 {
676
- color: #438951;
677
  margin: 0 0 10px 0;
678
  font-size: 1.3rem;
679
  }
@@ -685,18 +696,18 @@
685
 
686
  .flow-section {
687
  background: white;
688
- border: 2px solid #e9ecef;
689
  border-radius: 20px;
690
  padding: 30px;
691
  margin-bottom: 40px;
692
- box-shadow: 0 10px 30px rgba(0,0,0,0.1);
693
  transition: all 0.3s ease;
694
  position: relative;
695
  }
696
 
697
  .flow-section:hover {
698
  transform: translateY(-5px);
699
- box-shadow: 0 20px 40px rgba(0,0,0,0.15);
700
  }
701
 
702
  .flow-header {
@@ -704,12 +715,12 @@
704
  align-items: center;
705
  margin-bottom: 25px;
706
  padding-bottom: 15px;
707
- border-bottom: 2px solid #f1f3f4;
708
  }
709
 
710
  .stage-number {
711
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
712
- color: white;
713
  width: 80px;
714
  height: 80px;
715
  border-radius: 50%;
@@ -720,11 +731,12 @@
720
  font-size: 1rem;
721
  margin-right: 20px;
722
  flex-shrink: 0;
723
- box-shadow: 0 5px 15px rgba(102, 126, 234, 0.3);
 
724
  }
725
 
726
  .flow-header h3 {
727
- color: #333;
728
  margin: 0;
729
  font-size: 1.8rem;
730
  font-weight: 600;
@@ -743,7 +755,7 @@
743
  align-items: flex-start;
744
  margin-bottom: 15px;
745
  padding: 10px 0;
746
- border-bottom: 1px solid #e9ecef;
747
  }
748
 
749
  .detail-item:last-child {
@@ -753,7 +765,7 @@
753
 
754
  .detail-label {
755
  font-weight: 600;
756
- color: #495057;
757
  min-width: 100px;
758
  margin-right: 15px;
759
  }
@@ -779,10 +791,10 @@
779
  content: '';
780
  width: 4px;
781
  height: 40px;
782
- background: linear-gradient(180deg, #71DDB1 0%, #5EC99D 100%);
783
  border-radius: 2px;
784
  margin-bottom: 5px;
785
- box-shadow: 0 4px 15px rgba(113, 221, 177, 0.3);
786
  animation: flowLine 2s ease-in-out infinite;
787
  }
788
 
@@ -792,8 +804,8 @@
792
  height: 0;
793
  border-left: 12px solid transparent;
794
  border-right: 12px solid transparent;
795
- border-top: 18px solid #5EC99D;
796
- filter: drop-shadow(0 4px 8px rgba(113, 221, 177, 0.4));
797
  animation: arrowBounce 2s ease-in-out infinite;
798
  }
799
 
@@ -803,12 +815,12 @@
803
  }
804
 
805
  .flow-arrow:hover::before {
806
- background: linear-gradient(180deg, #5EC99D 0%, #4CAF86 100%);
807
  transform: scaleY(1.1);
808
  }
809
 
810
  .flow-arrow:hover::after {
811
- border-top-color: #4CAF86;
812
  transform: translateY(-2px);
813
  }
814
 
@@ -837,21 +849,22 @@
837
  background: linear-gradient(to bottom,
838
  transparent 0%,
839
  transparent 45%,
840
- rgba(113, 221, 177, 0.1) 45%,
841
- rgba(113, 221, 177, 0.1) 55%,
842
  transparent 55%,
843
  transparent 100%
844
  );
845
  }
846
 
847
  .reward-box {
848
- background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
849
- color: white;
850
  border-radius: 15px;
851
  padding: 25px;
852
  display: flex;
853
  align-items: center;
854
- box-shadow: 0 5px 20px rgba(67, 233, 123, 0.3);
 
855
  }
856
 
857
  .reward-icon {
@@ -884,7 +897,7 @@
884
  .connector-line {
885
  width: 3px;
886
  height: 40px;
887
- background: linear-gradient(to bottom, #438951, #28a745);
888
  position: relative;
889
  }
890
 
@@ -898,7 +911,7 @@
898
  height: 0;
899
  border-left: 8px solid transparent;
900
  border-right: 8px solid transparent;
901
- border-top: 12px solid #28a745;
902
  }
903
 
904
  /* Additional sections */
@@ -914,12 +927,12 @@
914
  padding: 25px;
915
  border-radius: 15px;
916
  text-align: center;
917
- border: 2px solid #e9ecef;
918
  transition: all 0.3s ease;
919
  }
920
 
921
  .registration-item:hover {
922
- border-color: #438951;
923
  transform: translateY(-3px);
924
  }
925
 
@@ -942,18 +955,18 @@
942
  background: white;
943
  border-radius: 10px;
944
  overflow: hidden;
945
- box-shadow: 0 5px 15px rgba(0,0,0,0.1);
946
  }
947
 
948
  th, td {
949
  padding: 15px;
950
  text-align: left;
951
- border-bottom: 1px solid #e9ecef;
952
  }
953
 
954
  th {
955
- background: #438951;
956
- color: white;
957
  font-weight: 600;
958
  }
959
 
@@ -969,10 +982,10 @@
969
  }
970
 
971
  .requirement-item {
972
- background: #e8f5e8;
973
  padding: 20px;
974
  border-radius: 10px;
975
- border-left: 4px solid #438951;
976
  }
977
 
978
  .notes-grid {
@@ -986,7 +999,7 @@
986
  background: #fff3cd;
987
  padding: 20px;
988
  border-radius: 10px;
989
- border-left: 4px solid #ffc107;
990
  }
991
 
992
  .timeline-item {
@@ -999,8 +1012,8 @@
999
  .timeline-number {
1000
  width: 50px;
1001
  height: 50px;
1002
- background: #438951;
1003
- color: white;
1004
  border-radius: 50%;
1005
  display: flex;
1006
  align-items: center;
@@ -1009,6 +1022,7 @@
1009
  font-size: 1.2rem;
1010
  margin-right: 25px;
1011
  flex-shrink: 0;
 
1012
  }
1013
 
1014
  .timeline-content {
@@ -1016,6 +1030,7 @@
1016
  padding: 20px;
1017
  border-radius: 10px;
1018
  flex: 1;
 
1019
  }
1020
 
1021
  .awards-list {
@@ -1036,11 +1051,12 @@
1036
  }
1037
 
1038
  .important-dates {
1039
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1040
- color: white;
1041
  padding: 40px;
1042
  border-radius: 20px;
1043
  text-align: center;
 
1044
  }
1045
 
1046
  .dates-grid {
@@ -1051,10 +1067,11 @@
1051
  }
1052
 
1053
  .date-item {
1054
- background: rgba(255,255,255,0.1);
1055
  padding: 20px;
1056
  border-radius: 15px;
1057
  backdrop-filter: blur(10px);
 
1058
  }
1059
 
1060
  @media (max-width: 768px) {
@@ -1320,10 +1337,10 @@
1320
  <div class="date-item">
1321
  <h4>活動資訊與聯絡方式</h4>
1322
  {% if websiteUrl %}
1323
- <p>活動網頁:<a href="{{ websiteUrl }}" style="color: #fff;">{{ websiteUrl }}</a></p>
1324
  {% endif %}
1325
  {% if contactInfo %}
1326
- <p>{{ contactInfo }}{% if facebookUrl %}:<a href="{{ facebookUrl }}" style="color: #fff;">{{ facebookUrl }}</a>{% endif %}</p>
1327
  {% endif %}
1328
  </div>
1329
  </div>
@@ -1338,14 +1355,14 @@
1338
 
1339
  <!-- Toggle between Form and JSON mode -->
1340
  <div class="flex justify-between mb-4">
1341
- <button onclick="applyVariables()" class="bg-green-500 hover:bg-green-600 text-white px-6 py-2 rounded-lg font-medium flex items-center">
1342
  <i class="fas fa-sync-alt mr-2"></i>套用變數並生成 HTML
1343
  </button>
1344
  <div class="bg-gray-100 rounded-lg p-1 inline-flex">
1345
- <button id="form-mode-btn" onclick="switchVariableMode('form')" class="px-4 py-2 bg-white rounded text-sm font-medium text-gray-700 shadow-sm">
1346
  <i class="fas fa-edit mr-2"></i>表單模式
1347
  </button>
1348
- <button id="json-mode-btn" onclick="switchVariableMode('json')" class="px-4 py-2 rounded text-sm font-medium text-gray-700">
1349
  <i class="fas fa-code mr-2"></i>JSON 模式
1350
  </button>
1351
  </div>
@@ -1355,11 +1372,11 @@
1355
  <div id="variables-form" class="space-y-4">
1356
  <!-- 標題區塊 -->
1357
  <div class="bg-gray-50 p-4 rounded-lg mb-4">
1358
- <h4 class="text-sm font-semibold text-gray-700 mb-3">標題區塊</h4>
1359
  <div class="space-y-3">
1360
  <div>
1361
- <label class="block text-sm font-medium text-gray-700 mb-1">主標題</label>
1362
- <input type="text" id="var-mainTitle" value="2025聯發科技公益活動" class="w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-green-500 focus:border-transparent">
1363
  </div>
1364
  <div>
1365
  <label class="block text-sm font-medium text-gray-700 mb-1">活動主題</label>
@@ -1627,21 +1644,21 @@
1627
  <div class="space-y-4">
1628
  <div class="flex items-center justify-between">
1629
  <div class="flex items-center gap-4">
1630
- <button onclick="toggleView('preview')" id="preview-view-btn" class="text-lg font-medium text-gray-700 px-3 py-1 rounded-lg transition-all duration-200 border-b-2 border-green-600">
1631
  <i class="fas fa-eye mr-2"></i>預覽
1632
  </button>
1633
- <button onclick="toggleView('source')" id="source-view-btn" class="text-lg font-medium text-gray-500 px-3 py-1 rounded-lg transition-all duration-200 border-b-2 border-transparent hover:text-gray-700">
1634
  <i class="fas fa-code mr-2"></i>HTML 原始碼
1635
  </button>
1636
  </div>
1637
  <div class="flex gap-2">
1638
- <button onclick="openPreviewPopup()" class="text-sm text-green-600 hover:text-green-800">
1639
  <i class="fas fa-external-link-alt mr-1"></i>彈出視窗
1640
  </button>
1641
- <button onclick="copyToClipboard()" class="text-sm text-green-600 hover:text-green-800">
1642
  <i class="fas fa-copy mr-1"></i>複製
1643
  </button>
1644
- <button onclick="downloadHTML()" class="text-sm text-green-600 hover:text-green-800">
1645
  <i class="fas fa-download mr-1"></i>下載
1646
  </button>
1647
  </div>
@@ -1671,11 +1688,14 @@
1671
  const toast = document.getElementById('toast');
1672
  toast.textContent = message;
1673
  if (type === 'success') {
1674
- toast.style.background = '#10b981';
 
1675
  } else if (type === 'error') {
1676
  toast.style.background = '#ef4444';
 
1677
  } else if (type === 'info') {
1678
- toast.style.background = '#3b82f6';
 
1679
  }
1680
  toast.style.display = 'block';
1681
 
@@ -2190,17 +2210,17 @@
2190
 
2191
  document.getElementById('source-view').classList.remove('hidden');
2192
  document.getElementById('preview-view').classList.add('hidden');
2193
- document.getElementById('source-view-btn').classList.add('text-gray-700', 'border-green-600');
2194
- document.getElementById('source-view-btn').classList.remove('text-gray-500', 'border-transparent');
2195
- document.getElementById('preview-view-btn').classList.add('text-gray-500', 'border-transparent');
2196
- document.getElementById('preview-view-btn').classList.remove('text-gray-700', 'border-green-600');
2197
  } else {
2198
  document.getElementById('source-view').classList.add('hidden');
2199
  document.getElementById('preview-view').classList.remove('hidden');
2200
- document.getElementById('preview-view-btn').classList.add('text-gray-700', 'border-green-600');
2201
- document.getElementById('preview-view-btn').classList.remove('text-gray-500', 'border-transparent');
2202
- document.getElementById('source-view-btn').classList.add('text-gray-500', 'border-transparent');
2203
- document.getElementById('source-view-btn').classList.remove('text-gray-700', 'border-green-600');
2204
 
2205
  // Update preview iframe if HTML is generated
2206
  if (generatedHTML) {
 
11
 
12
  body {
13
  font-family: 'Noto Sans TC', sans-serif;
14
+ background: #A2D5C6;
15
  min-height: 100vh;
16
  }
17
 
18
  .glass-effect {
19
  background: rgba(255, 255, 255, 0.95);
20
  backdrop-filter: blur(10px);
21
+ box-shadow: 0 8px 32px 0 rgba(162, 213, 198, 0.37);
22
+ border: 1px solid #E0E0E0;
23
  }
24
 
25
  .editor-container {
 
39
  }
40
 
41
  .btn-primary {
42
+ background: #A3E0C5;
43
+ color: #4C4C4C;
44
+ border: 1px solid #E0E0E0;
45
  transition: all 0.3s ease;
46
  }
47
 
48
  .btn-primary:hover {
49
  transform: translateY(-2px);
50
+ box-shadow: 0 10px 20px rgba(163, 224, 197, 0.4);
51
+ background: #8FD4B3;
52
  }
53
 
54
  .tab-active {
55
+ border-bottom: 3px solid #A3E0C5;
56
+ color: #4C4C4C;
57
  }
58
 
59
  .preview-frame {
60
  background: white;
61
+ border: 1px solid #E0E0E0;
62
  border-radius: 8px;
63
  padding: 20px;
64
  }
 
77
  bottom: 20px;
78
  right: 20px;
79
  padding: 16px 24px;
80
+ background: #A3E0C5;
81
+ color: #4C4C4C;
82
+ border: 1px solid #E0E0E0;
83
  border-radius: 8px;
84
  display: none;
85
  animation: slideIn 0.3s ease;
 
236
 
237
  @keyframes progressPulse {
238
  0% {
239
+ box-shadow: 0 0 0 4px rgba(163, 224, 197, 0.2);
240
  }
241
  50% {
242
+ box-shadow: 0 0 0 8px rgba(163, 224, 197, 0.1);
243
  }
244
  100% {
245
+ box-shadow: 0 0 0 4px rgba(163, 224, 197, 0.2);
246
  }
247
  }
248
 
 
286
  .progress-title {
287
  font-size: 14px;
288
  font-weight: 600;
289
+ color: #4C4C4C;
290
  white-space: nowrap;
291
  }
292
 
 
307
  }
308
 
309
  .progress-connector.completed {
310
+ background: #A3E0C5;
311
  }
312
 
313
  .progress-inline .progress-step {
 
329
  font-weight: bold;
330
  font-size: 10px;
331
  transition: all 0.3s ease;
332
+ border: 2px solid #E0E0E0;
333
  background: white;
334
  color: #6c757d;
335
  }
 
341
  }
342
 
343
  .progress-inline .progress-step.active .step-icon {
344
+ background: #A3E0C5;
345
+ color: #4C4C4C;
346
+ border-color: #A3E0C5;
347
  animation: progressPulse 2s infinite;
348
+ box-shadow: 0 0 0 2px rgba(163, 224, 197, 0.2);
349
  }
350
 
351
  .progress-inline .progress-step.completed .step-icon {
352
+ background: #A3E0C5;
353
+ color: #4C4C4C;
354
+ border-color: #A3E0C5;
355
  }
356
 
357
  .progress-inline .progress-step.error .step-icon {
 
370
  font-weight: bold;
371
  font-size: 10px;
372
  transition: all 0.3s ease;
373
+ border: 2px solid #E0E0E0;
374
  background: white;
375
  color: #6c757d;
376
  }
 
499
  <div class="glass-effect rounded-xl p-6 mb-6">
500
  <div class="flex items-center justify-between">
501
  <div>
502
+ <h1 class="text-3xl font-bold flex items-center" style="color: #4C4C4C;">
503
+ <i class="fas fa-file-code mr-3" style="color: #A3E0C5;"></i>
504
  樂寫網徵文比賽 HTML 建立器
505
  </h1>
506
+ <p class="mt-2" style="color: #4C4C4C;">輕鬆建立精美的徵文比賽頁面</p>
507
  </div>
508
+ <div id="info-text" style="color: #4C4C4C;">
509
+ <i class="fas fa-info-circle mr-2" style="color: #A3E0C5;"></i>
510
  填寫變數後點擊「套用變數並生成 HTML」
511
  </div>
512
 
 
544
  <!-- Left Panel - Editor -->
545
  <div class="space-y-4">
546
  <!-- Only Variables Tab -->
547
+ <h3 class="text-lg font-medium mb-4" style="color: #4C4C4C;">
548
+ <i class="fas fa-cog mr-2" style="color: #A3E0C5;"></i>變數設定
549
  </h3>
550
 
551
  <!-- Variables Content -->
 
567
  body {
568
  font-family: 'Noto Sans TC', 'Microsoft JhengHei', sans-serif;
569
  line-height: 1.6;
570
+ color: #000000;
571
+ background: #A2D5C6;
572
  }
573
 
574
  .container {
 
578
  }
579
 
580
  .header {
581
+ background: white;
582
+ color: #4C4C4C;
583
  text-align: center;
584
  padding: 60px 20px;
585
  border-radius: 20px;
586
  margin-bottom: 30px;
587
+ box-shadow: 0 20px 40px rgba(162, 213, 198, 0.3);
588
+ border: 1px solid #E0E0E0;
589
  }
590
 
591
  .header h1 {
592
  font-size: 2.5rem;
593
  margin-bottom: 15px;
594
  font-weight: 700;
595
+ color: #4C4C4C;
596
  }
597
 
598
  .header h2 {
599
  font-size: 1.8rem;
600
  margin-bottom: 20px;
601
  font-weight: 400;
602
+ color: #4C4C4C;
603
  }
604
 
605
  .header p {
606
  font-size: 1.2rem;
607
  margin-bottom: 30px;
608
+ color: #4C4C4C;
609
  line-height: 1.8;
610
  }
611
 
 
628
  }
629
 
630
  .btn-primary {
631
+ background: #A3E0C5;
632
+ color: #4C4C4C;
633
+ border: 1px solid #E0E0E0;
634
  }
635
 
636
  .btn-secondary {
637
  background: transparent;
638
+ color: #4C4C4C;
639
+ border: 2px solid #4C4C4C;
640
  }
641
 
642
  .btn:hover {
643
  transform: translateY(-3px);
644
+ box-shadow: 0 10px 25px rgba(163, 224, 197, 0.4);
645
  }
646
 
647
  .card {
 
649
  border-radius: 20px;
650
  padding: 40px;
651
  margin-bottom: 30px;
652
+ box-shadow: 0 15px 35px rgba(162, 213, 198, 0.2);
653
+ border: 1px solid #E0E0E0;
654
  transition: transform 0.3s ease;
655
  }
656
 
 
659
  }
660
 
661
  .card h2 {
662
+ color: #4C4C4C;
663
  font-size: 2rem;
664
  margin-bottom: 25px;
665
+ border-bottom: 3px solid #A3E0C5;
666
  padding-bottom: 10px;
667
  }
668
 
669
  .highlight {
670
+ color: #2E8B57;
671
  font-weight: bold;
672
+ background: rgba(163, 224, 197, 0.2);
673
+ padding: 2px 6px;
674
+ border-radius: 4px;
675
  }
676
 
677
  /* Flow Design Styles */
 
680
  padding: 20px;
681
  border-radius: 10px;
682
  margin-bottom: 25px;
683
+ border-left: 5px solid #A3E0C5;
684
  }
685
 
686
  .target-section h3, .method-section h3 {
687
+ color: #4C4C4C;
688
  margin: 0 0 10px 0;
689
  font-size: 1.3rem;
690
  }
 
696
 
697
  .flow-section {
698
  background: white;
699
+ border: 2px solid #E0E0E0;
700
  border-radius: 20px;
701
  padding: 30px;
702
  margin-bottom: 40px;
703
+ box-shadow: 0 10px 30px rgba(162, 213, 198, 0.2);
704
  transition: all 0.3s ease;
705
  position: relative;
706
  }
707
 
708
  .flow-section:hover {
709
  transform: translateY(-5px);
710
+ box-shadow: 0 20px 40px rgba(162, 213, 198, 0.3);
711
  }
712
 
713
  .flow-header {
 
715
  align-items: center;
716
  margin-bottom: 25px;
717
  padding-bottom: 15px;
718
+ border-bottom: 2px solid #E0E0E0;
719
  }
720
 
721
  .stage-number {
722
+ background: #A3E0C5;
723
+ color: #4C4C4C;
724
  width: 80px;
725
  height: 80px;
726
  border-radius: 50%;
 
731
  font-size: 1rem;
732
  margin-right: 20px;
733
  flex-shrink: 0;
734
+ box-shadow: 0 5px 15px rgba(163, 224, 197, 0.3);
735
+ border: 1px solid #E0E0E0;
736
  }
737
 
738
  .flow-header h3 {
739
+ color: #4C4C4C;
740
  margin: 0;
741
  font-size: 1.8rem;
742
  font-weight: 600;
 
755
  align-items: flex-start;
756
  margin-bottom: 15px;
757
  padding: 10px 0;
758
+ border-bottom: 1px solid #E0E0E0;
759
  }
760
 
761
  .detail-item:last-child {
 
765
 
766
  .detail-label {
767
  font-weight: 600;
768
+ color: #4C4C4C;
769
  min-width: 100px;
770
  margin-right: 15px;
771
  }
 
791
  content: '';
792
  width: 4px;
793
  height: 40px;
794
+ background: #A3E0C5;
795
  border-radius: 2px;
796
  margin-bottom: 5px;
797
+ box-shadow: 0 4px 15px rgba(163, 224, 197, 0.3);
798
  animation: flowLine 2s ease-in-out infinite;
799
  }
800
 
 
804
  height: 0;
805
  border-left: 12px solid transparent;
806
  border-right: 12px solid transparent;
807
+ border-top: 18px solid #A3E0C5;
808
+ filter: drop-shadow(0 4px 8px rgba(163, 224, 197, 0.4));
809
  animation: arrowBounce 2s ease-in-out infinite;
810
  }
811
 
 
815
  }
816
 
817
  .flow-arrow:hover::before {
818
+ background: #8FD4B3;
819
  transform: scaleY(1.1);
820
  }
821
 
822
  .flow-arrow:hover::after {
823
+ border-top-color: #8FD4B3;
824
  transform: translateY(-2px);
825
  }
826
 
 
849
  background: linear-gradient(to bottom,
850
  transparent 0%,
851
  transparent 45%,
852
+ rgba(163, 224, 197, 0.1) 45%,
853
+ rgba(163, 224, 197, 0.1) 55%,
854
  transparent 55%,
855
  transparent 100%
856
  );
857
  }
858
 
859
  .reward-box {
860
+ background: #A3E0C5;
861
+ color: #4C4C4C;
862
  border-radius: 15px;
863
  padding: 25px;
864
  display: flex;
865
  align-items: center;
866
+ box-shadow: 0 5px 20px rgba(163, 224, 197, 0.3);
867
+ border: 1px solid #E0E0E0;
868
  }
869
 
870
  .reward-icon {
 
897
  .connector-line {
898
  width: 3px;
899
  height: 40px;
900
+ background: #A3E0C5;
901
  position: relative;
902
  }
903
 
 
911
  height: 0;
912
  border-left: 8px solid transparent;
913
  border-right: 8px solid transparent;
914
+ border-top: 12px solid #A3E0C5;
915
  }
916
 
917
  /* Additional sections */
 
927
  padding: 25px;
928
  border-radius: 15px;
929
  text-align: center;
930
+ border: 2px solid #E0E0E0;
931
  transition: all 0.3s ease;
932
  }
933
 
934
  .registration-item:hover {
935
+ border-color: #A3E0C5;
936
  transform: translateY(-3px);
937
  }
938
 
 
955
  background: white;
956
  border-radius: 10px;
957
  overflow: hidden;
958
+ box-shadow: 0 5px 15px rgba(162, 213, 198, 0.2);
959
  }
960
 
961
  th, td {
962
  padding: 15px;
963
  text-align: left;
964
+ border-bottom: 1px solid #E0E0E0;
965
  }
966
 
967
  th {
968
+ background: #A3E0C5;
969
+ color: #4C4C4C;
970
  font-weight: 600;
971
  }
972
 
 
982
  }
983
 
984
  .requirement-item {
985
+ background: #f0f9f6;
986
  padding: 20px;
987
  border-radius: 10px;
988
+ border-left: 4px solid #A3E0C5;
989
  }
990
 
991
  .notes-grid {
 
999
  background: #fff3cd;
1000
  padding: 20px;
1001
  border-radius: 10px;
1002
+ border-left: 4px solid #A3E0C5;
1003
  }
1004
 
1005
  .timeline-item {
 
1012
  .timeline-number {
1013
  width: 50px;
1014
  height: 50px;
1015
+ background: #A3E0C5;
1016
+ color: #4C4C4C;
1017
  border-radius: 50%;
1018
  display: flex;
1019
  align-items: center;
 
1022
  font-size: 1.2rem;
1023
  margin-right: 25px;
1024
  flex-shrink: 0;
1025
+ border: 1px solid #E0E0E0;
1026
  }
1027
 
1028
  .timeline-content {
 
1030
  padding: 20px;
1031
  border-radius: 10px;
1032
  flex: 1;
1033
+ border: 1px solid #E0E0E0;
1034
  }
1035
 
1036
  .awards-list {
 
1051
  }
1052
 
1053
  .important-dates {
1054
+ background: #A3E0C5;
1055
+ color: #4C4C4C;
1056
  padding: 40px;
1057
  border-radius: 20px;
1058
  text-align: center;
1059
+ border: 1px solid #E0E0E0;
1060
  }
1061
 
1062
  .dates-grid {
 
1067
  }
1068
 
1069
  .date-item {
1070
+ background: rgba(255,255,255,0.5);
1071
  padding: 20px;
1072
  border-radius: 15px;
1073
  backdrop-filter: blur(10px);
1074
+ border: 1px solid #E0E0E0;
1075
  }
1076
 
1077
  @media (max-width: 768px) {
 
1337
  <div class="date-item">
1338
  <h4>活動資訊與聯絡方式</h4>
1339
  {% if websiteUrl %}
1340
+ <p>活動網頁:<a href="{{ websiteUrl }}" style="color: #4C4C4C; text-decoration: underline;">{{ websiteUrl }}</a></p>
1341
  {% endif %}
1342
  {% if contactInfo %}
1343
+ <p>{{ contactInfo }}{% if facebookUrl %}:<a href="{{ facebookUrl }}" style="color: #4C4C4C; text-decoration: underline;">{{ facebookUrl }}</a>{% endif %}</p>
1344
  {% endif %}
1345
  </div>
1346
  </div>
 
1355
 
1356
  <!-- Toggle between Form and JSON mode -->
1357
  <div class="flex justify-between mb-4">
1358
+ <button onclick="applyVariables()" class="px-6 py-2 rounded-lg font-medium flex items-center" style="background: #A3E0C5; color: #4C4C4C; border: 1px solid #E0E0E0;" onmouseover="this.style.background='#8FD4B3'" onmouseout="this.style.background='#A3E0C5'">
1359
  <i class="fas fa-sync-alt mr-2"></i>套用變數並生成 HTML
1360
  </button>
1361
  <div class="bg-gray-100 rounded-lg p-1 inline-flex">
1362
+ <button id="form-mode-btn" onclick="switchVariableMode('form')" class="px-4 py-2 bg-white rounded text-sm font-medium shadow-sm" style="color: #4C4C4C; border: 1px solid #E0E0E0;">
1363
  <i class="fas fa-edit mr-2"></i>表單模式
1364
  </button>
1365
+ <button id="json-mode-btn" onclick="switchVariableMode('json')" class="px-4 py-2 rounded text-sm font-medium" style="color: #4C4C4C;">
1366
  <i class="fas fa-code mr-2"></i>JSON 模式
1367
  </button>
1368
  </div>
 
1372
  <div id="variables-form" class="space-y-4">
1373
  <!-- 標題區塊 -->
1374
  <div class="bg-gray-50 p-4 rounded-lg mb-4">
1375
+ <h4 class="text-sm font-semibold mb-3" style="color: #4C4C4C;">標題區塊</h4>
1376
  <div class="space-y-3">
1377
  <div>
1378
+ <label class="block text-sm font-medium mb-1" style="color: #4C4C4C;">主標題</label>
1379
+ <input type="text" id="var-mainTitle" value="2025聯發科技公益活動" class="w-full px-4 py-2 rounded-lg" style="border: 1px solid #E0E0E0; color: #000000;" onfocus="this.style.borderColor='#A3E0C5'" onblur="this.style.borderColor='#E0E0E0'">
1380
  </div>
1381
  <div>
1382
  <label class="block text-sm font-medium text-gray-700 mb-1">活動主題</label>
 
1644
  <div class="space-y-4">
1645
  <div class="flex items-center justify-between">
1646
  <div class="flex items-center gap-4">
1647
+ <button onclick="toggleView('preview')" id="preview-view-btn" class="text-lg font-medium px-3 py-1 rounded-lg transition-all duration-200 border-b-2" style="color: #4C4C4C; border-color: #A3E0C5;">
1648
  <i class="fas fa-eye mr-2"></i>預覽
1649
  </button>
1650
+ <button onclick="toggleView('source')" id="source-view-btn" class="text-lg font-medium px-3 py-1 rounded-lg transition-all duration-200 border-b-2 border-transparent" style="color: #4C4C4C;" onmouseover="this.style.color='#A3E0C5'" onmouseout="this.style.color='#4C4C4C'">
1651
  <i class="fas fa-code mr-2"></i>HTML 原始碼
1652
  </button>
1653
  </div>
1654
  <div class="flex gap-2">
1655
+ <button onclick="openPreviewPopup()" class="text-sm" style="color: #A3E0C5;" onmouseover="this.style.color='#8FD4B3'" onmouseout="this.style.color='#A3E0C5'">
1656
  <i class="fas fa-external-link-alt mr-1"></i>彈出視窗
1657
  </button>
1658
+ <button onclick="copyToClipboard()" class="text-sm" style="color: #A3E0C5;" onmouseover="this.style.color='#8FD4B3'" onmouseout="this.style.color='#A3E0C5'">
1659
  <i class="fas fa-copy mr-1"></i>複製
1660
  </button>
1661
+ <button onclick="downloadHTML()" class="text-sm" style="color: #A3E0C5;" onmouseover="this.style.color='#8FD4B3'" onmouseout="this.style.color='#A3E0C5'">
1662
  <i class="fas fa-download mr-1"></i>下載
1663
  </button>
1664
  </div>
 
1688
  const toast = document.getElementById('toast');
1689
  toast.textContent = message;
1690
  if (type === 'success') {
1691
+ toast.style.background = '#A3E0C5';
1692
+ toast.style.color = '#4C4C4C';
1693
  } else if (type === 'error') {
1694
  toast.style.background = '#ef4444';
1695
+ toast.style.color = 'white';
1696
  } else if (type === 'info') {
1697
+ toast.style.background = '#A3E0C5';
1698
+ toast.style.color = '#4C4C4C';
1699
  }
1700
  toast.style.display = 'block';
1701
 
 
2210
 
2211
  document.getElementById('source-view').classList.remove('hidden');
2212
  document.getElementById('preview-view').classList.add('hidden');
2213
+ document.getElementById('source-view-btn').style.borderColor = '#A3E0C5';
2214
+ document.getElementById('source-view-btn').classList.remove('border-transparent');
2215
+ document.getElementById('preview-view-btn').style.borderColor = 'transparent';
2216
+ document.getElementById('preview-view-btn').classList.add('border-transparent');
2217
  } else {
2218
  document.getElementById('source-view').classList.add('hidden');
2219
  document.getElementById('preview-view').classList.remove('hidden');
2220
+ document.getElementById('preview-view-btn').style.borderColor = '#A3E0C5';
2221
+ document.getElementById('preview-view-btn').classList.remove('border-transparent');
2222
+ document.getElementById('source-view-btn').style.borderColor = 'transparent';
2223
+ document.getElementById('source-view-btn').classList.add('border-transparent');
2224
 
2225
  // Update preview iframe if HTML is generated
2226
  if (generatedHTML) {
templates/logo.png ADDED