@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@100;300;400;500;700;900&family=Noto+Serif+TC:wght@200;300;400;500;600;700;900&display=swap");

@font-face {
    font-family: "Butler_Regular";
    src: url(../fonts/Butler_Regular.otf);
}

@font-face {
    font-family: "Butler_Light";
    src: url(../fonts/Butler_Light.otf);
}

@font-face {
    font-family: "Butler_Bold";
    src: url(../fonts/Butler_Bold.otf);
}

.NotoSansTC {
    font-family: "Noto Sans TC";
    font-weight: 300;
    letter-spacing: 0.2em;
}

.Butler_Light {
    font-family: "Butler_Light";
    letter-spacing: 0;
}

.Butler_Regular {
    font-family: "Butler_Regular";
    /* letter-spacing: 0; */
}

[data-aos="opacity-up"] {
    opacity: 1;
    clip-path: inset(100% 0 0% 0);
    /* 初始状态下完全隐藏 */
}

[data-aos="opacity-up"].aos-animate {
    opacity: 1;
    clip-path: inset(0 0 0 0);
    /* 显示全部图片 */
}



body,
html {
    position: relative;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    /* scroll-behavior: smooth; */
    --vw-base: calc(100vw / 1920);
    /* cursor: none; */
    /* 自訂游標暫時停用 */
}


body>* {}

h1,
h2,
h3,
h4,
h5,
h6,
p {
    margin: 0;
    padding: 0;
}

a:link,
a:visited,
a:hover,
a:active {
    text-decoration: none;
}

button,
input,
textarea,
select,
option {
    margin: 0;
    padding: 0;
    -webkit-appearance: none;
    -webkit-border-radius: 0px;
    border-radius: 0;
    -moz-appearance: none;
    appearance: none;
    outline: none;
}

ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}


.word-dot {
    margin: 0 -0.5vw;
}

/* 隱藏瀏覽器原生的滾動條以防止 100vw 的寬度包含滾動條 (Hide native scrollbar to prevent 100vw from including scrollbar width) */
::-webkit-scrollbar {
    width: 0 !important;
    height: 0 !important;
    display: none !important;
}

html {
    scrollbar-width: none !important;
    /* Firefox */
    -ms-overflow-style: none !important;
    /* IE and Edge */
}


/* 自製滾動條軌道容器 (Custom Scrollbar Track Container) */
.custom-scrollbar {
    position: fixed;
    right: 4px;
    top: 4px;
    bottom: 4px;
    width: 4px;
    /* background-color: rgba(255, 255, 255, 0.02); */
    /* 微弱的半透明背景軌道 */
    border-radius: 4px;
    z-index: 999999;
    pointer-events: auto;
    opacity: 0;
    transition: opacity 0.3s ease, background-color 0.3s ease;
}

/* 當滑鼠懸停於軌道或是有 visible 類別時顯示滾動條 (Show scrollbar when hovered or has visible class) */
.custom-scrollbar.visible,
.custom-scrollbar:hover {
    opacity: 1;
    background-color: rgba(0, 0, 0, 0.08);
    /* 懸停時軌道背景變深一點 */
}

/* 自製滾動條滑塊 (Custom Scrollbar Thumb) */
.custom-scrollbar-thumb {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 20px;
    /* 高度由 JS 動態設定 */
    background-color: rgba(0, 0, 0, 0.3);
    /* 半透明白色色塊 */
    /* border-radius: 4px; */
    cursor: pointer;
    transition: background-color 0.2s ease;
}

/* 滑塊懸停或啟用狀態 (Thumb hover or active state) */
.custom-scrollbar-thumb:hover,
.custom-scrollbar-thumb.active {
    background-color: rgba(0, 0, 0, 0.5);
    /* 更亮一些 */
}

/* 拖曳時臨時停用平滑捲動以防止滑塊抖動滯後 (Temporarily disable smooth scroll during drag to prevent thumb lag) */
html.no-smooth {
    scroll-behavior: auto !important;
}

.pic-txt {
    position: absolute;
    bottom: calc(8* var(--vw-base));
    right: calc(8* var(--vw-base));
    color: #fff;
    font-size: calc(12* var(--vw-base));
    font-family: "Noto Sans TC";
    font-weight: 400;
    letter-spacing: 0.05em;
    line-height: calc(20* var(--vw-base));
    z-index: 10;
    text-shadow: #4e484698 1px 1px 1px;
}

/*內容*/
.container {
    position: relative;
    width: 100%;
    height: auto;
    /* opacity: 0; */
    background-color: #e6e6e6;
}


.m1 {
    position: relative;
    width: 100%;
    height: calc(950*var(--vw-base));
    background-color: #e6e6e6;
    /* 白色背景開始 */
    z-index: 10;
}

.m1-bg {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}

.bg-video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    mix-blend-mode: luminosity;
    /* 或 screen */
    opacity: 0.08;
    /* 使用遮罩：700vw-base前完全顯示，700~900vw-base漸漸淡出，900~950vw-base完全遮蔽影片 (CSS mask-image gradient stops) */
    -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) calc(700*var(--vw-base)), rgba(0, 0, 0, 0) calc(900*var(--vw-base)), rgba(0, 0, 0, 0) calc(950*var(--vw-base)));
    mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) calc(700*var(--vw-base)), rgba(0, 0, 0, 0) calc(900*var(--vw-base)), rgba(0, 0, 0, 0) calc(950*var(--vw-base)));
}

.logo-row {
    position: absolute;
    left: 50%;
    top: calc(16*var(--vw-base));
    transform: translate(-50%, 0);
    width: calc(71*var(--vw-base));
    height: calc(41*var(--vw-base));
    opacity: 0;
    /* 預設隱藏避免進場動畫前閃現，由 GSAP 接手 (Hidden before entrance; GSAP takes over) */
}

