Files

517 lines
23 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>水晶男孩|入坑申請書</title>
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link rel="stylesheet" href="assets/css/tablet.css">
<style>
body.fansform-page main.fansform-main {
max-width: min(880px, 94vw);
margin-inline: auto;
padding-top: clamp(28px, 4vw, 48px);
padding-bottom: clamp(40px, 6vw, 72px);
}
body.fansform-page .fansform-lead {
text-align: center;
max-width: 36em;
margin: 0 auto 2rem;
color: var(--text-muted);
line-height: 1.65;
}
body.fansform-page .fansform-notice {
margin: 0 0 1.5rem;
padding: 1rem 1.25rem;
border-radius: 12px;
font-weight: 600;
text-align: center;
}
body.fansform-page .fansform-notice--ok {
background: var(--surface-soft);
border: 1px solid var(--primary);
color: var(--dark-yellow);
}
body.fansform-page .fansform-notice--err {
background: #fff5f5;
border: 1px solid #c0392b;
color: #922b21;
}
body.fansform-page .field-error {
margin: 0;
font-size: 0.85rem;
color: #c0392b;
}
body.fansform-page .sechskies-form {
width: 100%;
padding: clamp(20px, 3vw, 2rem);
background: var(--surface);
border: 1px solid rgba(255, 204, 0, 0.22);
border-radius: 16px;
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.08);
}
body.fansform-page .form-title {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
margin-bottom: 2.5rem;
}
body.fansform-page .form-title h2 {
--form-title-diamond: calc(1.15em * 0.8);
display: inline-flex;
align-items: center;
justify-content: center;
flex-wrap: nowrap;
gap: 0.35em;
max-width: 100%;
margin: 0;
padding: 0 0.5rem;
font-size: clamp(1.6rem, 4vw, 2.25rem);
line-height: 1.15;
font-weight: 900;
color: var(--primary);
letter-spacing: 0.12em;
text-align: center;
white-space: nowrap;
}
body.fansform-page .form-title h2::before,
body.fansform-page .form-title h2::after {
content: "";
flex: 0 0 var(--form-title-diamond);
align-self: center;
width: var(--form-title-diamond);
height: var(--form-title-diamond);
margin: 0;
background: url("assets/svg/crystal-diamond.svg") no-repeat center / contain;
}
body.fansform-page .form-title p {
width: 100%;
max-width: 28em;
margin: 0.65rem 0 0;
font-size: 0.9rem;
color: var(--dark-yellow);
font-weight: 600;
letter-spacing: 0.15em;
text-align: center;
}
body.fansform-page .sechskies-form fieldset {
border: 2px solid var(--primary);
background: transparent;
border-radius: 24px;
padding: clamp(1.5rem, 3vw, 2.5rem);
margin: 0 0 2rem;
}
body.fansform-page .sechskies-form legend {
font-weight: 900;
color: var(--primary);
padding: 0 12px;
font-size: 1.05rem;
border-left: 4px solid var(--primary);
border-right: 4px solid var(--primary);
margin-inline: auto;
}
body.fansform-page .sechskies-form fieldset>div {
display: flex;
flex-direction: column;
gap: 8px;
margin-bottom: 1.25rem;
}
body.fansform-page .sechskies-form fieldset>div:last-child {
margin-bottom: 0;
}
body.fansform-page .main-label {
font-weight: 700;
color: var(--dark-yellow);
}
body.fansform-page .sechskies-form input[type="text"],
body.fansform-page .sechskies-form input[type="url"],
body.fansform-page .sechskies-form input[type="tel"],
body.fansform-page .sechskies-form input[type="email"],
body.fansform-page .sechskies-form input[type="password"],
body.fansform-page .sechskies-form input[type="date"],
body.fansform-page .sechskies-form input[type="number"],
body.fansform-page .sechskies-form input[type="time"],
body.fansform-page .sechskies-form input[type="datetime-local"],
body.fansform-page .sechskies-form input[type="file"],
body.fansform-page .sechskies-form select,
body.fansform-page .sechskies-form textarea {
width: 100%;
padding: 10px 14px;
border: 1.5px solid var(--dark-yellow);
border-radius: 16px;
font-size: 0.95rem;
box-sizing: border-box;
background-color: #fff;
color: var(--text-color);
font-family: inherit;
}
body.fansform-page .sechskies-form input:focus,
body.fansform-page .sechskies-form select:focus,
body.fansform-page .sechskies-form textarea:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(255, 204, 0, 0.25);
}
body.fansform-page input[type="range"] {
-webkit-appearance: none;
width: 100%;
height: 30px;
background: transparent;
accent-color: var(--primary);
}
body.fansform-page input[type="range"]::-webkit-slider-runnable-track {
height: 10px;
background: var(--primary);
border-radius: 5px;
}
body.fansform-page input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
height: 20px;
width: 20px;
border-radius: 50%;
background: var(--surface);
border: 3px solid var(--primary);
margin-top: -5px;
}
body.fansform-page input[type="file"]::file-selector-button {
background: var(--surface);
color: var(--dark-yellow);
border: 1px solid var(--primary);
border-radius: 12px;
padding: 6px 14px;
cursor: pointer;
font-weight: 700;
margin-right: 10px;
}
body.fansform-page input[type="file"]::file-selector-button:hover {
background: var(--primary);
color: var(--black);
}
body.fansform-page .option-row {
display: flex;
flex-wrap: wrap;
gap: 10px 14px;
margin-top: 4px;
}
body.fansform-page .option-row.grid-3 {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr));
gap: 10px;
}
body.fansform-page .option-item {
display: flex;
align-items: center;
gap: 6px;
cursor: pointer;
}
body.fansform-page .sechskies-form input[type="radio"],
body.fansform-page .sechskies-form input[type="checkbox"] {
width: auto;
accent-color: var(--primary);
}
body.fansform-page .sechskies-form .submit {
display: flex;
flex-direction: row;
gap: 12px;
margin-top: 0.5rem;
}
body.fansform-page .sechskies-form .submit input {
flex: 1;
padding: 14px;
border-radius: 50px;
font-weight: 700;
cursor: pointer;
font-family: inherit;
font-size: 1rem;
transition: background 0.25s, color 0.25s, border-color 0.25s;
}
body.fansform-page .sechskies-form input[type="submit"] {
background: var(--primary);
color: var(--black);
border: 2px solid var(--primary);
}
body.fansform-page .sechskies-form input[type="submit"]:hover {
background: var(--dark-yellow);
border-color: var(--dark-yellow);
color: var(--surface);
}
body.fansform-page .sechskies-form input[type="reset"] {
background: var(--surface);
color: var(--dark-yellow);
border: 2px solid var(--primary);
}
body.fansform-page .sechskies-form input[type="reset"]:hover {
background: #c0392b;
border-color: #c0392b;
color: #fff;
}
body.fansform-page input[type="color"] {
height: 40px;
width: 80px;
padding: 0;
border: 1.5px solid var(--dark-yellow);
border-radius: 12px;
cursor: pointer;
}
</style>
</head>
<body class="fansform-page">
<header class="inner-page-header">
<div class="header-inner site-header-inner">
<h1 class="main-title">入坑申請書</h1>
<div class="subtitle-wrap">
<span class="sub-title">SECHSKIES JOINING APPLICATION</span>
</div>
</div>
</header>
<nav class="portal-nav" aria-label="水晶男孩推廣部導覽" data-portal-nav></nav>
<canvas id="particles"></canvas>
<main class="content-container fansform-main">
<p class="fansform-lead">填寫這份申請書,正式宣告你加入小黃行列。表單以 PHP 處理 POST(練習用,尚未寫入資料庫)。</p>
<?php if ($submitted): ?>
<p class="fansform-notice fansform-notice--ok" role="status">
收到啦,<?= fansform_h(fansform_post('fan_nickname')) ?>!申請已通過基本驗證(暱稱+信箱)。
</p>
<?php elseif ($isPost && $errors !== []): ?>
<p class="fansform-notice fansform-notice--err" role="alert">請修正標示的欄位後再送出。</p>
<?php endif; ?>
<form action="<?= fansform_h($_SERVER['PHP_SELF'] ?? 'fansform.php') ?>" method="post" class="sechskies-form"
enctype="multipart/form-data" aria-labelledby="fansform-heading"<?= $submitted ? ' hidden' : '' ?>>
<div class="form-title">
<h2 id="fansform-heading">水晶男孩入坑申請書</h2>
<p>SECHSKIES JOINING APPLICATION</p>
</div>
<fieldset>
<legend>💛 第一階段:小黃身分驗證</legend>
<div>
<label class="main-label" for="fan-nickname">應援小黃</label>
<input type="text" id="fan-nickname" name="fan_nickname" placeholder="輸入你的暱稱"
autocomplete="nickname" value="<?= fansform_h(fansform_post('fan_nickname')) ?>" required>
<?php if (isset($errors['fan_nickname'])): ?>
<p class="field-error"><?= fansform_h($errors['fan_nickname']) ?></p>
<?php endif; ?>
</div>
<div>
<label class="main-label" for="fan-email">聯絡信箱</label>
<input type="email" id="fan-email" name="fan_email" placeholder="example@mail.com"
autocomplete="email" value="<?= fansform_h(fansform_post('fan_email')) ?>" required>
<?php if (isset($errors['fan_email'])): ?>
<p class="field-error"><?= fansform_h($errors['fan_email']) ?></p>
<?php endif; ?>
</div>
<div>
<label class="main-label" for="fan-password">輸入你的密碼</label>
<input type="password" id="fan-password" name="fan_password" autocomplete="new-password">
</div>
<div>
<label class="main-label" for="fan-tel">聯絡電話(發放週邊通知用)</label>
<input type="tel" id="fan-tel" name="fan_tel" placeholder="0912-345-678" autocomplete="tel"
value="<?= fansform_h(fansform_post('fan_tel')) ?>">
</div>
</fieldset>
<fieldset>
<legend>🎤 第二階段:見面會應援調查</legend>
<div>
<span class="main-label" id="bias-label">本命成員</span>
<div class="option-row" role="group" aria-labelledby="bias-label">
<?php
$members = [
'ejw' => '殷志源 은지원',
'ljj' => '李宰鎮 이재진',
'kjd' => '金在德 김재덕',
'ksh' => '姜成勳 강성훈',
'jsw' => '張水院 장수원',
'gjy' => '高志溶 고지용',
];
foreach ($members as $val => $label):
$checked = in_array($val, $biasChecked, true) ? ' checked' : '';
?>
<label class="option-item"><input type="checkbox" name="bias[]"
value="<?= fansform_h($val) ?>"<?= $checked ?>><?= fansform_h($label) ?></label>
<?php endforeach; ?>
</div>
</div>
<div>
<label class="main-label" for="event-time">最希望舉辦見面會的時間</label>
<input type="time" id="event-time" name="event_time"
value="<?= fansform_h(fansform_post('event_time')) ?>">
</div>
<div>
<label class="main-label" for="favorite-song">最期待聽到的歌曲</label>
<select id="favorite-song" name="favorite_song">
<option value="">請選擇歌曲</option>
<optgroup label="《學園別曲》(학원별곡)">
<option value="school_anthem"<?= $favoriteSong === 'school_anthem' ? ' selected' : '' ?>>
학원별곡(學園別曲)</option>
<option value="heartbreak"<?= $favoriteSong === 'heartbreak' ? ' selected' : '' ?>>연정(戀情)
</option>
<option value="pom_saeng_pom_sa"<?= $favoriteSong === 'pom_saeng_pom_sa' ? ' selected' : '' ?>>
사나이 가는 길(폼생폼사)</option>
<option value="confirmation"<?= $favoriteSong === 'confirmation' ? ' selected' : '' ?>>확인 /
確認</option>
<option value="betrayal"<?= $favoriteSong === 'betrayal' ? ' selected' : '' ?>>배신감 / 背叛感
</option>
<option value="remember_me"<?= $favoriteSong === 'remember_me' ? ' selected' : '' ?>>
기억해줄래 / 請記得好嗎</option>
<option value="walking_in_the_rain"<?= $favoriteSong === 'walking_in_the_rain' ? ' selected' : '' ?>>
Walking In The Rain</option>
<option value="dream_comes_true"<?= $favoriteSong === 'dream_comes_true' ? ' selected' : '' ?>>
Dream Comes True</option>
<option value="love_declaration"<?= $favoriteSong === 'love_declaration' ? ' selected' : '' ?>>
사랑 신고식 / 愛的宣言</option>
<option value="together"<?= $favoriteSong === 'together' ? ' selected' : '' ?>>다같이 해요 / 一起來吧
</option>
</optgroup>
<optgroup label="《Special》">
<option value="leaving_you"<?= $favoriteSong === 'leaving_you' ? ' selected' : '' ?>>
너를내며 / 送你離開</option>
<option value="couple"<?= $favoriteSong === 'couple' ? ' selected' : '' ?>>커플(Couple / 戀人
</option>
<option value="unseen_world"<?= $favoriteSong === 'unseen_world' ? ' selected' : '' ?>>
네겐 보일수 없었던 세상</option>
<option value="while_you_sleep"<?= $favoriteSong === 'while_you_sleep' ? ' selected' : '' ?>>
그대가 잠든 사이에</option>
<option value="know_my_heart"<?= $favoriteSong === 'know_my_heart' ? ' selected' : '' ?>>
내맘을 알고있니</option>
<option value="celebrate_tonight"<?= $favoriteSong === 'celebrate_tonight' ? ' selected' : '' ?>>
Celebrate Tonight</option>
<option value="transformation"<?= $favoriteSong === 'transformation' ? ' selected' : '' ?>>
변신 / 改變</option>
<option value="giving_up"<?= $favoriteSong === 'giving_up' ? ' selected' : '' ?>>단념 / 死心
</option>
<option value="prayer"<?= $favoriteSong === 'prayer' ? ' selected' : '' ?>>기도 / 祈禱</option>
<option value="goodbye_party"<?= $favoriteSong === 'goodbye_party' ? ' selected' : '' ?>>
Goodbye Party</option>
<option value="soaring"<?= $favoriteSong === 'soaring' ? ' selected' : '' ?>>비상 / 飛翔</option>
</optgroup>
</select>
</div>
<div>
<span class="main-label" id="event-poll-label">最期待的見面會環節</span>
<div class="option-row grid-3" role="radiogroup" aria-labelledby="event-poll-label">
<?php
$polls = [
'dance' => '隨機舞蹈挑戰',
'battle' => '黑白水晶對抗賽',
'capsule' => '時光膠囊對話',
'unplugged' => '抒情版 Unplugged',
'yellow-note' => 'Yellow Note 心願投稿',
'balloon' => '黃色氣球海大合唱',
];
foreach ($polls as $val => $label):
$checked = $eventPoll === $val ? ' checked' : '';
?>
<label class="option-item"><input type="radio" name="event_poll"
value="<?= fansform_h($val) ?>"<?= $checked ?>><?= fansform_h($label) ?></label>
<?php endforeach; ?>
</div>
</div>
<div>
<label class="main-label" for="album-count">想簽名的專輯數</label>
<input type="number" id="album-count" name="album_count" min="0" placeholder="0"
value="<?= fansform_h(fansform_post('album_count')) ?>">
</div>
</fieldset>
<fieldset>
<legend>📂 第三階段:資格審核與提交</legend>
<div>
<label class="main-label" for="join-date">入坑日期</label>
<input type="date" id="join-date" name="join_date"
value="<?= fansform_h(fansform_post('join_date')) ?>">
</div>
<div>
<label class="main-label" for="join-story">入坑原因(最感動的一瞬間)</label>
<textarea id="join-story" name="join_story" rows="8"
placeholder="分享你入坑的故事"><?= fansform_h(fansform_post('join_story')) ?></textarea>
</div>
<div>
<label class="main-label" for="proof-file">上傳你的小黃應援證物(PDF/圖片)</label>
<input type="file" id="proof-file" name="proof_file" accept="image/*,.pdf">
</div>
<div>
<label class="main-label" for="fan-level">淪陷指數</label>
<input type="range" id="fan-level" name="fan_level" min="0" max="100"
value="<?= fansform_h(fansform_post('fan_level', '80')) ?>">
</div>
<div>
<label class="main-label" for="fan-color">你最愛的應援色定義</label>
<input type="color" id="fan-color" name="fan_color"
value="<?= fansform_h(fansform_post('fan_color', '#ffcc00')) ?>">
</div>
<div>
<label class="main-label" for="share-url">必推連結!!不能只有我入坑</label>
<input type="url" id="share-url" name="share_url" placeholder="https://youtube.com/..."
value="<?= fansform_h(fansform_post('share_url')) ?>">
</div>
</fieldset>
<div class="submit">
<input type="reset" value="重置">
<input type="submit" value="送出">
</div>
</form>
<?php if ($submitted): ?>
<p class="fansform-lead"><a href="<?= fansform_h($_SERVER['PHP_SELF'] ?? 'fansform.php') ?>">再填一份申請書</a></p>
<?php endif; ?>
</main>
<footer>
<p>SECHSKIES Fanpage &copy; 2026 - 黃色氣球永遠飄揚</p>
<a href="https://jekkinoopy.github.io/Portfolio/" class="studio-link" target="_blank" rel="noopener noreferrer">
Design by <span class="mark_b">Jekkinoopy Studio</span>
</a>
</footer>
<script src="assets/js/particles.js"></script>
<script src="assets/js/portal-nav.js"></script>
</body>
</html>