/* ==========================================================================
   Font: Paperlogy (페이퍼로지)
   ========================================================================== */
/* ===== 글꼴: tools/fonts/subset.py 가 만듦 — 직접 고치지 말고 스크립트를 다시 실행하세요 ===== */
@font-face { font-family: "Paperlogy"; src: url("../fonts/Paperlogy-4Regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; unicode-range: U+0020-10FFFF; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/subset/Paperlogy-4Regular-site.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; unicode-range: U+20-7E, U+A0-A7, U+A9, U+AB-AE, U+B0-B1, U+B5-B7, U+BB-FF, U+2010, U+2012-2015, U+2018-201A, U+201C-201E, U+2020-2022, U+2025-2026, U+2030, U+2032-2033, U+2039-203A, U+2190-2193, U+2212, U+2264-2265, U+3008-3011, U+3014-3015, U+3131-3163, U+318D, U+AC00-AC01, U+AC04, U+AC08, U+AC10-AC12, U+AC15-AC16, U+AC19, U+AC1C-AC1D, U+AC24, U+AC70, U+AC74, U+AC77-AC78, U+AC80, U+AC83, U+AC8C, U+ACA8-ACA9, U+ACB0, U+ACB9, U+ACBC-ACBD, U+ACC4, U+ACE0-ACE1, U+ACE8, U+ACF3, U+ACF5, U+ACFC, U+AD00, U+AD11, U+AD50, U+AD6C-AD6D, U+AD75, U+AD81, U+AD8C, U+ADC0, U+ADDC, U+ADF8, U+ADFC, U+AE00, U+AE08-AE09, U+AE30, U+AE34, U+AE38, U+AE40-AE41, U+AE4A, U+AE4C, U+AE65, U+AEBC, U+AED8, U+AF34, U+AFB8, U+AFC0, U+AFC8, U+AFD4, U+AFE8, U+B00C, U+B010, U+B014, U+B01C-B01D, U+B044, U+B04A, U+B04C, U+B054, U+B05D, U+B07C, U+B08C, U+B098, U+B09C, U+B0A0, U+B0A8, U+B0AE, U+B0B4, U+B0B8, U+B0BC, U+B108, U+B10C, U+B110, U+B113, U+B118, U+B123-B124, U+B140, U+B144, U+B155, U+B178, U+B17C, U+B192-B193, U+B204, U+B208, U+B20C, U+B214, U+B220, U+B234, U+B274, U+B290, U+B294, U+B298, U+B2A5-B2A6, U+B2C8-B2C9, U+B2D0, U+B2D8, U+B2E4-B2E5, U+B2E8, U+B2EB-B2EC, U+B2F4-B2F5, U+B2F9, U+B300, U+B308, U+B313, U+B354, U+B358, U+B367, U+B36E, U+B370, U+B3C4-B3C5, U+B3CC, U+B3D5, U+B3D9, U+B3FC, U+B410, U+B418, U+B41C, U+B428-B429, U+B450, U+B454, U+B458, U+B461, U+B46C, U+B4A4, U+B4DC, U+B4E0, U+B4E4, U+B4EC-B4ED, U+B4F1, U+B514, U+B529, U+B530, U+B54C, U+B5A0, U+B5A4, U+B5BB-B5BC, U+B610-B611, U+B6F0, U+B73B, U+B744, U+B760, U+B77C-B77D, U+B780, U+B78D, U+B790-B791, U+B798-B799, U+B79C, U+B7A8, U+B7B5, U+B7C9, U+B7EC, U+B7FC-B7FD, U+B808, U+B80C, U+B824-B825, U+B828, U+B82C, U+B838-B839, U+B840, U+B85C-B85D, U+B860, U+B864, U+B8CC, U+B8E8, U+B8F9, U+B958, U+B960, U+B974, U+B978, U+B97C, U+B984-B985, U+B989, U+B9AC-B9AD, U+B9B0, U+B9B4, U+B9BC-B9BD, U+B9BF, U+B9C1, U+B9C8-B9C9, U+B9CC, U+B9CE, U+B9D0, U+B9DE, U+B9E1, U+B9E4, U+B9E8, U+B9F5, U+BA38, U+BA3C, U+BA40, U+BA48, U+BA54, U+BA70, U+BA74, U+BA85, U+BA87, U+BAA8-BAA9, U+BAB0, U+BABB, U+BB34, U+BB36, U+BB38, U+BB3C, U+BBC0, U+BBF8, U+BBFC, U+BC00, U+BC0B, U+BC0F, U+BC11, U+BC14, U+BC16, U+BC18, U+BC1B-BC1D, U+BC29, U+BC30, U+BC84, U+BC88, U+BC8C, U+BC94-BC95, U+BCA0, U+BCA4, U+BCA8, U+BCBD, U+BCC0, U+BCC4, U+BCCD, U+BCF4-BCF5, U+BCF8, U+BCFC, U+BD24, U+BD80-BD81, U+BD84, U+BD88, U+BD99, U+BE0C, U+BE14, U+BE44, U+BE48, U+BE4C, U+BE60, U+BE68, U+BE7C, U+BE80, U+BF08, U+C0AC-C0AD, U+C0B0, U+C0B4, U+C0BC, U+C0C1, U+C0C8-C0C9, U+C0DD, U+C0F7, U+C11C-C11E, U+C120, U+C124, U+C131, U+C138-C139, U+C13C, U+C140, U+C149, U+C154, U+C158, U+C178, U+C18C-C18D, U+C190, U+C1A1, U+C1C4, U+C1FC, U+C218-C219, U+C21C, U+C220, U+C228, U+C22B, U+C26C, U+C2A4, U+C2AC, U+C2B5, U+C2B9, U+C2DC-C2DD, U+C2E0, U+C2E4, U+C2EC, U+C2F1, U+C2F6, U+C2F8, U+C30D, U+C313, U+C368, U+C37C, U+C4F0, U+C4F4, U+C528-C529, U+C544-C545, U+C548-C54A, U+C54C, U+C555, U+C558, U+C55E, U+C560-C561, U+C564, U+C570-C571, U+C57C-C57D, U+C587, U+C591, U+C5B4, U+C5B8, U+C5BC, U+C5C5-C5C8, U+C5D0, U+C5D4, U+C5EC-C5ED, U+C5F0, U+C5F4, U+C5F6, U+C600-C601, U+C606, U+C608, U+C624, U+C628, U+C62C, U+C62E, U+C635, U+C640, U+C644, U+C654, U+C65C, U+C678, U+C67C, U+C694, U+C6A9, U+C6B0, U+C6B4, U+C6B8, U+C6C0, U+C6C3, U+C6CC, U+C6D0, U+C6D4, U+C6E0, U+C6F9, U+C704, U+C720, U+C728, U+C735, U+C73C, U+C740, U+C744, U+C74C, U+C751, U+C758, U+C774, U+C778, U+C77C-C77D, U+C784-C785, U+C787-C788, U+C790-C791, U+C798, U+C7A0-C7A1, U+C7A5, U+C7AC, U+C7B0, U+C800-C801, U+C804, U+C808, U+C810-C811, U+C815, U+C81C-C81D, U+C838, U+C84C, U+C870-C871, U+C874, U+C881, U+C885, U+C88B-C88C, U+C8FC, U+C900, U+C904, U+C90C-C90D, U+C911, U+C918, U+C92C, U+C99D, U+C9C0-C9C1, U+C9C4, U+C9C8, U+C9D0-C9D1, U+C9D5, U+C9D9, U+C9DC-C9DD, U+C9E7, U+C9F8, U+CABD, U+CC0D, U+CC28, U+CC38, U+CC3D-CC3E, U+CC44-CC45, U+CC98-CC99, U+CC9C, U+CCA8, U+CCAB, U+CCAD, U+CCB4, U+CCD0, U+CCE4, U+CD08, U+CD2C, U+CD5C, U+CD94-CD95, U+CD98, U+CD9C, U+CDA9, U+CDB0, U+CDC4, U+CDE8, U+CE20-CE21, U+CE58-CE59, U+CE5C, U+CE60, U+CE68-CE69, U+CE74, U+CE78, U+CE94, U+CEA0-CEA1, U+CEE4, U+CEE8, U+CEEC, U+CEF4, U+CF00, U+CF1C, U+CF54, U+CF58, U+CF5C, U+CFE0, U+D06C, U+D070, U+D074, U+D07C, U+D0A4, U+D0AC, U+D0B9, U+D0C0, U+D0C8, U+D0D0-D0D1, U+D0D5, U+D0DC-D0DD, U+D0EC-D0ED, U+D130, U+D134, U+D140, U+D14C-D14D, U+D150, U+D15C, U+D1A0, U+D1A4, U+D1B1, U+D1B5, U+D1F4, U+D22C, U+D29C, U+D2B8-D2B9, U+D2BC, U+D2C0, U+D2F0-D2F1, U+D300, U+D305, U+D30C, U+D310, U+D328, U+D37C, U+D398-D399, U+D39C, U+D3B8, U+D3BC, U+D3C9, U+D3D0, U+D3EC-D3ED, U+D3F0, U+D3F4, U+D3FC, U+D45C, U+D478, U+D480, U+D488, U+D4E8, U+D504, U+D50C, U+D53C-D53D, U+D540, U+D544, U+D551, U+D558-D559, U+D55C, U+D560, U+D568-D569, U+D56B, U+D56D, U+D574-D575, U+D584, U+D588-D589, U+D5A5, U+D5C8, U+D5D8, U+D5E4, U+D604, U+D611, U+D615, U+D61C, U+D638, U+D63C, U+D648, U+D64D, U+D654-D655, U+D658, U+D65C, U+D669, U+D68C-D68D, U+D6A8, U+D6C4, U+D734, U+D750, U+D770, U+D788, U+D78C, U+D798; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/Paperlogy-5Medium.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; unicode-range: U+0020-10FFFF; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/subset/Paperlogy-5Medium-site.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; unicode-range: U+20-7E, U+A0-A7, U+A9, U+AB-AE, U+B0-B1, U+B5-B7, U+BB-FF, U+2010, U+2012-2015, U+2018-201A, U+201C-201E, U+2020-2022, U+2025-2026, U+2030, U+2032-2033, U+2039-203A, U+2190-2193, U+2212, U+2264-2265, U+3008-3011, U+3014-3015, U+3131-3163, U+318D, U+AC00-AC01, U+AC04, U+AC08, U+AC10-AC12, U+AC15-AC16, U+AC19, U+AC1C-AC1D, U+AC24, U+AC70, U+AC74, U+AC77-AC78, U+AC80, U+AC83, U+AC8C, U+ACA8-ACA9, U+ACB0, U+ACB9, U+ACBC-ACBD, U+ACC4, U+ACE0-ACE1, U+ACE8, U+ACF3, U+ACF5, U+ACFC, U+AD00, U+AD11, U+AD50, U+AD6C-AD6D, U+AD75, U+AD81, U+AD8C, U+ADC0, U+ADDC, U+ADF8, U+ADFC, U+AE00, U+AE08-AE09, U+AE30, U+AE34, U+AE38, U+AE40-AE41, U+AE4A, U+AE4C, U+AE65, U+AEBC, U+AED8, U+AF34, U+AFB8, U+AFC0, U+AFC8, U+AFD4, U+AFE8, U+B00C, U+B010, U+B014, U+B01C-B01D, U+B044, U+B04A, U+B04C, U+B054, U+B05D, U+B07C, U+B08C, U+B098, U+B09C, U+B0A0, U+B0A8, U+B0AE, U+B0B4, U+B0B8, U+B0BC, U+B108, U+B10C, U+B110, U+B113, U+B118, U+B123-B124, U+B140, U+B144, U+B155, U+B178, U+B17C, U+B192-B193, U+B204, U+B208, U+B20C, U+B214, U+B220, U+B234, U+B274, U+B290, U+B294, U+B298, U+B2A5-B2A6, U+B2C8-B2C9, U+B2D0, U+B2D8, U+B2E4-B2E5, U+B2E8, U+B2EB-B2EC, U+B2F4-B2F5, U+B2F9, U+B300, U+B308, U+B313, U+B354, U+B358, U+B367, U+B36E, U+B370, U+B3C4-B3C5, U+B3CC, U+B3D5, U+B3D9, U+B3FC, U+B410, U+B418, U+B41C, U+B428-B429, U+B450, U+B454, U+B458, U+B461, U+B46C, U+B4A4, U+B4DC, U+B4E0, U+B4E4, U+B4EC-B4ED, U+B4F1, U+B514, U+B529, U+B530, U+B54C, U+B5A0, U+B5A4, U+B5BB-B5BC, U+B610-B611, U+B6F0, U+B73B, U+B744, U+B760, U+B77C-B77D, U+B780, U+B78D, U+B790-B791, U+B798-B799, U+B79C, U+B7A8, U+B7B5, U+B7C9, U+B7EC, U+B7FC-B7FD, U+B808, U+B80C, U+B824-B825, U+B828, U+B82C, U+B838-B839, U+B840, U+B85C-B85D, U+B860, U+B864, U+B8CC, U+B8E8, U+B8F9, U+B958, U+B960, U+B974, U+B978, U+B97C, U+B984-B985, U+B989, U+B9AC-B9AD, U+B9B0, U+B9B4, U+B9BC-B9BD, U+B9BF, U+B9C1, U+B9C8-B9C9, U+B9CC, U+B9CE, U+B9D0, U+B9DE, U+B9E1, U+B9E4, U+B9E8, U+B9F5, U+BA38, U+BA3C, U+BA40, U+BA48, U+BA54, U+BA70, U+BA74, U+BA85, U+BA87, U+BAA8-BAA9, U+BAB0, U+BABB, U+BB34, U+BB36, U+BB38, U+BB3C, U+BBC0, U+BBF8, U+BBFC, U+BC00, U+BC0B, U+BC0F, U+BC11, U+BC14, U+BC16, U+BC18, U+BC1B-BC1D, U+BC29, U+BC30, U+BC84, U+BC88, U+BC8C, U+BC94-BC95, U+BCA0, U+BCA4, U+BCA8, U+BCBD, U+BCC0, U+BCC4, U+BCCD, U+BCF4-BCF5, U+BCF8, U+BCFC, U+BD24, U+BD80-BD81, U+BD84, U+BD88, U+BD99, U+BE0C, U+BE14, U+BE44, U+BE48, U+BE4C, U+BE60, U+BE68, U+BE7C, U+BE80, U+BF08, U+C0AC-C0AD, U+C0B0, U+C0B4, U+C0BC, U+C0C1, U+C0C8-C0C9, U+C0DD, U+C0F7, U+C11C-C11E, U+C120, U+C124, U+C131, U+C138-C139, U+C13C, U+C140, U+C149, U+C154, U+C158, U+C178, U+C18C-C18D, U+C190, U+C1A1, U+C1C4, U+C1FC, U+C218-C219, U+C21C, U+C220, U+C228, U+C22B, U+C26C, U+C2A4, U+C2AC, U+C2B5, U+C2B9, U+C2DC-C2DD, U+C2E0, U+C2E4, U+C2EC, U+C2F1, U+C2F6, U+C2F8, U+C30D, U+C313, U+C368, U+C37C, U+C4F0, U+C4F4, U+C528-C529, U+C544-C545, U+C548-C54A, U+C54C, U+C555, U+C558, U+C55E, U+C560-C561, U+C564, U+C570-C571, U+C57C-C57D, U+C587, U+C591, U+C5B4, U+C5B8, U+C5BC, U+C5C5-C5C8, U+C5D0, U+C5D4, U+C5EC-C5ED, U+C5F0, U+C5F4, U+C5F6, U+C600-C601, U+C606, U+C608, U+C624, U+C628, U+C62C, U+C62E, U+C635, U+C640, U+C644, U+C654, U+C65C, U+C678, U+C67C, U+C694, U+C6A9, U+C6B0, U+C6B4, U+C6B8, U+C6C0, U+C6C3, U+C6CC, U+C6D0, U+C6D4, U+C6E0, U+C6F9, U+C704, U+C720, U+C728, U+C735, U+C73C, U+C740, U+C744, U+C74C, U+C751, U+C758, U+C774, U+C778, U+C77C-C77D, U+C784-C785, U+C787-C788, U+C790-C791, U+C798, U+C7A0-C7A1, U+C7A5, U+C7AC, U+C7B0, U+C800-C801, U+C804, U+C808, U+C810-C811, U+C815, U+C81C-C81D, U+C838, U+C84C, U+C870-C871, U+C874, U+C881, U+C885, U+C88B-C88C, U+C8FC, U+C900, U+C904, U+C90C-C90D, U+C911, U+C918, U+C92C, U+C99D, U+C9C0-C9C1, U+C9C4, U+C9C8, U+C9D0-C9D1, U+C9D5, U+C9D9, U+C9DC-C9DD, U+C9E7, U+C9F8, U+CABD, U+CC0D, U+CC28, U+CC38, U+CC3D-CC3E, U+CC44-CC45, U+CC98-CC99, U+CC9C, U+CCA8, U+CCAB, U+CCAD, U+CCB4, U+CCD0, U+CCE4, U+CD08, U+CD2C, U+CD5C, U+CD94-CD95, U+CD98, U+CD9C, U+CDA9, U+CDB0, U+CDC4, U+CDE8, U+CE20-CE21, U+CE58-CE59, U+CE5C, U+CE60, U+CE68-CE69, U+CE74, U+CE78, U+CE94, U+CEA0-CEA1, U+CEE4, U+CEE8, U+CEEC, U+CEF4, U+CF00, U+CF1C, U+CF54, U+CF58, U+CF5C, U+CFE0, U+D06C, U+D070, U+D074, U+D07C, U+D0A4, U+D0AC, U+D0B9, U+D0C0, U+D0C8, U+D0D0-D0D1, U+D0D5, U+D0DC-D0DD, U+D0EC-D0ED, U+D130, U+D134, U+D140, U+D14C-D14D, U+D150, U+D15C, U+D1A0, U+D1A4, U+D1B1, U+D1B5, U+D1F4, U+D22C, U+D29C, U+D2B8-D2B9, U+D2BC, U+D2C0, U+D2F0-D2F1, U+D300, U+D305, U+D30C, U+D310, U+D328, U+D37C, U+D398-D399, U+D39C, U+D3B8, U+D3BC, U+D3C9, U+D3D0, U+D3EC-D3ED, U+D3F0, U+D3F4, U+D3FC, U+D45C, U+D478, U+D480, U+D488, U+D4E8, U+D504, U+D50C, U+D53C-D53D, U+D540, U+D544, U+D551, U+D558-D559, U+D55C, U+D560, U+D568-D569, U+D56B, U+D56D, U+D574-D575, U+D584, U+D588-D589, U+D5A5, U+D5C8, U+D5D8, U+D5E4, U+D604, U+D611, U+D615, U+D61C, U+D638, U+D63C, U+D648, U+D64D, U+D654-D655, U+D658, U+D65C, U+D669, U+D68C-D68D, U+D6A8, U+D6C4, U+D734, U+D750, U+D770, U+D788, U+D78C, U+D798; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/Paperlogy-6SemiBold.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; unicode-range: U+0020-10FFFF; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/subset/Paperlogy-6SemiBold-site.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; unicode-range: U+20-7E, U+A0-A7, U+A9, U+AB-AE, U+B0-B1, U+B5-B7, U+BB-FF, U+2010, U+2012-2015, U+2018-201A, U+201C-201E, U+2020-2022, U+2025-2026, U+2030, U+2032-2033, U+2039-203A, U+2190-2193, U+2212, U+2264-2265, U+3008-3011, U+3014-3015, U+3131-3163, U+318D, U+AC00-AC01, U+AC04, U+AC08, U+AC10-AC12, U+AC15-AC16, U+AC19, U+AC1C-AC1D, U+AC24, U+AC70, U+AC74, U+AC77-AC78, U+AC80, U+AC83, U+AC8C, U+ACA8-ACA9, U+ACB0, U+ACB9, U+ACBC-ACBD, U+ACC4, U+ACE0-ACE1, U+ACE8, U+ACF3, U+ACF5, U+ACFC, U+AD00, U+AD11, U+AD50, U+AD6C-AD6D, U+AD75, U+AD81, U+AD8C, U+ADC0, U+ADDC, U+ADF8, U+ADFC, U+AE00, U+AE08-AE09, U+AE30, U+AE34, U+AE38, U+AE40-AE41, U+AE4A, U+AE4C, U+AE65, U+AEBC, U+AED8, U+AF34, U+AFB8, U+AFC0, U+AFC8, U+AFD4, U+AFE8, U+B00C, U+B010, U+B014, U+B01C-B01D, U+B044, U+B04A, U+B04C, U+B054, U+B05D, U+B07C, U+B08C, U+B098, U+B09C, U+B0A0, U+B0A8, U+B0AE, U+B0B4, U+B0B8, U+B0BC, U+B108, U+B10C, U+B110, U+B113, U+B118, U+B123-B124, U+B140, U+B144, U+B155, U+B178, U+B17C, U+B192-B193, U+B204, U+B208, U+B20C, U+B214, U+B220, U+B234, U+B274, U+B290, U+B294, U+B298, U+B2A5-B2A6, U+B2C8-B2C9, U+B2D0, U+B2D8, U+B2E4-B2E5, U+B2E8, U+B2EB-B2EC, U+B2F4-B2F5, U+B2F9, U+B300, U+B308, U+B313, U+B354, U+B358, U+B367, U+B36E, U+B370, U+B3C4-B3C5, U+B3CC, U+B3D5, U+B3D9, U+B3FC, U+B410, U+B418, U+B41C, U+B428-B429, U+B450, U+B454, U+B458, U+B461, U+B46C, U+B4A4, U+B4DC, U+B4E0, U+B4E4, U+B4EC-B4ED, U+B4F1, U+B514, U+B529, U+B530, U+B54C, U+B5A0, U+B5A4, U+B5BB-B5BC, U+B610-B611, U+B6F0, U+B73B, U+B744, U+B760, U+B77C-B77D, U+B780, U+B78D, U+B790-B791, U+B798-B799, U+B79C, U+B7A8, U+B7B5, U+B7C9, U+B7EC, U+B7FC-B7FD, U+B808, U+B80C, U+B824-B825, U+B828, U+B82C, U+B838-B839, U+B840, U+B85C-B85D, U+B860, U+B864, U+B8CC, U+B8E8, U+B8F9, U+B958, U+B960, U+B974, U+B978, U+B97C, U+B984-B985, U+B989, U+B9AC-B9AD, U+B9B0, U+B9B4, U+B9BC-B9BD, U+B9BF, U+B9C1, U+B9C8-B9C9, U+B9CC, U+B9CE, U+B9D0, U+B9DE, U+B9E1, U+B9E4, U+B9E8, U+B9F5, U+BA38, U+BA3C, U+BA40, U+BA48, U+BA54, U+BA70, U+BA74, U+BA85, U+BA87, U+BAA8-BAA9, U+BAB0, U+BABB, U+BB34, U+BB36, U+BB38, U+BB3C, U+BBC0, U+BBF8, U+BBFC, U+BC00, U+BC0B, U+BC0F, U+BC11, U+BC14, U+BC16, U+BC18, U+BC1B-BC1D, U+BC29, U+BC30, U+BC84, U+BC88, U+BC8C, U+BC94-BC95, U+BCA0, U+BCA4, U+BCA8, U+BCBD, U+BCC0, U+BCC4, U+BCCD, U+BCF4-BCF5, U+BCF8, U+BCFC, U+BD24, U+BD80-BD81, U+BD84, U+BD88, U+BD99, U+BE0C, U+BE14, U+BE44, U+BE48, U+BE4C, U+BE60, U+BE68, U+BE7C, U+BE80, U+BF08, U+C0AC-C0AD, U+C0B0, U+C0B4, U+C0BC, U+C0C1, U+C0C8-C0C9, U+C0DD, U+C0F7, U+C11C-C11E, U+C120, U+C124, U+C131, U+C138-C139, U+C13C, U+C140, U+C149, U+C154, U+C158, U+C178, U+C18C-C18D, U+C190, U+C1A1, U+C1C4, U+C1FC, U+C218-C219, U+C21C, U+C220, U+C228, U+C22B, U+C26C, U+C2A4, U+C2AC, U+C2B5, U+C2B9, U+C2DC-C2DD, U+C2E0, U+C2E4, U+C2EC, U+C2F1, U+C2F6, U+C2F8, U+C30D, U+C313, U+C368, U+C37C, U+C4F0, U+C4F4, U+C528-C529, U+C544-C545, U+C548-C54A, U+C54C, U+C555, U+C558, U+C55E, U+C560-C561, U+C564, U+C570-C571, U+C57C-C57D, U+C587, U+C591, U+C5B4, U+C5B8, U+C5BC, U+C5C5-C5C8, U+C5D0, U+C5D4, U+C5EC-C5ED, U+C5F0, U+C5F4, U+C5F6, U+C600-C601, U+C606, U+C608, U+C624, U+C628, U+C62C, U+C62E, U+C635, U+C640, U+C644, U+C654, U+C65C, U+C678, U+C67C, U+C694, U+C6A9, U+C6B0, U+C6B4, U+C6B8, U+C6C0, U+C6C3, U+C6CC, U+C6D0, U+C6D4, U+C6E0, U+C6F9, U+C704, U+C720, U+C728, U+C735, U+C73C, U+C740, U+C744, U+C74C, U+C751, U+C758, U+C774, U+C778, U+C77C-C77D, U+C784-C785, U+C787-C788, U+C790-C791, U+C798, U+C7A0-C7A1, U+C7A5, U+C7AC, U+C7B0, U+C800-C801, U+C804, U+C808, U+C810-C811, U+C815, U+C81C-C81D, U+C838, U+C84C, U+C870-C871, U+C874, U+C881, U+C885, U+C88B-C88C, U+C8FC, U+C900, U+C904, U+C90C-C90D, U+C911, U+C918, U+C92C, U+C99D, U+C9C0-C9C1, U+C9C4, U+C9C8, U+C9D0-C9D1, U+C9D5, U+C9D9, U+C9DC-C9DD, U+C9E7, U+C9F8, U+CABD, U+CC0D, U+CC28, U+CC38, U+CC3D-CC3E, U+CC44-CC45, U+CC98-CC99, U+CC9C, U+CCA8, U+CCAB, U+CCAD, U+CCB4, U+CCD0, U+CCE4, U+CD08, U+CD2C, U+CD5C, U+CD94-CD95, U+CD98, U+CD9C, U+CDA9, U+CDB0, U+CDC4, U+CDE8, U+CE20-CE21, U+CE58-CE59, U+CE5C, U+CE60, U+CE68-CE69, U+CE74, U+CE78, U+CE94, U+CEA0-CEA1, U+CEE4, U+CEE8, U+CEEC, U+CEF4, U+CF00, U+CF1C, U+CF54, U+CF58, U+CF5C, U+CFE0, U+D06C, U+D070, U+D074, U+D07C, U+D0A4, U+D0AC, U+D0B9, U+D0C0, U+D0C8, U+D0D0-D0D1, U+D0D5, U+D0DC-D0DD, U+D0EC-D0ED, U+D130, U+D134, U+D140, U+D14C-D14D, U+D150, U+D15C, U+D1A0, U+D1A4, U+D1B1, U+D1B5, U+D1F4, U+D22C, U+D29C, U+D2B8-D2B9, U+D2BC, U+D2C0, U+D2F0-D2F1, U+D300, U+D305, U+D30C, U+D310, U+D328, U+D37C, U+D398-D399, U+D39C, U+D3B8, U+D3BC, U+D3C9, U+D3D0, U+D3EC-D3ED, U+D3F0, U+D3F4, U+D3FC, U+D45C, U+D478, U+D480, U+D488, U+D4E8, U+D504, U+D50C, U+D53C-D53D, U+D540, U+D544, U+D551, U+D558-D559, U+D55C, U+D560, U+D568-D569, U+D56B, U+D56D, U+D574-D575, U+D584, U+D588-D589, U+D5A5, U+D5C8, U+D5D8, U+D5E4, U+D604, U+D611, U+D615, U+D61C, U+D638, U+D63C, U+D648, U+D64D, U+D654-D655, U+D658, U+D65C, U+D669, U+D68C-D68D, U+D6A8, U+D6C4, U+D734, U+D750, U+D770, U+D788, U+D78C, U+D798; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/Paperlogy-7Bold.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; unicode-range: U+0020-10FFFF; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/subset/Paperlogy-7Bold-site.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; unicode-range: U+20-7E, U+A0-A7, U+A9, U+AB-AE, U+B0-B1, U+B5-B7, U+BB-FF, U+2010, U+2012-2015, U+2018-201A, U+201C-201E, U+2020-2022, U+2025-2026, U+2030, U+2032-2033, U+2039-203A, U+2190-2193, U+2212, U+2264-2265, U+3008-3011, U+3014-3015, U+3131-3163, U+318D, U+AC00-AC01, U+AC04, U+AC08, U+AC10-AC12, U+AC15-AC16, U+AC19, U+AC1C-AC1D, U+AC24, U+AC70, U+AC74, U+AC77-AC78, U+AC80, U+AC83, U+AC8C, U+ACA8-ACA9, U+ACB0, U+ACB9, U+ACBC-ACBD, U+ACC4, U+ACE0-ACE1, U+ACE8, U+ACF3, U+ACF5, U+ACFC, U+AD00, U+AD11, U+AD50, U+AD6C-AD6D, U+AD75, U+AD81, U+AD8C, U+ADC0, U+ADDC, U+ADF8, U+ADFC, U+AE00, U+AE08-AE09, U+AE30, U+AE34, U+AE38, U+AE40-AE41, U+AE4A, U+AE4C, U+AE65, U+AEBC, U+AED8, U+AF34, U+AFB8, U+AFC0, U+AFC8, U+AFD4, U+AFE8, U+B00C, U+B010, U+B014, U+B01C-B01D, U+B044, U+B04A, U+B04C, U+B054, U+B05D, U+B07C, U+B08C, U+B098, U+B09C, U+B0A0, U+B0A8, U+B0AE, U+B0B4, U+B0B8, U+B0BC, U+B108, U+B10C, U+B110, U+B113, U+B118, U+B123-B124, U+B140, U+B144, U+B155, U+B178, U+B17C, U+B192-B193, U+B204, U+B208, U+B20C, U+B214, U+B220, U+B234, U+B274, U+B290, U+B294, U+B298, U+B2A5-B2A6, U+B2C8-B2C9, U+B2D0, U+B2D8, U+B2E4-B2E5, U+B2E8, U+B2EB-B2EC, U+B2F4-B2F5, U+B2F9, U+B300, U+B308, U+B313, U+B354, U+B358, U+B367, U+B36E, U+B370, U+B3C4-B3C5, U+B3CC, U+B3D5, U+B3D9, U+B3FC, U+B410, U+B418, U+B41C, U+B428-B429, U+B450, U+B454, U+B458, U+B461, U+B46C, U+B4A4, U+B4DC, U+B4E0, U+B4E4, U+B4EC-B4ED, U+B4F1, U+B514, U+B529, U+B530, U+B54C, U+B5A0, U+B5A4, U+B5BB-B5BC, U+B610-B611, U+B6F0, U+B73B, U+B744, U+B760, U+B77C-B77D, U+B780, U+B78D, U+B790-B791, U+B798-B799, U+B79C, U+B7A8, U+B7B5, U+B7C9, U+B7EC, U+B7FC-B7FD, U+B808, U+B80C, U+B824-B825, U+B828, U+B82C, U+B838-B839, U+B840, U+B85C-B85D, U+B860, U+B864, U+B8CC, U+B8E8, U+B8F9, U+B958, U+B960, U+B974, U+B978, U+B97C, U+B984-B985, U+B989, U+B9AC-B9AD, U+B9B0, U+B9B4, U+B9BC-B9BD, U+B9BF, U+B9C1, U+B9C8-B9C9, U+B9CC, U+B9CE, U+B9D0, U+B9DE, U+B9E1, U+B9E4, U+B9E8, U+B9F5, U+BA38, U+BA3C, U+BA40, U+BA48, U+BA54, U+BA70, U+BA74, U+BA85, U+BA87, U+BAA8-BAA9, U+BAB0, U+BABB, U+BB34, U+BB36, U+BB38, U+BB3C, U+BBC0, U+BBF8, U+BBFC, U+BC00, U+BC0B, U+BC0F, U+BC11, U+BC14, U+BC16, U+BC18, U+BC1B-BC1D, U+BC29, U+BC30, U+BC84, U+BC88, U+BC8C, U+BC94-BC95, U+BCA0, U+BCA4, U+BCA8, U+BCBD, U+BCC0, U+BCC4, U+BCCD, U+BCF4-BCF5, U+BCF8, U+BCFC, U+BD24, U+BD80-BD81, U+BD84, U+BD88, U+BD99, U+BE0C, U+BE14, U+BE44, U+BE48, U+BE4C, U+BE60, U+BE68, U+BE7C, U+BE80, U+BF08, U+C0AC-C0AD, U+C0B0, U+C0B4, U+C0BC, U+C0C1, U+C0C8-C0C9, U+C0DD, U+C0F7, U+C11C-C11E, U+C120, U+C124, U+C131, U+C138-C139, U+C13C, U+C140, U+C149, U+C154, U+C158, U+C178, U+C18C-C18D, U+C190, U+C1A1, U+C1C4, U+C1FC, U+C218-C219, U+C21C, U+C220, U+C228, U+C22B, U+C26C, U+C2A4, U+C2AC, U+C2B5, U+C2B9, U+C2DC-C2DD, U+C2E0, U+C2E4, U+C2EC, U+C2F1, U+C2F6, U+C2F8, U+C30D, U+C313, U+C368, U+C37C, U+C4F0, U+C4F4, U+C528-C529, U+C544-C545, U+C548-C54A, U+C54C, U+C555, U+C558, U+C55E, U+C560-C561, U+C564, U+C570-C571, U+C57C-C57D, U+C587, U+C591, U+C5B4, U+C5B8, U+C5BC, U+C5C5-C5C8, U+C5D0, U+C5D4, U+C5EC-C5ED, U+C5F0, U+C5F4, U+C5F6, U+C600-C601, U+C606, U+C608, U+C624, U+C628, U+C62C, U+C62E, U+C635, U+C640, U+C644, U+C654, U+C65C, U+C678, U+C67C, U+C694, U+C6A9, U+C6B0, U+C6B4, U+C6B8, U+C6C0, U+C6C3, U+C6CC, U+C6D0, U+C6D4, U+C6E0, U+C6F9, U+C704, U+C720, U+C728, U+C735, U+C73C, U+C740, U+C744, U+C74C, U+C751, U+C758, U+C774, U+C778, U+C77C-C77D, U+C784-C785, U+C787-C788, U+C790-C791, U+C798, U+C7A0-C7A1, U+C7A5, U+C7AC, U+C7B0, U+C800-C801, U+C804, U+C808, U+C810-C811, U+C815, U+C81C-C81D, U+C838, U+C84C, U+C870-C871, U+C874, U+C881, U+C885, U+C88B-C88C, U+C8FC, U+C900, U+C904, U+C90C-C90D, U+C911, U+C918, U+C92C, U+C99D, U+C9C0-C9C1, U+C9C4, U+C9C8, U+C9D0-C9D1, U+C9D5, U+C9D9, U+C9DC-C9DD, U+C9E7, U+C9F8, U+CABD, U+CC0D, U+CC28, U+CC38, U+CC3D-CC3E, U+CC44-CC45, U+CC98-CC99, U+CC9C, U+CCA8, U+CCAB, U+CCAD, U+CCB4, U+CCD0, U+CCE4, U+CD08, U+CD2C, U+CD5C, U+CD94-CD95, U+CD98, U+CD9C, U+CDA9, U+CDB0, U+CDC4, U+CDE8, U+CE20-CE21, U+CE58-CE59, U+CE5C, U+CE60, U+CE68-CE69, U+CE74, U+CE78, U+CE94, U+CEA0-CEA1, U+CEE4, U+CEE8, U+CEEC, U+CEF4, U+CF00, U+CF1C, U+CF54, U+CF58, U+CF5C, U+CFE0, U+D06C, U+D070, U+D074, U+D07C, U+D0A4, U+D0AC, U+D0B9, U+D0C0, U+D0C8, U+D0D0-D0D1, U+D0D5, U+D0DC-D0DD, U+D0EC-D0ED, U+D130, U+D134, U+D140, U+D14C-D14D, U+D150, U+D15C, U+D1A0, U+D1A4, U+D1B1, U+D1B5, U+D1F4, U+D22C, U+D29C, U+D2B8-D2B9, U+D2BC, U+D2C0, U+D2F0-D2F1, U+D300, U+D305, U+D30C, U+D310, U+D328, U+D37C, U+D398-D399, U+D39C, U+D3B8, U+D3BC, U+D3C9, U+D3D0, U+D3EC-D3ED, U+D3F0, U+D3F4, U+D3FC, U+D45C, U+D478, U+D480, U+D488, U+D4E8, U+D504, U+D50C, U+D53C-D53D, U+D540, U+D544, U+D551, U+D558-D559, U+D55C, U+D560, U+D568-D569, U+D56B, U+D56D, U+D574-D575, U+D584, U+D588-D589, U+D5A5, U+D5C8, U+D5D8, U+D5E4, U+D604, U+D611, U+D615, U+D61C, U+D638, U+D63C, U+D648, U+D64D, U+D654-D655, U+D658, U+D65C, U+D669, U+D68C-D68D, U+D6A8, U+D6C4, U+D734, U+D750, U+D770, U+D788, U+D78C, U+D798; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/Paperlogy-8ExtraBold.woff2") format("woff2"); font-weight: 800; font-style: normal; font-display: swap; unicode-range: U+0020-10FFFF; }
@font-face { font-family: "Paperlogy"; src: url("../fonts/subset/Paperlogy-8ExtraBold-site.woff2") format("woff2"); font-weight: 800; font-style: normal; font-display: swap; unicode-range: U+20-7E, U+A0-A7, U+A9, U+AB-AE, U+B0-B1, U+B5-B7, U+BB-FF, U+2010, U+2012-2015, U+2018-201A, U+201C-201E, U+2020-2022, U+2025-2026, U+2030, U+2032-2033, U+2039-203A, U+2190-2193, U+2212, U+2264-2265, U+3008-3011, U+3014-3015, U+3131-3163, U+318D, U+AC00-AC01, U+AC04, U+AC08, U+AC10-AC12, U+AC15-AC16, U+AC19, U+AC1C-AC1D, U+AC24, U+AC70, U+AC74, U+AC77-AC78, U+AC80, U+AC83, U+AC8C, U+ACA8-ACA9, U+ACB0, U+ACB9, U+ACBC-ACBD, U+ACC4, U+ACE0-ACE1, U+ACE8, U+ACF3, U+ACF5, U+ACFC, U+AD00, U+AD11, U+AD50, U+AD6C-AD6D, U+AD75, U+AD81, U+AD8C, U+ADC0, U+ADDC, U+ADF8, U+ADFC, U+AE00, U+AE08-AE09, U+AE30, U+AE34, U+AE38, U+AE40-AE41, U+AE4A, U+AE4C, U+AE65, U+AEBC, U+AED8, U+AF34, U+AFB8, U+AFC0, U+AFC8, U+AFD4, U+AFE8, U+B00C, U+B010, U+B014, U+B01C-B01D, U+B044, U+B04A, U+B04C, U+B054, U+B05D, U+B07C, U+B08C, U+B098, U+B09C, U+B0A0, U+B0A8, U+B0AE, U+B0B4, U+B0B8, U+B0BC, U+B108, U+B10C, U+B110, U+B113, U+B118, U+B123-B124, U+B140, U+B144, U+B155, U+B178, U+B17C, U+B192-B193, U+B204, U+B208, U+B20C, U+B214, U+B220, U+B234, U+B274, U+B290, U+B294, U+B298, U+B2A5-B2A6, U+B2C8-B2C9, U+B2D0, U+B2D8, U+B2E4-B2E5, U+B2E8, U+B2EB-B2EC, U+B2F4-B2F5, U+B2F9, U+B300, U+B308, U+B313, U+B354, U+B358, U+B367, U+B36E, U+B370, U+B3C4-B3C5, U+B3CC, U+B3D5, U+B3D9, U+B3FC, U+B410, U+B418, U+B41C, U+B428-B429, U+B450, U+B454, U+B458, U+B461, U+B46C, U+B4A4, U+B4DC, U+B4E0, U+B4E4, U+B4EC-B4ED, U+B4F1, U+B514, U+B529, U+B530, U+B54C, U+B5A0, U+B5A4, U+B5BB-B5BC, U+B610-B611, U+B6F0, U+B73B, U+B744, U+B760, U+B77C-B77D, U+B780, U+B78D, U+B790-B791, U+B798-B799, U+B79C, U+B7A8, U+B7B5, U+B7C9, U+B7EC, U+B7FC-B7FD, U+B808, U+B80C, U+B824-B825, U+B828, U+B82C, U+B838-B839, U+B840, U+B85C-B85D, U+B860, U+B864, U+B8CC, U+B8E8, U+B8F9, U+B958, U+B960, U+B974, U+B978, U+B97C, U+B984-B985, U+B989, U+B9AC-B9AD, U+B9B0, U+B9B4, U+B9BC-B9BD, U+B9BF, U+B9C1, U+B9C8-B9C9, U+B9CC, U+B9CE, U+B9D0, U+B9DE, U+B9E1, U+B9E4, U+B9E8, U+B9F5, U+BA38, U+BA3C, U+BA40, U+BA48, U+BA54, U+BA70, U+BA74, U+BA85, U+BA87, U+BAA8-BAA9, U+BAB0, U+BABB, U+BB34, U+BB36, U+BB38, U+BB3C, U+BBC0, U+BBF8, U+BBFC, U+BC00, U+BC0B, U+BC0F, U+BC11, U+BC14, U+BC16, U+BC18, U+BC1B-BC1D, U+BC29, U+BC30, U+BC84, U+BC88, U+BC8C, U+BC94-BC95, U+BCA0, U+BCA4, U+BCA8, U+BCBD, U+BCC0, U+BCC4, U+BCCD, U+BCF4-BCF5, U+BCF8, U+BCFC, U+BD24, U+BD80-BD81, U+BD84, U+BD88, U+BD99, U+BE0C, U+BE14, U+BE44, U+BE48, U+BE4C, U+BE60, U+BE68, U+BE7C, U+BE80, U+BF08, U+C0AC-C0AD, U+C0B0, U+C0B4, U+C0BC, U+C0C1, U+C0C8-C0C9, U+C0DD, U+C0F7, U+C11C-C11E, U+C120, U+C124, U+C131, U+C138-C139, U+C13C, U+C140, U+C149, U+C154, U+C158, U+C178, U+C18C-C18D, U+C190, U+C1A1, U+C1C4, U+C1FC, U+C218-C219, U+C21C, U+C220, U+C228, U+C22B, U+C26C, U+C2A4, U+C2AC, U+C2B5, U+C2B9, U+C2DC-C2DD, U+C2E0, U+C2E4, U+C2EC, U+C2F1, U+C2F6, U+C2F8, U+C30D, U+C313, U+C368, U+C37C, U+C4F0, U+C4F4, U+C528-C529, U+C544-C545, U+C548-C54A, U+C54C, U+C555, U+C558, U+C55E, U+C560-C561, U+C564, U+C570-C571, U+C57C-C57D, U+C587, U+C591, U+C5B4, U+C5B8, U+C5BC, U+C5C5-C5C8, U+C5D0, U+C5D4, U+C5EC-C5ED, U+C5F0, U+C5F4, U+C5F6, U+C600-C601, U+C606, U+C608, U+C624, U+C628, U+C62C, U+C62E, U+C635, U+C640, U+C644, U+C654, U+C65C, U+C678, U+C67C, U+C694, U+C6A9, U+C6B0, U+C6B4, U+C6B8, U+C6C0, U+C6C3, U+C6CC, U+C6D0, U+C6D4, U+C6E0, U+C6F9, U+C704, U+C720, U+C728, U+C735, U+C73C, U+C740, U+C744, U+C74C, U+C751, U+C758, U+C774, U+C778, U+C77C-C77D, U+C784-C785, U+C787-C788, U+C790-C791, U+C798, U+C7A0-C7A1, U+C7A5, U+C7AC, U+C7B0, U+C800-C801, U+C804, U+C808, U+C810-C811, U+C815, U+C81C-C81D, U+C838, U+C84C, U+C870-C871, U+C874, U+C881, U+C885, U+C88B-C88C, U+C8FC, U+C900, U+C904, U+C90C-C90D, U+C911, U+C918, U+C92C, U+C99D, U+C9C0-C9C1, U+C9C4, U+C9C8, U+C9D0-C9D1, U+C9D5, U+C9D9, U+C9DC-C9DD, U+C9E7, U+C9F8, U+CABD, U+CC0D, U+CC28, U+CC38, U+CC3D-CC3E, U+CC44-CC45, U+CC98-CC99, U+CC9C, U+CCA8, U+CCAB, U+CCAD, U+CCB4, U+CCD0, U+CCE4, U+CD08, U+CD2C, U+CD5C, U+CD94-CD95, U+CD98, U+CD9C, U+CDA9, U+CDB0, U+CDC4, U+CDE8, U+CE20-CE21, U+CE58-CE59, U+CE5C, U+CE60, U+CE68-CE69, U+CE74, U+CE78, U+CE94, U+CEA0-CEA1, U+CEE4, U+CEE8, U+CEEC, U+CEF4, U+CF00, U+CF1C, U+CF54, U+CF58, U+CF5C, U+CFE0, U+D06C, U+D070, U+D074, U+D07C, U+D0A4, U+D0AC, U+D0B9, U+D0C0, U+D0C8, U+D0D0-D0D1, U+D0D5, U+D0DC-D0DD, U+D0EC-D0ED, U+D130, U+D134, U+D140, U+D14C-D14D, U+D150, U+D15C, U+D1A0, U+D1A4, U+D1B1, U+D1B5, U+D1F4, U+D22C, U+D29C, U+D2B8-D2B9, U+D2BC, U+D2C0, U+D2F0-D2F1, U+D300, U+D305, U+D30C, U+D310, U+D328, U+D37C, U+D398-D399, U+D39C, U+D3B8, U+D3BC, U+D3C9, U+D3D0, U+D3EC-D3ED, U+D3F0, U+D3F4, U+D3FC, U+D45C, U+D478, U+D480, U+D488, U+D4E8, U+D504, U+D50C, U+D53C-D53D, U+D540, U+D544, U+D551, U+D558-D559, U+D55C, U+D560, U+D568-D569, U+D56B, U+D56D, U+D574-D575, U+D584, U+D588-D589, U+D5A5, U+D5C8, U+D5D8, U+D5E4, U+D604, U+D611, U+D615, U+D61C, U+D638, U+D63C, U+D648, U+D64D, U+D654-D655, U+D658, U+D65C, U+D669, U+D68C-D68D, U+D6A8, U+D6C4, U+D734, U+D750, U+D770, U+D788, U+D78C, U+D798; }
/* ===== 글꼴 끝 ===== */