.logo-row img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.m1-pic {
    position: absolute;
    top: 0;
    left: 50%;
    transform: translate(-50%, 0);
    /* 圖片本體固定滿版 (1920x721)，不再縮放 (Full-bleed box, no resizing) */
    width: 100%;
    height: calc(721*var(--vw-base));
    z-index: 5;
    overflow: hidden;
    /* 初始 clip 成 1760x609、top 112 的內縮框，滾動時由 GSAP 還原至滿版
       (Initially clipped to the inset frame; GSAP reveals to full bleed on scroll) */
    clip-path: inset(calc(112*var(--vw-base)) calc(80*var(--vw-base)) 0 calc(80*var(--vw-base)));
    -webkit-clip-path: inset(calc(112*var(--vw-base)) calc(80*var(--vw-base)) 0 calc(80*var(--vw-base)));
    opacity: 0;
    /* 預設隱藏避免進場動畫前閃現，由 GSAP 接手 (Hidden before entrance; GSAP takes over) */
}

.m1-scroll {
    position: absolute;
    top: calc(750*var(--vw-base));
    /* 位於下方 230vw-base 剩餘空間的居中偏下 */
    left: 50%;
    transform: translate(-50%, 0);
    text-align: center;
    z-index: 3;
    opacity: 0;
    /* 預設隱藏，由 GSAP 控制淡入與上浮 */
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: calc(10*var(--vw-base));
    z-index: 3;
}

.m1-scroll-txt {
    position: relative;
    color: #333333;
    font-family: "Noto Serif TC";
    font-size: calc(16*var(--vw-base));
    line-height: 1.4em;
    font-weight: 500;
    letter-spacing: 0.3em;
}

/* 外層容器：確保箭頭位置固定 */
.m1-scroll-wrapper {
    position: relative;
    width: calc(4 * var(--vw-base));
    height: calc(137 * var(--vw-base));
}

/* 1. 底層靜態箭頭 */
.arr1 {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 1;
    opacity: 0.4;
}

.arr1 img {
    /*
     * The arrow is only 4px wide at the final size. Render the SVG at 2x
     * first, then reduce it to the original visual size so the tapered end
     * keeps smoother anti-aliasing instead of turning into jagged pixels.
     */
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    max-width: none;
    max-height: none;
    object-fit: fill;
    transform: scale(0.5);
    transform-origin: center center;
    display: block;
}

/* 2. 動態光束層 */
.arr2 {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 2;
    /* 初始：隱藏光束 */
    clip-path: inset(0% 0% 100% 0%);
}

.arr2 img {
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    max-width: none;
    max-height: none;
    object-fit: fill;
    transform: scale(0.5);
    transform-origin: center center;
    display: block;
}

/* 01 頁沒有 m1-navbar，開頁鈕一開始就固定顯示
   (No m1-navbar on this page: menu button is fixed & visible from the start,
    overriding the hidden default in menu.css) */
.menu-btn.is-fixed {
    opacity: 1;
    pointer-events: auto;
}


.prologue {
    position: relative;
    width: 100%;
    /* min-height: calc(586*var(--vw-base)); */
    background-color: #e6e6e6;
    /* 白色背景開始 */
    padding-bottom: calc(117*var(--vw-base));
}

.prologue-content {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    padding-top: calc(70*var(--vw-base));
}

.prologue-content .en {
    position: relative;
    font-style: italic;
    color: #333333;
    font-family: "Butler_Light";
    font-size: calc(18*var(--vw-base));
    line-height: 1.2em;
    font-weight: 300;
    letter-spacing: 0em;
    text-align: center;
}

.prologue-content .cn {
    position: relative;
    color: #333333;
    font-family: "Noto Serif TC";
    font-size: calc(16*var(--vw-base));
    line-height: 1.8em;
    font-weight: 300;
    letter-spacing: 0.3em;
    text-align: center;
}

.m2 {
    position: relative;
    width: 100%;
    min-height: calc(950*var(--vw-base));
    background-color: #e6e6e6;
    /* 白色背景開始 */
}

.m2-card-box {
    position: relative;
    margin: 0 auto;
    width: calc(1760*var(--vw-base));
    display: flex;
    flex-direction: column;
    gap: calc(25*var(--vw-base));
}

.card {
    position: relative;
    width: 100%;
    height: calc(210*var(--vw-base));
    /* height: calc(900*var(--vw-base)); */
    overflow: hidden;
    cursor: pointer;
    /* 開合高度過渡 (Expand/collapse height transition) */
    transition: height 1s cubic-bezier(0.645, 0.045, 0.355, 1);
}

.card.open {
    position: relative;
    width: 100%;
    height: calc(900*var(--vw-base));
}

/* 前一張 card 收合時加速，避免切換下一張時等待太久 */
.card.is-closing {
    transition-duration: 1s;
}

.card-bg {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}

.card-bg img {
    /* 未展開時讓城市天際線的底部剛好貼在 line 上 (Align city skyline base to the line when closed) */
    object-position: 50% 67%;
}

.line-box {
    position: absolute;
    left: 0;
    bottom: calc(0*var(--vw-base));
    width: 100%;
    height: calc(4*var(--vw-base));
    /* background-color: #fff; */
    opacity: 0.4;
}

.line-box .line {
    position: absolute;
    left: 0;
    bottom: calc(0*var(--vw-base));
    /* 未開: 1537 / 打開: 1291，由 GSAP 補間 --line-w (GSAP tweens --line-w) */
    width: calc(100% - 5*var(--vw-base));

    height: 1px;
    background-color: #fff;
    z-index: 1;
}

.card-title {
    position: absolute;
    left: calc(111*var(--vw-base));
    top: calc(0*var(--vw-base));
    height: calc(118*var(--vw-base));
    width: calc(1536*var(--vw-base));
    display: flex;
    align-items: end;
}

/* card2 / card3 開啟詳細頁時，先隱藏原卡片標題，避免透過半透明面板重複顯示。
   開啟 class 會在 open 開始時加入，關閉完成後才移除，因此標題會在面板完全關閉後淡回來。 */
.m2 .card2 .card-title,
.m2 .card3 .card-title {
    opacity: 1;
    transition: opacity 0.3s ease;
}

html.card2-panel-open .m2 .card2 .card-title,
body.card2-panel-open .m2 .card2 .card-title,
html.card3-panel-open .m2 .card3 .card-title,
body.card3-panel-open .m2 .card3 .card-title {
    opacity: 0;
}

