Spaces:
Sleeping
Sleeping
Youngger9765
commited on
Commit
·
14bd9e9
1
Parent(s):
5a12f56
更新 index.html 模板,調整樣式與新增 logo
Browse files- 將背景顏色改為淺綠色,提升整體視覺效果
- 調整按鈕、標題及文字顏色,增強可讀性
- 新增 logo 圖片以提升品牌識別度
- 優化各區塊的邊框與陰影效果,增強層次感
此次更新旨在改善使用者體驗,提供更清晰的視覺效果與品牌形象。
- templates/index.html +129 -109
- 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: #
|
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(
|
22 |
-
border: 1px solid
|
23 |
}
|
24 |
|
25 |
.editor-container {
|
@@ -39,23 +39,26 @@
|
|
39 |
}
|
40 |
|
41 |
.btn-primary {
|
42 |
-
background:
|
|
|
|
|
43 |
transition: all 0.3s ease;
|
44 |
}
|
45 |
|
46 |
.btn-primary:hover {
|
47 |
transform: translateY(-2px);
|
48 |
-
box-shadow: 0 10px 20px rgba(
|
|
|
49 |
}
|
50 |
|
51 |
.tab-active {
|
52 |
-
border-bottom: 3px solid #
|
53 |
-
color: #
|
54 |
}
|
55 |
|
56 |
.preview-frame {
|
57 |
background: white;
|
58 |
-
border: 1px solid #
|
59 |
border-radius: 8px;
|
60 |
padding: 20px;
|
61 |
}
|
@@ -74,8 +77,9 @@
|
|
74 |
bottom: 20px;
|
75 |
right: 20px;
|
76 |
padding: 16px 24px;
|
77 |
-
background: #
|
78 |
-
color:
|
|
|
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(
|
236 |
}
|
237 |
50% {
|
238 |
-
box-shadow: 0 0 0 8px rgba(
|
239 |
}
|
240 |
100% {
|
241 |
-
box-shadow: 0 0 0 4px rgba(
|
242 |
}
|
243 |
}
|
244 |
|
@@ -282,7 +286,7 @@
|
|
282 |
.progress-title {
|
283 |
font-size: 14px;
|
284 |
font-weight: 600;
|
285 |
-
color: #
|
286 |
white-space: nowrap;
|
287 |
}
|
288 |
|
@@ -303,7 +307,7 @@
|
|
303 |
}
|
304 |
|
305 |
.progress-connector.completed {
|
306 |
-
background:
|
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 #
|
329 |
background: white;
|
330 |
color: #6c757d;
|
331 |
}
|
@@ -337,17 +341,17 @@
|
|
337 |
}
|
338 |
|
339 |
.progress-inline .progress-step.active .step-icon {
|
340 |
-
background: #
|
341 |
-
color:
|
342 |
-
border-color: #
|
343 |
animation: progressPulse 2s infinite;
|
344 |
-
box-shadow: 0 0 0 2px rgba(
|
345 |
}
|
346 |
|
347 |
.progress-inline .progress-step.completed .step-icon {
|
348 |
-
background: #
|
349 |
-
color:
|
350 |
-
border-color: #
|
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 #
|
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
|
499 |
-
<i class="fas fa-file-code mr-3
|
500 |
樂寫網徵文比賽 HTML 建立器
|
501 |
</h1>
|
502 |
-
<p class="
|
503 |
</div>
|
504 |
-
<div
|
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
|
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: #
|
567 |
-
background:
|
568 |
}
|
569 |
|
570 |
.container {
|
@@ -574,32 +578,34 @@
|
|
574 |
}
|
575 |
|
576 |
.header {
|
577 |
-
background:
|
578 |
-
color:
|
579 |
text-align: center;
|
580 |
padding: 60px 20px;
|
581 |
border-radius: 20px;
|
582 |
margin-bottom: 30px;
|
583 |
-
box-shadow: 0 20px 40px rgba(
|
|
|
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 |
-
|
597 |
}
|
598 |
|
599 |
.header p {
|
600 |
font-size: 1.2rem;
|
601 |
margin-bottom: 30px;
|
602 |
-
|
603 |
line-height: 1.8;
|
604 |
}
|
605 |
|
@@ -622,19 +628,20 @@
|
|
622 |
}
|
623 |
|
624 |
.btn-primary {
|
625 |
-
background: #
|
626 |
-
color:
|
|
|
627 |
}
|
628 |
|
629 |
.btn-secondary {
|
630 |
background: transparent;
|
631 |
-
color:
|
632 |
-
border: 2px solid
|
633 |
}
|
634 |
|
635 |
.btn:hover {
|
636 |
transform: translateY(-3px);
|
637 |
-
box-shadow: 0 10px 25px rgba(
|
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(
|
|
|
646 |
transition: transform 0.3s ease;
|
647 |
}
|
648 |
|
@@ -651,16 +659,19 @@
|
|
651 |
}
|
652 |
|
653 |
.card h2 {
|
654 |
-
color: #
|
655 |
font-size: 2rem;
|
656 |
margin-bottom: 25px;
|
657 |
-
border-bottom: 3px solid #
|
658 |
padding-bottom: 10px;
|
659 |
}
|
660 |
|
661 |
.highlight {
|
662 |
-
color: #
|
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 #
|
673 |
}
|
674 |
|
675 |
.target-section h3, .method-section h3 {
|
676 |
-
color: #
|
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 #
|
689 |
border-radius: 20px;
|
690 |
padding: 30px;
|
691 |
margin-bottom: 40px;
|
692 |
-
box-shadow: 0 10px 30px rgba(
|
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(
|
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 #
|
708 |
}
|
709 |
|
710 |
.stage-number {
|
711 |
-
background:
|
712 |
-
color:
|
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(
|
|
|
724 |
}
|
725 |
|
726 |
.flow-header h3 {
|
727 |
-
color: #
|
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 #
|
747 |
}
|
748 |
|
749 |
.detail-item:last-child {
|
@@ -753,7 +765,7 @@
|
|
753 |
|
754 |
.detail-label {
|
755 |
font-weight: 600;
|
756 |
-
color: #
|
757 |
min-width: 100px;
|
758 |
margin-right: 15px;
|
759 |
}
|
@@ -779,10 +791,10 @@
|
|
779 |
content: '';
|
780 |
width: 4px;
|
781 |
height: 40px;
|
782 |
-
background:
|
783 |
border-radius: 2px;
|
784 |
margin-bottom: 5px;
|
785 |
-
box-shadow: 0 4px 15px rgba(
|
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 #
|
796 |
-
filter: drop-shadow(0 4px 8px rgba(
|
797 |
animation: arrowBounce 2s ease-in-out infinite;
|
798 |
}
|
799 |
|
@@ -803,12 +815,12 @@
|
|
803 |
}
|
804 |
|
805 |
.flow-arrow:hover::before {
|
806 |
-
background:
|
807 |
transform: scaleY(1.1);
|
808 |
}
|
809 |
|
810 |
.flow-arrow:hover::after {
|
811 |
-
border-top-color: #
|
812 |
transform: translateY(-2px);
|
813 |
}
|
814 |
|
@@ -837,21 +849,22 @@
|
|
837 |
background: linear-gradient(to bottom,
|
838 |
transparent 0%,
|
839 |
transparent 45%,
|
840 |
-
rgba(
|
841 |
-
rgba(
|
842 |
transparent 55%,
|
843 |
transparent 100%
|
844 |
);
|
845 |
}
|
846 |
|
847 |
.reward-box {
|
848 |
-
background:
|
849 |
-
color:
|
850 |
border-radius: 15px;
|
851 |
padding: 25px;
|
852 |
display: flex;
|
853 |
align-items: center;
|
854 |
-
box-shadow: 0 5px 20px rgba(
|
|
|
855 |
}
|
856 |
|
857 |
.reward-icon {
|
@@ -884,7 +897,7 @@
|
|
884 |
.connector-line {
|
885 |
width: 3px;
|
886 |
height: 40px;
|
887 |
-
background:
|
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 #
|
902 |
}
|
903 |
|
904 |
/* Additional sections */
|
@@ -914,12 +927,12 @@
|
|
914 |
padding: 25px;
|
915 |
border-radius: 15px;
|
916 |
text-align: center;
|
917 |
-
border: 2px solid #
|
918 |
transition: all 0.3s ease;
|
919 |
}
|
920 |
|
921 |
.registration-item:hover {
|
922 |
-
border-color: #
|
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(
|
946 |
}
|
947 |
|
948 |
th, td {
|
949 |
padding: 15px;
|
950 |
text-align: left;
|
951 |
-
border-bottom: 1px solid #
|
952 |
}
|
953 |
|
954 |
th {
|
955 |
-
background: #
|
956 |
-
color:
|
957 |
font-weight: 600;
|
958 |
}
|
959 |
|
@@ -969,10 +982,10 @@
|
|
969 |
}
|
970 |
|
971 |
.requirement-item {
|
972 |
-
background: #
|
973 |
padding: 20px;
|
974 |
border-radius: 10px;
|
975 |
-
border-left: 4px solid #
|
976 |
}
|
977 |
|
978 |
.notes-grid {
|
@@ -986,7 +999,7 @@
|
|
986 |
background: #fff3cd;
|
987 |
padding: 20px;
|
988 |
border-radius: 10px;
|
989 |
-
border-left: 4px solid #
|
990 |
}
|
991 |
|
992 |
.timeline-item {
|
@@ -999,8 +1012,8 @@
|
|
999 |
.timeline-number {
|
1000 |
width: 50px;
|
1001 |
height: 50px;
|
1002 |
-
background: #
|
1003 |
-
color:
|
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:
|
1040 |
-
color:
|
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.
|
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: #
|
1324 |
{% endif %}
|
1325 |
{% if contactInfo %}
|
1326 |
-
<p>{{ contactInfo }}{% if facebookUrl %}:<a href="{{ facebookUrl }}" style="color: #
|
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="
|
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
|
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
|
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
|
1359 |
<div class="space-y-3">
|
1360 |
<div>
|
1361 |
-
<label class="block text-sm font-medium
|
1362 |
-
<input type="text" id="var-mainTitle" value="2025聯發科技公益活動" class="w-full px-4 py-2
|
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
|
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
|
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
|
1639 |
<i class="fas fa-external-link-alt mr-1"></i>彈出視窗
|
1640 |
</button>
|
1641 |
-
<button onclick="copyToClipboard()" class="text-sm
|
1642 |
<i class="fas fa-copy mr-1"></i>複製
|
1643 |
</button>
|
1644 |
-
<button onclick="downloadHTML()" class="text-sm
|
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 = '#
|
|
|
1675 |
} else if (type === 'error') {
|
1676 |
toast.style.background = '#ef4444';
|
|
|
1677 |
} else if (type === 'info') {
|
1678 |
-
toast.style.background = '#
|
|
|
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').
|
2194 |
-
document.getElementById('source-view-btn').classList.remove('
|
2195 |
-
document.getElementById('preview-view-btn').
|
2196 |
-
document.getElementById('preview-view-btn').classList.
|
2197 |
} else {
|
2198 |
document.getElementById('source-view').classList.add('hidden');
|
2199 |
document.getElementById('preview-view').classList.remove('hidden');
|
2200 |
-
document.getElementById('preview-view-btn').
|
2201 |
-
document.getElementById('preview-view-btn').classList.remove('
|
2202 |
-
document.getElementById('source-view-btn').
|
2203 |
-
document.getElementById('source-view-btn').classList.
|
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
![]() |