/* ==========================================================================
   Design tokens
   UI UX Pro Max 추천 디자인 시스템 기반
   - Style: Minimalism & Swiss Style (grid-based, high contrast, geometric)
   - Pattern: Portfolio Grid (Hero > Projects > About > Contact)
   - Color: Monochrome + blue accent
   - Type: Paperlogy (전체)
   ========================================================================== */
:root {
  --color-primary: #18181B;
  --color-on-primary: #FFFFFF;
  --color-accent: #2563EB;
  --color-on-accent: #FFFFFF;
  --color-background: #FAFAFA;
  --color-foreground: #09090B;
  --color-card: #FFFFFF;
  --color-muted: #F1F2F4;
  --color-muted-foreground: #475569;
  --color-border: #E4E4E7;
  --color-border-strong: #18181B;
  --color-ring: #2563EB;
  --color-thumb: #ECEEF2;

  --font-body: "Paperlogy", system-ui, -apple-system, "Apple SD Gothic Neo", "Malgun Gothic", sans-serif;
  --font-display: var(--font-body);

  /* Spacious density (24–96px) */
  --space-1: 8px;
  --space-2: 16px;
  --space-3: 24px;
  --space-4: 32px;
  --space-5: 48px;
  --space-6: 64px;
  --space-7: 96px;
  --space-8: 128px;
  --space-section: 80px;

  --inner: 1200px;
  --gutter: 32px;
  --header-h: 72px;
  --radius: 4px;

  --ease: cubic-bezier(.2, .7, .2, 1);
  --dur-fast: 150ms;
  --dur: 220ms;
  --dur-reveal: 350ms;
  --ease-out-expo: cubic-bezier(.16, 1, .3, 1);
}