/* 按下關閉後立即讓原卡片標題淡回，與 open 頁的退出動畫同步進行 */
html.card2-panel-open.card2-panel-closing .m2 .card2 .card-title,
body.card2-panel-open.card2-panel-closing .m2 .card2 .card-title,
html.card3-panel-open.card3-panel-closing .m2 .card3 .card-title,
body.card3-panel-open.card3-panel-closing .m2 .card3 .card-title {
    opacity: 1;
}

.card-title .en1,
.card-title .en2 {
    position: relative;
    color: #fff;
    font-family: "Butler_Light";
    font-size: calc(18*var(--vw-base));
    line-height: 1.4em;
    font-weight: 300;
    letter-spacing: 0em;
    font-style: italic;
}

.card-title .arr {
    position: relative;
    width: calc(58*var(--vw-base));
    height: calc(4*var(--vw-base));
    margin: 0 calc(13*var(--vw-base)) 0 calc(13*var(--vw-base));
    opacity: 0.4;
}

.card-title .cn {
    position: absolute;
    right: calc(0*var(--vw-base));
    bottom: calc(0*var(--vw-base));
    color: #fff;
    font-family: "Noto Serif TC";
    font-size: calc(20*var(--vw-base));
    line-height: 1.4em;
    font-weight: 500;
    letter-spacing: 0.3em;
    text-align: end;
    opacity: 0;
    transform: translate3d(calc(24*var(--vw-base)), 0, 0);
    transition: opacity 1s cubic-bezier(0.22, 1, 0.36, 1),
        transform 1s cubic-bezier(0.16, 1, 0.3, 1);
    will-change: opacity, transform;
    backface-visibility: hidden;
}

.card.open .card-title .cn {
    opacity: 1;
    transform: translate3d(0, 0, 0);
    /* card height transition is 1s; start at 80% of the expansion */
    transition-delay: 0.8s;
}

.card-txt {
    position: absolute;
    left: calc(110*var(--vw-base));
    top: calc(337*var(--vw-base));
    width: calc(537*var(--vw-base));
    color: #fff;
    font-family: "Noto Serif TC";
    font-size: calc(16*var(--vw-base));
    line-height: 1.8em;
    font-weight: 400;
    letter-spacing: 0.2em;
    text-align: justify;
}

/* card-txt 的每個直接子層由 01.html 依段落個別進場。 */
.card-txt .article-segment {
    display: block;
    will-change: opacity, transform, background-position;
}

.card2 .card-txt {
    top: calc(413*var(--vw-base));
}

.card4 .card-txt {
    top: calc(200*var(--vw-base));
}


.card1-logo {
    position: relative;
    width: calc(304*var(--vw-base));
}

.card4-map {
    position: absolute;
    top: calc(312*var(--vw-base));
    right: calc(198*var(--vw-base));
    width: calc(765*var(--vw-base));
    height: calc(404*var(--vw-base));
}

.card4-flat-map-surface {
    position: absolute;
    inset: 0;
    z-index: 1;
    will-change: opacity, transform;
}

.card4-map .p1,
.card4-map .p2 {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}

.card4-map .p1 {
    z-index: 1;
}

.card4-map .p2 {
    z-index: 2;
    opacity: .5;
}

.card4-map .p1 img,
.card4-map .p2 img {
    display: block;
    width: 100%;
    height: 100%;
    pointer-events: none;
}

.card4-map .p2 img {
    mix-blend-mode: screen;
    filter: brightness(1.12) saturate(.75) blur(.1px);
    /* 與 PH 版同步：放大並對準 USA 發亮區，補足西側邊界缺口。 */
    transform: scale(1.03);
    transform-origin: 83% 37%;
}

.card4-map.is-pulsing .p2 {
    animation: card4GlobeP2Pulse 1.6s ease-in-out infinite;
}

.card4-flat-route-svg {
    position: absolute;
    inset: 0;
    z-index: 3;
    width: 100%;
    height: 100%;
    overflow: visible;
}

.card4-flat-route-svg .card4-globe-route {
    stroke-width: 2;
    stroke-dasharray: 2.4 10;
}

.card4-flat-route-svg .card4-globe-label {
    font-size: 28px;
}

.card4-globe-stage {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: calc(620*var(--vw-base));
    display: grid;
    place-items: center;
    perspective: 1200px;
}

.card4-globe-stage::before,
.card4-globe-stage::after {
    display: none;
}