@media (prefers-color-scheme: dark) {
  :root {
    --color-primary: #FAFAFA;
    --color-on-primary: #09090B;
    --color-accent: #60A5FA;
    --color-on-accent: #09090B;
    --color-background: #09090B;
    --color-foreground: #FAFAFA;
    --color-card: #111113;
    --color-muted: #18181B;
    --color-muted-foreground: #A1A1AA;
    --color-border: #27272A;
    --color-border-strong: #FAFAFA;
    --color-ring: #60A5FA;
    --color-thumb: #1C1C20;
  }
}

/* ==========================================================================
   Base
   ========================================================================== */
html { scroll-behavior: smooth; scroll-padding-top: calc(var(--header-h) + var(--space-2)); }
body {
  font-family: var(--font-body);
  font-size: 1rem;
  line-height: 1.7;
  color: var(--color-foreground);
  background: var(--color-background);
  word-break: keep-all;
  -webkit-font-smoothing: antialiased;
}
/* 긴 영문 단어 · 주소가 좁은 화면(320px 이하)에서 가로 스크롤을 만들지 않도록, 넘칠 때만 줄을 나눈다 */
h1, h2, h3, p, li, dt, dd, a, figcaption { overflow-wrap: break-word; }
::selection { background: var(--color-accent); color: var(--color-on-accent); }

a:focus-visible,
button:focus-visible {
  outline: 2px solid var(--color-ring);
  outline-offset: 3px;
  border-radius: 2px;
}

.inner { max-width: var(--inner); margin: 0 auto; padding: 0 var(--gutter); }
.icon { flex: none; width: 1.125em; height: 1.125em; }

/* 아이콘 모음(<symbol>)용 SVG: 자리를 차지하지 않게 */
.svg-sprite { position: absolute; }

.skip-link {
  position: absolute;
  top: -100px;
  left: var(--space-2);
  z-index: 1000;
  padding: 10px var(--space-2);
  background: var(--color-primary);
  color: var(--color-on-primary);
  font-weight: 600;
}
.skip-link:focus { top: var(--space-2); }

/* ==========================================================================
   Button
   ========================================================================== */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 48px;
  padding: 0 var(--space-3);
  font-weight: 600;
  border: 1px solid transparent;
  border-radius: var(--radius);
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.btn .icon { transition: transform var(--dur) var(--ease); }
.btn:hover .icon { transform: translateX(3px); }
.btn--primary { background: var(--color-primary); color: var(--color-on-primary); }
.btn--primary:hover { background: var(--color-accent); color: var(--color-on-accent); }
.btn--line { border-color: var(--color-border); color: var(--color-foreground); background: var(--color-card); }
.btn--line:hover { border-color: var(--color-border-strong); }