.card4-globe-sphere {
    --card4-globe-content-x: 0px;
    --card4-globe-content-y: 0px;
    --card4-globe-tilt-x: 0deg;
    --card4-globe-tilt-y: 0deg;
    --card4-globe-light-x: 34%;
    --card4-globe-light-y: 24%;
    position: relative;
    z-index: 1;
    width: calc(605*var(--vw-base));
    aspect-ratio: 1;
    overflow: hidden;
    border-radius: 50%;
    background:
        radial-gradient(ellipse at 34% 27%, rgba(186, 232, 242, .18) 0%, rgba(91, 147, 159, .12) 23%, transparent 45%),
        radial-gradient(circle at 47% 49%, rgba(28, 66, 78, .6) 0%, rgba(9, 30, 39, .52) 58%, rgba(2, 13, 20, .38) 80%, transparent 100%);
    box-shadow:
        0 0 46px rgba(74, 169, 193, .07),
        0 18px 34px rgba(0, 0, 0, .14),
        inset -42px -26px 78px rgba(0, 0, 0, .2),
        inset 22px 18px 50px rgba(203, 246, 255, .035),
        inset -12px -5px 18px rgba(0, 0, 0, .12);
    -webkit-mask-image: radial-gradient(circle at center, #000 0 70%, rgba(0, 0, 0, .7) 84%, transparent 100%);
    mask-image: radial-gradient(circle at center, #000 0 70%, rgba(0, 0, 0, .7) 84%, transparent 100%);
    isolation: isolate;
    perspective: 1200px;
}

.card4-globe-surface {
    position: absolute;
    inset: -2.5%;
    border-radius: 50%;
    transform-origin: center;
    transform-style: preserve-3d;
    transform: translate3d(var(--card4-globe-content-x), var(--card4-globe-content-y), 0) rotateX(var(--card4-globe-tilt-x)) rotateY(var(--card4-globe-tilt-y)) scale(1.045);
    transition: transform .24s cubic-bezier(.22, .72, .2, 1);
    will-change: transform;
}

.card4-globe-sphere::before {
    content: "";
    position: absolute;
    inset: -1px;
    z-index: 4;
    border-radius: inherit;
    background:
        radial-gradient(circle at var(--card4-globe-light-x) var(--card4-globe-light-y),
            rgba(255, 255, 255, .17) 0%, rgba(255, 255, 255, .06) 18%, transparent 38%),
        linear-gradient(145deg, rgba(255, 255, 255, .055), transparent 43%);
    mix-blend-mode: screen;
    pointer-events: none;
}

.card4-globe-sphere::after {
    content: "";
    position: absolute;
    inset: -1px;
    z-index: 5;
    border-radius: inherit;
    background:
        radial-gradient(ellipse at 38% 34%, transparent 0 38%, rgba(1, 9, 13, .03) 55%, rgba(1, 9, 13, .34) 80%, rgba(1, 9, 13, .55) 100%),
        linear-gradient(120deg, transparent 24%, rgba(1, 9, 13, .02) 53%, rgba(1, 9, 13, .26) 100%);
    box-shadow:
        inset -50px -35px 85px rgba(0, 0, 0, .28),
        inset 18px 12px 40px rgba(215, 247, 255, .04);
    pointer-events: none;
}

.card4-globe-map-base,
.card4-globe-map-highlight {
    pointer-events: none;
    mix-blend-mode: screen;
}

.card4-globe-map-base {
    opacity: .43;
    filter: brightness(.9) saturate(.7);
}

.card4-globe-map-highlight {
    opacity: .5;
    filter: brightness(1.12) saturate(.75) blur(.1px);
}

.card4-globe-shade {
    position: absolute;
    inset: 0;
    z-index: 2;
    border-radius: inherit;
    background:
        linear-gradient(105deg, transparent 30%, rgba(213, 246, 255, .08) 52%, transparent 76%),
        radial-gradient(ellipse at 76% 58%, transparent 16%, rgba(1, 9, 13, .38) 76%);
    pointer-events: none;
}

.card4-globe-svg {
    position: absolute;
    inset: 0;
    z-index: 3;
    width: 100%;
    height: 100%;
    overflow: visible;
}

.card4-globe-grid {
    fill: none;
    stroke: rgba(190, 230, 238, .22);
    stroke-width: 1.2;
}

.card4-globe-grid.soft {
    stroke: rgba(190, 230, 238, .11);
}

.card4-globe-route {
    fill: none;
    stroke: #e8fbff;
    stroke-width: 1.35;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-dasharray: 1.6 8;
    opacity: .88;
    animation: card4GlobeRouteFlow 5.2s linear infinite;
}

.card4-globe-route.route-branch-one {
    animation-delay: -1.3s;
}

.card4-globe-route.route-branch-two {
    animation-delay: -2.7s;
}

.card4-globe-route.route-branch-three {
    animation-delay: -3.9s;
}

.card4-globe-route.route-main {
    filter: drop-shadow(0 0 2px rgba(232, 251, 255, .42));
}

.card4-globe-route-origin {
    fill: #e8fbff;
    stroke: none;
    filter: drop-shadow(0 0 2px rgba(232, 251, 255, .55));
}

.card4-globe-taiwan-marker {
    fill: rgba(88, 108, 114, .88);
    stroke: none;
}

.card4-globe-label {
    fill: #fff;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 17px;
    letter-spacing: .08em;
    paint-order: stroke;
    stroke: rgba(7, 26, 34, .2);
    stroke-width: .7px;
    filter: drop-shadow(0 0 5px rgba(232, 251, 255, .42));
}

.card4-globe-specular {
    position: absolute;
    inset: 7% 12% 47% 13%;
    z-index: 6;
    border-radius: 50%;
    background: radial-gradient(ellipse at 30% 22%, rgba(255, 255, 255, .16), rgba(255, 255, 255, .035) 38%, transparent 70%);
    filter: blur(18px);
    opacity: .32;
    pointer-events: none;
}

@keyframes card4GlobeP2Pulse {

    0%,
    100% {
        opacity: 0.5;
    }

    50% {
        opacity: 1;
    }
}

@keyframes card4GlobeRouteFlow {
    to {
        stroke-dashoffset: -96px;
    }
}

.card4-map-txt {
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    color: #fff;
    font-family: "Noto Serif TC";
    font-weight: 400;
    font-size: calc(18*var(--vw-base));
    line-height: 1.8em;
    /* letter-spacing: 0.3em; */
    text-align: justify;
    text-align-last: justify;
    z-index: 8;
}

/* ==========================================
   圓形同心虛線資訊圖樣式 (Concentric Circles Infographic Styles)
   包含 3 個虛線同心圓與 9 個沿線懸停互動節點，支援繞中心緩慢旋轉 (Orbit Rotation)
   ========================================== */

/* 軌道繞中心旋轉動畫 (Orbit Rotation Animation) */
@keyframes orbitRotate {
    from {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(360deg);
    }
}

/* 文字反向旋轉動畫 (Counter-Rotation Animation - 抵消公轉角度以保持文字始終水平正立) */
@keyframes orbitCounterRotate {
    from {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(-360deg);
    }
}

.circle-infographic {
    position: absolute;
    left: calc(881 * var(--vw-base));
    top: calc(233 * var(--vw-base));
    width: calc(605 * var(--vw-base));
    height: calc(605 * var(--vw-base));
    z-index: 5;
    pointer-events: auto;
}

/* 同心圓虛線軌道 (Concentric Circle Dashed Tracks) */
.circle-track {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    border: calc(1 * var(--vw-base)) dashed rgba(255, 255, 255, 0.35);
    border-radius: 50%;
    pointer-events: none;
    box-sizing: border-box;
}

/* 大圓直徑 605 */
.circle-track.circle-lg {
    width: calc(605 * var(--vw-base));
    height: calc(605 * var(--vw-base));
}

/* 中圓直徑 391 */
.circle-track.circle-md {
    width: calc(391 * var(--vw-base));
    height: calc(391 * var(--vw-base));
}

/* 小圓直徑 197 */
.circle-track.circle-sm {
    width: calc(197 * var(--vw-base));
    height: calc(197 * var(--vw-base));
}

/* 旋轉軌道盤 (Orbit Disc) - 繞中心點進行緩慢旋轉 (例如 120 秒轉一圈) */
.orbit-disc {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    /* 透明的整面軌道不可攔截滑鼠，讓各層 info-node 都能收到 hover */
    pointer-events: none;
    transform-origin: center center;
    --orbit-duration: 180s;
    will-change: transform;
}

/* 大圓維持原本速度；中圓、小圓逐級放慢 */
.orbit-md-disc {
    --orbit-duration: 240s;
}

.orbit-sm-disc {
    --orbit-duration: 300s;
}

/* 開始進場時立刻啟動旋轉；未進場前先暫停，避免節點尚未出現就先跑掉 */
.circle-infographic .orbit-disc,
.circle-infographic .node-content-body {
    animation-play-state: paused;
}

.circle-infographic .node-dot,
.circle-infographic .node-content {
    opacity: 0;
    visibility: hidden;
}

.circle-infographic.is-revealing .orbit-disc,
.circle-infographic.is-revealing .node-content-body {
    animation-play-state: running;
}

/* 當滑鼠懸停於資訊圖時，自動暫停旋轉以方便閱讀 (Pause on hover) */
.circle-infographic:hover .orbit-disc,
.circle-infographic:hover .node-content-body {
    animation-play-state: paused;
}

.circle-infographic.is-revealing:hover .orbit-disc,
.circle-infographic.is-revealing:hover .node-content-body {
    animation-play-state: paused;
}

/* 資料資訊節點容器 (Info Node Container) - 圓點幾何中心精準鎖定在虛線軌道上 */
.info-node {
    position: absolute;
    left: calc(var(--node-x) * var(--vw-base));
    top: calc(var(--node-y) * var(--vw-base));
    width: 0;
    height: 0;
    /* 覆寫父層 orbit-disc 的 pointer-events: none，只讓節點本身可互動 */
    pointer-events: auto;
    cursor: pointer;
    z-index: 10;
    user-select: none;
}

/* 小圓點 (直徑 10，中心完全貼齊虛線軌道) */
.info-node .node-dot {
    position: absolute;
    top: 0;
    left: 0;
    transform: translate(-50%, -50%);
    width: calc(10 * var(--vw-base));
    height: calc(10 * var(--vw-base));
    border-radius: 50%;
    background-color: #ffffff;
    opacity: 0.7;
    /* 預設透明度 0.7 */
    box-shadow: 0 0 calc(6 * var(--vw-base)) rgba(255, 255, 255, 0.6);
    transition: opacity 0.35s ease, box-shadow 0.35s ease;
}

/* 資訊文字容器 (以第 1 行為基準垂直平行對齊小圓點) */
.info-node .node-content {
    position: absolute;
    left: calc(13 * var(--vw-base));
    /* 圓點半徑 5 + 間距 8 = 13 */
    top: 0;
    transform: translateY(-50%);
    /* 以圓點中心為旋轉軸心 */
    white-space: nowrap;
    color: #ffffff;
}

.info-node .node-content-body {
    transform-origin: calc(-13 * var(--vw-base)) 50%;
    will-change: transform;
    backface-visibility: hidden;
}

/* 第 1 行：數字與文字底部基線下切齊 (Baseline Alignment) */
.info-node .node-title {
    color: #ffffff;
    font-family: "Noto Serif TC", serif;
    font-weight: 500;
    font-size: calc(16 * var(--vw-base));
    line-height: 1;
    letter-spacing: 0.2em;
    opacity: 0.7;
    transition: opacity 0.35s ease;
    display: flex;
    align-items: baseline;
    /* 數字與文字底部基線下切齊 */
}

/* 第 1 行數字樣式：大小 24, Noto Serif TC Bold (字重 700), letter-spacing: 0.05em */
.info-node .node-title .num {
    font-family: "Noto Serif TC", serif;
    font-weight: 700;
    font-size: calc(24 * var(--vw-base));
    line-height: 1;
    letter-spacing: 0.05em;
    margin-right: calc(6 * var(--vw-base));
}

/* 數字右上角加號等上標格式 (如 35+, 530+) */
.info-node .node-title .num sup {
    font-size: 0.65em;
    top: -0.35em;
    margin-left: calc(2 * var(--vw-base));
}

/* 第 2 行內容：絕對定位在第 1 行下方，不影響第 1 行與圓點的垂直置中 */
.info-node .node-desc {
    position: absolute;
    top: calc(100% + 4 * var(--vw-base));
    left: 0;
    color: #ffffff;
    font-family: "Noto Serif TC", serif;
    font-weight: 500;
    font-size: calc(16 * var(--vw-base));
    line-height: 1.4em;
    letter-spacing: 0.2em;
    opacity: 0;
    transform: translateY(calc(8 * var(--vw-base)));
    pointer-events: none;
    transition: opacity 0.35s cubic-bezier(0.25, 1, 0.5, 1),
        transform 0.35s cubic-bezier(0.25, 1, 0.5, 1);
    white-space: nowrap;
}

/* 懸停 (Hover) 動態特效：
   1. 圓點不縮放，透明度由 0.7 提升到 1
   2. 第 1 行透明度回到 1
   3. 第 2 行淡入並往上位移 (Fade Up)
*/
.info-node:hover .node-dot {
    /* GSAP reveal 會把 opacity 寫入 inline style，需用 !important 蓋過它 */
    opacity: 1 !important;
    box-shadow: 0 0 calc(10 * var(--vw-base)) rgba(255, 255, 255, 1);
}

.info-node:hover .node-title {
    opacity: 1;
}

/* 有節點被 hover 時，其餘節點降至 0.5；hover dot 或文字都算同一個節點 */
.circle-infographic:has(.info-node:hover) .info-node:not(:hover) .node-dot {
    opacity: 0.3 !important;
}

.circle-infographic:has(.info-node:hover) .info-node:not(:hover) .node-title {
    opacity: 0.3;
}

.info-node:hover .node-desc {
    opacity: 1;
    transform: translateY(0);
    pointer-events: auto;
}


























/* ==========================================
   通用 MORE 按鈕樣式 (General MORE Button Styles)
   承襲 index 的 m5 白色風格，不綁定特定區塊類別以利全站通用
   ========================================== */
.more-btn {
    position: absolute;
    left: calc(110*var(--vw-base));
    top: calc(720*var(--vw-base));
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    /* 確保內容在按鈕範圍內垂直置中 */
    width: calc(60 * var(--vw-base));
    height: calc(120 * var(--vw-base));
    cursor: pointer;
    text-decoration: none;
}

/* MORE 文字樣式 */
.more-btn .more-txt {
    color: #ffffff;
    font-family: "Butler_Regular";
    font-size: calc(16 * var(--vw-base));
    line-height: 1.15em;
    letter-spacing: 0.05em;
    font-style: italic;
    z-index: 2;
    /* 確保文字層級高於圓圈背景 */
}

/* MORE 箭頭圖示預設位置與過渡效果 */
.more-btn .more-arr {
    position: absolute;
    bottom: calc(45 * var(--vw-base));
    width: calc(58 * var(--vw-base));
    height: calc(3 * var(--vw-base));
    z-index: 2;
    transition: opacity 0.35s ease, transform 0.35s ease;
}

.more-btn .more-arr img {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: contain;
}

/* 懸停 (Hover) 時箭頭向右滑動並淡出 */
.more-btn:hover .more-arr {
    opacity: 0;
    transform: translateX(calc(15 * var(--vw-base)));
}

/* 懸停 (Hover) 時顯示的圓圈效果：預設隱藏並稍微放大，懸停時縮回原尺寸並淡入 */
.more-btn .m-more-circle,
.more-btn .m5-more-circle,
.more-btn .more-circle {
    position: absolute !important;
    top: 50% !important;
    left: 50% !important;
    width: calc(60 * var(--vw-base)) !important;
    height: calc(60 * var(--vw-base)) !important;
    border: calc(1 * var(--vw-base)) solid #ffffff;
    /* 白色線條圓圈 */
    border-radius: 50%;
    transform: translate(-50%, -50%) scale(1.1) !important;
    opacity: 0 !important;
    pointer-events: none;
    z-index: 1;
    /* 位於文字與箭頭後方 */
    box-sizing: border-box;
    transform-origin: center center;
    transition: opacity 0.4s ease,
        transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
}

.more-btn:hover .m-more-circle,
.more-btn:hover .m5-more-circle,
.more-btn:hover .more-circle {
    opacity: 1 !important;
    transform: translate(-50%, -50%) scale(1) !important;
}

/* ==========================================
   card2 MORE 詳細頁
   ========================================== */
html.card2-panel-open,
body.card2-panel-open,
html.card3-panel-open,
body.card3-panel-open {
    overscroll-behavior: none;
}

.card2-open {
    position: fixed;
    inset: 0;
    z-index: 3000;
    visibility: hidden;
    pointer-events: none;
}

.card2-open.is-open {
    visibility: visible;
    pointer-events: auto;
}

.card2-open-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.7);
}

.card2-open-content {
    position: absolute;
    top: calc(22*var(--vw-base));
    right: calc(80*var(--vw-base));
    bottom: calc(22*var(--vw-base));
    left: calc(80*var(--vw-base));
    box-sizing: border-box;
    padding: 0 calc(110*var(--vw-base)) calc(48*var(--vw-base));
    overflow: auto;
    overscroll-behavior: contain;
    background: rgba(204, 204, 204, 0.8);
    opacity: 0;
    transform: translate3d(0, 100%, 0);
    will-change: opacity, transform;
}

.card2-open-title {
    position: relative;
    width: 100%;
    height: calc(118*var(--vw-base));
    display: flex;
    align-items: flex-end;
}

.card2-open-title .en1,
.card2-open-title .en2 {
    position: relative;
    color: #fff;
    font-family: "Butler_Light";
    font-size: calc(18*var(--vw-base));
    line-height: 1.4em;
    font-weight: 300;
    letter-spacing: 0;
    font-style: italic;
}

.card2-open-title .arr {
    position: relative;
    width: calc(58*var(--vw-base));
    height: calc(4*var(--vw-base));
    margin: 0 calc(13*var(--vw-base));
    opacity: 0.4;
}

.card2-open-title .arr img {
    display: block;
    width: 100%;
    height: 100%;
}