/* ==========================================================================
   Header
   ========================================================================== */
.header {
  position: fixed;
  inset: 0 0 auto;
  z-index: 100;
  height: var(--header-h);
  background: color-mix(in srgb, var(--color-background) 88%, transparent);
  backdrop-filter: saturate(1.4) blur(12px);
  border-bottom: 1px solid transparent;
  transition: border-color var(--dur) var(--ease);
}
.header.is-scrolled { border-bottom-color: var(--color-border); }
.header__progress {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 2px;
  background: var(--color-accent);
  transform: scaleX(0);
  transform-origin: left center;
  pointer-events: none;
}
.header__inner { display: flex; align-items: center; justify-content: space-between; height: 100%; }
.header__logo {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-family: var(--font-display);
  font-size: 1.375rem;
  font-weight: 800;
  letter-spacing: -.02em;
}
.header__logo-dot { color: var(--color-accent); }

.gnb__list { display: flex; gap: var(--space-1); }
.gnb__list a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0 14px;
  font-family: var(--font-display);
  font-weight: 500;
  color: var(--color-muted-foreground);
  transition: color var(--dur-fast) var(--ease);
}
.gnb__list a:hover,
.gnb__list a.is-current { color: var(--color-foreground); }
.gnb__list a.is-current { text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 6px; text-decoration-color: var(--color-accent); }

.header__toggle { display: none; position: relative; width: 44px; height: 44px; margin-right: -10px; }
.header__toggle-bar,
.header__toggle-bar::before,
.header__toggle-bar::after {
  position: absolute;
  left: 11px;
  width: 22px;
  height: 2px;
  background: var(--color-foreground);
  transition: transform var(--dur) var(--ease), background-color var(--dur) var(--ease);
}
.header__toggle-bar { top: 21px; }
.header__toggle-bar::before,
.header__toggle-bar::after { content: ""; left: 0; }
.header__toggle-bar::before { top: -7px; }
.header__toggle-bar::after { top: 7px; }
.is-open .header__toggle-bar { background: transparent; }
.is-open .header__toggle-bar::before { transform: translateY(7px) rotate(45deg); }
.is-open .header__toggle-bar::after { transform: translateY(-7px) rotate(-45deg); }

/* ==========================================================================
   Hero
   ========================================================================== */
.hero {
  padding: calc(var(--header-h) + var(--space-8)) 0 0;
}
.hero__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-display);
  font-size: .875rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--color-muted-foreground);
}
.hero__dot { width: 8px; height: 8px; background: var(--color-accent); }
.hero__title {
  margin-top: var(--space-3);
  font-size: clamp(2.75rem, 8vw, 6rem);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -.02em;
}
.hero__line { display: block; }
.hero__title em { position: relative; font-style: normal; color: var(--color-accent); }

/* ===== Hero 제목 모션 =====
   1) 글자가 한 글자씩 아래에서 올라옴 (expo-out, 글자당 35ms 간격)
   2) "정확하게." 아래 형광펜이 왼쪽부터 그어짐
   3) 소개 문구 · 버튼 · 정보가 차례로 나타남
   4) 마우스를 올리면 글자가 살짝 튀어오름 */
.hero__title em::after {
  content: "";
  position: absolute;
  z-index: -1;
  left: -.04em;
  right: -.04em;
  bottom: .08em;
  height: .3em;
  background: color-mix(in srgb, var(--color-accent) 20%, transparent);
}
.hero__title { isolation: isolate; }

.hero-anim .hero__line { overflow: hidden; padding-bottom: .06em; margin-bottom: -.06em; }
.hero-anim .hero__char {
  display: inline-block;
  transform: translateY(105%);
  opacity: 0;
  transition:
    transform 700ms cubic-bezier(.16, 1, .3, 1) calc(var(--i) * 35ms + 120ms),
    opacity 400ms ease calc(var(--i) * 35ms + 120ms),
    color var(--dur-fast) var(--ease);
}
.hero-anim .is-ready .hero__char { transform: none; opacity: 1; }
.hero-anim .hero__title em::after {
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 600ms cubic-bezier(.65, 0, .35, 1) var(--mark-delay, 900ms);
}
.hero-anim .is-ready .hero__title em::after { transform: scaleX(1); }

/* 소개 문단(.hero__desc)은 첫 화면에서 가장 큰 글자 영역(LCP)이라 숨기지 않고 처음부터 보여 준다 — 성능 개선 2026-10-22 */
.hero-anim .hero__eyebrow,
.hero-anim .hero__actions,
.hero-anim .hero__meta {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 500ms ease, transform 600ms cubic-bezier(.16, 1, .3, 1);
}
.hero-anim .is-ready .hero__eyebrow { opacity: 1; transform: none; transition-delay: 0ms; }
.hero-anim .is-ready .hero__actions { opacity: 1; transform: none; transition-delay: calc(var(--after-title, 800ms) + 100ms); }
.hero-anim .is-ready .hero__meta { opacity: 1; transform: none; transition-delay: calc(var(--after-title, 800ms) + 200ms); }

/* 스크립트가 실패해도 2초 뒤에는 내용이 보이도록 */
.hero-anim .hero:not(.is-ready) .inner > * { animation: hero-fallback 0s 2s forwards; }
@keyframes hero-fallback { to { opacity: 1; transform: none; } }

@media (hover: hover) {
  .hero-anim .is-ready .hero__char.is-settled {
    transition: transform 300ms cubic-bezier(.34, 1.56, .64, 1), color var(--dur-fast) var(--ease);
  }
  .hero-anim .is-ready .hero__char.is-settled:hover { transform: translateY(-.08em); color: var(--color-accent); }
}
.hero__desc {
  max-width: 34em;
  margin-top: var(--space-4);
  font-size: 1.1875rem;
  color: var(--color-muted-foreground);
}
.hero__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: var(--space-5); }

.hero__meta {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  margin-top: var(--space-7);
  border-top: 1px solid var(--color-border-strong);
}
.hero__meta div { padding: var(--space-2) var(--space-3) 0 0; }
.hero__meta div + div { padding-left: var(--space-3); border-left: 1px solid var(--color-border); }
.hero__meta dt {
  font-family: var(--font-display);
  font-size: .8125rem;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--color-muted-foreground);
}
.hero__meta dd { margin-top: 4px; font-weight: 600; }

/* ==========================================================================
   Section (Swiss 12-column header)
   ========================================================================== */
.section { padding: var(--space-section) 0; }
.section__head {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) minmax(0, 22rem);
  column-gap: var(--space-2);
  align-items: end;
  padding-top: var(--space-2);
  margin-bottom: 40px;
  border-top: 1px solid var(--color-border-strong);
}
.section__num {
  grid-column: 1;
  align-self: start;
  font-family: var(--font-display);
  font-size: .9375rem;
  font-weight: 700;
  color: var(--color-accent);
}
.section__title {
  grid-column: 2;
  font-family: var(--font-display);
  font-size: clamp(2.5rem, 5.5vw, 4.5rem);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -.02em;
}
.section__desc {
  grid-column: 3;
  padding-left: var(--space-3);
  color: var(--color-muted-foreground);
}

/* ==========================================================================
   Projects
   ========================================================================== */
.filter { display: flex; flex-wrap: wrap; gap: var(--space-1); margin-bottom: var(--space-4); }
.filter__btn {
  min-height: 44px;
  padding: 0 18px;
  font-weight: 500;
  color: var(--color-muted-foreground);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  transition: color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), background-color var(--dur-fast) var(--ease);
}
.filter__btn:hover { color: var(--color-foreground); border-color: var(--color-border-strong); }
.filter__btn[aria-pressed="true"] { background: var(--color-primary); border-color: var(--color-primary); color: var(--color-on-primary); }
.filter__count { margin-left: 6px; font-size: .8125rem; opacity: .7; }

.projects { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-5) var(--space-4); }
.projects__empty {
  grid-column: 1 / -1;
  padding: 56px var(--space-3);
  text-align: center;
  color: var(--color-muted-foreground);
  border: 1px dashed var(--color-border);
}