.card2-open-title .line-box {
    z-index: 0;
    pointer-events: none;
}

.card2-open-title .cn {
    position: absolute;
    right: 0;
    bottom: 0;
    color: #fff;
    font-family: "Noto Serif TC";
    font-size: calc(20*var(--vw-base));
    line-height: 1.4em;
    font-weight: 500;
    letter-spacing: 0.3em;
    text-align: end;
}

.card2-open-tabs {
    display: flex;
    align-items: center;
    gap: calc(35*var(--vw-base));
    margin-top: calc(40*var(--vw-base));
}

.card2-open-tab {
    box-sizing: border-box;
    width: calc(170*var(--vw-base));
    height: calc(30*var(--vw-base));
    padding: 0;
    border: calc(1*var(--vw-base)) solid rgba(255, 255, 255, 0.85);
    border-radius: 0;
    background: transparent;
    color: #fff;
    cursor: pointer;
    font-family: "Noto Serif TC";
    font-size: calc(16*var(--vw-base));
    font-weight: 400;
    letter-spacing: 0.15em;
    line-height: 1;
    transition: background-color 0.35s ease, color 0.35s ease, border-color 0.35s ease;
}

.card2-open-tab.is-active,
.card2-open-tab:hover {
    border-color: #fff;
    background: #fff;
    color: #777;
}

.card2-open-image-box {
    width: 100%;
    margin-top: calc(60*var(--vw-base));
}

.card2-open-panel {
    display: flex;
    flex-direction: column;
    gap: calc(31*var(--vw-base));
    width: 100%;
}

.card2-open-panel:not(.is-active) {
    display: none;
}

.card2-open-row {
    display: flex;
    flex-direction: column;
    gap: calc(10*var(--vw-base));
    width: 100%;
    box-sizing: border-box;
}

.card2-open-row-title {
    color: #333333;
    font-family: "Noto Serif TC", "Noto Sans TC", sans-serif;
    font-size: calc(16*var(--vw-base));
    font-weight: 300;
    letter-spacing: 0.2em;
    line-height: 1.15;
    white-space: nowrap;
}

.card2-open-row-image {
    display: block;
    width: calc(1531*var(--vw-base));
    max-width: 100%;
    height: auto;
    margin: 0 auto;
}