.card { display: flex; flex-direction: column; }
.card__thumb {
  position: relative;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--color-thumb);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
}
.card__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 400ms var(--ease);
}
.card:hover .card__thumb img,
.card:focus-within .card__thumb img { transform: scale(1.03); }
.card__placeholder {
  display: grid;
  place-items: center;
  height: 100%;
  font-family: var(--font-display);
  font-size: clamp(3rem, 8vw, 5rem);
  font-weight: 800;
  letter-spacing: -.02em;
  color: var(--color-muted-foreground);
  opacity: .35;
}
.card__index {
  position: absolute;
  top: var(--space-2);
  left: var(--space-2);
  padding: 2px 8px;
  font-family: var(--font-display);
  font-size: .8125rem;
  font-weight: 700;
  background: var(--color-card);
  border: 1px solid var(--color-border);
}

.card__body { display: flex; flex-direction: column; flex: 1; padding-top: var(--space-3); }
.card__top { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-2); }
.card__category {
  font-size: .8125rem;
  font-weight: 700;
  letter-spacing: .04em;
  color: var(--color-accent);
}
.card__category { flex-shrink: 0; }
/* 기간 · 기여도가 길면 오른쪽 정렬로 줄바꿈 (한 줄 고정이면 모바일에서 카드가 넘침) */
.card__meta { min-width: 0; font-size: .875rem; color: var(--color-muted-foreground); text-align: right; }
.card__title { margin-top: 6px; font-size: 1.5rem; font-weight: 700; letter-spacing: -.02em; line-height: 1.35; }
.card__desc { margin-top: var(--space-1); color: var(--color-muted-foreground); }
.card__tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: var(--space-2); }
.card__tags li {
  padding: 2px 10px;
  font-size: .8125rem;
  color: var(--color-muted-foreground);
  border: 1px solid var(--color-border);
  border-radius: 999px;
}
.card__links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1) var(--space-3);
  margin-top: auto;
  padding-top: var(--space-3);
}
.card__link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 44px;
  font-weight: 600;
  color: var(--color-foreground);
  border-bottom: 2px solid var(--color-border-strong);
  transition: color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);
}
.card__link:hover { color: var(--color-accent); border-color: var(--color-accent); }
.card__link--sub { border-bottom-color: var(--color-border); color: var(--color-muted-foreground); }

/* ==========================================================================
   About
   ========================================================================== */
.about { display: grid; grid-template-columns: repeat(12, 1fr); column-gap: var(--space-3); }
.about__text { grid-column: 1 / span 7; }
.about__text p { color: var(--color-muted-foreground); }
.about__text p + p { margin-top: var(--space-3); }
.about__lead { font-size: clamp(1.25rem, 2.2vw, 1.625rem); line-height: 1.55; letter-spacing: -.01em; }
.about__text .about__lead { color: var(--color-foreground); font-weight: 500; }
.about__info { grid-column: 9 / span 4; border-top: 1px solid var(--color-border-strong); }
.about__info div { padding: 14px 0; border-bottom: 1px solid var(--color-border); }
.about__info dt {
  font-family: var(--font-display);
  font-size: .8125rem;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--color-muted-foreground);
}
.about__info dd { margin-top: 2px; font-weight: 500; word-break: break-all; }
.about__info a { display: inline-block; min-height: 24px; text-decoration: underline; text-decoration-color: var(--color-border); text-underline-offset: 4px; transition: text-decoration-color var(--dur-fast) var(--ease); }
.about__info a:hover { text-decoration-color: var(--color-accent); }

/* 걸어온 과정: 경력을 단계별로 한 줄씩 (Skills와 같은 표 형식) */
.journey { margin-top: var(--space-6); }
.journey__heading { display: flex; flex-direction: column; gap: 4px; margin-bottom: var(--space-3); font-family: var(--font-display); font-size: 1.25rem; font-weight: 700; letter-spacing: -.01em; }
.journey__label { font-size: .75rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--color-accent); }
.journey__list { border-top: 1px solid var(--color-border-strong); }
.journey__item {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  column-gap: var(--space-3);
  align-items: baseline;
  padding: var(--space-3) 0;
  border-bottom: 1px solid var(--color-border);
}
.journey__period { grid-column: 1 / span 3; font-family: var(--font-display); font-weight: 600; font-variant-numeric: tabular-nums; color: var(--color-muted-foreground); }
.journey__head { grid-column: 4 / span 4; }
.journey__title { font-family: var(--font-display); font-size: 1.125rem; font-weight: 700; letter-spacing: -.01em; }
.journey__places { margin-top: 4px; font-size: .875rem; color: var(--color-muted-foreground); }
.journey__text { grid-column: 8 / -1; color: var(--color-muted-foreground); }
.journey__note { margin-top: var(--space-2); font-size: .875rem; color: var(--color-muted-foreground); }

/* ==========================================================================
   Skills — 큰 이름 목록. 스크롤 · 마우스로 지금 항목이 파랗게 채워지고,
   데스크톱에서는 옆 패널(고정)에 영역 · 설명 · 쓴 작업물이 바뀐다
   ========================================================================== */
:root { --skill-idle: #868E9C; }  /* 큰 글자 기준 대비 3.2:1 */
@media (prefers-color-scheme: dark) { :root { --skill-idle: #63636B; } }  /* 3.3:1 */

.skillset { display: grid; grid-template-columns: repeat(12, 1fr); column-gap: var(--space-3); align-items: start; }
.skillset__list { grid-column: 1 / -1; border-top: 1px solid var(--color-border-strong); }
.skillset__row {
  display: grid;
  grid-template-columns: 3rem auto minmax(0, 1fr);
  column-gap: var(--space-2);
  align-items: baseline;
  padding: var(--space-2) 0;
  border-bottom: 1px solid var(--color-border);
}
.skillset__num { font-size: .8125rem; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--color-muted-foreground); }
.skillset__name {
  font-family: var(--font-display);
  font-size: clamp(1.75rem, 4.4vw, 3.75rem);
  font-weight: 800;
  line-height: 1.12;
  letter-spacing: -.03em;
}
.skillset__detail { grid-column: 2 / -1; margin-top: var(--space-1); }
/* 기술 아이콘: 평소 회색, 지금 항목은 브랜드 색으로 살짝 튀어 오른다 (장식이라 화면 읽기에서는 숨김) */
.skillset__icon {
  grid-column: 2;
  align-self: center;
  width: clamp(1.75rem, 3.4vw, 3rem);
  height: clamp(1.75rem, 3.4vw, 3rem);
  color: var(--color-foreground);
}
.skillset__row:not([data-icon]) .skillset__name { grid-column: 2 / -1; }
.skillset__row[data-icon] .skillset__name { grid-column: 3; }
.skillset__row[data-icon="html5"], .skillset__card[data-icon="html5"] { --brand: #E34F26; }
.skillset__row[data-icon="css3"], .skillset__card[data-icon="css3"] { --brand: #663399; }
.skillset__row[data-icon="javascript"], .skillset__card[data-icon="javascript"] { --brand: #E0B800; }
.skillset__row[data-icon="react"], .skillset__card[data-icon="react"] { --brand: #087EA4; }
.skillset__row[data-icon="accessibility"], .skillset__card[data-icon="accessibility"] { --brand: var(--color-accent); }
.skillset__row[data-icon="figma"], .skillset__card[data-icon="figma"] { --brand: #F24E1E; }
.skillset__row[data-icon="jquery"], .skillset__card[data-icon="jquery"] { --brand: #0769AD; }
@media (prefers-color-scheme: dark) {
  .skillset__row[data-icon="css3"], .skillset__card[data-icon="css3"] { --brand: #A77BDB; }
  .skillset__row[data-icon="javascript"], .skillset__card[data-icon="javascript"] { --brand: #F7DF1E; }
  .skillset__row[data-icon="react"], .skillset__card[data-icon="react"] { --brand: #61DAFB; }
  .skillset__row[data-icon="jquery"], .skillset__card[data-icon="jquery"] { --brand: #4FA3E0; }
}
.skillset__area { font-size: .75rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--color-accent); }
.skillset__desc { margin-top: 2px; color: var(--color-muted-foreground); }
.skillset__works { margin-top: 4px; font-size: .875rem; font-weight: 500; }

/* JS가 돌 때: 이름은 회색으로 두고, 지금 항목만 왼쪽부터 파랗게 채운다 */
.skillset--live .skillset__name {
  color: transparent;
  background-image: linear-gradient(90deg, var(--color-accent) 0 50%, var(--skill-idle) 50% 100%);
  background-size: 200% 100%;
  background-position: 100% 0;
  -webkit-background-clip: text;
  background-clip: text;
  transition: background-position 700ms var(--ease-out-expo), transform 500ms var(--ease-out-expo);
}
.skillset--live .skillset__num { transition: color var(--dur) var(--ease); }
.skillset--live .skillset__icon { color: var(--skill-idle); transition: color 400ms var(--ease), transform 600ms cubic-bezier(.34, 1.56, .64, 1); }
.skillset--live .skillset__row.is-active .skillset__icon { color: var(--brand, var(--color-accent)); transform: translateX(12px) scale(1.12) rotate(-8deg); }
.skillset--live .skillset__row.is-active .skillset__name { background-position: 0 0; transform: translateX(12px); }
.skillset--live .skillset__row.is-active .skillset__num { color: var(--color-accent); }

/* 데스크톱: 목록 옆 고정 패널. 목록의 설명은 화면에서만 숨기고 화면 읽기 프로그램은 그대로 읽는다 */
.skillset__panel { display: none; }
.skillset--panel .skillset__list { grid-column: 1 / span 7; }
.skillset--panel .skillset__row { padding: 12px 0; }
.skillset--panel .skillset__detail {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}
.skillset--panel .skillset__panel {
  display: block;
  grid-column: 9 / -1;
  position: sticky;
  top: calc(var(--header-h) + var(--space-4));
}
.skillset__card { padding-top: var(--space-2); animation: skill-in 520ms var(--ease-out-expo) both; }
.skillset__card-top { display: flex; justify-content: space-between; gap: var(--space-2); font-size: .75rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--color-accent); }
.skillset__count { font-variant-numeric: tabular-nums; color: var(--color-muted-foreground); letter-spacing: .04em; }
/* 목록 중 몇 번째인지(진행 막대) */
.skillset__progress { position: relative; display: block; height: 2px; margin-top: var(--space-1); background: var(--color-border); overflow: hidden; }
.skillset__progress::after { content: ""; position: absolute; inset: 0; background: var(--color-accent); transform: scaleX(var(--p, 0)); transform-origin: left center; animation: skill-bar 700ms var(--ease-out-expo) both; }
.skillset__card-icon { display: block; width: 56px; height: 56px; margin-top: var(--space-3); color: var(--brand, var(--color-accent)); animation: skill-icon 640ms cubic-bezier(.34, 1.56, .64, 1) both; }
@keyframes skill-icon { from { opacity: 0; transform: scale(.6) rotate(-20deg); } }
.skillset__card-icon + .skillset__card-name { margin-top: var(--space-2); }
.skillset__card-name { margin-top: var(--space-3); font-family: var(--font-display); font-size: 2rem; font-weight: 800; line-height: 1.2; letter-spacing: -.02em; }
.skillset__card-desc { margin-top: var(--space-2); color: var(--color-muted-foreground); }
.skillset__card-label { margin-top: var(--space-3); font-size: .8125rem; font-weight: 700; color: var(--color-muted-foreground); }
.skillset__chips { display: flex; flex-wrap: wrap; gap: var(--space-1); margin-top: var(--space-1); }
.skillset__chips a {
  display: inline-flex;
  align-items: center;
  min-height: 32px;
  padding: 0 14px;
  border: 1px solid var(--color-border-strong);
  border-radius: 999px;
  font-size: .875rem;
  font-weight: 600;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
/* 보이는 크기는 32px, 누르는 영역은 위아래로 늘려 44px */
.skillset__chips a { position: relative; }
.skillset__chips a::after { content: ""; position: absolute; inset: -6px 0; }
.skillset__chips a:hover { background: var(--color-primary); color: var(--color-on-primary); }
@keyframes skill-in { from { opacity: 0; transform: translateY(12px); } }
@keyframes skill-bar { from { transform: scaleX(var(--p-from, 0)); } }

@media (prefers-reduced-motion: reduce) {
  .skillset--live .skillset__name,
  .skillset--live .skillset__num { transition: none; }
  .skillset--live .skillset__row.is-active .skillset__name { transform: none; }
  .skillset--live .skillset__icon { transition: none; }
  .skillset--live .skillset__row.is-active .skillset__icon { transform: none; }
  .skillset__card-icon { animation: none; }
  .skillset__card,
  .skillset__progress::after { animation: none; }
}
/* 고대비 모드: 글자 채우기 대신 기본 글자색 */
@media (forced-colors: active) {
  .skillset--live .skillset__name { color: CanvasText; background: none; }
  .skillset--live .skillset__row.is-active .skillset__name { color: Highlight; }
  .skillset__icon, .skillset__card-icon { color: CanvasText; }
}

/* ==========================================================================
   Contact
   ========================================================================== */
.contact { display: grid; grid-template-columns: repeat(12, 1fr); column-gap: var(--space-3); }
.contact__mail {
  grid-column: 1 / -1;
  display: inline-flex;
  align-items: center;
  gap: .3em;
  justify-self: start;
  font-family: var(--font-display);
  font-size: clamp(1.25rem, 4.6vw, 3.5rem);
  font-weight: 800;
  letter-spacing: -.02em;
  line-height: 1.15;
  word-break: break-all;
  background: linear-gradient(currentColor, currentColor) 0 100% / 0 3px no-repeat;
  transition: color var(--dur) var(--ease), background-size var(--dur) var(--ease);
}
.contact__mail:hover { color: var(--color-accent); background-size: 100% 3px; }
.contact__mail .icon { width: .7em; height: .7em; }
.contact__links { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 12px; margin-top: var(--space-5); }

/* ==========================================================================
   Footer
   ========================================================================== */
.footer { padding: var(--space-4) 0; font-size: .875rem; color: var(--color-muted-foreground); border-top: 1px solid var(--color-border-strong); }
.footer__inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); }
.footer__top { display: inline-flex; align-items: center; min-height: 44px; font-weight: 600; color: var(--color-foreground); }
.footer__top:hover { color: var(--color-accent); }

/* ==========================================================================
   Scroll reveal (JS가 켜져 있고 모션 감소 설정이 아닐 때만)
   ========================================================================== */
.js-reveal [data-reveal] {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 500ms ease, transform 700ms var(--ease-out-expo);
}
.js-reveal [data-reveal].is-visible { opacity: 1; transform: none; }

/* 자식이 차례로 등장 (data-stagger) */
.js-reveal [data-stagger] > * {
  opacity: 0;
  transform: translateY(16px);
  transition:
    opacity 500ms ease calc(var(--i, 0) * 70ms),
    transform 700ms var(--ease-out-expo) calc(var(--i, 0) * 70ms);
}
.js-reveal [data-stagger].is-visible > * { opacity: 1; transform: none; }

/* 섹션 제목: 위 구분선이 왼쪽부터 그어지고 → 번호 → 제목 글자 → 설명 순서 */
.js-reveal .section__head[data-reveal] { opacity: 1; transform: none; border-top-color: transparent; }
.section__head { position: relative; }
.js-reveal .section__head::before {
  content: "";
  position: absolute;
  top: -1px;
  left: 0;
  right: 0;
  height: 1px;
  background: var(--color-border-strong);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 900ms cubic-bezier(.65, 0, .35, 1);
}
.js-reveal .section__head.is-visible::before { transform: scaleX(1); }
.js-reveal .section__num {
  opacity: 0;
  transform: translateX(-8px);
  transition: opacity 400ms ease 200ms, transform 500ms var(--ease-out-expo) 200ms;
}
.js-reveal .section__title-inner { display: inline-block; overflow: hidden; padding-bottom: .1em; margin-bottom: -.1em; vertical-align: bottom; }
.js-reveal .section__char {
  display: inline-block;
  transform: translateY(110%);
  transition: transform 800ms var(--ease-out-expo) calc(var(--i) * 40ms + 250ms);
}
.js-reveal .section__desc {
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 500ms ease 650ms, transform 600ms var(--ease-out-expo) 650ms;
}
.js-reveal .section__head.is-visible .section__num,
.js-reveal .section__head.is-visible .section__char,
.js-reveal .section__head.is-visible .section__desc { opacity: 1; transform: none; }

/* 작업물 카드: 썸네일이 아래에서 위로 열리듯 드러남 */
.js-reveal .card[data-reveal] { transition-delay: calc(var(--i, 0) * 120ms); }
.js-reveal .card .card__thumb {
  clip-path: inset(100% 0 0 0);
  transition: clip-path 1000ms cubic-bezier(.77, 0, .18, 1) calc(var(--i, 0) * 120ms + 100ms);
}
.js-reveal .card.is-visible .card__thumb { clip-path: inset(0 0 0 0); }

/* 연락처 이메일: 글자 줄이 아래에서 올라옴 */
.js-reveal .contact[data-reveal] { opacity: 1; transform: none; }
.js-reveal .contact__mail { overflow: hidden; }
.js-reveal .contact__mail > * {
  transform: translateY(110%);
  transition: transform 900ms var(--ease-out-expo) 150ms, color var(--dur) var(--ease);
}
.js-reveal .contact.is-visible .contact__mail > * { transform: none; }
.js-reveal .contact__mail > .icon { transition-delay: 300ms; }

/* 마우스 반응 (마우스가 있는 기기에서만) */
@media (hover: hover) {
  .contact__mail .icon { transition: transform 400ms var(--ease-out-expo); }
  .contact__mail:hover .icon,
  .js-reveal .contact.is-visible .contact__mail:hover > .icon { transform: translate(4px, -4px); transition-delay: 0ms; }
}

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 1024px) {
  :root { --gutter: 24px; }
}

@media (max-width: 768px) {
  :root {
    --gutter: 16px;
    --header-h: 60px;
    --space-7: 64px;
    --space-8: 80px;
    --space-section: 56px;
  }

  .header__toggle { display: block; }
  .gnb {
    position: fixed;
    inset: var(--header-h) 0 auto;
    visibility: hidden;
    opacity: 0;
    background: var(--color-background);
    border-bottom: 1px solid var(--color-border);
    transform: translateY(-8px);
    transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease), visibility var(--dur);
  }
  .is-open .gnb { visibility: visible; opacity: 1; transform: none; }
  .gnb__list { flex-direction: column; gap: 0; padding: var(--space-1) var(--gutter) var(--space-2); }
  .gnb__list a { display: flex; min-height: 52px; padding: 0; font-size: 1.25rem; border-bottom: 1px solid var(--color-border); }
  .gnb__list li:last-child a { border-bottom: 0; }

  .hero { padding-top: calc(var(--header-h) + var(--space-6)); }
  .hero__desc { font-size: 1.0625rem; }
  .hero__meta { grid-template-columns: 1fr; margin-top: var(--space-6); }
  .hero__meta div,
  .hero__meta div + div { padding: 14px 0; border-left: 0; border-bottom: 1px solid var(--color-border); }

  .section__head { grid-template-columns: auto minmax(0, 1fr); column-gap: 12px; row-gap: var(--space-2); margin-bottom: var(--space-4); }
  .section__desc { grid-column: 1 / -1; padding-left: 0; }

  .projects { grid-template-columns: 1fr; gap: var(--space-6); }

  .about { grid-template-columns: 1fr; row-gap: var(--space-5); }
  .about__text,
  .about__info { grid-column: 1; }

  .journey { margin-top: var(--space-5); }
  .journey__item { grid-template-columns: 1fr; row-gap: 6px; padding: var(--space-2) 0; }
  .journey__period,
  .journey__head,
  .journey__text { grid-column: 1; }

  .skillset__row { grid-template-columns: 2rem auto minmax(0, 1fr); column-gap: 12px; }

  .contact { grid-template-columns: 1fr; }
  .contact__links .btn { width: 100%; }
  .contact__links li { flex: 1 1 160px; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    transition-duration: 0s !important;
    animation-duration: 0s !important;
  }
}