.card3-open-people-box {
    width: 100%;
}

.card3-open-body {
    position: relative;
    width: 100%;
    box-sizing: border-box;
    margin-top: calc(42*var(--vw-base));
}

.card3-open-body>.card2-open-tabs {
    margin-top: 0;
}

.card3-open-body>.card2-open-image-box {
    margin-top: calc(47*var(--vw-base));
}

/* 核心團隊的第一排與分類按鈕同高，並維持外層左右 110 的內縮。 */
.card3-open-body:has(.card3-open-core-panel.is-active) {
    width: 100%;
    box-sizing: border-box;
}

.card3-open-body:has(.card3-open-core-panel.is-active)>.card2-open-tabs {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
}

.card3-open-body:has(.card3-open-core-panel.is-active)>.card2-open-image-box {
    margin-top: 0;
}

.card3-open-panel {
    display: flex;
    flex-direction: column;
    gap: calc(15*var(--vw-base));
    width: 100%;
}

.card3-open-panel:not(.is-active) {
    display: none;
}

.card3-open-core-panel {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 0;
    min-height: calc(680*var(--vw-base));
    padding-top: calc(72*var(--vw-base));
    box-sizing: border-box;
}

.card3-open-section-title {
    color: #333333;
    font-family: "Noto Serif TC", "Noto Sans TC", sans-serif;
    font-size: calc(20*var(--vw-base));
    font-weight: 500;
    letter-spacing: 0.2em;
    line-height: 1.15em;
    pointer-events: none;
}

.card3-open-core-panel>.card3-open-section-title {
    position: static;
    left: 0;
    margin-bottom: calc(25*var(--vw-base));
}

.card3-open-core-top-grid,
.card3-open-core-main-grid {
    display: grid;
    grid-template-columns: repeat(4, calc(133*var(--vw-base)));
    column-gap: calc(68*var(--vw-base));
    width: 100%;
}

.card3-open-core-top-grid {
    /* 顯示姓名後，增加第一、二層之間的垂直留白。 */
    height: calc(250*var(--vw-base));
    align-content: start;
    justify-content: start;
}

.card3-open-core-main-grid {
    grid-template-columns: repeat(8, calc(133*var(--vw-base)));
    column-gap: 0;
    justify-content: space-between;
}

.card3-open-core-groups {
    display: none;
    grid-template-columns: repeat(4, calc(373*var(--vw-base)));
    justify-content: space-between;
    width: 100%;
    margin-top: calc(20*var(--vw-base));
}

.card3-open-core-group {
    display: flex;
    flex-direction: column;
    width: calc(373*var(--vw-base));
    min-width: 0;
}

.card3-open-core-group-title {
    order: 2;
    margin-top: calc(6*var(--vw-base));
    margin-bottom: 0;
    color: #333333;
    font-family: "Butler_Regular";
    font-size: calc(16*var(--vw-base));
    font-weight: 400;
    letter-spacing: 0.04em;
    line-height: 1.15em;
    white-space: nowrap;
}

.card3-open-core-group-people {
    display: grid;
    grid-template-columns: repeat(3, calc(123*var(--vw-base)));
    column-gap: calc(2*var(--vw-base));
    width: calc(373*var(--vw-base));
}

.card3-open-core-panel .card3-person {
    width: calc(133*var(--vw-base));
}

.card3-open-core-panel .card3-person-image {
    width: calc(133*var(--vw-base));
    height: calc(133*var(--vw-base));
}

.card3-open-core-group .card3-person,
.card3-open-core-group .card3-person-image {
    width: calc(123*var(--vw-base));
}

.card3-open-core-group .card3-person-image {
    height: calc(123*var(--vw-base));
}

.card3-open-core-panel .card3-person-name,
.card3-open-core-panel .card3-person-role {
    overflow-wrap: normal;
}

.card3-open-core-top-grid .card3-person-role,
.card3-open-core-main-grid .card3-person-role {
    margin-top: calc(6*var(--vw-base));
}

.card3-open-core-group-people {
    order: 1;
}

.card3-open-core-panel .card3-person-name {
    margin-top: calc(8*var(--vw-base));
}

.card3-open-core-top-grid .card3-person-name,
.card3-open-core-top-grid .card3-person-role,
.card3-open-core-main-grid .card3-person-name,
.card3-open-core-main-grid .card3-person-role {
    white-space: nowrap;
}

.card3-open-core-group .card3-person-name {
    white-space: nowrap;
}

.card3-open-people-grid {
    display: grid;
    grid-template-columns: repeat(9, calc(166*var(--vw-base)));
    column-gap: 0;
    row-gap: calc(15*var(--vw-base));
    justify-content: space-between;
    align-items: start;
    width: calc(1536*var(--vw-base));
    max-width: 100%;
}

.card3-person {
    width: calc(166*var(--vw-base));
    min-width: 0;
    color: #333333;
    box-sizing: border-box;
}

.card3-person-image {
    display: block;
    width: calc(166*var(--vw-base));
    height: calc(167*var(--vw-base));
    object-fit: cover;
}

.card3-person-name,
.card3-person-role {
    color: #333333;
    font-family: "Butler_Regular";
    font-weight: 400;
    letter-spacing: 0.075em;
    line-height: 1.15em;
    overflow-wrap: break-word;
}

.card3-person-name {
    margin-top: calc(8*var(--vw-base));
    font-size: calc(20*var(--vw-base));
}

.card3-person-role {
    font-size: calc(16*var(--vw-base));
}

.card3-team-label {
    display: flex;
    align-items: flex-start;
    justify-content: center;
    width: calc(166*var(--vw-base));
    height: calc(167*var(--vw-base));
    box-sizing: border-box;
    color: #333333;
    font-family: "Noto Serif TC", "Noto Sans TC", sans-serif;
    font-size: calc(20*var(--vw-base));
    font-weight: 500;
    letter-spacing: 0.2em;
    line-height: 1.15em;
    writing-mode: vertical-rl;
    text-orientation: upright;
}

.card3-open-partners-panel {
    position: relative;
    /* min-height: calc(820*var(--vw-base)); */
    box-sizing: border-box;
}

.card3-open-partners-heading {
    color: #333333;
    font-family: "Noto Serif TC", "Noto Sans TC", sans-serif;
    font-size: calc(20*var(--vw-base));
    font-weight: 500;
    letter-spacing: 0.2em;
    line-height: 1.15em;
}

.card3-open-partners-subtitle {
    margin-top: calc(8*var(--vw-base));
    color: #333333;
    font-family: "Noto Serif TC", "Noto Sans TC", sans-serif;
    font-size: calc(16*var(--vw-base));
    font-weight: 300;
    letter-spacing: 0.2em;
    line-height: 1.15em;
}

.card3-open-partners-tree {
    position: absolute;
    top: calc(0*var(--vw-base));
    left: calc(0*var(--vw-base));
    display: block;
    width: calc(1456*var(--vw-base));
    max-width: none;
    height: calc(563*var(--vw-base));
}

.card3-open-project-panel {
    color: #333333;
}

.card3-open-project-intro {
    width: 100%;
}

.card3-open-project-heading {
    color: #333333;
    font-family: "Noto Serif TC", "Noto Sans TC", sans-serif;
    font-size: calc(20*var(--vw-base));
    font-weight: 500;
    letter-spacing: 0.2em;
    line-height: 1.15em;
}

.card3-open-project-heading .num {
    display: inline-block;
    font-size: calc(24*var(--vw-base));
    font-weight: 700;
    line-height: 1;
}

.card3-open-project-heading .plus {
    position: relative;
    top: -0.3vw;
    display: inline-block;
    margin-left: calc(0*var(--vw-base));
    margin-right: calc(-5*var(--vw-base));
    font-size: calc(18*var(--vw-base));
    font-weight: 500;
    line-height: 1;
}

.card3-open-project-intro p {
    margin: calc(8*var(--vw-base)) 0 0;
    color: #333333;
    font-family: "Noto Serif TC", "Noto Sans TC", sans-serif;
    font-size: calc(16*var(--vw-base));
    font-weight: 300;
    letter-spacing: 0.2em;
    line-height: 1.8em;
}

.card3-open-project-swiper {
    position: relative;
    width: 100%;
    overflow: hidden;
}

/* 直接控制 track 的 transform，避免 transition 造成移入後還會滑動 */
.card3-open-project-track {
    display: flex;
    align-items: flex-start;
    width: max-content;
    transform: translate3d(0, 0, 0);
    transition: none !important;
    will-change: transform;
}

.card3-open-project-slide {
    display: flex;
    align-items: flex-start;
    justify-content: center;
    flex: 0 0 auto;
    width: 100%;
    height: auto;
}

.card3-project-mosaic,
.card3-project-four {
    flex: 0 0 auto;
    max-width: 100%;
}

.card3-project-mosaic {
    display: grid;
    grid-template-columns: calc(249*var(--vw-base)) calc(1017*var(--vw-base)) calc(249*var(--vw-base));
    column-gap: calc(7*var(--vw-base));
    width: calc(1531*var(--vw-base));
    height: calc(389*var(--vw-base));
}

.card3-project-mosaic-center {
    display: grid;
    grid-template-rows: calc(191*var(--vw-base)) calc(191*var(--vw-base));
    row-gap: calc(7*var(--vw-base));
    min-width: 0;
}

.card3-project-mosaic-row {
    display: grid;
    column-gap: calc(7*var(--vw-base));
    min-width: 0;
}

.card3-project-mosaic-row-top {
    grid-template-columns: calc(505*var(--vw-base)) calc(249*var(--vw-base)) calc(249*var(--vw-base));
}

.card3-project-mosaic-row-bottom {
    grid-template-columns: calc(249*var(--vw-base)) calc(249*var(--vw-base)) calc(505*var(--vw-base));
}

.card3-project-four {
    display: grid;
    grid-template-columns: repeat(4, calc(376*var(--vw-base)));
    column-gap: calc(7*var(--vw-base));
    width: calc(1525*var(--vw-base));
    height: calc(389*var(--vw-base));
}

.card3-project-tile {
    position: relative;
    min-width: 0;
    overflow: hidden;
    background: #333333;
}

.card3-project-tile-tall,
.card3-project-tile-office-tall {
    width: calc(249*var(--vw-base));
    height: calc(389*var(--vw-base));
}

.card3-project-tile-office-tall {
    width: calc(376*var(--vw-base));
}

.card3-project-tile-wide {
    width: calc(505*var(--vw-base));
    height: calc(191*var(--vw-base));
}

.card3-project-tile-small {
    width: calc(249*var(--vw-base));
    height: calc(191*var(--vw-base));
}

.card3-project-tile img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.card3-project-hover {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.62);
    color: #ffffff;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s ease;
}

.card3-project-tile:hover .card3-project-hover {
    opacity: 1;
}

.card3-project-hover-top,
.card3-project-hover-bottom {
    position: absolute;
    color: #ffffff;
    font-family: "Noto Serif TC", "Noto Sans TC", sans-serif;
    font-size: calc(16*var(--vw-base));
    font-weight: 300;
    letter-spacing: 0.05em;
    line-height: 1.5em;
}

.card3-project-hover-top {
    top: calc(10*var(--vw-base));
    left: calc(10*var(--vw-base));
}

.card3-project-hover-bottom {
    right: calc(10*var(--vw-base));
    bottom: calc(10*var(--vw-base));
    text-align: right;
}

.card2-open-close {
    position: absolute;
    left: 50%;
    bottom: calc(10*var(--vw-base));
    width: calc(34*var(--vw-base));
    height: calc(34*var(--vw-base));
    padding: 0;
    border: 0;
    background: transparent;
    cursor: pointer;
    transform: translateX(-50%);
}

.card2-open-close span {
    position: absolute;
    top: 50%;
    left: 50%;
    width: calc(24*var(--vw-base));
    height: calc(1*var(--vw-base));
    background: #333;
}

.card2-open-close span:first-child {
    transform: translate(-50%, -50%) rotate(45deg);
}

.card2-open-close span:last-child {
    transform: translate(-50%, -50%) rotate(-45deg);
}

.card2-open-close:focus-visible,
.card2-open-tab:focus-visible {
    outline: calc(1*var(--vw-base)) solid #333;
    outline-offset: calc(4*var(--vw-base));
}









