@charset "utf-8";

/* ── 테마 기본 시트 ──────────────────────────────────────────────
   2026-09-24 에 테마 css/ 의 여러 장을 이 한 장(과 쇼핑몰용 default_shop.css)
   으로 합쳤다. 원래 head.sub.php 와 스킨들이 순서 번호(100 · 110~150 · 300 ·
   310~314 · 350 · 390)를 매겨 따로 싣던 것을, 그 번호 순서 그대로 이어 붙였다
   — 같은 특정도면 뒤에 온 선언이 이기므로 이 순서를 바꾸면 결과가 달라진다.

   절마다 머리표(━━━━ 옛 파일 이름 ━━━━)를 달아 두었다. 주석에서
   "skins.css 의 …" · "board-list.css 의 …" 처럼 파일 이름으로 가리키는
   곳은 그 머리표 아래 절을 뜻한다. 줄 번호로 가리키던 것(예: skins.css:67)은
   이제 맞지 않으니 머리표에서 찾는다.

   합치면서 달라진 것 둘.
   - 조건부로 싣던 절(게시판 목록 · 보기 · 쓰기, 로그인 · 쪽지 · 포인트 ·
     스크랩)이 이제 모든 화면에 실린다. 선택자가 그 화면의 뼈대(#bo_list ·
     #bo_v · #bo_w · .solune-login-* · #memo_* …)에 묶여 있어 다른 화면에는
     걸리지 않는다(합치기 전후를 화면마다 계산된 스타일로 대 보았다).
   - 쇼핑몰 화면에서는 default_shop.css(320)가 이 파일 뒤에 온다. 원래는
     popup(390) · 화면 전용(350)이 쇼핑몰 시트보다 뒤였다. */

/* ━━━━ 자동 생성: Tailwind · daisyUI (tools/tailwind/build.js) ━━━━
   tailwindcss 4.3.3 · daisyui 5.7.19. 손으로 고치지 않는다 — 다시 빌드하면 덮인다.
   PHP · JS 에 Tailwind · daisyUI 클래스를 새로 쓰면 tools/tailwind 에서 node build.js 를
   다시 돌려야 그 클래스의 CSS 가 생긴다. 설명은 tools/tailwind/input.css. */
/*! 🌼 daisyUI 5.7.19 - MIT License */
@layer base{:root,:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E")}:root,[data-theme]{background-color:var(--root-bg);color:var(--color-base-content)}:root{background-color:var(--page-scroll-bg,var(--root-bg))}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}:root{scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) #0000;--page-has-backdrop:var(--page-scroll-lock) 1;--page-scroll-bg:var(--page-scroll-lock) color-mix(in srgb, var(--root-bg,#0000), oklch(0% 0 0) calc(var(--page-has-backdrop,0) * 40%));background-image:var(--page-scroll-lock) linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000));transition:var(--page-scroll-lock) background-color .3s ease-out;animation:var(--page-scroll-lock) set-page-has-scroll forwards;animation-timeline:var(--page-scroll-lock) scroll();--page-has-scroll:initial;scrollbar-gutter:var(--page-has-scroll) var(--page-scroll-lock) stable}@keyframes set-page-has-scroll{0%,to{--page-has-scroll: }}@property --radialprogress{syntax:"<percentage>";inherits:true;initial-value:0%}@property --aura-angle{syntax:"<angle>";inherits:false;initial-value:0deg}:root{--page-scroll-lock:initial;--page-overflow:var(--page-scroll-lock) hidden}:root:not(span){overflow:var(--page-overflow)}*,:after,::backdrop,:before,::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");-webkit-tap-highlight-color:#0000}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}table{text-indent:0;border-color:inherit;border-collapse:collapse}::file-selector-button,button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;background:0 0}input:where(:not([type=button],[type=reset],[type=submit])),select,textarea{border-width:1px}::file-selector-button,button,input:where([type=button],[type=reset],[type=submit]){appearance:button}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}::-webkit-search-decoration{-webkit-appearance:none}menu,ol,ul{list-style:none}textarea{resize:vertical}::placeholder{opacity:1;color:color-mix(in oklch, currentColor 50%, #0000)}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}}@layer utilities{@layer daisyui.l1.l2.l3{.table{border-collapse:separate;--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);border-radius:var(--radius-box);text-align:left;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(:is(.table tr.row-hover),.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:color-mix(in oklab, var(--color-base-content) 60%, transparent);font-size:.875rem;font-weight:600}.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}.mask{vertical-align:middle;display:inline-block;mask-position:50%;mask-size:contain;mask-repeat:no-repeat}.select{appearance:none;background-color:var(--color-base-100);vertical-align:middle;--size:calc(var(--size-field,.25rem) * var(--sl-size-mul,10));--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000);width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,0rem), var(--font-size-min,.875rem));touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;border:var(--border) solid var(--input-color,#0000);box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;display:inline-flex;position:relative;overflow:hidden}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border) * 2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem;&::placeholder{color:var(--color-base-content);opacity:.5}&:focus,&:focus-within{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:not(:last-child){background-image:none;margin-inline-end:-1.375rem}}.select:focus,.select:focus-within,.select:open{--input-color:var(--color-base-content);box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000);outline:2px solid var(--input-color);outline-offset:2px}.select:open{background-image:linear-gradient(135deg,#0000 50%,currentColor 50%),linear-gradient(45deg,currentColor 50%,#0000 50%)}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(select),& :is(select){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){:is(.select,.select select),:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) selectedcontent{text-overflow:ellipsis;white-space:nowrap;width:100%;overflow:hidden}:is(.select,.select select) optgroup{padding-top:.5em;& option{&:first-child{margin-top:.5em}}}:is(.select,.select select) option{border-radius:var(--radius-field);padding-block:.375rem;padding-inline:calc(.25rem * var(--option-px,3));white-space:normal;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);&:not(:disabled){&:hover,&:focus-visible{cursor:pointer;background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}}}[dir=rtl] .select::picker(select),[dir=rtl] .select select::picker(select){translate:.5rem}@media (prefers-reduced-motion:no-preference){}.input{appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;--size:calc(var(--size-field,.25rem) * var(--in-size-mul,10));--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000);cursor:text;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,0rem), var(--font-size-min,.875rem));touch-action:manipulation;border:var(--border) solid var(--input-color,#0000);box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}.input input{appearance:none;background-color:#0000;border:none;width:100%;height:100%;&::placeholder{color:var(--color-base-content);opacity:.5}&:focus,&:focus-within{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&::-webkit-calendar-picker-indicator{inset-inline-end:-.15em}}.input::-webkit-inner-spin-button{margin-inline-end:-10px}.input::-webkit-calendar-picker-indicator{inset-inline-end:.75em}input.input,.input input{text-align:start;display:inline-flex;position:relative;&[type=url],&[type=tel],&[type=email],&[type=number]{direction:ltr}&::-webkit-datetime-edit,&::-webkit-date-and-time-value{min-height:100%;text-align:inherit;align-items:center;display:grid}&::-webkit-inner-spin-button{margin-block:calc(.25rem * var(--spin-my,-3))}&::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute}&::-webkit-color-swatch-wrapper{padding-block:.25rem}}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000);outline:2px solid var(--input-color);outline-offset:2px}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(input),& :is(input){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.card{border-radius:var(--radius-box);outline-offset:2px;outline:2px solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus-visible,.card[aria-checked=true],.card:has(>:checked,>:is([type=checkbox],[type=radio]):focus-visible){outline-color:currentColor}.card:has(>:checked:focus-visible),.card[aria-checked=true]:focus-visible,.card[aria-checked=true]:has(>:is([type=checkbox],[type=radio]):focus-visible){outline-width:4px}.card:has(>:is([type=checkbox],[type=radio])){cursor:pointer;user-select:none}.card>:is([type=checkbox],[type=radio]){appearance:none}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.stack{grid-template-rows:3px 4px 1fr 4px 3px;grid-template-columns:3px 4px 1fr 4px 3px;display:inline-grid}.stack>*{width:100%;height:100%;&:nth-child(n+2){opacity:.7;width:100%}&:nth-child(2){z-index:2;opacity:.9}&:first-child{z-index:3;width:100%}}:is(.validator:user-valid,.validator:has(:user-valid)),:is(.validator:user-valid,.validator:has(:user-valid)):focus,:is(.validator:user-valid,.validator:has(:user-valid)):checked,:is(.validator:user-valid,.validator:has(:user-valid))[aria-checked=true],:is(.validator:user-valid,.validator:has(:user-valid)):focus-within{--input-color:var(--color-success)}:is(.validator:user-invalid,.validator:has(:user-invalid),.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))),:is(.validator:user-invalid,.validator:has(:user-invalid),.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus,:is(.validator:user-invalid,.validator:has(:user-invalid),.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):checked,:is(.validator:user-invalid,.validator:has(:user-invalid),.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))[aria-checked=true],:is(.validator:user-invalid,.validator:has(:user-invalid),.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus-within{--input-color:var(--color-error)}@media (prefers-reduced-motion:reduce){}.filter{flex-wrap:wrap;display:flex}.filter [type=radio]{width:auto}.filter input{opacity:1;transition:visibility .1s allow-discrete, margin .1s, opacity .3s, padding .3s, border-width .1s;overflow:hidden;scale:1;}.filter>input:not(:last-child),.filter>:not(:last-child) input{margin-inline-end:.25rem}.range{-webkit-appearance:none;appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem) * 6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:color-mix(in oklab, currentColor 10%, #0000);--range-fill-x:calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2));--range-fill-y:0;--range-fill-spread:calc(100cqw * var(--range-fill));cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));background-color:var(--range-thumb);height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;-webkit-appearance:none;appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);position:relative;inset-block-start:50%;transform:translateY(-50%)}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}@media (forced-colors:active){.range::-moz-range-track{border:1px solid}}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, var(--range-fill-x) var(--range-fill-y) 0 var(--range-fill-spread);background-color:currentColor;position:relative}.range:disabled{cursor:not-allowed;opacity:.3}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border) solid var(--input-color,color-mix(in srgb, currentColor 20%, #0000));box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);color:var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor;@media (prefers-reduced-motion:no-preference){animation:.2s ease-out radio}&:before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1));background-color:currentColor}@media (forced-colors:active){&:before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{&:before{outline-offset:-1rem;outline:.25rem solid}}}:where(.btn){width:unset}.btn{--size:calc(var(--size-field,.25rem) * 10);--btn-p:1rem;--btn-fg:var(--color-base-content);cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;-webkit-user-select:none;user-select:none;border-width:var(--border);touch-action:manipulation;--btn-bg:var(--btn-color,var(--color-base-200));--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 calc(var(--depth) * 5%));--btn-soft-bg:initial;--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000);--btn-inset:0 .5px 0 .5px oklch(100% 0 0 / calc(var(--depth) * 6%));height:var(--size);padding-inline:var(--btn-p);font-weight:600;font-size:var(--fontsize,.875rem);background-color:var(--btn-bg);color:var(--btn-fg);border-color:var(--btn-border);border-style:var(--btn-border-style,solid);outline-color:var(--btn-color,var(--color-base-content));--tw-prose-links:var(--btn-fg);background-image:none, var(--fx-noise);background-size:auto, calc(var(--noise,0) * 100%);text-shadow:0 .5px oklch(100% 0 0 / calc(var(--depth) * .15));box-shadow:var(--btn-inset) inset, var(--btn-shadow);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;transition-property:color,background-color,border-color,box-shadow,transform;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}.btn:is([type=checkbox],[type=radio]){appearance:none;&[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}}.btn:where(:checked:not(.filter [type=radio].btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-outline,.btn-dash{--btn-bg:#0000;color:var(--btn-rest-fg,var(--btn-color,var(--color-base-content)));--btn-border:var(--btn-color,var(--color-base-content));--btn-border-style:solid;--btn-inset:0 0 0 0 oklch(0% 0 0/0);--btn-shadow:0 0 0 0 oklch(0% 0 0/0);background-image:none}.btn-ghost{--btn-bg:#0000;color:var(--btn-rest-fg,var(--btn-color,var(--color-base-content,currentColor)));--btn-border:#0000;--btn-inset:0 0 0 0 oklch(0% 0 0/0);--btn-shadow:0 0 0 0 oklch(0% 0 0/0);background-image:none}.avatar{vertical-align:middle;align-self:center;display:inline-flex;position:relative}.avatar>div{aspect-ratio:1;display:block;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.collapse-content{--overflow-delay:0s;content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem;overflow:clip}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media (prefers-reduced-motion:no-preference){.collapse-content{transition:overflow .2s allow-discrete var(--overflow-delay), content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out}}details>.collapse-content{content-visibility:visible}.collapse-title{padding:1rem;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:color-mix(in oklab, var(--color-base-content) 20%, transparent);vertical-align:middle;width:.5rem;height:.5rem;color:color-mix(in oklab, var(--color-black) 30%, transparent);background-position:50%;background-repeat:no-repeat;background-image:radial-gradient(circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * .5)), #0000);box-shadow:0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000);display:inline-block}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0, auto) 1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent);position:absolute;bottom:0}.indicator{width:max-content;display:inline-flex;position:relative}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul,li menu){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative;&:before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,menu,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}&::-webkit-details-marker{display:none}}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0;@media (prefers-reduced-motion:no-preference){transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,menu,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,menu,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);color:var(--color-base-content);--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,menu,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative;& .badge{justify-self:flex-end}&>:not(ul,menu,.menu-title,details,.btn):active,&>:not(ul,menu,.menu-title,details,.btn).menu-active,&>details>summary:active{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);&:not(&:active){box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg)}}&.menu-disabled,& [disabled]{pointer-events:none;color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem;&:before{display:none}}.menu-title{color:color-mix(in oklab, var(--color-base-content) 40%, transparent);padding-block:.5rem;padding-inline:.75rem;font-size:.875rem;font-weight:600}.carousel{scroll-snap-type:x mandatory;scrollbar-width:none;display:inline-flex;overflow-x:scroll}@media (prefers-reduced-motion:no-preference){.carousel{scroll-behavior:smooth}}.carousel::-webkit-scrollbar{display:none}.textarea{appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000);width:clamp(3rem,20rem,100%);min-height:5rem;font-size:max(var(--font-size,0rem), var(--font-size-min,.875rem));touch-action:manipulation;border:var(--border) solid var(--input-color,#0000);box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem}.textarea textarea{appearance:none;background-color:#0000;border:none;&::placeholder{color:var(--color-base-content);opacity:.5}&:focus,&:focus-within{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000);outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.textarea:focus,.textarea:focus-within{--font-size:1rem}}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:color-mix(in oklab, var(--color-base-content) 40%, transparent);box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.checkbox{border:var(--border) solid var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000));cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 0 #0000 inset, 0 0 #0000;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1));&:before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){&:before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}@media print{&:before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}}.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000));&:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:0deg}}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem) * 10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.tab:is(.tabs>.tab){cursor:pointer;appearance:none;text-align:center;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative;&:hover{@media (hover:hover){color:var(--color-base-content)}}--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field), var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)), var(--tab-border-color) calc(69% - var(--border) + .25px), var(--tab-border-color) 69%, var(--tab-bg) calc(69% + .25px);order:var(--tab-order);height:var(--tab-height);padding-inline:var(--tab-p);border-color:#0000;font-size:.875rem;&:is(input[type=radio]){min-width:fit-content;&:after{--tw-content:attr(aria-label);content:var(--tw-content)}}&:is(label){position:relative;& input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}}&:checked,&:is(label:has(:checked)),&:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){&+.tab-content{display:block}}&:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}&:not(input):empty{cursor:default;flex-grow:1}&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:focus-visible,&:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}&[disabled]{pointer-events:none;opacity:.4}}.tab-content{--tabcontent-radius-ss:var(--radius-box);--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box);--tabcontent-order:1;width:100%;height:calc(100% - var(--tab-height) + var(--border));margin:var(--tabcontent-margin);order:1;order:var(--tabcontent-order);border-color:#0000;border-width:var(--border);border-start-start-radius:var(--tabcontent-radius-ss);border-start-end-radius:var(--tabcontent-radius-se);border-end-end-radius:var(--tabcontent-radius-ee);border-end-start-radius:var(--tabcontent-radius-es);display:none}.fieldset{grid-template-columns:1fr;grid-auto-rows:max-content;gap:.375rem;padding-block:.25rem;font-size:.75rem;display:grid}.timeline{display:flex;position:relative}.timeline>li{grid-template-rows:var(--timeline-row-start,minmax(0, 1fr)) auto var(--timeline-row-end,minmax(0, 1fr));grid-template-columns:var(--timeline-col-start,minmax(0, 1fr)) auto var(--timeline-col-end,minmax(0, 1fr));flex-shrink:0;align-items:center;display:grid;position:relative;&>hr{border:none;width:100%;&:first-child{grid-row-start:2;grid-column-start:1}&:last-child{grid-area:2/3/auto/none}@media print{border:.1px solid var(--color-base-300)}}}.timeline :where(hr){background-color:var(--color-base-300);height:.25rem}.timeline:has(.timeline-middle hr):last-child,.timeline:not(:has(.timeline-middle)) :first-child hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline:not(:has(.timeline-middle)) :last-child hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}@supports (corner-shape:superellipse(1.45)){}@supports (corner-shape:superellipse(1.87)){}@supports (font:-apple-system-body){}.tooltip{--tt-bg:var(--color-neutral);--tt-off:calc(100% + .5rem);--tt-tail:calc(100% + 1px + .25rem);--tt-tail-off:.5rem;display:inline-block;position:relative}.tooltip>.tooltip-content,.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;transform:translateX(var(--tt-trans,-50%)) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;mask-position:-1px 0;mask-repeat:no-repeat;mask-image:var(--mask-tooltip);transform:translateX(var(--tt-trans,-50%)) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%;display:block;position:absolute}@media (prefers-reduced-motion:no-preference){.tooltip>.tooltip-content,.tooltip[data-tip]:before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem;@media (prefers-reduced-motion:no-preference){transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.label{white-space:nowrap;color:color-mix(in oklab, currentcolor 60%, transparent);align-items:center;gap:.375rem;display:inline-flex}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex;&:first-child{border-inline-end:var(--border) solid color-mix(in oklab, currentColor 10%, #0000);margin-inline:-.75rem .75rem}&:last-child{border-inline-start:var(--border) solid color-mix(in oklab, currentColor 10%, #0000);margin-inline:.75rem -.75rem}}.dropdown{position-area:var(--anchor-v,bottom) var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(:has(~[class*=dropdown-content])):focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown.dropdown-close .dropdown-content,.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content,.dropdown.dropdown-hover:not(:hover) [tabindex]:first-child:focus:not(:focus-visible)~.dropdown-content{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover],.dropdown .dropdown-content{z-index:999;@media (prefers-reduced-motion:no-preference){transition-behavior:allow-discrete;transition-property:opacity,scale,display,overlay;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:.95}}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}.dropdown:is(details){overflow:revert-layer;& summary{&::-webkit-details-marker{display:none}}}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed;@supports not (position-area:bottom){margin:auto;&::backdrop{background-color:oklab(0% none none/.3)}}&.dropdown-close,&:not(.dropdown-open,:popover-open){transform-origin:top;opacity:0;display:none;scale:.95}}.hover-gallery{--items:1;grid-template-columns:repeat(var(--items), 1fr);gap:1px;width:100%;overflow:hidden}.hover-gallery,.hover-gallery:is(figure){display:inline-grid}.hover-gallery:has(>:nth-child(3)){--items:2}.hover-gallery:has(>:nth-child(4)){--items:3}.hover-gallery:has(>:nth-child(5)){--items:4}.hover-gallery:has(>:nth-child(6)){--items:5}.hover-gallery:has(>:nth-child(7)){--items:6}.hover-gallery:has(>:nth-child(8)){--items:7}.hover-gallery:has(>:nth-child(9)){--items:8}.hover-gallery:has(>:nth-child(10)){--items:9}.hover-gallery>*{opacity:0;object-fit:cover;grid-row:1;width:100%;height:100%;&:first-child{opacity:1;grid-column:1/-1}&:nth-child(2){grid-column:1}&:nth-child(3){grid-column:2}&:nth-child(4){grid-column:3}&:nth-child(5){grid-column:4}&:nth-child(6){grid-column:5}&:nth-child(7){grid-column:6}&:nth-child(8){grid-column:7}&:nth-child(9){grid-column:8}&:nth-child(10){grid-column:9}&:nth-child(n+11){display:none}}.hover-gallery>:hover{opacity:1;grid-column:1/-1}.hover-gallery:has(:hover)>:first-child{display:none}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}.progress{appearance:none;border-radius:var(--radius-box);background-color:color-mix(in oklab, currentcolor 20%, transparent);width:100%;height:.5rem;color:var(--color-base-content);position:relative;overflow:hidden}.progress:indeterminate{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;@media (prefers-reduced-motion:no-preference){animation:5s ease-in-out infinite progress}@supports ((-moz-appearance:none)){&::-moz-progress-bar{background-color:#0000;@media (prefers-reduced-motion:no-preference){background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;animation:5s ease-in-out infinite progress}}}}@supports ((-moz-appearance:none)){.progress::-moz-progress-bar{border-radius:var(--radius-box);background-color:currentColor;@media (prefers-reduced-motion:no-preference){transition:inline-size .3s}}}@supports ((-webkit-appearance:none)){.progress::-webkit-progress-bar{border-radius:var(--radius-box);background-color:#0000}.progress::-webkit-progress-value{border-radius:var(--radius-box);background-color:currentColor;@media (prefers-reduced-motion:no-preference){transition:inline-size .3s}}}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.toggle{border:var(--border) solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p), var(--radius-selector-max)) + min(var(--border), var(--radius-selector-max)));padding:var(--toggle-p);box-shadow:0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000) inset;--input-color:color-mix(in oklab, var(--color-base-content) 50%, #0000);--toggle-p:calc(var(--size) * .125);--size:calc(var(--size-selector,.25rem) * 6);width:calc((var(--size) * 2) - (var(--border) + var(--toggle-p)) * 2);height:var(--size);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;transition:color .3s,grid-template-columns .2s;display:inline-grid;position:relative}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s;&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:nth-child(2){color:var(--color-base-100);rotate:0deg}&:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:0deg}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);width:100%;height:100%;box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000);background-color:currentColor;background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@media (forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr;&:before{background-color:currentColor}@starting-style{&:before{opacity:0}}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3;&:before{border:var(--border) solid currentColor;background-color:#0000}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:overlay .3s allow-discrete, visibility .3s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}.modal[popover]{color:inherit;background:0 0;border:0;max-width:none;max-height:none;margin:0;padding:0;inset:0;&::backdrop{background-color:oklch(0% 0 0/.4);transition:background-color .3s ease-out}}@media (prefers-reduced-motion:reduce){}@media (prefers-reduced-motion:no-preference){}.file-input{border:var(--border) solid #0000;cursor:pointer;appearance:none;background-color:var(--color-base-100);vertical-align:middle;-webkit-user-select:none;user-select:none;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;--size:calc(var(--size-field,.25rem) * 10);--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));align-items:center;padding-inline-end:.75rem;font-size:.875rem;line-height:2;display:inline-flex}.file-input::file-selector-button{cursor:pointer;-webkit-user-select:none;user-select:none;height:calc(100% + var(--border) * 2);margin-inline-end:1rem;margin-block:calc(var(--border) * -1);color:var(--btn-fg);border-width:var(--border);border-style:solid;border-color:var(--btn-border);background-color:var(--btn-bg);background-size:calc(var(--noise) * 100%);background-image:var(--fx-noise);text-shadow:0 .5px oklch(1 0 0 / calc(var(--depth) * .15));box-shadow:0 .5px 0 .5px color-mix(in oklab, color-mix(in oklab, white 30%, var(--btn-bg)) calc(var(--depth) * 20%), #0000) inset, var(--btn-shadow);--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-border:color-mix(in oklab, var(--btn-bg), #000 5%);--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000);border-start-start-radius:calc(var(--join-ss,var(--radius-field) - var(--border)));border-end-start-radius:calc(var(--join-es,var(--radius-field) - var(--border)));margin-inline-start:calc(var(--border) * -1);padding-inline:1rem;font-size:.875rem;font-weight:600}.file-input:focus{--input-color:var(--color-base-content);box-shadow:0 1px color-mix(in oklab, var(--input-color) 10%, #0000);outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}box-shadow:none;color:color-mix(in oklch, var(--color-base-content) 20%, #0000);&::file-selector-button{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);--btn-border:#0000;--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000);background-image:none}}.stats{border-radius:var(--radius-box);grid-auto-flow:column;display:inline-grid;position:relative;overflow-x:auto}.stat{grid-template-columns:repeat(1,1fr);column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border) dashed color-mix(in oklab, currentColor 10%, #0000);border-block-end:none}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border) solid var(--badge-color,var(--color-base-200));background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem) * 6);width:fit-content;height:var(--size);padding-inline:calc(var(--size) / 2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.dock{z-index:1;background-color:var(--color-base-100);color:currentColor;border-top:.5px solid color-mix(in oklab, var(--color-base-content) 5%, #0000);width:100%;height:4rem;height:calc(4rem + env(safe-area-inset-bottom));padding:.5rem;padding-bottom:env(safe-area-inset-bottom);flex-direction:row;justify-content:space-around;align-items:center;display:flex;position:fixed;bottom:0;left:0;right:0}.dock>:not(:where(script,style,template)){cursor:pointer;border-radius:var(--radius-box);background-color:#0000;flex-direction:column;flex-shrink:1;flex-basis:100%;justify-content:center;align-items:center;gap:1px;max-width:8rem;height:100%;margin-bottom:.5rem;transition:opacity .2s ease-out;display:flex;position:relative;@media (hover:hover){&:hover{opacity:.8}}&[aria-disabled=true],&[disabled]{&,&:hover{pointer-events:none;color:color-mix(in oklab, var(--color-base-content) 10%, transparent);opacity:1}}&:after{content:"";background-color:#0000;border-top:3px solid #0000;border-radius:3.40282e38px;width:1.5rem;height:.25rem;transition:background-color .1s ease-out,text-color .1s ease-out,width .1s ease-out;position:absolute;bottom:.2rem}}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>:not(script,style,template){place-items:start;gap:.5rem;display:grid}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);flex-direction:row;align-self:stretch;align-items:center;display:flex}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.breadcrumbs{max-width:100%;padding-block:.5rem;overflow-x:auto}.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol{white-space:nowrap;align-items:center;min-height:min-content;display:flex;&>li{align-items:center;display:flex;&>*{cursor:pointer;align-items:center;gap:.5rem;display:flex;&:hover{@media (hover:hover){text-decoration-line:underline}}&:focus{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:focus-visible{outline-offset:2px;outline:2px solid}}&+:before{content:"";opacity:.4;background-color:#0000;border-top:1px solid;border-right:1px solid;width:.375rem;height:.375rem;margin-inline:.5rem .75rem;display:block;rotate:45deg}[dir=rtl] &+:before{rotate:-135deg}}}.drawer{grid-auto-columns:max-content auto;width:100%;display:grid;position:relative}.drawer-content{grid-row-start:1;grid-column-start:2;min-width:0}:where(.drawer-side){overflow:hidden}.drawer-side{pointer-events:none;visibility:hidden;z-index:10;overscroll-behavior:contain;opacity:0;width:100%;transition:opacity .2s ease-out .1s allow-discrete, visibility .3s ease-out .1s allow-discrete;inset-inline-start:0;background-color:#0000;grid-template-rows:repeat(1,minmax(0,1fr));grid-template-columns:repeat(1,minmax(0,1fr));grid-row-start:1;grid-column-start:1;place-items:flex-start start;height:100dvh;display:grid;position:fixed;top:0}.drawer-side>.drawer-overlay{cursor:pointer;background-color:oklch(0% 0 0/.4);place-self:stretch stretch;position:sticky;top:0}.drawer-side>*{grid-row-start:1;grid-column-start:1}.drawer-side>:not(.drawer-overlay){will-change:transform;transition:translate .3s ease-out,width .2s ease-out;translate:-100%;[dir=rtl] &{translate:100%}}.drawer-toggle{appearance:none;opacity:0;width:0;height:0;position:fixed}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4));&>:not(.drawer-overlay){will-change:auto;transform:none}}:where(:root:has(.drawer-toggle:checked)){--page-scroll-lock: }.steps{counter-reset:step;grid-auto-columns:1fr;grid-auto-flow:column;display:inline-grid;overflow:auto hidden}.steps .step{text-align:center;--step-bg:var(--color-base-300);--step-fg:var(--color-base-content);grid-template-rows:40px 1fr;grid-template-columns:auto;place-items:center;min-width:4rem;display:grid;&:before{width:100%;height:.5rem;color:var(--step-bg);background-color:var(--step-bg);content:"";border:1px solid;grid-row-start:1;grid-column-start:1;margin-inline-start:-100%;top:0}&>.step-icon,&:not(:has(.step-icon)):after{--tw-content:counter(step);content:var(--tw-content);counter-increment:step;z-index:1;color:var(--step-fg);background-color:var(--step-bg);border:1px solid var(--step-bg);border-radius:3.40282e38px;grid-row-start:1;grid-column-start:1;place-self:center;place-items:center;width:2rem;height:2rem;display:grid;position:relative}&:first-child:before{--tw-content:none;content:var(--tw-content)}&[data-content]:after{--tw-content:attr(data-content);content:var(--tw-content)}}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem) * 6);background-color:currentColor;display:inline-block;mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='8s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='6s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='6s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-position:50%;mask-size:100%;mask-repeat:no-repeat}@media (prefers-reduced-motion:no-preference){.loading{mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}}}@layer daisyui.l1.l2{@media (hover:hover){}.select-md{--sl-size-mul:10;--font-size-min:.875rem;--option-px:3}.swap{cursor:pointer;vertical-align:middle;-webkit-user-select:none;user-select:none;place-content:center;display:inline-grid;position:relative}.swap input{appearance:none;border:none}.swap>*{grid-row-start:1;grid-column-start:1;@media (prefers-reduced-motion:no-preference){transition-property:transform,rotate,opacity;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.swap .swap-on,.swap .swap-indeterminate,.swap input:indeterminate~.swap-on,.swap input:is(:checked,:indeterminate)~.swap-off{opacity:0}.swap input:checked~.swap-on,.swap input:indeterminate~.swap-indeterminate{opacity:1;backface-visibility:visible}.input-ghost{box-shadow:none;background-color:#0000;border-color:#0000}.input-ghost:focus,.input-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.card-border{border:var(--border) solid var(--color-base-200)}:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4;&:nth-child(2){grid-area:2/2/5/5}&:first-child{grid-area:1/1/4/6}}@media (prefers-reduced-motion:reduce){}.radio:disabled{cursor:not-allowed;opacity:.2}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);--btn-soft-bg:initial}.btn-neutral{--btn-color:var(--color-neutral);--btn-fg:var(--color-neutral-content);--btn-soft-bg:var(--color-neutral-content) 80%;--btn-rest-fg:initial}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content);--btn-soft-bg:initial}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content);--btn-soft-bg:initial}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem) * 6)}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem) * 8)}.btn-block{width:100%}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.alert-info{color:var(--color-info-content);--alert-border-color:var(--color-info);--alert-color:var(--color-info)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row>*{grid-row-start:1}.menu-horizontal{flex-direction:row;align-items:flex-start;display:inline-flex}.menu-horizontal>li:not(.menu-title)>details>:is(ul,menu){transform-origin:top;border-radius:var(--radius-box);background-color:var(--color-base-100);opacity:0;margin-inline-start:0;margin-top:1rem;padding-block:.5rem;padding-inline-end:.5rem;position:absolute;scale:.95;box-shadow:0 1px 3px oklch(0% 0 0/.1),0 1px 2px -1px oklch(0% 0 0/.1);@media (prefers-reduced-motion:no-preference){@starting-style{opacity:0;scale:.95}transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s menu}}.menu-horizontal>li:not(.menu-title)>details[open]>:is(ul,menu){opacity:1;scale:1}.menu-horizontal>li>details>:is(ul,menu):before{--tw-content:none;content:var(--tw-content)}.menu-vertical{flex-direction:column;align-items:stretch;display:inline-flex}.menu-vertical>li:not(.menu-title)>details>:is(ul,menu){background-color:revert-layer;border-radius:revert-layer;animation:revert-layer;box-shadow:revert-layer;margin-inline-start:1rem;margin-top:0;padding-block:0;padding-inline-end:0;transition:revert-layer;position:relative}.menu-paged{--menu-paged-arrow:135deg;--menu-paged-back-arrow:-45deg}[dir=rtl] .menu-paged{--menu-paged-arrow:-45deg;--menu-paged-back-arrow:135deg}.menu-paged :where(li ul,li menu):before{--tw-content:none;content:var(--tw-content)}.menu-paged details[open]>summary{font-size:0;&:not(:active){transition-duration:0s}&:before{--tw-content:"Back";content:var(--tw-content);font-size:.875rem}&[aria-label]:before{--tw-content:attr(aria-label);content:var(--tw-content)}}.menu-paged details::details-content{transition:none}.menu-paged:has(>li>details[open])>li:not(:has(>details[open])),.menu-paged :where(:is(ul,menu):has(>li>details[open])>li:not(:has(>details[open]))){display:none}.menu-paged :where(li:has(>details[open]),details[open],details[open]>:is(ul,menu)),.menu-paged :where(details[open])::details-content{display:contents}.menu-paged :where(details[open]:has(>:is(ul,menu)>li>details[open])>summary){display:none}.menu-paged :where(li>details>summary):after{rotate:var(--menu-paged-arrow);transition:none;translate:0}.menu-paged :where(li>details[open]>summary):after{rotate:var(--menu-paged-back-arrow);order:-1;justify-self:flex-start}.menu-xs :where(li:not(.menu-title)>:not(ul,menu,details,.menu-title)),.menu-xs :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);padding-block:.25rem;padding-inline:.5rem;font-size:.6875rem}.menu-xs details[open]>summary:before{font-size:.6875rem}.menu-xs .menu-title{padding-block:.25rem;padding-inline:.5rem}.menu-sm :where(li:not(.menu-title)>:not(ul,menu,details,.menu-title)),.menu-sm :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);padding-block:.25rem;padding-inline:.625rem;font-size:.75rem}.menu-sm details[open]>summary:before{font-size:.75rem}.menu-sm .menu-title{padding-block:.5rem;padding-inline:.75rem}.menu-md :where(li:not(.menu-title)>:not(ul,menu,details,.menu-title)),.menu-md :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);padding-block:.375rem;padding-inline:.75rem;font-size:.875rem}.menu-md details[open]>summary:before{font-size:.875rem}.menu-md .menu-title{padding-block:.5rem;padding-inline:.75rem}.menu-lg :where(li:not(.menu-title)>:not(ul,menu,details,.menu-title)),.menu-lg :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);padding-block:.375rem;padding-inline:1rem;font-size:1.125rem}.menu-lg details[open]>summary:before{font-size:1.125rem}.menu-lg .menu-title{padding-block:.75rem;padding-inline:1.5rem}.menu-xl :where(li:not(.menu-title)>:not(ul,menu,details,.menu-title)),.menu-xl :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);padding-block:.375rem;padding-inline:1.25rem;font-size:1.375rem}.menu-xl details[open]>summary:before{font-size:1.375rem}.menu-xl .menu-title{padding-block:.75rem;padding-inline:1.5rem}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{outline-offset:2px;outline:2px solid #0000}}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}.checkbox-primary{color:var(--color-primary-content);--input-color:var(--color-primary)}.checkbox:disabled{cursor:not-allowed;opacity:.2}.checkbox-sm{--size:calc(var(--size-selector,.25rem) * 5);padding:.1875rem}.tab-disabled{pointer-events:none;opacity:.4}:where(.navbar){position:relative}.dropdown-end{--anchor-h:span-left}.dropdown-end :where(.dropdown-content){inset-inline-end:0;translate:0;[dir=rtl] &{translate:0}}.diff{-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;align-items:normal;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible{outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content);}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}.progress-primary{color:var(--color-primary)}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}.modal.modal-open,.modal[open],.modal:popover-open,.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;background-color:oklch(0% 0 0/.4);:root:has(&){--page-scroll-lock: }}@starting-style{.modal.modal-open,.modal[open],.modal:popover-open,.modal:target,.modal-toggle:checked+.modal{opacity:0}}.badge-outline{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-color:currentColor}.badge-soft{color:var(--badge-color,var(--color-base-content));background-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 8%, var(--color-base-100));border-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 10%, var(--color-base-100));background-image:none}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-ghost{border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content);background-image:none}.badge-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.badge-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto;&>:not(.drawer-overlay){translate:0%}}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-offset:2px;outline:2px solid}@media (prefers-reduced-motion:no-preference){}@media (prefers-reduced-motion:no-preference){}@media (prefers-reduced-motion:no-preference){}@media (prefers-reduced-motion:no-preference){}@media (prefers-reduced-motion:no-preference){}@media (prefers-reduced-motion:no-preference){}}@media (width>=640px){@layer daisyui.l1.l2.l3{@media (hover:hover){:is(:is(.table tr.row-hover),.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}}@layer daisyui.l1.l2{@media (hover:hover){}}}@media (width>=768px){@layer daisyui.l1.l2.l3{@media (hover:hover){:is(:is(.table tr.row-hover),.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}}@layer daisyui.l1.l2{@media (hover:hover){}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@media (hover:hover){:is(:is(.table tr.row-hover),.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}}@layer daisyui.l1.l2{@media (hover:hover){}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@media (hover:hover){:is(:is(.table tr.row-hover),.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}}@layer daisyui.l1.l2{@media (hover:hover){}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@media (hover:hover){:is(:is(.table tr.row-hover),.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}}@layer daisyui.l1.l2{@media (hover:hover){}}}@layer daisyui.l1{.swap-rotate .swap-on,.swap-rotate input:indeterminate~.swap-on{rotate:45deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-on,.swap-rotate.swap-active .swap-on{rotate:0deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-off,.swap-rotate.swap-active .swap-off{rotate:-45deg}.filter:not(:has(:checked:not(.filter-reset))) :is(.filter-reset,[type=reset]):not(:focus-visible){visibility:hidden}.filter:not(:has(:checked:not(.filter-reset))) :is(.filter-reset,[type=reset]):not(:focus-visible),.filter:not(:has(:focus-visible)):has(:checked:not(.filter-reset,[type=checkbox])) :is(input,button):not(:checked,.filter-reset,[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}@media (hover:hover){.btn:hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%);color:var(--btn-fg);--btn-border:color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%));--btn-border-style:solid;--btn-inset:0 .5px 0 .5px oklch(100% 0 0 / calc(var(--depth) * 6%));--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000)}}.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 5%);color:var(--btn-fg,var(--color-base-content));--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%);--btn-border-style:solid;--btn-inset:0 0 0 0 oklch(0% 0 0/0);--btn-shadow:0 0 0 0 oklch(0% 0 0/0);translate:0 .5px}.btn:where(:checked:not(.filter [type=radio].btn),:not([type=radio],[type=checkbox]):focus-visible){--btn-bg:var(--btn-color,var(--color-base-200));color:var(--btn-fg,var(--color-base-content));--btn-border:color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%));--btn-border-style:solid;--btn-inset:0 .5px 0 .5px oklch(100% 0 0 / calc(var(--depth) * 6%));--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000);isolation:isolate}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.list-col-wrap{grid-row-start:2}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.sm\:select:has(>select[disabled]),.sm\:select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(select),& :is(select){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}@supports (appearance:base-select){:is(.select,.select select),:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) selectedcontent{text-overflow:ellipsis;white-space:nowrap;width:100%;overflow:hidden}:is(.select,.select select) optgroup{padding-top:.5em;& option{&:first-child{margin-top:.5em}}}:is(.select,.select select) option{border-radius:var(--radius-field);padding-block:.375rem;padding-inline:calc(.25rem * var(--option-px,3));white-space:normal;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);&:not(:disabled){&:hover,&:focus-visible{cursor:pointer;background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}}}[dir=rtl] .select::picker(select),[dir=rtl] .select select::picker(select){translate:.5rem}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.md\:select:has(>select[disabled]),.md\:select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(select),& :is(select){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}@supports (appearance:base-select){:is(.select,.select select),:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) selectedcontent{text-overflow:ellipsis;white-space:nowrap;width:100%;overflow:hidden}:is(.select,.select select) optgroup{padding-top:.5em;& option{&:first-child{margin-top:.5em}}}:is(.select,.select select) option{border-radius:var(--radius-field);padding-block:.375rem;padding-inline:calc(.25rem * var(--option-px,3));white-space:normal;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);&:not(:disabled){&:hover,&:focus-visible{cursor:pointer;background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}}}[dir=rtl] .select::picker(select),[dir=rtl] .select select::picker(select){translate:.5rem}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.lg\:select:has(>select[disabled]),.lg\:select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(select),& :is(select){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}@supports (appearance:base-select){:is(.select,.select select),:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) selectedcontent{text-overflow:ellipsis;white-space:nowrap;width:100%;overflow:hidden}:is(.select,.select select) optgroup{padding-top:.5em;& option{&:first-child{margin-top:.5em}}}:is(.select,.select select) option{border-radius:var(--radius-field);padding-block:.375rem;padding-inline:calc(.25rem * var(--option-px,3));white-space:normal;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);&:not(:disabled){&:hover,&:focus-visible{cursor:pointer;background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}}}[dir=rtl] .select::picker(select),[dir=rtl] .select select::picker(select){translate:.5rem}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.xl\:select:has(>select[disabled]),.xl\:select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(select),& :is(select){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}@supports (appearance:base-select){:is(.select,.select select),:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) selectedcontent{text-overflow:ellipsis;white-space:nowrap;width:100%;overflow:hidden}:is(.select,.select select) optgroup{padding-top:.5em;& option{&:first-child{margin-top:.5em}}}:is(.select,.select select) option{border-radius:var(--radius-field);padding-block:.375rem;padding-inline:calc(.25rem * var(--option-px,3));white-space:normal;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);&:not(:disabled){&:hover,&:focus-visible{cursor:pointer;background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}}}[dir=rtl] .select::picker(select),[dir=rtl] .select select::picker(select){translate:.5rem}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.\32 xl\:select:has(>select[disabled]),.\32 xl\:select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(select),& :is(select){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}@supports (appearance:base-select){:is(.select,.select select),:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) selectedcontent{text-overflow:ellipsis;white-space:nowrap;width:100%;overflow:hidden}:is(.select,.select select) optgroup{padding-top:.5em;& option{&:first-child{margin-top:.5em}}}:is(.select,.select select) option{border-radius:var(--radius-field);padding-block:.375rem;padding-inline:calc(.25rem * var(--option-px,3));white-space:normal;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);&:not(:disabled){&:hover,&:focus-visible{cursor:pointer;background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent);--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline-offset:2px;outline:2px solid #0000}}&:active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}}}[dir=rtl] .select::picker(select),[dir=rtl] .select select::picker(select){translate:.5rem}}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}:is(.input[type=url],.input[type=tel],.input[type=email],.input[type=number]):dir(rtl){border-start-start-radius:var(--join-se,var(--radius-field));border-start-end-radius:var(--join-ss,var(--radius-field));border-end-end-radius:var(--join-es,var(--radius-field));border-end-start-radius:var(--join-ee,var(--radius-field))}@media (width>=640px){@layer daisyui.l1.l2.l3{input.input,.sm\:input input{text-align:start;display:inline-flex;position:relative;&[type=url],&[type=tel],&[type=email],&[type=number]{direction:ltr}&::-webkit-datetime-edit,&::-webkit-date-and-time-value{min-height:100%;text-align:inherit;align-items:center;display:grid}&::-webkit-inner-spin-button{margin-block:calc(.25rem * var(--spin-my,-3))}&::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute}&::-webkit-color-swatch-wrapper{padding-block:.25rem}}@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}.sm\:input:has(>input[disabled]),.sm\:input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(input),& :is(input){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}}:is(.input[type=url],.input[type=tel],.input[type=email],.input[type=number]):dir(rtl){border-start-start-radius:var(--join-se,var(--radius-field));border-start-end-radius:var(--join-ss,var(--radius-field));border-end-end-radius:var(--join-es,var(--radius-field));border-end-start-radius:var(--join-ee,var(--radius-field))}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{input.input,.md\:input input{text-align:start;display:inline-flex;position:relative;&[type=url],&[type=tel],&[type=email],&[type=number]{direction:ltr}&::-webkit-datetime-edit,&::-webkit-date-and-time-value{min-height:100%;text-align:inherit;align-items:center;display:grid}&::-webkit-inner-spin-button{margin-block:calc(.25rem * var(--spin-my,-3))}&::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute}&::-webkit-color-swatch-wrapper{padding-block:.25rem}}@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}.md\:input:has(>input[disabled]),.md\:input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(input),& :is(input){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}}:is(.input[type=url],.input[type=tel],.input[type=email],.input[type=number]):dir(rtl){border-start-start-radius:var(--join-se,var(--radius-field));border-start-end-radius:var(--join-ss,var(--radius-field));border-end-end-radius:var(--join-es,var(--radius-field));border-end-start-radius:var(--join-ee,var(--radius-field))}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{input.input,.lg\:input input{text-align:start;display:inline-flex;position:relative;&[type=url],&[type=tel],&[type=email],&[type=number]{direction:ltr}&::-webkit-datetime-edit,&::-webkit-date-and-time-value{min-height:100%;text-align:inherit;align-items:center;display:grid}&::-webkit-inner-spin-button{margin-block:calc(.25rem * var(--spin-my,-3))}&::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute}&::-webkit-color-swatch-wrapper{padding-block:.25rem}}@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}.lg\:input:has(>input[disabled]),.lg\:input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(input),& :is(input){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}}:is(.input[type=url],.input[type=tel],.input[type=email],.input[type=number]):dir(rtl){border-start-start-radius:var(--join-se,var(--radius-field));border-start-end-radius:var(--join-ss,var(--radius-field));border-end-end-radius:var(--join-es,var(--radius-field));border-end-start-radius:var(--join-ee,var(--radius-field))}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{input.input,.xl\:input input{text-align:start;display:inline-flex;position:relative;&[type=url],&[type=tel],&[type=email],&[type=number]{direction:ltr}&::-webkit-datetime-edit,&::-webkit-date-and-time-value{min-height:100%;text-align:inherit;align-items:center;display:grid}&::-webkit-inner-spin-button{margin-block:calc(.25rem * var(--spin-my,-3))}&::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute}&::-webkit-color-swatch-wrapper{padding-block:.25rem}}@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}.xl\:input:has(>input[disabled]),.xl\:input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(input),& :is(input){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}}:is(.input[type=url],.input[type=tel],.input[type=email],.input[type=number]):dir(rtl){border-start-start-radius:var(--join-se,var(--radius-field));border-start-end-radius:var(--join-ss,var(--radius-field));border-end-end-radius:var(--join-es,var(--radius-field));border-end-start-radius:var(--join-ee,var(--radius-field))}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{input.input,.\32 xl\:input input{text-align:start;display:inline-flex;position:relative;&[type=url],&[type=tel],&[type=email],&[type=number]{direction:ltr}&::-webkit-datetime-edit,&::-webkit-date-and-time-value{min-height:100%;text-align:inherit;align-items:center;display:grid}&::-webkit-inner-spin-button{margin-block:calc(.25rem * var(--spin-my,-3))}&::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute}&::-webkit-color-swatch-wrapper{padding-block:.25rem}}@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}.\32 xl\:input:has(>input[disabled]),.\32 xl\:input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);&:is(input),& :is(input){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}box-shadow:none;&::placeholder,& ::placeholder{color:var(--color-base-content);opacity:.2}}}:is(.input[type=url],.input[type=tel],.input[type=email],.input[type=number]):dir(rtl){border-start-start-radius:var(--join-se,var(--radius-field));border-start-end-radius:var(--join-ss,var(--radius-field));border-end-end-radius:var(--join-es,var(--radius-field));border-end-start-radius:var(--join-ee,var(--radius-field))}@layer daisyui.l1.l2{}}@layer daisyui.l1.l2.l3.l4{.card figure:first-child{border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card figure:last-child{border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card-body p{flex-grow:1}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2.l3.l4{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2.l3.l4{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2.l3.l4{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2.l3.l4{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2.l3.l4{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4;&:nth-child(2){grid-area:2/2/5/5}&:first-child{grid-area:1/1/4/6}}}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4;&:nth-child(2){grid-area:2/2/5/5}&:first-child{grid-area:1/1/4/6}}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4;&:nth-child(2){grid-area:2/2/5/5}&:first-child{grid-area:1/1/4/6}}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4;&:nth-child(2){grid-area:2/2/5/5}&:first-child{grid-area:1/1/4/6}}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4;&:nth-child(2){grid-area:2/2/5/5}&:first-child{grid-area:1/1/4/6}}}}@media (width>=640px){@layer daisyui.l1.l2.l3{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}}@media (width>=640px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:reduce){}}@layer daisyui.l1.l2{@media (prefers-reduced-motion:reduce){}}}@media (width>=768px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:reduce){}}@layer daisyui.l1.l2{@media (prefers-reduced-motion:reduce){}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:reduce){}}@layer daisyui.l1.l2{@media (prefers-reduced-motion:reduce){}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:reduce){}}@layer daisyui.l1.l2{@media (prefers-reduced-motion:reduce){}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:reduce){}}@layer daisyui.l1.l2{@media (prefers-reduced-motion:reduce){}}}@keyframes aura{to{--aura-angle:360deg;transform:translateZ(1px)}}@keyframes aura-glow{20%,80%{opacity:.7;filter:blur(.25rem)}50%{opacity:1;filter:blur(.75rem)}}@keyframes aura-glow-after{20%,80%{opacity:.3;filter:blur(1rem)}50%{opacity:.6;filter:blur(1.5rem)}}@media (width>=640px){@layer daisyui.l1.l2.l3{[dir=rtl] .range{--range-dir:-1}@media (forced-colors:active){}@media (forced-colors:active){}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{[dir=rtl] .range{--range-dir:-1}@media (forced-colors:active){}@media (forced-colors:active){}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{[dir=rtl] .range{--range-dir:-1}@media (forced-colors:active){}@media (forced-colors:active){}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{[dir=rtl] .range{--range-dir:-1}@media (forced-colors:active){}@media (forced-colors:active){}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{[dir=rtl] .range{--range-dir:-1}@media (forced-colors:active){}@media (forced-colors:active){}}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@layer daisyui{.btn-disabled,.btn:is(:disabled,[disabled],[aria-disabled=true]){pointer-events:none;color:color-mix(in oklch, var(--color-base-content) 20%, #0000);--btn-bg:#0000;--btn-border:#0000;--btn-inset:0 0 0 0 oklch(0% 0 0/0);--btn-shadow:0 0 0 0 oklch(0% 0 0/0);background-image:none}:is(.btn-disabled,.btn:is(:disabled,[disabled],[aria-disabled=true])):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}@media (width>=640px){@layer daisyui.l1.l2.l3{:where(.btn){width:unset}}@layer daisyui.l1{@media (hover:hover){}}@layer daisyui.l1.l2{}@layer daisyui{:is(.btn-disabled,.btn:is(:disabled,[disabled],[aria-disabled=true])):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}}@media (width>=768px){@layer daisyui.l1.l2.l3{:where(.btn){width:unset}}@layer daisyui.l1{@media (hover:hover){}}@layer daisyui.l1.l2{}@layer daisyui{:is(.btn-disabled,.btn:is(:disabled,[disabled],[aria-disabled=true])):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{:where(.btn){width:unset}}@layer daisyui.l1{@media (hover:hover){}}@layer daisyui.l1.l2{}@layer daisyui{:is(.btn-disabled,.btn:is(:disabled,[disabled],[aria-disabled=true])):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{:where(.btn){width:unset}}@layer daisyui.l1{@media (hover:hover){}}@layer daisyui.l1.l2{}@layer daisyui{:is(.btn-disabled,.btn:is(:disabled,[disabled],[aria-disabled=true])):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{:where(.btn){width:unset}}@layer daisyui.l1{@media (hover:hover){}}@layer daisyui.l1.l2{}@layer daisyui{:is(.btn-disabled,.btn:is(:disabled,[disabled],[aria-disabled=true])):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}.alert{border-width:var(--border);border-color:var(--alert-border-color,var(--color-base-200));@layer daisyui.l1.l2.l3{--alert-border-color:var(--color-base-200);border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;background-size:auto, calc(var(--noise) * 33%);background-image:none, var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px color-mix(in oklab, color-mix(in oklab, #000 20%, var(--alert-color,var(--color-base-200))) calc(var(--depth) * 20%), #0000), 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08));border-style:solid;grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid;&:has(>:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}}}@media (width>=640px){@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=768px){@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=1024px){@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=1280px){@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=1536px){@layer daisyui.l1.l2{}@layer daisyui.l1{}}.collapse:not(td,tr,colgroup){visibility:revert-layer;@layer daisyui.l1.l2.l3{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;@media (prefers-reduced-motion:no-preference){transition:grid-template-rows .2s}&>input:is([type=checkbox],[type=radio]){appearance:none;opacity:0;grid-row-start:1;grid-column-start:1}&:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),&:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}&:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,&:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){--overflow-delay:.2s;overflow:revert-layer;content-visibility:visible;min-height:fit-content;@supports not (content-visibility:visible){visibility:visible}}&:focus-visible,&:has(>input:is([type=checkbox],[type=radio]):focus-visible),&:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}&:not(.collapse-close){&>input[type=checkbox],&>input[type=radio]:not(:checked),&>.collapse-title{cursor:pointer}}&[tabindex]:focus:not(.collapse-close,.collapse[open]),&[tabindex]:focus-within:not(.collapse-close,.collapse[open]){&>.collapse-title{cursor:unset}}&:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),&:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}&>input:is([type=checkbox],[type=radio]){z-index:1;padding:1rem;width:100%;min-height:1lh;padding-inline-end:3rem;transition:background-color .2s ease-out}&:is(details){width:100%;&::details-content{--overflow-delay:0s;height:0;overflow:clip}&:where([open])::details-content{overflow:revert-layer;height:auto}@media (prefers-reduced-motion:no-preference){&::details-content{transition:overflow .2s allow-discrete var(--overflow-delay), content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out, height .2s;interpolate-size:allow-keywords}&:where([open])::details-content{--overflow-delay:.2s}}&>summary{outline:none;display:block;position:relative;&::-webkit-details-marker{display:none}}}}@layer daisyui.l1.l2{&[open]{}&[open]{}}}@media (width>=640px){@layer daisyui.l1.l2.l3{@supports not (content-visibility:hidden){}@media (prefers-reduced-motion:no-preference){}details>.collapse-content{content-visibility:visible}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@supports not (content-visibility:hidden){}@media (prefers-reduced-motion:no-preference){}details>.collapse-content{content-visibility:visible}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@supports not (content-visibility:hidden){}@media (prefers-reduced-motion:no-preference){}details>.collapse-content{content-visibility:visible}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@supports not (content-visibility:hidden){}@media (prefers-reduced-motion:no-preference){}details>.collapse-content{content-visibility:visible}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@supports not (content-visibility:hidden){}@media (prefers-reduced-motion:no-preference){}details>.collapse-content{content-visibility:visible}}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent);position:absolute;bottom:0}}@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=768px){@layer daisyui.l1.l2.l3{:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent);position:absolute;bottom:0}}@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent);position:absolute;bottom:0}}@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent);position:absolute;bottom:0}}@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent);position:absolute;bottom:0}}@layer daisyui.l1.l2{}@layer daisyui.l1{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}}@layer daisyui.l1.l2{[dir=rtl] .menu-paged{--menu-paged-arrow:-45deg;--menu-paged-back-arrow:135deg}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{outline-offset:2px;outline:2px solid #0000}}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}}}@media (width>=768px){@layer daisyui.l1.l2.l3{:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}}@layer daisyui.l1.l2{[dir=rtl] .menu-paged{--menu-paged-arrow:-45deg;--menu-paged-back-arrow:135deg}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{outline-offset:2px;outline:2px solid #0000}}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}}@layer daisyui.l1.l2{[dir=rtl] .menu-paged{--menu-paged-arrow:-45deg;--menu-paged-back-arrow:135deg}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{outline-offset:2px;outline:2px solid #0000}}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}}@layer daisyui.l1.l2{[dir=rtl] .menu-paged{--menu-paged-arrow:-45deg;--menu-paged-back-arrow:135deg}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{outline-offset:2px;outline:2px solid #0000}}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}}@layer daisyui.l1.l2{[dir=rtl] .menu-paged{--menu-paged-arrow:-45deg;--menu-paged-back-arrow:135deg}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{outline-offset:2px;outline:2px solid #0000}}:where(:not(ul,menu,details,.menu-title,.btn)).menu-active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}}}@keyframes menu{0%{opacity:0}}@media (width>=640px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@media (pointer:coarse){@supports (-webkit-touch-callout:none){}}}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:where(.navbar){position:relative}}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:where(.navbar){position:relative}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:where(.navbar){position:relative}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:where(.navbar){position:relative}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{:where(.navbar){position:relative}}}@media (width>=640px){@layer daisyui.l1.l2.l3{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}}@media (width>=640px){@layer daisyui.l1.l2.l3{@supports (font:-apple-system-body){}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@supports (font:-apple-system-body){}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@supports (font:-apple-system-body){}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@supports (font:-apple-system-body){}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@supports (font:-apple-system-body){}}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem;@media (prefers-reduced-motion:no-preference){transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem;@media (prefers-reduced-motion:no-preference){transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem;@media (prefers-reduced-motion:no-preference){transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem;@media (prefers-reduced-motion:no-preference){transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@media (prefers-reduced-motion:no-preference){}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem;@media (prefers-reduced-motion:no-preference){transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}}@media (width>=640px){@layer daisyui.l1.l2.l3{@starting-style{}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.sm\:dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@starting-style{}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.md\:dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@starting-style{}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.lg\:dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@starting-style{}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.xl\:dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@starting-style{}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.\32 xl\:dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}}@layer daisyui.l1.l2{}}@keyframes dropdown{0%{opacity:0}}@media (width>=640px){@layer daisyui.l1.l2.l3{.hover-gallery,.sm\:hover-gallery:is(figure){display:inline-grid}}}@media (width>=768px){@layer daisyui.l1.l2.l3{.hover-gallery,.md\:hover-gallery:is(figure){display:inline-grid}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{.hover-gallery,.lg\:hover-gallery:is(figure){display:inline-grid}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{.hover-gallery,.xl\:hover-gallery:is(figure){display:inline-grid}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{.hover-gallery,.\32 xl\:hover-gallery:is(figure){display:inline-grid}}}@media (width>=640px){@layer daisyui.l1.l2{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}@layer daisyui.l1.l2.l3{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}}@media (width>=768px){@layer daisyui.l1.l2{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}@layer daisyui.l1.l2.l3{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}}@media (width>=1024px){@layer daisyui.l1.l2{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}@layer daisyui.l1.l2.l3{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}}@media (width>=1280px){@layer daisyui.l1.l2{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}@layer daisyui.l1.l2.l3{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}}@media (width>=1536px){@layer daisyui.l1.l2{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}@layer daisyui.l1.l2.l3{@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){}}}@media (width>=640px){@layer daisyui.l1.l2.l3{@supports ((-moz-appearance:none)){}@supports ((-webkit-appearance:none)){}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@supports ((-moz-appearance:none)){}@supports ((-webkit-appearance:none)){}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@supports ((-moz-appearance:none)){}@supports ((-webkit-appearance:none)){}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@supports ((-moz-appearance:none)){}@supports ((-webkit-appearance:none)){}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@supports ((-moz-appearance:none)){}@supports ((-webkit-appearance:none)){}}@layer daisyui.l1.l2{}}@keyframes progress{50%{background-position-x:-115%}}@media (width>=640px){@layer daisyui.l1.l2.l3{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}@media (hover:hover){}}}@media (width>=640px){@layer daisyui.l1.l2.l3{@media (forced-colors:active){}@media print{}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@media (forced-colors:active){}@media print{}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@media (forced-colors:active){}@media print{}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@media (forced-colors:active){}@media print{}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@media (forced-colors:active){}@media print{}}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@starting-style{}}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@starting-style{}}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@starting-style{}}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@starting-style{}}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{@starting-style{}}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=640px){@layer daisyui.l1.l2.l3{@media print{}}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{@media print{}}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{@media print{}}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{@media print{}}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{@media print{}}@layer daisyui.l1.l2{}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items) * 100%)}to{translate:0 -100%}}@media (width>=640px){@layer daisyui.l1.l2.l3{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}}@media (width>=640px){@layer daisyui.l1.l2.l3{:where(.drawer-side){overflow:hidden}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4));&>:not(.drawer-overlay){will-change:auto;transform:none}}:where(:root:has(.drawer-toggle:checked)){--page-scroll-lock: }}@layer daisyui.l1.l2{:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto;&>:not(.drawer-overlay){translate:0%}}}@layer daisyui.l1{}}@media (width>=768px){@layer daisyui.l1.l2.l3{:where(.drawer-side){overflow:hidden}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4));&>:not(.drawer-overlay){will-change:auto;transform:none}}:where(:root:has(.drawer-toggle:checked)){--page-scroll-lock: }}@layer daisyui.l1.l2{:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto;&>:not(.drawer-overlay){translate:0%}}}@layer daisyui.l1{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{:where(.drawer-side){overflow:hidden}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4));&>:not(.drawer-overlay){will-change:auto;transform:none}}:where(:root:has(.drawer-toggle:checked)){--page-scroll-lock: }}@layer daisyui.l1.l2{:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto;&>:not(.drawer-overlay){translate:0%}}}@layer daisyui.l1{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{:where(.drawer-side){overflow:hidden}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4));&>:not(.drawer-overlay){will-change:auto;transform:none}}:where(:root:has(.drawer-toggle:checked)){--page-scroll-lock: }}@layer daisyui.l1.l2{:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto;&>:not(.drawer-overlay){translate:0%}}}@layer daisyui.l1{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{:where(.drawer-side){overflow:hidden}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4));&>:not(.drawer-overlay){will-change:auto;transform:none}}:where(:root:has(.drawer-toggle:checked)){--page-scroll-lock: }}@layer daisyui.l1.l2{:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto;&>:not(.drawer-overlay){translate:0%}}}@layer daisyui.l1{}}@media (width>=640px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2.l3{}@layer daisyui.l1.l2{}}.kbd{box-shadow:none;@layer daisyui.l1.l2.l3{border-radius:var(--radius-field);background-color:var(--color-base-200);vertical-align:middle;color:var(--color-base-content);border:var(--border) solid color-mix(in srgb, var(--color-base-content) 20%, #0000);border-bottom:calc(var(--border) + 1px) solid color-mix(in srgb, var(--color-base-content) 20%, #0000);--size:calc(var(--size-selector,.25rem) * 6);height:var(--size);min-width:var(--size);flex-shrink:0;justify-content:center;align-items:center;padding-inline:.5em;font-size:.875rem;display:inline-flex}}@media (width>=640px){@layer daisyui.l1.l2{}}@media (width>=768px){@layer daisyui.l1.l2{}}@media (width>=1024px){@layer daisyui.l1.l2{}}@media (width>=1280px){@layer daisyui.l1.l2{}}@media (width>=1536px){@layer daisyui.l1.l2{}}.rounded-box{border-radius:var(--radius-box)}@media (width>=640px){}@media (width>=768px){}@media (width>=1024px){}@media (width>=1280px){}@media (width>=1536px){}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;--join-v:0;--join-h:1;align-items:stretch;display:inline-flex;@scope(&){&>:where(:focus,:has(:focus)){z-index:2}@media (hover:hover){&>:where(.btn:hover,:has(.btn:hover)){z-index:1}}& :where(:scope>:first-child){--join-ss:var(--radius-field);--join-se:calc(var(--radius-field) * var(--join-v));--join-es:calc(var(--radius-field) * var(--join-h));--join-ee:0}& :where(:scope>:last-child){--join-ss:0;--join-se:calc(var(--radius-field) * var(--join-h));--join-es:calc(var(--radius-field) * var(--join-v));--join-ee:var(--radius-field)}& :where(:scope>:only-child){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}}}@media (width>=640px){}@media (width>=768px){}@media (width>=1024px){}@media (width>=1280px){}@media (width>=1536px){}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200{background-color:var(--color-base-200)}.bg-base-200\/60{background-color:var(--color-base-200);@supports (color:color-mix(in lab, red, red)){background-color:color-mix(in oklab,var(--color-base-200)60%,#0000)}}.border-base-300{border-color:var(--color-base-300)}.text-base-content{color:var(--color-base-content)}.text-base-content\/50{color:var(--color-base-content);@supports (color:color-mix(in lab, red, red)){color:color-mix(in oklab,var(--color-base-content)50%,#0000)}}.text-base-content\/60{color:var(--color-base-content);@supports (color:color-mix(in lab, red, red)){color:color-mix(in oklab,var(--color-base-content)60%,#0000)}}.text-base-content\/70{color:var(--color-base-content);@supports (color:color-mix(in lab, red, red)){color:color-mix(in oklab,var(--color-base-content)70%,#0000)}}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-secondary)}@media (width>=40rem){}@media (width>=48rem){}@media (width>=64rem){}@media (width>=80rem){}@media (width>=96rem){}@media (hover:hover){.hover\:text-primary:hover:hover{color:var(--color-primary)}}}
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--radius-lg:.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\@container{container-type:inline-size}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.sticky\!{position:sticky!important}.right-5{right:calc(var(--spacing) * 5)}.bottom-5{bottom:calc(var(--spacing) * 5)}.z-30{z-index:30}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-1{margin-right:var(--spacing)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:var(--spacing)}.ml-3{margin-left:calc(var(--spacing) * 3)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.h-11{height:calc(var(--spacing) * 11)}.w-11{width:calc(var(--spacing) * 11)}.w-full{width:100%}.max-w-7xl{max-width:var(--container-7xl)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink{flex-shrink:1}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-none{border-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.bg-transparent{background-color:#0000}.p-5{padding:calc(var(--spacing) * 5)}.px-0{padding-inline:0}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-px{padding-top:1px}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-7{padding-bottom:calc(var(--spacing) * 7)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[\.7rem\]{font-size:.7rem}.text-\[\.65rem\]{font-size:.65rem}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow\!{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-0{outline-style:var(--tw-outline-style);outline-width:0}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[hostname\:port\]{hostname:port}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:bg-transparent:hover{background-color:#0000}.hover\:underline:hover{text-decoration-line:underline}}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-10{padding-block:calc(var(--spacing) * 10)}}@media (min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:grid-cols-\[minmax\(0\,1fr\)_18rem\]{grid-template-columns:minmax(0,1fr) 18rem}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}.lg\:py-12{padding-block:calc(var(--spacing) * 12)}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
/* ━━━━ 자동 생성 끝 ━━━━ */

/* ━━━━ Pretendard 글꼴 ━━━━
   (2026-09-25 부터 테마 안에 둔다 — 예전에는 jsDelivr CDN 의
   pretendard@v1.3.9 dynamic-subset CSS 를 <link> 로 받았다.)

   배포형 테마라 사용자 서버가 CDN 에 닿지 못해도(사내망 · 폐쇄망) 글꼴이 같아야
   한다. 그래서 글꼴 파일 92개를 fonts/pretendard-1.3.9/ 에 두고, CDN 판과 같은
   @font-face 를 여기 적는다. 내용은 CDN 판과 똑같고 url() 경로만 테마 안을
   가리킨다. 브라우저는 unicode-range 로 화면에 나오는 글자의 조각만 받는다.

   판을 올리면 폴더 이름(pretendard-판)을 바꿔 캐시가 새 파일을 받게 하고, 이 절의
   경로를 함께 고친다. 라이선스(SIL OFL 1.1) 전문은 그 폴더의 LICENSE.txt,
   고지는 THIRD-PARTY-NOTICES.md. 아래는 원본 CSS 머리의 저작권 고지 그대로다. */

/*
Copyright (c) 2021 Kil Hyung-jin, with Reserved Font Name Pretendard.
https://github.com/orioncactus/pretendard

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
*/
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.0.woff2) format('woff2-variations'); unicode-range: U+f9ca-fa0b, U+ff03-ff05, U+ff07, U+ff0a-ff0b, U+ff0d-ff19, U+ff1b, U+ff1d, U+ff20-ff5b, U+ff5d, U+ffe0-ffe3, U+ffe5-ffe6; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.1.woff2) format('woff2-variations'); unicode-range: U+d723-d728, U+d72a-d733, U+d735-d748, U+d74a-d74f, U+d752-d753, U+d755-d757, U+d75a-d75f, U+d762-d764, U+d766-d768, U+d76a-d76b, U+d76d-d76f, U+d771-d787, U+d789-d78b, U+d78d-d78f, U+d791-d797, U+d79a, U+d79c, U+d79e-d7a3, U+f900-f909, U+f90b-f92e; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.2.woff2) format('woff2-variations'); unicode-range: U+d679-d68b, U+d68e-d69e, U+d6a0, U+d6a2-d6a7, U+d6a9-d6c3, U+d6c6-d6c7, U+d6c9-d6cb, U+d6cd-d6d3, U+d6d5-d6d6, U+d6d8-d6e3, U+d6e5-d6e7, U+d6e9-d6fb, U+d6fd-d717, U+d719-d71f, U+d721-d722; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.3.woff2) format('woff2-variations'); unicode-range: U+d5bc-d5c7, U+d5ca-d5cb, U+d5cd-d5cf, U+d5d1-d5d7, U+d5d9-d5da, U+d5dc, U+d5de-d5e3, U+d5e6-d5e7, U+d5e9-d5eb, U+d5ed-d5f6, U+d5f8, U+d5fa-d5ff, U+d602-d603, U+d605-d607, U+d609-d60f, U+d612-d613, U+d616-d61b, U+d61d-d637, U+d63a-d63b, U+d63d-d63f, U+d641-d647, U+d64a-d64c, U+d64e-d653, U+d656-d657, U+d659-d65b, U+d65d-d666, U+d668, U+d66a-d678; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.4.woff2) format('woff2-variations'); unicode-range: U+d507, U+d509-d50b, U+d50d-d513, U+d515-d53b, U+d53e-d53f, U+d541-d543, U+d545-d54c, U+d54e, U+d550, U+d552-d557, U+d55a-d55b, U+d55d-d55f, U+d561-d564, U+d566-d567, U+d56a, U+d56c, U+d56e-d573, U+d576-d577, U+d579-d583, U+d585-d586, U+d58a-d5a4, U+d5a6-d5bb; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.5.woff2) format('woff2-variations'); unicode-range: U+d464-d477, U+d47a-d47b, U+d47d-d47f, U+d481-d487, U+d489-d48a, U+d48c, U+d48e-d4e7, U+d4e9-d503, U+d505-d506; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.6.woff2) format('woff2-variations'); unicode-range: U+d3bf-d3c7, U+d3ca-d3cf, U+d3d1-d3eb, U+d3ee-d3ef, U+d3f1-d3f3, U+d3f5-d3fb, U+d3fd-d400, U+d402-d45b, U+d45d-d463; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.7.woff2) format('woff2-variations'); unicode-range: U+d2ff, U+d302-d304, U+d306-d30b, U+d30f, U+d311-d313, U+d315-d31b, U+d31e, U+d322-d324, U+d326-d327, U+d32a-d32b, U+d32d-d32f, U+d331-d337, U+d339-d33c, U+d33e-d37b, U+d37e-d37f, U+d381-d383, U+d385-d38b, U+d38e-d390, U+d392-d397, U+d39a-d39b, U+d39d-d39f, U+d3a1-d3a7, U+d3a9-d3aa, U+d3ac, U+d3ae-d3b3, U+d3b5-d3b7, U+d3b9-d3bb, U+d3bd-d3be; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.8.woff2) format('woff2-variations'); unicode-range: U+d257-d27f, U+d281-d29b, U+d29d-d29f, U+d2a1-d2ab, U+d2ad-d2b7, U+d2ba-d2bb, U+d2bd-d2bf, U+d2c1-d2c7, U+d2c9-d2ef, U+d2f2-d2f3, U+d2f5-d2f7, U+d2f9-d2fe; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.9.woff2) format('woff2-variations'); unicode-range: U+d1b4, U+d1b6-d1f3, U+d1f5-d22b, U+d22e-d22f, U+d231-d233, U+d235-d23b, U+d23d-d240, U+d242-d256; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.10.woff2) format('woff2-variations'); unicode-range: U+d105-d12f, U+d132-d133, U+d135-d137, U+d139-d13f, U+d141-d142, U+d144, U+d146-d14b, U+d14e-d14f, U+d151-d153, U+d155-d15b, U+d15e-d187, U+d189-d19f, U+d1a2-d1a3, U+d1a5-d1a7, U+d1a9-d1af, U+d1b2-d1b3; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.11.woff2) format('woff2-variations'); unicode-range: U+d04b-d04f, U+d051-d057, U+d059-d06b, U+d06d-d06f, U+d071-d073, U+d075-d07b, U+d07e-d0a3, U+d0a6-d0a7, U+d0a9-d0ab, U+d0ad-d0b3, U+d0b6, U+d0b8, U+d0ba-d0bf, U+d0c2-d0c3, U+d0c5-d0c7, U+d0c9-d0cf, U+d0d2, U+d0d6-d0db, U+d0de-d0df, U+d0e1-d0e3, U+d0e5-d0eb, U+d0ee-d0f0, U+d0f2-d104; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.12.woff2) format('woff2-variations'); unicode-range: U+cfa2-cfc3, U+cfc5-cfdf, U+cfe2-cfe3, U+cfe5-cfe7, U+cfe9-cff4, U+cff6-cffb, U+cffd-cfff, U+d001-d003, U+d005-d017, U+d019-d033, U+d036-d037, U+d039-d03b, U+d03d-d04a; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.13.woff2) format('woff2-variations'); unicode-range: U+cef0-cef3, U+cef6, U+cef9-ceff, U+cf01-cf03, U+cf05-cf07, U+cf09-cf0f, U+cf11-cf12, U+cf14-cf1b, U+cf1d-cf1f, U+cf21-cf2f, U+cf31-cf53, U+cf56-cf57, U+cf59-cf5b, U+cf5d-cf63, U+cf66, U+cf68, U+cf6a-cf6f, U+cf71-cf84, U+cf86-cf8b, U+cf8d-cfa1; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.14.woff2) format('woff2-variations'); unicode-range: U+ce3c-ce57, U+ce5a-ce5b, U+ce5d-ce5f, U+ce61-ce67, U+ce6a, U+ce6c, U+ce6e-ce73, U+ce76-ce77, U+ce79-ce7b, U+ce7d-ce83, U+ce85-ce88, U+ce8a-ce8f, U+ce91-ce93, U+ce95-ce97, U+ce99-ce9f, U+cea2, U+cea4-ceab, U+cead-cee3, U+cee6-cee7, U+cee9-ceeb, U+ceed-ceef; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.15.woff2) format('woff2-variations'); unicode-range: U+cd92-cd93, U+cd96-cd97, U+cd99-cd9b, U+cd9d-cda3, U+cda6-cda8, U+cdaa-cdaf, U+cdb1-cdc3, U+cdc5-cdcb, U+cdcd-cde7, U+cde9-ce03, U+ce05-ce1f, U+ce22-ce34, U+ce36-ce3b; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.16.woff2) format('woff2-variations'); unicode-range: U+ccef-cd07, U+cd0a-cd0b, U+cd0d-cd1a, U+cd1c, U+cd1e-cd2b, U+cd2d-cd5b, U+cd5d-cd77, U+cd79-cd91; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.17.woff2) format('woff2-variations'); unicode-range: U+cc3f-cc43, U+cc46-cc47, U+cc49-cc4b, U+cc4d-cc53, U+cc55-cc58, U+cc5a-cc5f, U+cc61-cc97, U+cc9a-cc9b, U+cc9d-cc9f, U+cca1-cca7, U+ccaa, U+ccac, U+ccae-ccb3, U+ccb6-ccb7, U+ccb9-ccbb, U+ccbd-cccf, U+ccd1-cce3, U+cce5-ccee; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.18.woff2) format('woff2-variations'); unicode-range: U+cb91-cbd3, U+cbd5-cbe3, U+cbe5-cc0b, U+cc0e-cc0f, U+cc11-cc13, U+cc15-cc1b, U+cc1d-cc20, U+cc23-cc27, U+cc2a-cc2b, U+cc2d, U+cc2f, U+cc31-cc37, U+cc3a, U+cc3c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.19.woff2) format('woff2-variations'); unicode-range: U+caf4-cb47, U+cb4a-cb90; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.20.woff2) format('woff2-variations'); unicode-range: U+ca4a-ca4b, U+ca4e-ca4f, U+ca51-ca53, U+ca55-ca5b, U+ca5d-ca60, U+ca62-ca83, U+ca85-cabb, U+cabe-cabf, U+cac1-cac3, U+cac5-cacb, U+cacd-cad0, U+cad2, U+cad4-cad8, U+cada-caf3; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.21.woff2) format('woff2-variations'); unicode-range: U+c996-c997, U+c99a-c99c, U+c99e-c9bf, U+c9c2-c9c3, U+c9c5-c9c7, U+c9c9-c9cf, U+c9d2, U+c9d4, U+c9d7-c9d8, U+c9db, U+c9de-c9df, U+c9e1-c9e3, U+c9e5-c9e6, U+c9e8-c9eb, U+c9ee-c9f0, U+c9f2-c9f7, U+c9f9-ca0b, U+ca0d-ca28, U+ca2a-ca49; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.22.woff2) format('woff2-variations'); unicode-range: U+c8e9-c8f4, U+c8f6-c8fb, U+c8fe-c8ff, U+c901-c903, U+c905-c90b, U+c90e-c910, U+c912-c917, U+c919-c92b, U+c92d-c94f, U+c951-c953, U+c955-c96b, U+c96d-c973, U+c975-c987, U+c98a-c98b, U+c98d-c98f, U+c991-c995; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.23.woff2) format('woff2-variations'); unicode-range: U+c841-c84b, U+c84d-c86f, U+c872-c873, U+c875-c877, U+c879-c87f, U+c882-c884, U+c887-c88a, U+c88d-c8c3, U+c8c5-c8df, U+c8e1-c8e8; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.24.woff2) format('woff2-variations'); unicode-range: U+c779-c77b, U+c77e-c782, U+c786, U+c78b, U+c78d, U+c78f, U+c792-c793, U+c795, U+c797, U+c799-c79f, U+c7a2, U+c7a7-c7ab, U+c7ae-c7bb, U+c7bd-c7c0, U+c7c2-c7c7, U+c7c9-c7dc, U+c7de-c7ff, U+c802-c803, U+c805-c807, U+c809, U+c80b-c80f, U+c812, U+c814, U+c817-c81b, U+c81e-c81f, U+c821-c823, U+c825-c82e, U+c830-c837, U+c839-c83b, U+c83d-c840; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.25.woff2) format('woff2-variations'); unicode-range: U+c6bb-c6bf, U+c6c2, U+c6c4, U+c6c6-c6cb, U+c6ce-c6cf, U+c6d1-c6d3, U+c6d5-c6db, U+c6dd-c6df, U+c6e1-c6e7, U+c6e9-c6eb, U+c6ed-c6ef, U+c6f1-c6f8, U+c6fa-c703, U+c705-c707, U+c709-c70b, U+c70d-c716, U+c718, U+c71a-c71f, U+c722-c723, U+c725-c727, U+c729-c734, U+c736-c73b, U+c73e-c73f, U+c741-c743, U+c745-c74b, U+c74e-c750, U+c752-c757, U+c759-c773, U+c776-c777; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.26.woff2) format('woff2-variations'); unicode-range: U+c5f5-c5fb, U+c5fe, U+c602-c605, U+c607, U+c609-c60f, U+c611-c61a, U+c61c-c623, U+c626-c627, U+c629-c62b, U+c62d, U+c62f-c632, U+c636, U+c638, U+c63a-c63f, U+c642-c643, U+c645-c647, U+c649-c652, U+c656-c65b, U+c65d-c65f, U+c661-c663, U+c665-c677, U+c679-c67b, U+c67d-c693, U+c696-c697, U+c699-c69b, U+c69d-c6a3, U+c6a6, U+c6a8, U+c6aa-c6af, U+c6b2-c6b3, U+c6b5-c6b7, U+c6b9-c6ba; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.27.woff2) format('woff2-variations'); unicode-range: U+c517-c527, U+c52a-c52b, U+c52d-c52f, U+c531-c538, U+c53a, U+c53c, U+c53e-c543, U+c546-c547, U+c54b, U+c54d-c552, U+c556, U+c55a-c55b, U+c55d, U+c55f, U+c562-c563, U+c565-c567, U+c569-c56f, U+c572, U+c574, U+c576-c57b, U+c57e-c57f, U+c581-c583, U+c585-c586, U+c588-c58b, U+c58e, U+c590, U+c592-c596, U+c599-c5b3, U+c5b6-c5b7, U+c5ba, U+c5be-c5c3, U+c5ca-c5cb, U+c5cd, U+c5cf, U+c5d2-c5d3, U+c5d5-c5d7, U+c5d9-c5df, U+c5e1-c5e2, U+c5e4, U+c5e6-c5eb, U+c5ef, U+c5f1-c5f3; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.28.woff2) format('woff2-variations'); unicode-range: U+c475-c4ef, U+c4f2-c4f3, U+c4f5-c4f7, U+c4f9-c4ff, U+c502-c50b, U+c50d-c516; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.29.woff2) format('woff2-variations'); unicode-range: U+c3d0-c3d7, U+c3da-c3db, U+c3dd-c3de, U+c3e1-c3ec, U+c3ee-c3f3, U+c3f5-c42b, U+c42d-c463, U+c466-c474; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.30.woff2) format('woff2-variations'); unicode-range: U+c32b-c367, U+c36a-c36b, U+c36d-c36f, U+c371-c377, U+c37a-c37b, U+c37e-c383, U+c385-c387, U+c389-c3cf; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.31.woff2) format('woff2-variations'); unicode-range: U+c26a-c26b, U+c26d-c26f, U+c271-c273, U+c275-c27b, U+c27e-c287, U+c289-c28f, U+c291-c297, U+c299-c29a, U+c29c-c2a3, U+c2a5-c2a7, U+c2a9-c2ab, U+c2ad-c2b3, U+c2b6, U+c2b8, U+c2ba-c2bb, U+c2bd-c2db, U+c2de-c2df, U+c2e1-c2e2, U+c2e5-c2ea, U+c2ee, U+c2f0, U+c2f2-c2f5, U+c2f7, U+c2fa-c2fb, U+c2fd-c2ff, U+c301-c307, U+c309-c30c, U+c30e-c312, U+c315-c323, U+c325-c328, U+c32a; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.32.woff2) format('woff2-variations'); unicode-range: U+c1bc-c1c3, U+c1c5-c1df, U+c1e1-c1fb, U+c1fd-c203, U+c205-c20c, U+c20e, U+c210-c217, U+c21a-c21b, U+c21d-c21e, U+c221-c227, U+c229-c22a, U+c22c, U+c22e, U+c230, U+c233-c24f, U+c251-c257, U+c259-c269; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.33.woff2) format('woff2-variations'); unicode-range: U+c101-c11b, U+c11f, U+c121-c123, U+c125-c12b, U+c12e, U+c132-c137, U+c13a-c13b, U+c13d-c13f, U+c141-c147, U+c14a, U+c14c-c153, U+c155-c157, U+c159-c15b, U+c15d-c166, U+c169-c16f, U+c171-c177, U+c179-c18b, U+c18e-c18f, U+c191-c193, U+c195-c19b, U+c19d-c19e, U+c1a0, U+c1a2-c1a4, U+c1a6-c1bb; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.34.woff2) format('woff2-variations'); unicode-range: U+c049-c057, U+c059-c05b, U+c05d-c05f, U+c061-c067, U+c069-c08f, U+c091-c0ab, U+c0ae-c0af, U+c0b1-c0b3, U+c0b5, U+c0b7-c0bb, U+c0be, U+c0c2-c0c7, U+c0ca-c0cb, U+c0cd-c0cf, U+c0d1-c0d7, U+c0d9-c0da, U+c0dc, U+c0de-c0e3, U+c0e5-c0eb, U+c0ed-c0f3, U+c0f6, U+c0f8, U+c0fa-c0ff; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.35.woff2) format('woff2-variations'); unicode-range: U+bfa7-bfaf, U+bfb1-bfc4, U+bfc6-bfcb, U+bfce-bfcf, U+bfd1-bfd3, U+bfd5-bfdb, U+bfdd-c048; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.36.woff2) format('woff2-variations'); unicode-range: U+bf07, U+bf09-bf3f, U+bf41-bf4f, U+bf52-bf54, U+bf56-bfa6; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.37.woff2) format('woff2-variations'); unicode-range: U+be56, U+be58, U+be5c-be5f, U+be62-be63, U+be65-be67, U+be69-be74, U+be76-be7b, U+be7e-be7f, U+be81-be8e, U+be90, U+be92-bea7, U+bea9-becf, U+bed2-bed3, U+bed5-bed6, U+bed9-bee3, U+bee6-bf06; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.38.woff2) format('woff2-variations'); unicode-range: U+bdb0-bdd3, U+bdd5-bdef, U+bdf1-be0b, U+be0d-be0f, U+be11-be13, U+be15-be43, U+be46-be47, U+be49-be4b, U+be4d-be53; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.39.woff2) format('woff2-variations'); unicode-range: U+bd03, U+bd06, U+bd08, U+bd0a-bd0f, U+bd11-bd22, U+bd25-bd47, U+bd49-bd58, U+bd5a-bd7f, U+bd82-bd83, U+bd85-bd87, U+bd8a-bd8f, U+bd91-bd92, U+bd94, U+bd96-bd98, U+bd9a-bdaf; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.40.woff2) format('woff2-variations'); unicode-range: U+bc4e-bc83, U+bc86-bc87, U+bc89-bc8b, U+bc8d-bc93, U+bc96, U+bc98, U+bc9b-bc9f, U+bca2-bca3, U+bca5-bca7, U+bca9-bcb2, U+bcb4-bcbb, U+bcbe-bcbf, U+bcc1-bcc3, U+bcc5-bccc, U+bcce-bcd0, U+bcd2-bcd4, U+bcd6-bcf3, U+bcf7, U+bcf9-bcfb, U+bcfd-bd02; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.41.woff2) format('woff2-variations'); unicode-range: U+bb90-bba3, U+bba5-bbab, U+bbad-bbbf, U+bbc1-bbf7, U+bbfa-bbfb, U+bbfd-bbfe, U+bc01-bc07, U+bc09-bc0a, U+bc0e, U+bc10, U+bc12-bc13, U+bc17, U+bc19-bc1a, U+bc1e, U+bc20-bc23, U+bc26, U+bc28, U+bc2a-bc2c, U+bc2e-bc2f, U+bc32-bc33, U+bc35-bc37, U+bc39-bc3f, U+bc41-bc42, U+bc44, U+bc46-bc48, U+bc4a-bc4d; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.42.woff2) format('woff2-variations'); unicode-range: U+bae6-bafb, U+bafd-bb17, U+bb19-bb33, U+bb37, U+bb39-bb3a, U+bb3d-bb43, U+bb45-bb46, U+bb48, U+bb4a-bb4f, U+bb51-bb53, U+bb55-bb57, U+bb59-bb62, U+bb64-bb8f; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.43.woff2) format('woff2-variations'); unicode-range: U+ba30-ba37, U+ba3a-ba3b, U+ba3d-ba3f, U+ba41-ba47, U+ba49-ba4a, U+ba4c, U+ba4e-ba53, U+ba56-ba57, U+ba59-ba5b, U+ba5d-ba63, U+ba65-ba66, U+ba68-ba6f, U+ba71-ba73, U+ba75-ba77, U+ba79-ba84, U+ba86, U+ba88-baa7, U+baaa, U+baad-baaf, U+bab1-bab7, U+baba, U+babc, U+babe-bae5; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.44.woff2) format('woff2-variations'); unicode-range: U+b96e-b973, U+b976-b977, U+b979-b97b, U+b97d-b983, U+b986, U+b988, U+b98a-b98d, U+b98f-b9ab, U+b9ae-b9af, U+b9b1-b9b3, U+b9b5-b9bb, U+b9be, U+b9c0, U+b9c2-b9c7, U+b9ca-b9cb, U+b9cd, U+b9d2-b9d7, U+b9da, U+b9dc, U+b9df-b9e0, U+b9e2, U+b9e6-b9e7, U+b9e9-b9f3, U+b9f6, U+b9f8, U+b9fb-ba2f; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.45.woff2) format('woff2-variations'); unicode-range: U+b8bf-b8cb, U+b8cd-b8e0, U+b8e2-b8e7, U+b8ea-b8eb, U+b8ed-b8ef, U+b8f1-b8f7, U+b8fa, U+b8fc, U+b8fe-b903, U+b905-b917, U+b919-b91f, U+b921-b93b, U+b93d-b957, U+b95a-b95b, U+b95d-b95f, U+b961-b967, U+b969-b96c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.46.woff2) format('woff2-variations'); unicode-range: U+b80d-b80f, U+b811-b817, U+b81a, U+b81c-b823, U+b826-b827, U+b829-b82b, U+b82d-b833, U+b836, U+b83a-b83f, U+b841-b85b, U+b85e-b85f, U+b861-b863, U+b865-b86b, U+b86e, U+b870, U+b872-b8af, U+b8b1-b8be; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.47.woff2) format('woff2-variations'); unicode-range: U+b74d-b75f, U+b761-b763, U+b765-b774, U+b776-b77b, U+b77e-b77f, U+b781-b783, U+b785-b78b, U+b78e, U+b792-b796, U+b79a-b79b, U+b79d-b7a7, U+b7aa, U+b7ae-b7b3, U+b7b6-b7c8, U+b7ca-b7eb, U+b7ee-b7ef, U+b7f1-b7f3, U+b7f5-b7fb, U+b7fe, U+b802-b806, U+b80a-b80b; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.48.woff2) format('woff2-variations'); unicode-range: U+b6a7-b6aa, U+b6ac-b6b0, U+b6b2-b6ef, U+b6f1-b727, U+b72a-b72b, U+b72d-b72e, U+b731-b737, U+b739-b73a, U+b73c-b743, U+b745-b74c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.49.woff2) format('woff2-variations'); unicode-range: U+b605-b60f, U+b612-b617, U+b619-b624, U+b626-b69b, U+b69e-b6a3, U+b6a5-b6a6; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.50.woff2) format('woff2-variations'); unicode-range: U+b55f, U+b562-b583, U+b585-b59f, U+b5a2-b5a3, U+b5a5-b5a7, U+b5a9-b5b2, U+b5b5-b5ba, U+b5bd-b604; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.51.woff2) format('woff2-variations'); unicode-range: U+b4a5-b4b6, U+b4b8-b4bf, U+b4c1-b4c7, U+b4c9-b4db, U+b4de-b4df, U+b4e1-b4e2, U+b4e5-b4eb, U+b4ee, U+b4f0, U+b4f2-b513, U+b516-b517, U+b519-b51a, U+b51d-b523, U+b526, U+b528, U+b52b-b52f, U+b532-b533, U+b535-b537, U+b539-b53f, U+b541-b544, U+b546-b54b, U+b54d-b54f, U+b551-b55b, U+b55d-b55e; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.52.woff2) format('woff2-variations'); unicode-range: U+b3f8-b3fb, U+b3fd-b40f, U+b411-b417, U+b419-b41b, U+b41d-b41f, U+b421-b427, U+b42a-b42b, U+b42d-b44f, U+b452-b453, U+b455-b457, U+b459-b45f, U+b462-b464, U+b466-b46b, U+b46d-b47f, U+b481-b4a3; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.53.woff2) format('woff2-variations'); unicode-range: U+b342-b353, U+b356-b357, U+b359-b35b, U+b35d-b35e, U+b360-b363, U+b366, U+b368, U+b36a-b36d, U+b36f, U+b372-b373, U+b375-b377, U+b379-b37f, U+b381-b382, U+b384, U+b386-b38b, U+b38d-b3c3, U+b3c6-b3c7, U+b3c9-b3ca, U+b3cd-b3d3, U+b3d6, U+b3d8, U+b3da-b3f7; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.54.woff2) format('woff2-variations'); unicode-range: U+b27c-b283, U+b285-b28f, U+b292-b293, U+b295-b297, U+b29a-b29f, U+b2a1-b2a4, U+b2a7-b2a9, U+b2ab, U+b2ad-b2c7, U+b2ca-b2cb, U+b2cd-b2cf, U+b2d1-b2d7, U+b2da, U+b2dc, U+b2de-b2e3, U+b2e7, U+b2e9-b2ea, U+b2ef-b2f3, U+b2f6, U+b2f8, U+b2fa-b2fb, U+b2fd-b2fe, U+b302-b303, U+b305-b307, U+b309-b30f, U+b312, U+b316-b31b, U+b31d-b341; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.55.woff2) format('woff2-variations'); unicode-range: U+b1d6-b1e7, U+b1e9-b1fc, U+b1fe-b203, U+b206-b207, U+b209-b20b, U+b20d-b213, U+b216-b21f, U+b221-b257, U+b259-b273, U+b275-b27b; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.56.woff2) format('woff2-variations'); unicode-range: U+b120-b122, U+b126-b127, U+b129-b12b, U+b12d-b133, U+b136, U+b138, U+b13a-b13f, U+b142-b143, U+b145-b14f, U+b151-b153, U+b156-b157, U+b159-b177, U+b17a-b17b, U+b17d-b17f, U+b181-b187, U+b189-b18c, U+b18e-b191, U+b195-b1a7, U+b1a9-b1cb, U+b1cd-b1d5; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.57.woff2) format('woff2-variations'); unicode-range: U+b05f-b07b, U+b07e-b07f, U+b081-b083, U+b085-b08b, U+b08d-b097, U+b09b, U+b09d-b09f, U+b0a2-b0a7, U+b0aa, U+b0b0, U+b0b2, U+b0b6-b0b7, U+b0b9-b0bb, U+b0bd-b0c3, U+b0c6-b0c7, U+b0ca-b0cf, U+b0d1-b0df, U+b0e1-b0e4, U+b0e6-b107, U+b10a-b10b, U+b10d-b10f, U+b111-b112, U+b114-b117, U+b119-b11a, U+b11c-b11f; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.58.woff2) format('woff2-variations'); unicode-range: U+afac-afb7, U+afba-afbb, U+afbd-afbf, U+afc1-afc6, U+afca-afcc, U+afce-afd3, U+afd5-afe7, U+afe9-afef, U+aff1-b00b, U+b00d-b00f, U+b011-b013, U+b015-b01b, U+b01d-b027, U+b029-b043, U+b045-b047, U+b049, U+b04b, U+b04d-b052, U+b055-b056, U+b058-b05c, U+b05e; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.59.woff2) format('woff2-variations'); unicode-range: U+af03-af07, U+af09-af2b, U+af2e-af33, U+af35-af3b, U+af3e-af40, U+af44-af47, U+af4a-af5c, U+af5e-af63, U+af65-af7f, U+af81-afab; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.60.woff2) format('woff2-variations'); unicode-range: U+ae56-ae5b, U+ae5e-ae60, U+ae62-ae64, U+ae66-ae67, U+ae69-ae6b, U+ae6d-ae83, U+ae85-aebb, U+aebf, U+aec1-aec3, U+aec5-aecb, U+aece, U+aed0, U+aed2-aed7, U+aed9-aef3, U+aef5-af02; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.61.woff2) format('woff2-variations'); unicode-range: U+ad9c-ada3, U+ada5-adbf, U+adc1-adc3, U+adc5-adc7, U+adc9-add2, U+add4-addb, U+addd-addf, U+ade1-ade3, U+ade5-adf7, U+adfa-adfb, U+adfd-adff, U+ae02-ae07, U+ae0a, U+ae0c, U+ae0e-ae13, U+ae15-ae2f, U+ae31-ae33, U+ae35-ae37, U+ae39-ae3f, U+ae42, U+ae44, U+ae46-ae49, U+ae4b, U+ae4f, U+ae51-ae53, U+ae55; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.62.woff2) format('woff2-variations'); unicode-range: U+ace2-ace3, U+ace5-ace6, U+ace9-acef, U+acf2, U+acf4, U+acf7-acfb, U+acfe-acff, U+ad01-ad03, U+ad05-ad0b, U+ad0d-ad10, U+ad12-ad1b, U+ad1d-ad33, U+ad35-ad48, U+ad4a-ad4f, U+ad51-ad6b, U+ad6e-ad6f, U+ad71-ad72, U+ad77-ad7c, U+ad7e, U+ad80, U+ad82-ad87, U+ad89-ad8b, U+ad8d-ad8f, U+ad91-ad9b; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.63.woff2) format('woff2-variations'); unicode-range: U+ac25-ac2c, U+ac2e, U+ac30, U+ac32-ac37, U+ac39-ac3f, U+ac41-ac4c, U+ac4e-ac6f, U+ac72-ac73, U+ac75-ac76, U+ac79-ac7f, U+ac82, U+ac84-ac88, U+ac8a-ac8b, U+ac8d-ac8f, U+ac91-ac93, U+ac95-ac9b, U+ac9d-ac9e, U+aca1-aca7, U+acab, U+acad-acaf, U+acb1-acb7, U+acba-acbb, U+acbe-acc0, U+acc2-acc3, U+acc5-acdf; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.64.woff2) format('woff2-variations'); unicode-range: U+99df, U+99ed, U+99f1, U+99ff, U+9a01, U+9a08, U+9a0e-9a0f, U+9a19, U+9a2b, U+9a30, U+9a36-9a37, U+9a40, U+9a43, U+9a45, U+9a4d, U+9a55, U+9a57, U+9a5a-9a5b, U+9a5f, U+9a62, U+9a65, U+9a69-9a6a, U+9aa8, U+9ab8, U+9ad3, U+9ae5, U+9aee, U+9b1a, U+9b27, U+9b2a, U+9b31, U+9b3c, U+9b41-9b45, U+9b4f, U+9b54, U+9b5a, U+9b6f, U+9b8e, U+9b91, U+9b9f, U+9bab, U+9bae, U+9bc9, U+9bd6, U+9be4, U+9be8, U+9c0d, U+9c10, U+9c12, U+9c15, U+9c25, U+9c32, U+9c3b, U+9c47, U+9c49, U+9c57, U+9ce5, U+9ce7, U+9ce9, U+9cf3-9cf4, U+9cf6, U+9d09, U+9d1b, U+9d26, U+9d28, U+9d3b, U+9d51, U+9d5d, U+9d60-9d61, U+9d6c, U+9d72, U+9da9, U+9daf, U+9db4, U+9dc4, U+9dd7, U+9df2, U+9df8-9dfa, U+9e1a, U+9e1e, U+9e75, U+9e79, U+9e7d, U+9e7f, U+9e92-9e93, U+9e97, U+9e9d, U+9e9f, U+9ea5, U+9eb4-9eb5, U+9ebb, U+9ebe, U+9ec3, U+9ecd-9ece, U+9ed4, U+9ed8, U+9edb-9edc, U+9ede, U+9ee8, U+9ef4, U+9f07-9f08, U+9f0e, U+9f13, U+9f20, U+9f3b, U+9f4a-9f4b, U+9f4e, U+9f52, U+9f5f, U+9f61, U+9f67, U+9f6a, U+9f6c, U+9f77, U+9f8d, U+9f90, U+9f95, U+9f9c, U+ac02-ac03, U+ac05-ac06, U+ac09-ac0f, U+ac17-ac18, U+ac1b, U+ac1e-ac1f, U+ac21-ac23; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.65.woff2) format('woff2-variations'); unicode-range: U+338c-339c, U+339f-33a0, U+33a2-33cb, U+33cf-33d0, U+33d3, U+33d6, U+33d8, U+33db-33dd, U+4e01, U+4e03, U+4e07-4e08, U+4e11, U+4e14-4e15, U+4e18-4e19, U+4e1e, U+4e32, U+4e38-4e39, U+4e42-4e43, U+4e45, U+4e4d-4e4f, U+4e56, U+4e58-4e59, U+4e5d-4e5e, U+4e6b, U+4e6d, U+4e73, U+4e76-4e77, U+4e7e, U+4e82, U+4e86, U+4e88, U+4e8e, U+4e90-4e92, U+4e94-4e95, U+4e98, U+4e9b, U+4e9e, U+4ea1-4ea2, U+4ea4-4ea6, U+4ea8, U+4eab, U+4ead-4eae, U+4eb6, U+4ec0-4ec1, U+4ec4, U+4ec7, U+4ecb, U+4ecd, U+4ed4-4ed5, U+4ed7-4ed9, U+4edd, U+4edf, U+4ee4, U+4ef0, U+4ef2, U+4ef6-4ef7, U+4efb, U+4f01, U+4f09, U+4f0b, U+4f0d-4f11, U+4f2f, U+4f34, U+4f36, U+4f38, U+4f3a, U+4f3c-4f3d; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.66.woff2) format('woff2-variations'); unicode-range: U+3136, U+3138, U+313a-3140, U+3143-3144, U+3150, U+3152, U+3154-3156, U+3158-315b, U+315d-315f, U+3162, U+3164-318c, U+318e, U+3200-321b, U+3231, U+3239, U+3251-325a, U+3260-327b, U+327e-327f, U+328a-3290, U+3294, U+329e, U+32a5, U+3380-3384, U+3388-338b; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.67.woff2) format('woff2-variations'); unicode-range: U+2f7d, U+2f7f-2f8b, U+2f8e-2f90, U+2f92-2f97, U+2f99-2fa0, U+2fa2-2fa3, U+2fa5-2fa9, U+2fac-2fb1, U+2fb3-2fbc, U+2fc1-2fca, U+2fcd-2fd4, U+3003, U+3012-3019, U+301c, U+301e-3020, U+3036, U+3041, U+3043, U+3045, U+3047, U+3049, U+304e, U+3050, U+3052, U+3056, U+305a, U+305c, U+305e, U+3062, U+3065, U+306c, U+3070-307d, U+3080, U+3085, U+3087, U+308e, U+3090-3091, U+30a1, U+30a5, U+30a9, U+30ae, U+30b1-30b2, U+30b4, U+30b6, U+30bc-30be, U+30c2, U+30c5, U+30cc, U+30d2, U+30d4, U+30d8-30dd, U+30e4, U+30e6, U+30e8, U+30ee, U+30f0-30f2, U+30f4-30f6, U+3133, U+3135; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.68.woff2) format('woff2-variations'); unicode-range: U+2541-254b, U+25a4-25a9, U+25b1, U+25b5, U+25b9, U+25bf, U+25c1, U+25c3, U+25c9-25ca, U+25cc, U+25ce, U+25d0-25d1, U+25e6, U+25ef, U+260f, U+261d, U+261f, U+262f, U+2660, U+2664, U+2667-2669, U+266d, U+266f, U+2716, U+271a, U+273d, U+2756, U+2776-277f, U+278a-2793, U+2963, U+2965, U+2ac5-2ac6, U+2acb-2acc, U+2f00, U+2f04, U+2f06, U+2f08, U+2f0a-2f0b, U+2f11-2f12, U+2f14, U+2f17-2f18, U+2f1c-2f1d, U+2f1f-2f20, U+2f23-2f26, U+2f28-2f29, U+2f2b, U+2f2d, U+2f2f-2f32, U+2f38, U+2f3c-2f40, U+2f42-2f4c, U+2f4f-2f52, U+2f54-2f58, U+2f5a-2f66, U+2f69-2f70, U+2f72-2f76, U+2f78, U+2f7a-2f7c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.69.woff2) format('woff2-variations'); unicode-range: U+2479-2487, U+249c-24d1, U+24d3-24d7, U+24d9-24e9, U+24eb-24f4, U+2500-2501, U+2503, U+250c-2513, U+2515-2516, U+2518-2540; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.70.woff2) format('woff2-variations'); unicode-range: U+215b-215e, U+2162-2169, U+2170-2179, U+2195-2199, U+21b0-21b4, U+21bc, U+21c0, U+21c4-21c5, U+21cd, U+21cf-21d4, U+21e0-21e3, U+21e6-21e9, U+2200, U+2202-2203, U+2206-2209, U+220b-220c, U+220f, U+2211, U+2213, U+221a, U+221d-2220, U+2222, U+2225-2227, U+2229-222c, U+222e, U+2234-2237, U+223d, U+2243, U+2245, U+2248, U+2250-2253, U+225a, U+2260-2262, U+2264-2267, U+226a-226b, U+226e-2273, U+2276-2277, U+2279-227b, U+2280-2287, U+228a-228b, U+2295-2297, U+22a3-22a5, U+22bb-22bc, U+22ce-22cf, U+22da-22db, U+22ee-22ef, U+2306, U+2312, U+2314, U+2467-2478; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.71.woff2) format('woff2-variations'); unicode-range: U+81-82, U+84, U+a2-a5, U+a7-a8, U+aa, U+ac, U+b1-b3, U+b6, U+b8-ba, U+bc-be, U+c0, U+c2, U+c6-cb, U+ce-d0, U+d4, U+d8-d9, U+db-dc, U+de-df, U+e6, U+eb, U+ee-f0, U+f4, U+f7-f9, U+fb, U+fe-ff, U+111, U+126-127, U+132-133, U+138, U+13f-142, U+149-14b, U+152-153, U+166-167, U+2bc, U+2c7, U+2d0, U+2d8-2d9, U+2db-2dd, U+391-394, U+396-3a1, U+3a3-3a9, U+3b2-3b6, U+3b8, U+3bc, U+3be-3c1, U+3c3-3c9, U+2010, U+2015-2016, U+2018-2019, U+201b, U+201f-2021, U+2025, U+2030, U+2033-2036, U+203c, U+203e, U+2042, U+2074, U+207a-207f, U+2081-2084, U+2109, U+2113, U+2116, U+2121, U+2126, U+212b, U+2153-2154; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.72.woff2) format('woff2-variations'); unicode-range: U+e8, U+2da, U+2160, U+2194, U+3054, U+3058, U+306d, U+3086, U+308d, U+30ac, U+30bb, U+30c4, U+30cd-30ce, U+30e2, U+3132, U+3146, U+3149, U+339d, U+4e3b, U+4f0a, U+4fdd, U+4fe1, U+5409, U+540c, U+5834, U+592a-592b, U+5b9a, U+5dde, U+5e0c, U+5e73, U+5f0f, U+60f3, U+653f, U+661f, U+662f, U+667a, U+683c, U+6b4c, U+6c11, U+767c, U+76ee, U+76f4, U+77f3, U+79d1, U+7a7a, U+7b2c, U+7d22, U+8207, U+8a00, U+8a71, U+9280, U+9580, U+958b, U+96c6, U+9762, U+98df, U+9ed1, U+ac2d, U+adc8, U+add3, U+af48, U+b014, U+b134-b135, U+b158, U+b2aa, U+b35f, U+b6a4, U+b9cf, U+bb63, U+bd23, U+be91, U+c29b, U+c3f4, U+c42c, U+c55c, U+c573, U+c58f, U+c78c, U+c7dd, U+c8f5, U+cad1, U+cc48, U+cf10, U+cf20, U+d03c, U+d07d, U+d2a0, U+d30e, U+d38d, U+d3a8, U+d3c8, U+d5e5, U+d5f9, U+d6e4, U+f90a, U+ff02, U+ff1c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.73.woff2) format('woff2-variations'); unicode-range: U+3b1, U+2466, U+25a1, U+25a3, U+261c, U+3008-3009, U+305b, U+305d, U+3069, U+30a7, U+30ba, U+30cf, U+30ef, U+3151, U+3157, U+4e4b, U+4e5f, U+4e8c, U+4eca, U+4ed6, U+4f5b, U+50cf, U+5149, U+5165, U+5171, U+5229, U+529b, U+5316, U+539f, U+53f2, U+571f, U+5728, U+58eb, U+591c, U+5b78, U+5c11, U+5c55, U+5ddd, U+5e02, U+5fb7, U+60c5, U+610f, U+611f, U+6625, U+66f8, U+6797, U+679c, U+682a, U+6d2a, U+706b, U+7406, U+767b, U+76f8, U+77e5, U+7acb, U+898b, U+8a69, U+8def, U+8fd1, U+901a, U+90e8, U+91cd, U+975e, U+ae14, U+ae6c, U+aec0, U+afc7, U+afc9, U+b01c, U+b028, U+b308, U+b311, U+b314, U+b31c, U+b524, U+b560, U+b764, U+b920, U+b9e3, U+bd48, U+be7d, U+c0db, U+c231, U+c270, U+c2e3, U+c37d, U+c3ed, U+c530, U+c6a5, U+c6dc, U+c7a4, U+c954, U+c974, U+d000, U+d565, U+d667, U+d6c5, U+d79d, U+ff1e; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.74.woff2) format('woff2-variations'); unicode-range: U+131, U+2032, U+2465, U+2642, U+3048, U+3051, U+3083-3084, U+308f, U+30c0, U+30d1, U+30d3, U+30d6, U+30df, U+30e7, U+3153, U+4e16, U+4e8b, U+4ee5, U+5206, U+52a0, U+52d5, U+53e4, U+53ef, U+54c1, U+57ce, U+597d, U+5b8c, U+5ea6, U+5f8c, U+5f97, U+6210, U+6240, U+624b, U+6728, U+6bd4, U+7236, U+7269, U+7279, U+738b, U+7528, U+7530, U+767e, U+798f, U+8005, U+8a18, U+90fd, U+91cc, U+9577, U+9593, U+98a8, U+ac20, U+acf6, U+ad90, U+af5d, U+af80, U+afcd, U+aff0, U+b0a1, U+b0b5, U+b1fd, U+b2fc, U+b380, U+b51b, U+b584, U+b5b3, U+b8fd, U+b93c, U+b9f4, U+bb44, U+bc08, U+bc27, U+bc49, U+be55, U+be64, U+bfb0, U+bfc5, U+c178, U+c21f, U+c314, U+c4f1, U+c58d, U+c664, U+c698, U+c6a7, U+c6c1, U+c9ed, U+cac0, U+cacc, U+cad9, U+ccb5, U+cdcc, U+d0e4, U+d143, U+d320, U+d330, U+d54d, U+ff06, U+ff1f, U+ff5e; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.75.woff2) format('woff2-variations'); unicode-range: U+b4, U+20a9, U+20ac, U+2190, U+24d8, U+2502, U+2514, U+2592, U+25c7-25c8, U+2663, U+3060, U+3064, U+3081, U+3088, U+30a3, U+30a6, U+30aa, U+30b5, U+30c7, U+30ca-30cb, U+30d0, U+30e3, U+30e5, U+339e, U+4e09, U+4eac, U+4f5c, U+5167-5168, U+516c, U+51fa, U+5408, U+540d, U+591a, U+5b57, U+6211, U+65b9, U+660e, U+6642, U+6700, U+6b63, U+6e2f, U+7063, U+7532, U+793e, U+81ea, U+8272, U+82b1, U+897f, U+8eca, U+91ce, U+ac38, U+ad76, U+ae84, U+aecc, U+b07d, U+b0b1, U+b215, U+b2a0, U+b310, U+b3d7, U+b52a, U+b618, U+b775, U+b797, U+bcd5, U+bd59, U+be80, U+bea8, U+bed1, U+bee4-bee5, U+c060, U+c2ef, U+c329, U+c3dc, U+c597, U+c5bd, U+c5e5, U+c69c, U+c9d6, U+ca29, U+ca5c, U+ca84, U+cc39, U+cc3b, U+ce89, U+cee5, U+cf65, U+cf85, U+d058, U+d145, U+d22d, U+d325, U+d37d, U+d3ad, U+d769, U+ff0c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.76.woff2) format('woff2-variations'); unicode-range: U+2161, U+2228, U+2299, U+2464, U+2517, U+2640, U+3042, U+304a, U+3053, U+3061, U+307f, U+3082, U+308c, U+3092, U+30a8, U+30ab, U+30ad, U+30b0, U+30b3, U+30b7, U+30c1, U+30c6, U+30c9, U+30d5, U+30d7, U+30de, U+30e0-30e1, U+30ec-30ed, U+4e0b, U+4e0d, U+4ee3, U+53f0, U+548c, U+5b89, U+5bb6, U+5c0f, U+611b, U+6771, U+6aa2, U+6bcd, U+6c34, U+6cd5, U+6d77, U+767d, U+795e, U+8ecd, U+9999, U+9ad8, U+ac07, U+ac1a, U+ac40, U+ad0c, U+ad88, U+ada4, U+ae01, U+ae65, U+aebd, U+aec4, U+afe8, U+b139, U+b205, U+b383, U+b38c, U+b42c, U+b461, U+b55c, U+b78f, U+b8fb, U+b9f7, U+bafc, U+bc99, U+bed8, U+bfcd, U+c0bf, U+c0f9, U+c167, U+c204, U+c20f, U+c22f, U+c258, U+c298, U+c2bc, U+c388, U+c501, U+c50c, U+c5b9, U+c5ce, U+c641, U+c648, U+c73d, U+ca50, U+ca61, U+cc4c, U+ceac, U+d0d4, U+d5f7, U+d6d7, U+ff1a; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.77.woff2) format('woff2-variations'); unicode-range: U+2103, U+2463, U+25c6, U+25cb, U+266c, U+3001, U+300a, U+3046, U+304c-304d, U+304f, U+3055, U+3059, U+3063, U+3066-3068, U+306f, U+3089, U+30b8, U+30bf, U+314f, U+4e0a, U+570b, U+5730, U+5916, U+5929, U+5c71, U+5e74, U+5fc3, U+601d, U+6027, U+63d0, U+6709, U+6734, U+751f, U+7684, U+82f1, U+9053, U+91d1, U+97f3, U+ac2f, U+ac4d, U+adc4, U+ade4, U+ae41, U+ae4d-ae4e, U+aed1, U+afb9, U+b0e0, U+b299, U+b365, U+b46c, U+b480, U+b4c8, U+b7b4, U+b819, U+b918, U+baab, U+bab9, U+be8f, U+bed7, U+c0ec, U+c19f, U+c1a5, U+c3d9, U+c464, U+c53d, U+c553, U+c570, U+c5cc, U+c633, U+c6a4, U+c7a3, U+c7a6, U+c886, U+c9d9-c9da, U+c9ec, U+ca0c, U+cc21, U+cd1b, U+cd78, U+cdc4, U+cef8, U+cfe4, U+d0a5, U+d0b5, U+d0ec, U+d15d, U+d188, U+d23c, U+d2ac, U+d729, U+d79b, U+ff01, U+ff08-ff09, U+ff5c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.78.woff2) format('woff2-variations'); unicode-range: U+2039-203a, U+223c, U+25b3, U+25b7, U+25bd, U+25cf, U+266a, U+3002, U+300b, U+304b, U+3057, U+305f, U+306a-306b, U+307e, U+308a-308b, U+3093, U+30a2, U+30af, U+30b9, U+30c3, U+30c8, U+30e9-30eb, U+33a1, U+4e00, U+524d, U+5357, U+5b50, U+7121, U+884c, U+9751, U+ac94, U+aebe, U+aecd, U+af08, U+af41, U+af49, U+b010, U+b053, U+b109, U+b11b, U+b128, U+b154, U+b291, U+b2e6, U+b301, U+b385, U+b525, U+b5b4, U+b729, U+b72f, U+b738, U+b7ff, U+b837, U+b975, U+ba67, U+bb47, U+bc1f, U+bd90, U+bfd4, U+c27c, U+c324, U+c379, U+c3e0, U+c465, U+c53b, U+c58c, U+c610, U+c653, U+c6cd, U+c813, U+c82f, U+c999, U+c9e0, U+cac4, U+cad3, U+cbd4, U+cc10, U+cc22, U+ccb8, U+ccbc, U+cda5, U+ce84, U+cea3, U+cf67, U+cfe1, U+d241, U+d30d, U+d31c, U+d391, U+d401, U+d479, U+d5c9, U+d5db, U+d649, U+d6d4; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.79.woff2) format('woff2-variations'); unicode-range: U+b0, U+e9, U+2193, U+2462, U+260e, U+261e, U+300e-300f, U+3044, U+30a4, U+30fb-30fc, U+314d, U+5973, U+6545, U+6708, U+7537, U+ac89, U+ac9c, U+acc1, U+ad04, U+ad75, U+ad7d, U+ae45, U+ae61, U+af42, U+b0ab, U+b0af, U+b0b3, U+b12c, U+b194, U+b1a8, U+b220, U+b258, U+b284, U+b2ff, U+b315, U+b371, U+b3d4-b3d5, U+b460, U+b527, U+b534, U+b810, U+b818, U+b98e, U+ba55, U+bbac, U+bc0b, U+bc40, U+bca1, U+bccd, U+bd93, U+be54, U+be5a, U+bf08, U+bf50, U+bf55, U+bfdc, U+c0c0, U+c0d0, U+c0f4, U+c100, U+c11e, U+c170, U+c20d, U+c274, U+c290, U+c308, U+c369, U+c539, U+c587, U+c5ff, U+c6ec, U+c70c, U+c7ad, U+c7c8, U+c83c, U+c881, U+cb48, U+cc60, U+ce69, U+ce6b, U+ce75, U+cf04, U+cf08, U+cf55, U+cf70, U+cffc, U+d0b7, U+d1a8, U+d2c8, U+d384, U+d47c, U+d48b, U+d5dd, U+d5e8, U+d720, U+d759, U+f981; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.80.woff2) format('woff2-variations'); unicode-range: U+e0, U+e2, U+395, U+3b7, U+3ba, U+2460-2461, U+25a0, U+3010-3011, U+306e, U+30f3, U+314a, U+314c, U+5927, U+65b0, U+7e41, U+97d3, U+9ad4, U+ad49, U+ae0b, U+ae0d, U+ae43, U+ae5d, U+aecf, U+af3c, U+af64, U+afd4, U+b080, U+b084, U+b0c5, U+b10c, U+b1e8, U+b2ac, U+b36e, U+b451, U+b515, U+b540, U+b561, U+b6ab, U+b6b1, U+b72c, U+b730, U+b744, U+b800, U+b8ec, U+b8f0, U+b904, U+b968, U+b96d, U+b987, U+b9d9, U+bb36, U+bb49, U+bc2d, U+bc43, U+bcf6, U+bd89, U+be57, U+be61, U+bed4, U+c090, U+c130, U+c148, U+c19c, U+c2f9, U+c36c, U+c37c, U+c384, U+c3df, U+c575, U+c584, U+c660, U+c719, U+c816, U+ca4d, U+ca54, U+cabc, U+cb49, U+cc14, U+cff5, U+d004, U+d038, U+d0b4, U+d0d3, U+d0e0, U+d0ed, U+d131, U+d1b0, U+d31f, U+d33d, U+d3a0, U+d3ab, U+d514, U+d584, U+d6a1, U+d6cc, U+d749, U+d760, U+d799; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.81.woff2) format('woff2-variations'); unicode-range: U+24, U+60, U+3b9, U+3bb, U+3bd, U+2191, U+2606, U+300c-300d, U+3131, U+3134, U+3139, U+3141-3142, U+3148, U+3161, U+3163, U+321c, U+4eba, U+5317, U+ac31, U+ac77, U+ac9f, U+acb9, U+acf0-acf1, U+acfd, U+ad73, U+af3d, U+b00c, U+b04a, U+b057, U+b0c4, U+b188, U+b1cc, U+b214, U+b2db, U+b2ee, U+b304, U+b4ed, U+b518, U+b5bc, U+b625, U+b69c-b69d, U+b7ac, U+b801, U+b86c, U+b959, U+b95c, U+b985, U+ba48, U+bb58, U+bc0c, U+bc38, U+bc85, U+bc9a, U+bf40, U+c068, U+c0bd, U+c0cc, U+c12f, U+c149, U+c1e0, U+c22b, U+c22d, U+c250, U+c2fc, U+c300, U+c313, U+c370, U+c3d8, U+c557, U+c580, U+c5e3, U+c62e, U+c634, U+c6f0, U+c74d, U+c783, U+c78e, U+c796, U+c7bc, U+c92c, U+ca4c, U+cc1c, U+cc54, U+cc59, U+ce04, U+cf30, U+cfc4, U+d140, U+d321, U+d38c, U+d399, U+d54f, U+d587, U+d5d0, U+d6e8, U+d770; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.82.woff2) format('woff2-variations'); unicode-range: U+d7, U+ea, U+fc, U+2192, U+25bc, U+3000, U+3137, U+3145, U+315c, U+7f8e, U+ac13, U+ac71, U+ac90, U+acb8, U+ace7, U+ad7f, U+ae50, U+aef4, U+af34, U+afbc, U+b048, U+b09a, U+b0ad, U+b0bc, U+b113, U+b125, U+b141, U+b20c, U+b2d9, U+b2ed, U+b367, U+b369, U+b374, U+b3cb, U+b4ec, U+b611, U+b760, U+b81b, U+b834, U+b8b0, U+b8e1, U+b989, U+b9d1, U+b9e1, U+b9fa, U+ba4d, U+ba78, U+bb35, U+bb54, U+bbf9, U+bc11, U+bcb3, U+bd05, U+bd95, U+bdd4, U+be10, U+bed0, U+bf51, U+c0d8, U+c232, U+c2b7, U+c2eb, U+c378, U+c500, U+c52c, U+c549, U+c568, U+c598, U+c5c9, U+c61b, U+c639, U+c67c, U+c717, U+c78a, U+c80a, U+c90c-c90d, U+c950, U+c9e7, U+cbe4, U+cca9, U+cce4, U+cdb0, U+ce78, U+ce94, U+ce98, U+cf8c, U+d018, U+d034, U+d0f1, U+d1b1, U+d280, U+d2f8, U+d338, U+d380, U+d3b4, U+d610, U+d69f, U+d6fc, U+d758; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.83.woff2) format('woff2-variations'); unicode-range: U+e7, U+2022, U+203b, U+25c0, U+2605, U+2661, U+3147, U+318d, U+672c, U+8a9e, U+acaa, U+acbc, U+ad1c, U+ae4a, U+ae5c, U+b044, U+b054, U+b0c8-b0c9, U+b2a6, U+b2d0, U+b35c, U+b364, U+b428, U+b454, U+b465, U+b4b7, U+b4e3, U+b51c, U+b5a1, U+b784, U+b790, U+b7ab, U+b7f4, U+b82c, U+b835, U+b8e9, U+b8f8, U+b9d8, U+b9f9, U+ba5c, U+ba64, U+babd, U+bb18, U+bb3b, U+bbff, U+bc0d, U+bc45, U+bc97, U+bcbc, U+be45, U+be75, U+be7c, U+bfcc, U+c0b6, U+c0f7, U+c14b, U+c2b4, U+c30d, U+c4f8, U+c5bb, U+c5d1, U+c5e0, U+c5ee, U+c5fd, U+c606, U+c6c5, U+c6e0, U+c708, U+c81d, U+c820, U+c824, U+c878, U+c918, U+c96c, U+c9e4, U+c9f1, U+cc2e, U+cd09, U+cea1, U+cef5, U+cef7, U+cf64, U+cf69, U+cfe8, U+d035, U+d0ac, U+d230, U+d234, U+d2f4, U+d31d, U+d575, U+d578, U+d608, U+d614, U+d718, U+d751, U+d761, U+d78c, U+d790; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.84.woff2) format('woff2-variations'); unicode-range: U+2665, U+3160, U+4e2d, U+6587, U+65e5, U+ac12, U+ac14, U+ac16, U+ac81, U+ad34, U+ade0, U+ae54, U+aebc, U+af2c, U+afc0, U+afc8, U+b04c, U+b08c, U+b099, U+b0a9, U+b0ac, U+b0ae, U+b0b8, U+b123, U+b179, U+b2e5, U+b2f7, U+b4c0, U+b531, U+b538, U+b545, U+b550, U+b5a8, U+b6f0, U+b728, U+b73b, U+b7ad, U+b7ed, U+b809, U+b864, U+b86d, U+b871, U+b9bf, U+b9f5, U+ba40, U+ba4b, U+ba58, U+ba87, U+baac, U+bbc0, U+bc16, U+bc34, U+bd07, U+bd99, U+be59, U+bfd0, U+c058, U+c0e4, U+c0f5, U+c12d, U+c139, U+c228, U+c529, U+c5c7, U+c635, U+c637, U+c735, U+c77d, U+c787, U+c789, U+c8c4, U+c989, U+c98c, U+c9d0, U+c9d3, U+cc0c, U+cc99, U+cd0c, U+cd2c, U+cd98, U+cda4, U+ce59, U+ce60, U+ce6d, U+cea0, U+d0d0-d0d1, U+d0d5, U+d14d, U+d1a4, U+d29c, U+d2f1, U+d301, U+d39c, U+d3bc, U+d4e8, U+d540, U+d5ec, U+d640, U+d750; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.85.woff2) format('woff2-variations'); unicode-range: U+5e, U+25b2, U+25b6, U+314e, U+ac24, U+ace1, U+ace4, U+ae68, U+af2d, U+b0d0, U+b0e5, U+b150, U+b155, U+b193, U+b2c9, U+b2dd, U+b3c8, U+b3fc, U+b410, U+b458, U+b4dd, U+b5a0, U+b5a4, U+b5bb, U+b7b5, U+b838, U+b840, U+b86f, U+b8f9, U+b960, U+b9e5, U+bab8, U+bb50, U+bc1d, U+bc24-bc25, U+bca8, U+bcbd, U+bd04, U+bd10, U+bd24, U+be48, U+be5b, U+be68, U+c05c, U+c12c, U+c140, U+c15c, U+c168, U+c194, U+c219, U+c27d, U+c2a8, U+c2f1, U+c2f8, U+c368, U+c554-c555, U+c559, U+c564, U+c5d8, U+c5fc, U+c625, U+c65c, U+c6b1, U+c728, U+c794, U+c84c, U+c88c, U+c8e0, U+c8fd, U+c998, U+c9dd, U+cc0d, U+cc30, U+ceec, U+cf13, U+cf1c, U+cf5c, U+d050, U+d07c, U+d0a8, U+d134, U+d138, U+d154, U+d1f4, U+d2bc, U+d329, U+d32c, U+d3d0, U+d3f4, U+d3fc, U+d56b, U+d5cc, U+d600-d601, U+d639, U+d6c8, U+d754, U+d765; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.86.woff2) format('woff2-variations'); unicode-range: U+3c-3d, U+2026, U+24d2, U+314b, U+ac11, U+acf3, U+ad74, U+ad81, U+adf9, U+ae34, U+af43, U+afb8, U+b05d, U+b07c, U+b110, U+b118, U+b17c, U+b180, U+b18d, U+b192, U+b2cc, U+b355, U+b378, U+b4a4, U+b4ef, U+b78d, U+b799, U+b7a9, U+b7fd, U+b807, U+b80c, U+b839, U+b9b4, U+b9db, U+ba3c, U+bab0, U+bba4, U+bc94, U+be4c, U+c154, U+c1c4, U+c26c, U+c2ac, U+c2ed, U+c4f4, U+c55e, U+c561, U+c571, U+c5b5, U+c5c4, U+c654-c655, U+c695, U+c6e8, U+c6f9, U+c724, U+c751, U+c775, U+c7a0, U+c7c1, U+c874, U+c880, U+c9d5, U+c9f8, U+cabd, U+cc29, U+cc2c, U+cca8, U+ccab, U+ccd0, U+ce21, U+ce35, U+ce7c, U+ce90, U+cee8, U+cef4, U+cfe0, U+d070, U+d0b9, U+d0c1, U+d0c4, U+d0c8, U+d15c, U+d1a1, U+d2c0, U+d300, U+d314, U+d3ed, U+d478, U+d480, U+d48d, U+d508, U+d53d, U+d5e4, U+d611, U+d61c, U+d68d, U+d6a8, U+d798; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.87.woff2) format('woff2-variations'); unicode-range: U+23, U+25, U+5f, U+a9, U+ac08, U+ac78, U+aca8, U+acac, U+ace8, U+ad70, U+adc0, U+addc, U+b137, U+b140, U+b208, U+b290, U+b2f5, U+b3c5, U+b3cc, U+b420, U+b429, U+b529, U+b530, U+b77d, U+b79c, U+b7a8, U+b7c9, U+b7f0, U+b7fc, U+b828, U+b860, U+b9ad, U+b9c1, U+b9c9, U+b9dd-b9de, U+b9e8, U+ba38-ba39, U+babb, U+bc00, U+bc8c, U+bca0, U+bca4, U+bcd1, U+bcfc, U+bd09, U+bdf0, U+be60, U+c0ad, U+c0b4, U+c0bc, U+c190, U+c1fc, U+c220, U+c288, U+c2b9, U+c2f6, U+c528, U+c545, U+c558, U+c5bc, U+c5d4, U+c600, U+c644, U+c6c0, U+c6c3, U+c721, U+c798, U+c7a1, U+c811, U+c838, U+c871, U+c904, U+c990, U+c9dc, U+cc38, U+cc44, U+cca0, U+cd1d, U+cd95, U+cda9, U+ce5c, U+cf00, U+cf58, U+d150, U+d22c, U+d305, U+d328, U+d37c, U+d3f0, U+d551, U+d5a5, U+d5c8, U+d5d8, U+d63c, U+d64d, U+d669, U+d734, U+d76c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.88.woff2) format('woff2-variations'); unicode-range: U+26, U+2b, U+3e, U+40, U+7e, U+ac01, U+ac19, U+ac1d, U+aca0, U+aca9, U+acb0, U+ad8c, U+ae09, U+ae38, U+ae40, U+aed8, U+b09c, U+b0a0, U+b108, U+b204, U+b298, U+b2d8, U+b2eb-b2ec, U+b2f4, U+b313, U+b358, U+b450, U+b4e0, U+b54c, U+b610, U+b780, U+b78c, U+b791, U+b8e8, U+b958, U+b974, U+b984, U+b9b0, U+b9bc-b9bd, U+b9ce, U+ba70, U+bbfc, U+bc0f, U+bc15, U+bc1b, U+bc31, U+bc95, U+bcc0, U+bcc4, U+bd81, U+bd88, U+c0c8, U+c11d, U+c13c, U+c158, U+c18d, U+c1a1, U+c21c, U+c4f0, U+c54a, U+c560, U+c5b8, U+c5c8, U+c5f4, U+c628, U+c62c, U+c678, U+c6cc, U+c808, U+c810, U+c885, U+c88b, U+c900, U+c988, U+c99d, U+c9c8, U+cc3d-cc3e, U+cc45, U+cd08, U+ce20, U+cee4, U+d074, U+d0a4, U+d0dd, U+d2b9, U+d3b8, U+d3c9, U+d488, U+d544, U+d559, U+d56d, U+d588, U+d615, U+d648, U+d655, U+d658, U+d65c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.89.woff2) format('woff2-variations'); unicode-range: U+d, U+7c, U+ac10, U+ac15, U+ac74, U+ac80, U+ac83, U+acc4, U+ad11, U+ad50, U+ad6d, U+adfc, U+ae00, U+ae08, U+ae4c, U+b0a8, U+b124, U+b144, U+b178, U+b274, U+b2a5, U+b2e8, U+b2f9, U+b354, U+b370, U+b418, U+b41c, U+b4f1, U+b514, U+b798, U+b808, U+b824-b825, U+b8cc, U+b978, U+b9d0, U+b9e4, U+baa9, U+bb3c, U+bc18, U+bc1c, U+bc30, U+bc84, U+bcf5, U+bcf8, U+bd84, U+be0c, U+be14, U+c0b0, U+c0c9, U+c0dd, U+c124, U+c2dd, U+c2e4, U+c2ec, U+c54c, U+c57c-c57d, U+c591, U+c5c5-c5c6, U+c5ed, U+c608, U+c640, U+c6b8, U+c6d4, U+c784, U+c7ac, U+c800-c801, U+c9c1, U+c9d1, U+cc28, U+cc98, U+cc9c, U+ccad, U+cd5c, U+cd94, U+cd9c, U+cde8, U+ce68, U+cf54, U+d0dc, U+d14c, U+d1a0, U+d1b5, U+d2f0, U+d30c, U+d310, U+d398, U+d45c, U+d50c, U+d53c, U+d560, U+d568, U+d589, U+d604, U+d6c4, U+d788; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.90.woff2) format('woff2-variations'); unicode-range: U+ac04, U+ac1c, U+ac70, U+ac8c, U+acbd, U+acf5, U+acfc, U+ad00, U+ad6c, U+adf8, U+b098, U+b0b4, U+b294, U+b2c8, U+b300, U+b3c4, U+b3d9, U+b4dc, U+b4e4, U+b77c, U+b7ec, U+b85d, U+b97c, U+b9c8, U+b9cc, U+ba54, U+ba74, U+ba85, U+baa8, U+bb34, U+bb38, U+bbf8, U+bc14, U+bc29, U+bc88, U+bcf4, U+bd80, U+be44, U+c0c1, U+c11c, U+c120, U+c131, U+c138, U+c18c, U+c218, U+c2b5, U+c2e0, U+c544, U+c548, U+c5b4, U+c5d0, U+c5ec, U+c5f0, U+c601, U+c624, U+c694, U+c6a9, U+c6b0, U+c6b4, U+c6d0, U+c704, U+c720, U+c73c, U+c740, U+c744, U+c74c, U+c758, U+c77c, U+c785, U+c788, U+c790-c791, U+c7a5, U+c804, U+c815, U+c81c, U+c870, U+c8fc, U+c911, U+c9c4, U+ccb4, U+ce58, U+ce74, U+d06c, U+d0c0, U+d130, U+d2b8, U+d3ec, U+d504, U+d55c, U+d569, U+d574, U+d638, U+d654, U+d68c; }
@font-face { font-family: 'Pretendard Variable'; font-style: normal; font-display: swap; font-weight: 45 920; src: url(../fonts/pretendard-1.3.9/PretendardVariable.subset.91.woff2) format('woff2-variations'); unicode-range: U+20-22, U+27-2a, U+2c-39, U+3a-3b, U+3f, U+41-4e, U+4f-5d, U+61-7b, U+7d, U+a0-a1, U+ab, U+ad-ae, U+b7, U+bb, U+bf, U+2013-2014, U+201c-201d, U+2122, U+ac00, U+ace0, U+ae30, U+b2e4, U+b85c, U+b9ac, U+c0ac, U+c2a4, U+c2dc, U+c774, U+c778, U+c9c0, U+d558; }

/* ━━━━ skins.css ━━━━
   (옛 파일 · 원래 순서 100 · 원래 조건: 모든 화면 · head.sub.php) */

/* Shared visual bridge for the complete Solune skin tree. */
body.solune-page :is(#bo_list, #bo_v, #bo_w, #faq_wrap, #qa_wrap, #ctt, .mbskin, .search_container, #connect, #poll) {
    color: var(--solune-text);
    font-family: var(--solune-font);
}

body.solune-page :is(#bo_list, #bo_v, #bo_w, #faq_wrap, #qa_wrap, #ctt, .mbskin, .search_container, #connect, #poll) :is(h1, h2, h3, h4, h5) {
    color: var(--solune-text);
    font-family: var(--solune-font);
}

body.solune-page :is(#bo_list, #bo_v, #bo_w, #faq_wrap, #qa_wrap, #ctt, .mbskin, .search_container) {
    border-color: var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page :is(.tbl_head01, .tbl_frm01) {
    border-color: var(--solune-border);
}

body.solune-page .tbl_head01 table {
    border-top-color: var(--solune-border-strong);
    background: var(--solune-surface);
}

body.solune-page .tbl_head01 thead th {
    border-color: var(--solune-border);
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
}

body.solune-page .tbl_head01 tbody td {
    border-color: var(--solune-border);
    background: var(--solune-surface) !important;
    color: var(--solune-text-soft);
}

body.solune-page #bo_list .tbl_head01 tbody tr {
    border-left-color: transparent;
}

body.solune-page #bo_list .tbl_head01 tbody tr:hover,
body.solune-page #bo_list .tbl_head01 tbody tr.even:hover {
    border-left-color: var(--solune-primary);
    background: var(--solune-surface-tint);
}

body.solune-page #bo_list .tbl_head01 tbody tr:hover td,
body.solune-page #bo_list .tbl_head01 tbody tr.even:hover td {
    background: var(--solune-surface-tint) !important;
}

body.solune-page .tbl_frm01 th {
    border-color: var(--solune-border);
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
}

body.solune-page .tbl_frm01 td {
    border-color: var(--solune-border);
    background: var(--solune-surface);
    color: var(--solune-text-soft);
}

body.solune-page :is(input[type="text"], input[type="password"], input[type="tel"], input[type="email"], input[type="url"], input[type="number"], select, textarea) {
    border: 1px solid var(--solune-border-strong) !important;
    border-radius: var(--solune-radius-sm);
    background: var(--solune-surface) !important;
    color: var(--solune-text) !important;
}

/* 입력칸 포커스는 2px 실선 한 겹으로 낸다. 전에는 강조색을 14~18% 로
   묽힌 3px 후광이었는데, 흰 바탕에서 상태 대비가 3:1 에 한참 못 미쳐
   키보드로 다닐 때 어디에 있는지 알기 어려웠다.
   테두리 색이 바뀌는 것은 마우스로 눌렀을 때도 남기고(어느 칸을 만지는지
   알려 주는 신호), 링은 키보드로 들어왔을 때만 그린다. */
body.solune-page :is(input[type="text"], input[type="password"], input[type="tel"], input[type="email"], input[type="url"], input[type="number"], select, textarea):focus {
    border-color: var(--solune-primary) !important;
}

body.solune-page :is(input[type="text"], input[type="password"], input[type="tel"], input[type="email"], input[type="url"], input[type="number"], select, textarea):focus-visible {
    outline: 2px solid var(--solune-primary);
    outline-offset: 1px;
}

body.solune-page :is(.btn_bo_user a, .btn_bo_adm a, .btn_confirm .btn_submit, .btn_submit, .btn_b01, .btn_b02, .btn_cancel, .btn_frmline) {
    border: 1px solid var(--solune-border-strong);
    border-radius: var(--solune-radius-sm);
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    transition: border-color .18s ease, background-color .18s ease, color .18s ease, transform .18s ease;
}

body.solune-page :is(.btn_bo_user a, .btn_bo_adm a, .btn_confirm .btn_submit, .btn_submit, .btn_b01, .btn_b02, .btn_cancel, .btn_frmline):hover,
body.solune-page :is(.btn_bo_user a, .btn_bo_adm a, .btn_confirm .btn_submit, .btn_submit, .btn_b01, .btn_b02, .btn_cancel, .btn_frmline):focus-visible {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

body.solune-page #bo_v_title .bo_v_tit,
body.solune-page #bo_v_con,
body.solune-page .bo_v_con,
body.solune-page .wr_content,
body.solune-page #ctt_con,
body.solune-page .sch_res_title {
    color: var(--solune-text-soft);
}

body.solune-page #bo_vc article {
    border-bottom-color: var(--solune-border);
    background: transparent;
    color: var(--solune-text-soft);
}

body.solune-page #bo_vc .cmt_contents {
    color: var(--solune-text-soft);
}

body.solune-page #bo_vc_w {
    border-color: var(--solune-border);
    border-radius: var(--solune-radius-sm);
    background: var(--solune-surface-soft);
}

body.solune-page :is(#faq_wrap .faq_li, #qa_wrap .qa_qna, #qa_wrap .qa_list) {
    border-color: var(--solune-border);
    background: var(--solune-surface);
}

body.solune-page :is(#faq_wrap .faq_q, #faq_wrap .faq_a, #qa_wrap .qa_q, #qa_wrap .qa_a) {
    border-color: var(--solune-border);
    color: var(--solune-text-soft);
}

body.solune-page :is(#connect, #poll) {
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page :is(#connect h2, #poll h2, #connect .connect_tit, #poll .poll_question) {
    color: var(--solune-text);
}

body.solune-page :is(#connect li, #poll li, #poll .poll_list) {
    border-color: var(--solune-border);
    color: var(--solune-text-soft);
}

/* 상세의 #sit_ov_wrap · #sit_ov 는 뺐다. 온담 레이어(shop.css)가 테두리와
   바탕을 걷어내 평평하게 두는데 여기 그림자만 남아, 테두리 없이 그림자만
   뜬 카드가 두 겹으로 깔렸다. 그쪽이 통째로 맡는다. */
body.solune-shop-page :is(#gnb, #main_bn, #sev .ev_prd, #sct, #sod_bsk, #sod_fin, #sod_frm, #scomm) {
    border-color: var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    color: var(--solune-text);
}

/* 코어 마크업의 글자색을 한 번에 맞추는 다리. id 무게를 갖는 탓에 이 안에
   놓인 테마 컴포넌트의 색까지 덮어 버린다 — 주문 단계 배지가 그래서 현재
   단계에서도 흐린 글씨로 나왔다. 테마가 직접 칠하는 것은 여기서 뺀다. */
body.solune-shop-page :is(#gnb, #main_bn, #sev .owl_pager, #main_bn .owl_pager, #sct, #sod_bsk, #sod_fin, #sod_frm, #sit_ov_wrap, #sit_ov, #scomm) :is(h1, h2, h3, h4, a, p, span, li, td, th):not(.solune-order-step, .solune-order-step-no, .solune-sit-discount, .ondam-card-badge) {
    color: var(--solune-text-soft);
}
/* .ondam-card-badge(상품 카드의 NEW · SOLD OUT) 도 위 목록에서 뺀다. 진한 바탕에 흰 글자로
   칠하는데(shop-ondam.css) 이 규칙이 글자를 흐린 회색으로 덮어 대비가 1.92:1 이었다. */

body.solune-shop-page :is(.gnb_1da, .gnb_2da):hover,
body.solune-shop-page :is(.sct_txt, .sct_tit, .sit_title) a:hover {
    color: var(--solune-primary);
}

@media (max-width: 640px) {
    body.solune-page :is(#bo_list, #bo_v, #bo_w, #faq_wrap, #qa_wrap, #ctt, .mbskin, .search_container, #connect, #poll) {
        border-radius: var(--solune-radius-sm);
    }

    body.solune-page .tbl_head01 {
        overflow-x: auto;
    }

    body.solune-page .tbl_head01 table {
        min-width: 640px;
    }

    body.solune-shop-page :is(#gnb, #main_bn, #sev .ev_prd, #sct, #sod_bsk, #sod_fin, #sod_frm, #scomm) {
        border-radius: var(--solune-radius-sm);
    }
}

@media (prefers-reduced-motion: reduce) {
    body.solune-page :is(.btn_bo_user a, .btn_bo_adm a, .btn_confirm .btn_submit, .btn_submit, .btn_b01, .btn_b02, .btn_cancel, .btn_frmline) {
        transition: none;
    }
}

/* --- 다크에 남은 밝은 바탕 (커뮤니티) ---

   그누보드 기본 스킨들은 상자와 칩에 밝은 색을 직접 박아 둔다. 라이트에서는
   테마 표면색과 비슷해 티가 안 나지만, 다크에서는 밝은 바탕이 그대로 남고
   그 위에 밝은 글자가 얹혀 글자가 사라진다. 배경과 글자를 함께 토큰으로
   돌린다. 어디서 온 값인지 옆에 적어 둔다. */

/* skin/faq/basic, skin/search/basic — 흰 카드 */
body.solune-page :is(#faq_con > ol > li, #faq_con .tit_btn, .search_board_result > ul > li) {
    background: var(--solune-surface);
}

/* skin/faq 의 검색 상자 #f7f7f7.

   #new_sch(새글) 과 #sch_res_detail(전체검색) 은 뺐다. 두 스킨은 이제 그
   상자를 흰 카드로 직접 그리는데, 이 규칙이 (1,2,1) 로 같은 값이면서 나중에
   실려(skins.css 100 > 스킨 style.css 0) 늘 이겼다. 그래서 목록 카드는
   흰데 검색 상자만 회색으로 남아 두 카드가 다른 부품처럼 보였다. */
body.solune-page #faq_sch {
    background: var(--solune-surface-soft);
    border-color: var(--solune-border);
}

/* 분류·게시판 칩. 코어가 파스텔 색을 하나씩 박아 두었다
   (#e2eaf6 · #edfbde · #eeeaf8 · #e8eeef). 색으로 종류를 가르던 것을
   포기하는 대신 어느 모드에서나 읽히게 한다.
   게시판 목록 카드의 .cb-cat 은 테두리만 쓰는 조용한 칩이라 뺀다. */
/* .sch_tit .pop_a(전체검색의 새창 아이콘)도 뺐다. 그 스킨이 이제 평소에는
   맨 아이콘으로 두고 hover 에서만 바탕을 깐다 — 시안이 그렇게 둔다. */
body.solune-page :is(.bo_cate_link, #fnewlist .td_group a, #fnewlist .td_board a,
                      .scrap_cate):not(.cb-cat) {
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

/* 답변 대기 표식 #ccd1d9 에 흰 글씨 — 라이트에서도 1.5:1 이었다. */
body.solune-page .txt_rdy {
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
}

/* 현재 페이지 번호. 다크에서 강조색이 밝아지는데 글자는 흰색으로 남아
   2.2:1 이 된다. 글자를 표면색으로 두면 두 모드가 다 맞는다. */
/* 페이지 넘김의 모양은 default.css 의 페이지 넘김 절 한 벌이 맡는다. */

/* 아래는 코어가 id 나 두 클래스로 잡아 둔 자리라 무게를 맞춰 준다. */

/* skin/qa/basic — 답변 대기 표식 */
body.solune-page :is(#bo_list, #bo_v_rel) .txt_rdy {
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
}

/* skin/search/basic — 결과 요약 띠와 정렬 전환 단추 */
body.solune-page #sch_res_ov {
    background: var(--solune-surface-soft);
}

body.solune-page .switch_field label {
    border-color: var(--solune-border);
    background-color: var(--solune-surface);
    color: var(--solune-text-soft);
}

/* 체크상자 표식. 배경 이미지로 체크를 그리므로 배경색만 바꾼다. */
body.solune-page .chk_box label > span {
    background-color: var(--solune-surface);
    border-color: var(--solune-border-strong);
}

/* ━━━━ board.css ━━━━
   (옛 파일 · 원래 순서 110 · 원래 조건: 쇼핑몰이 아닌 화면 · head.sub.php) */

/* Solune board surfaces: a focused visual layer for the stock board markup. */
body.solune-page #bo_list {
    width: 100% !important;
    margin: 0;
    color: var(--solune-text);
}

body.solune-page:has(#bo_list) {
    --solune-board-title-size: 14.5px;
    --solune-board-meta-size: 14.5px;
    --solune-board-head-size: 14px;
}

body.solune-page #bo_cate {
    margin: 0 0 1rem;
    padding: .35rem;
    border: 1px solid var(--solune-border);
    border-radius: .85rem;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page #bo_cate h2 {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

body.solune-page #bo_cate_ul {
    display: flex;
    flex-wrap: wrap;
    gap: .3rem;
    margin: 0;
    padding: 0;
}

body.solune-page #bo_cate_ul li {
    margin: 0;
}

body.solune-page #bo_cate_ul a {
    display: inline-flex;
    min-height: 2.15rem;
    align-items: center;
    padding: 0 .8rem;
    border: 1px solid transparent;
    border-radius: .6rem;
    color: var(--solune-muted);
    font-size: .75rem;
    font-weight: 800;
    text-decoration: none;
    transition: background-color .18s ease, border-color .18s ease, color .18s ease;
}

body.solune-page #bo_cate_ul a:hover,
body.solune-page #bo_cate_ul a:focus-visible,
body.solune-page #bo_cate_ul #bo_cate_on {
    border-color: color-mix(in srgb, var(--solune-primary) 20%, var(--solune-border));
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

body.solune-page:has(#bo_list) .solune-page-header {
    position: relative;
    overflow: hidden;
    min-height: 7.25rem;
    margin-bottom: 1.15rem !important;
    padding: 1.25rem 1.35rem !important;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 20%, var(--solune-border)) !important;
    border-radius: 1rem;
    background: linear-gradient(135deg, var(--solune-surface) 0%, var(--solune-surface-tint) 100%);
    box-shadow: 0 .6rem 1.4rem color-mix(in srgb, var(--solune-primary) 8%, transparent);
}

body.solune-page:has(#bo_list) .solune-page-header::before {
    position: absolute;
    inset: 0 0 auto;
    height: .2rem;
    background: linear-gradient(90deg, var(--solune-primary), color-mix(in srgb, var(--solune-primary) 35%, var(--solune-accent)));
    content: "";
}

body.solune-page:has(#bo_list) .solune-page-header::after {
    position: absolute;
    right: -3rem;
    bottom: -5rem;
    width: 13rem;
    height: 13rem;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 14%, transparent);
    border-radius: 50%;
    box-shadow: 0 0 0 1rem color-mix(in srgb, var(--solune-primary) 4%, transparent), 0 0 0 2rem color-mix(in srgb, var(--solune-primary) 3%, transparent);
    pointer-events: none;
    content: "";
}

body.solune-page:has(#bo_list) .solune-page-header > * {
    position: relative;
    z-index: 1;
}

body.solune-page:has(#bo_list) .solune-page-header #container_title {
    color: var(--solune-text);
    font-size: 40px;
    font-weight: 800;
    letter-spacing: -.8px;
    line-height: 64px;
}

body.solune-page:has(#bo_list) .solune-page-header-action {
    min-height: 2.35rem;
    border: 1px solid var(--solune-border);
    border-radius: .7rem;
    background: color-mix(in srgb, var(--solune-surface) 78%, transparent);
    color: var(--solune-text-soft);
    font-weight: 800;
}

body.solune-page:has(#bo_list) .solune-page-header-action:hover,
body.solune-page:has(#bo_list) .solune-page-header-action:focus-visible {
    border-color: color-mix(in srgb, var(--solune-primary) 36%, var(--solune-border));
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

body.solune-page #bo_btn_top {
    display: flex;
    min-height: 42px;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin: 0 0 .9rem;
    padding: .35rem .4rem .35rem .8rem;
    border: 1px solid var(--solune-border);
    border-radius: .85rem;
    background: color-mix(in srgb, var(--solune-surface) 86%, var(--solune-primary-soft));
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page #bo_list_total {
    display: flex;
    align-items: baseline;
    gap: .35rem;
    float: none;
    margin: 0;
    color: var(--solune-muted);
    font-size: .75rem;
    font-weight: 700;
    letter-spacing: -.01em;
    line-height: 1.4;
    white-space: nowrap;
}

body.solune-page #bo_btn_top .btn_bo_user,
body.solune-page #fboardlist > .btn_top.btn_bo_user {
    display: flex;
    float: none;
    align-items: center;
    justify-content: flex-end;
    gap: .4rem;
    margin: 0 0 0 auto;
}

body.solune-page #bo_btn_top .btn_bo_user li,
body.solune-page #fboardlist > .btn_top.btn_bo_user > li {
    float: none;
    width: auto;
    margin: 0;
    background: transparent;
}

body.solune-page #bo_btn_top .btn_bo_user li > :is(a, button),
body.solune-page #fboardlist > .btn_top.btn_bo_user li > :is(a, button) {
    display: inline-grid;
    width: 2.55rem;
    height: 2.55rem;
    margin: 0;
    padding: 0;
    place-items: center;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface);
    color: var(--solune-muted);
    font-size: .78rem;
    line-height: 1;
    transition: border-color .18s ease, background-color .18s ease, color .18s ease, transform .18s ease;
}

body.solune-page #bo_btn_top .btn_bo_user li > :is(a, button):hover,
body.solune-page #bo_btn_top .btn_bo_user li > :is(a, button):focus-visible,
body.solune-page #fboardlist > .btn_top.btn_bo_user li > :is(a, button):hover,
body.solune-page #fboardlist > .btn_top.btn_bo_user li > :is(a, button):focus-visible {
    border-color: color-mix(in srgb, var(--solune-primary) 42%, var(--solune-border));
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

body.solune-page #bo_btn_top .btn_bo_user li > :is(a, button):active,
body.solune-page #fboardlist > .btn_top.btn_bo_user li > :is(a, button):active {
    transform: translateY(1px);
}

/* ━━━━ board-table.css ━━━━
   (옛 파일 · 원래 순서 111 · 원래 조건: 쇼핑몰이 아닌 화면 · head.sub.php) */

/* 목록 표 (tbl_head01) — 행 · 셀 · 제목 · 아이콘

   board.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, head.sub.php 가 원래 순서대로 이어서 실으면 어느 선언이
   이기는지가 달라지지 않는다. */

body.solune-page #bo_list .tbl_head01 {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    box-shadow: 0 .55rem 1.25rem color-mix(in srgb, var(--solune-text) 5%, transparent);
}

body.solune-page #bo_list .tbl_head01::before {
    position: absolute;
    inset: 0 0 auto;
    z-index: 1;
    height: .16rem;
    background: var(--solune-primary);
    content: "";
    pointer-events: none;
}

body.solune-page #bo_list .tbl_head01.card,
body.solune-page #bo_list .list_01.card {
    display: block;
    padding: 0;
}

body.solune-page #bo_list .tbl_head01 .table {
    width: 100%;
    font-size: 16px;
    line-height: 25.6px;
    letter-spacing: -.16px;
}

body.solune-page #bo_list .tbl_head01 table {
    table-layout: auto;
}

body.solune-page #bo_list .tbl_head01 caption {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

body.solune-page #bo_list .tbl_head01 thead th {
    height: 3.2rem;
    padding: 0 .65rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    font-size: var(--solune-board-head-size);
    font-weight: 700;
    letter-spacing: -.16px;
    line-height: 22.4px;
}

body.solune-page #bo_list .tbl_head01 tbody td {
    height: 3.8rem;
    padding: .65rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface) !important;
    color: var(--solune-text-soft);
    font-size: 14.5px;
    line-height: 23.2px;
    vertical-align: middle;
}

body.solune-page #bo_list .tbl_head01 tbody td:is(.td_num, .td_num2, .td_name, .td_datetime, .td_date, .td_hit) {
    color: var(--solune-muted);
    font-size: var(--solune-board-meta-size);
    line-height: 23.2px;
}

body.solune-page #bo_list .tbl_head01 tbody tr:last-child td {
    border-bottom: 0;
}

body.solune-page #bo_list .tbl_head01 tbody tr:hover td {
    background: var(--solune-surface-soft) !important;
}

body.solune-page #bo_list .tbl_head01 tbody tr:first-child:not(.bo_notice) td {
    background: color-mix(in srgb, var(--solune-primary-soft) 42%, var(--solune-surface)) !important;
}

body.solune-page #bo_list .tbl_head01 tbody tr.bo_notice {
    box-shadow: inset 3px 0 0 var(--solune-primary);
}

body.solune-page #bo_list .tbl_head01 tbody tr.bo_notice td {
    background: var(--solune-surface-tint) !important;
}

body.solune-page #bo_list .td_subject {
    overflow: hidden;
    text-align: left;
}

body.solune-page #bo_list .bo_tit {
    min-width: 0;
    color: var(--solune-text);
    font-size: var(--solune-board-title-size);
    font-weight: 600;
    line-height: 23.2px;
    text-align: left;
}

body.solune-page #bo_list .bo_tit > a {
    display: flex;
    min-width: 0;
    align-items: center;
    gap: .35rem;
    overflow: hidden;
    color: inherit;
    text-align: left;
    text-decoration: none;
    text-overflow: ellipsis;
    white-space: nowrap;
}

body.solune-page #bo_list .bo_tit > a:hover,
body.solune-page #bo_list .bo_tit > a:focus-visible {
    color: var(--solune-primary);
}

body.solune-page #bo_list .td_num,
body.solune-page #bo_list .td_num2,
body.solune-page #bo_list .td_name,
body.solune-page #bo_list .td_datetime,
body.solune-page #bo_list .td_date {
    color: var(--solune-muted);
    font-size: var(--solune-board-meta-size);
    line-height: 1.4;
}

body.solune-page #bo_list .td_num,
body.solune-page #bo_list .td_num2,
body.solune-page #bo_list .td_datetime {
    text-align: center;
}

body.solune-page #bo_list .td_name {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

body.solune-page #bo_list .td_subject .bo_tit {
    display: flex;
    align-items: center;
    gap: .35rem;
}

body.solune-page #bo_list .notice_icon,
body.solune-page #bo_list .new_icon,
body.solune-page #bo_list .cnt_cmt,
body.solune-page #bo_list .bo_cmt {
    display: inline-grid;
    min-width: 1.15rem;
    height: 1.15rem;
    margin-left: .15rem;
    padding: 0 .25rem;
    place-items: center;
    border: 0;
    border-radius: .35rem;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: .62rem;
    font-weight: 800;
    line-height: 1;
    vertical-align: middle;
}

body.solune-page #bo_list .notice_icon {
    width: auto;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
}

body.solune-page #bo_list .chk_box input[type="checkbox"] + label span {
    border-color: var(--solune-border-strong);
    border-radius: .35rem;
    background: var(--solune-surface);
}

body.solune-page #bo_list .chk_box input[type="checkbox"]:checked + label span {
    border-color: var(--solune-primary);
    background-color: var(--solune-primary);
}

body.solune-page #fboardlist > .bo_fx {
    display: none;
}

body.solune-page .solune-board-pagination {
    display: flex;
    justify-content: center;
    margin: 1rem 0 0;
}

/* 페이저 상자의 자리와 모양은 default.css 의 페이지 넘김 절 가 맡는다. */

body.solune-page .solune-board-pagination .pg {
    display: inline-flex;
    align-items: center;
    gap: .25rem;
    padding: .25rem;
    border: 1px solid var(--solune-border);
    border-radius: .8rem;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

/* ━━━━ board-pagination.css ━━━━
   (옛 파일 · 원래 순서 112 · 원래 조건: 쇼핑몰이 아닌 화면 · head.sub.php) */

/* 페이지 넘김과 옵션 메뉴

   board.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, head.sub.php 가 원래 순서대로 이어서 실으면 어느 선언이
   이기는지가 달라지지 않는다. */

/* 페이지 넘김의 모양은 default.css 의 페이지 넘김 절 한 벌이 맡는다. */

body.solune-page .more_opt {
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-md);
}

body.solune-page .more_opt:after {
    border-bottom-color: var(--solune-surface);
}

body.solune-page .more_opt li,
body.solune-page .more_opt li button,
body.solune-page .more_opt li a {
    border-color: var(--solune-border);
    background: var(--solune-surface);
    color: var(--solune-text-soft);
}

body.solune-page .more_opt li:hover,
body.solune-page .more_opt li:hover button,
body.solune-page .more_opt li:hover a {
    background: var(--solune-surface-soft);
    color: var(--solune-primary);
}

/* 폭을 타는 페이지 넘김(.solune-pg — solune_theme_get_paging)은
   게시판만의 것이 아니라서 default.css 로 옮겼다. */

/* ━━━━ board-search.css ━━━━
   (옛 파일 · 원래 순서 113 · 원래 조건: 쇼핑몰이 아닌 화면 · head.sub.php) */

/* 게시판 목록 — 모바일 목록과 페이지 넘김 언저리

   board.css 가 800줄을 넘겨 갈라 놓은 조각이다. 규칙을 옮기지 않고 자르기만
   했으므로, head.sub.php 가 원래 순서대로 이어서 실으면 어느 선언이
   이기는지가 달라지지 않는다.

   원래 이 파일의 앞부분은 검색 모달(.bo_sch · .bo_sch_wrap · .bo_sch_bg)의
   입력칸 · 단추 규칙이었다. 목록 스킨(basic · gallery)이 모달을 버리고 목록
   아래 인라인 폼(.solune-board-search-inline) 하나만 두면서 그 마크업이
   테마 PHP 어디에도 남지 않아 걷어냈다. 파일 이름은 실는 순서를 지키려고
   그대로 둔다. */

/* The mobile board skin uses a list instead of a table. */
body.solune-page #fboardlist > .btn_top.btn_bo_user {
    min-height: 2.55rem;
    margin-bottom: .75rem;
}

body.solune-page #bo_list .list_01 {
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page #bo_list .list_01 > .all_chk {
    display: flex;
    min-height: 2.75rem;
    align-items: center;
    padding: 0 .95rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    font-size: .72rem;
    font-weight: 700;
}

/* ━━━━ board-cardlist.css ━━━━
   (옛 파일 · 원래 순서 114 · 원래 조건: 쇼핑몰이 아닌 화면 · head.sub.php) */

/* 카드형 목록 (list_01) 과 선택 상자

   board.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, head.sub.php 가 원래 순서대로 이어서 실으면 어느 선언이
   이기는지가 달라지지 않는다. */

body.solune-page #bo_list .list_01 > ul {
    margin: 0;
    padding: 0;
}

body.solune-page #bo_list .list_01 > ul > li {
    display: grid;
    grid-template-columns: 1.15rem minmax(0, 1fr);
    gap: .75rem;
    min-height: 5.3rem;
    align-items: center;
    padding: .9rem 1rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface);
}

body.solune-page #bo_list .list_01 > ul > li:last-child {
    border-bottom: 0;
}

body.solune-page #bo_list .list_01 > ul > li:hover,
body.solune-page #bo_list .list_01 > ul > li.bo_notice {
    background: var(--solune-surface-tint);
}

body.solune-page #bo_list .list_01 .bo_chk {
    float: none;
    width: 1.15rem;
    min-width: 1.15rem;
    margin: 0;
    align-self: start;
}

body.solune-page #bo_list .list_01 .bo_chk label {
    display: block;
    width: 1.15rem;
    height: 1.15rem;
    padding: 0 !important;
    overflow: hidden;
}

body.solune-page #bo_list .list_01 .bo_chk label span {
    position: absolute;
    top: 0;
    left: 0;
    float: none;
    width: 1.15rem;
    height: 1.15rem;
    margin: 0;
}

body.solune-page #bo_list .list_01 .bo_cnt {
    grid-column: 2;
    min-width: 0;
    color: var(--solune-text);
    font-size: .94rem;
    font-weight: 750;
    line-height: 1.5;
    text-align: left;
}

body.solune-page #bo_list .list_01 .bo_subject {
    display: block;
    min-width: 0;
    overflow: hidden;
    padding: 0;
    color: var(--solune-text);
    text-align: left;
    text-overflow: ellipsis;
    white-space: nowrap;
}

body.solune-page #bo_list .list_01 .bo_subject:hover,
body.solune-page #bo_list .list_01 .bo_subject:focus-visible {
    color: var(--solune-primary);
}

body.solune-page #bo_list .list_01 .bo_info {
    grid-column: 2;
    display: flex;
    flex-wrap: wrap;
    gap: .15rem .65rem;
    padding-top: .35rem;
    color: var(--solune-muted);
    font-size: .75rem;
    line-height: 1.4;
}

body.solune-page #bo_list .list_01 .bo_info i {
    margin-left: 0;
    color: var(--solune-primary);
}

body.solune-page #bo_list .list_01 .bo_cate_ico {
    display: flex;
    flex-wrap: wrap;
    gap: .35rem;
    margin-bottom: .35rem;
}

body.solune-page #bo_list .list_01 .bo_cate_link {
    float: none;
    height: auto;
    margin: 0;
    padding: .2rem .45rem;
    border-radius: .35rem;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: .68rem;
    line-height: 1.3;
}

body.solune-page #bo_list .list_01 .notice_icon {
    min-width: 0;
    height: auto;
    padding: .2rem .45rem;
    border-radius: .35rem;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: .65rem;
}

body.solune-page #bo_list .list_01 .empty_table {
    display: block;
    padding: 3rem 1rem;
    color: var(--solune-muted);
    text-align: center;
}

body.solune-page #bo_list + .solune-pg-wrap,
body.solune-page #bo_list ~ #bo_list_total {
    margin-top: 1rem;
}

body.solune-page #bo_list ~ #bo_list_total {
    padding: .7rem 1rem;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface-soft);
    text-align: center;
}

@media (max-width: 780px) {
    body.solune-page #bo_btn_top {
        min-height: 2.4rem;
        gap: .5rem;
        margin-bottom: .7rem;
    }

    body.solune-page #bo_btn_top .btn_bo_user li > :is(a, button),
    body.solune-page #fboardlist > .btn_top.btn_bo_user li > :is(a, button) {
        width: 2.35rem;
        height: 2.35rem;
        border-radius: .65rem;
    }

    body.solune-page #bo_list .list_01 {
        border-radius: var(--solune-radius-sm);
    }

    body.solune-page #bo_list .list_01 > ul > li {
        min-height: 4.9rem;
        padding: .8rem .85rem;
    }
}

@media (max-width: 480px) {
    body.solune-page #bo_btn_top #bo_list_total,
    body.solune-page #fboardlist > .btn_top.btn_bo_user + #bo_list_total {
        gap: .25rem;
    }

}

@media (prefers-reduced-motion: reduce) {
    body.solune-page #bo_btn_top .btn_bo_user li > :is(a, button),
    body.solune-page #fboardlist > .btn_top.btn_bo_user li > :is(a, button) {
        transition: none;
    }
}

/* ━━━━ board-view.css ━━━━
   (옛 파일 · 원래 순서 120 · 원래 조건: 게시글 보기 · 1:1문의 글보기 · solune_board_view_css()) */

/* Solune post detail surfaces: preserve the stock board contract, refine the reading flow. */
body.solune-page #bo_v {
    overflow: hidden;
    margin-bottom: 0;
    border: 1px solid var(--solune-border);
    border-top: 4px solid var(--solune-primary);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page #bo_v > header {
    padding: 2.2rem 2rem 1.8rem;
    background: linear-gradient(180deg, var(--solune-surface), var(--solune-surface-soft));
}

body.solune-page #bo_v.solune-view--notice {
    border-top-color: var(--solune-accent);
}

body.solune-page #bo_v.solune-view--notice > header {
    background: linear-gradient(135deg, var(--solune-primary-soft), var(--solune-surface) 68%);
}

body.solune-page #bo_v.solune-view--notice .solune-view-kicker {
    display: inline-flex;
    min-height: 1.4rem;
    align-items: center;
    margin-bottom: .75rem;
    padding: 0 .55rem;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 26%, var(--solune-border));
    border-radius: var(--solune-radius-pill);
    background: var(--solune-surface);
    color: var(--solune-primary);
    font-size: .62rem;
    font-weight: 800;
    letter-spacing: .12em;
    line-height: 1;
}

body.solune-page #bo_v .solune-view-kicker + .bo_v_cate {
    margin-left: .35rem;
}

body.solune-page #bo_v_title .bo_v_tit {
    display: block;
    margin: 0;
    color: var(--solune-text);
    font-size: clamp(1.65rem, 3vw, 2.35rem);
    font-weight: 800;
    line-height: 1.25;
    letter-spacing: var(--solune-heading-letter-spacing);
    overflow-wrap: anywhere;
}

body.solune-page #bo_v_title .bo_v_cate {
    margin-bottom: .8rem;
    padding: .3rem .6rem;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 24%, var(--solune-border));
    border-radius: var(--solune-radius-pill);
    font-size: .68rem;
    font-weight: 800;
    letter-spacing: .03em;
}

body.solune-page #bo_v_info {
    display: flex;
    min-height: 5.3rem;
    align-items: center;
    justify-content: space-between;
    gap: 1.25rem;
    padding: 1rem 2rem;
    border-top: 1px solid var(--solune-border);
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface);
}

body.solune-page #bo_v_info .profile_info {
    display: flex;
    min-width: 0;
    align-items: center;
    float: none;
    gap: .75rem;
    margin: 0;
}

body.solune-page #bo_v_info .profile_info .pf_img {
    flex: 0 0 auto;
    margin: 0;
}

body.solune-page #bo_v_info .profile_info .pf_img img {
    width: 2.75rem;
    height: 2.75rem;
    border: 1px solid var(--solune-border);
    border-radius: 50%;
    background: var(--solune-surface-soft);
}

body.solune-page #bo_v_info .profile_info .profile_info_ct {
    min-width: 0;
    padding: 0;
    color: var(--solune-muted);
    font-size: .75rem;
    line-height: 1.6;
}

body.solune-page #bo_v_info .profile_info_ct > strong:first-of-type {
    display: block;
    margin: 0;
    color: var(--solune-text);
    font-size: .86rem;
    font-weight: 800;
}

body.solune-page #bo_v_info .profile_info_ct > strong:not(:first-of-type) {
    display: inline-flex;
    align-items: center;
    gap: .18rem;
    margin: 0 .65rem 0 0;
    color: var(--solune-muted);
    font-size: .72rem;
    font-weight: 600;
}

body.solune-page #bo_v_info .profile_info_ct > strong:not(:first-of-type) a {
    color: inherit;
}

body.solune-page #bo_v_info .profile_info_ct > strong:not(:first-of-type) i {
    color: var(--solune-primary);
}

body.solune-page #bo_v_info #bo_v_top {
    flex: 0 0 auto;
    margin: 0;
}

body.solune-page #bo_v_top ul.btn_bo_user {
    display: flex;
    align-items: center;
    gap: .45rem;
    margin: 0;
}

body.solune-page #bo_v_top ul.btn_bo_user li {
    float: none;
    width: auto;
    margin: 0;
    background: transparent;
}

body.solune-page #bo_v_top ul.btn_bo_user li > :is(a, button) {
    display: inline-grid;
    width: 2.6rem;
    height: 2.6rem;
    margin: 0;
    padding: 0;
    place-items: center;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface);
    color: var(--solune-muted);
    font-size: .8rem;
    line-height: 1;
    transition: border-color .18s ease, background-color .18s ease, color .18s ease, transform .18s ease;
}

body.solune-page #bo_v_top ul.btn_bo_user li > :is(a, button):hover,
body.solune-page #bo_v_top ul.btn_bo_user li > :is(a, button):focus-visible {
    border-color: color-mix(in srgb, var(--solune-primary) 45%, var(--solune-border));
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

body.solune-page #bo_v_top ul.btn_bo_user li > :is(a, button):active {
    transform: translateY(1px);
}

body.solune-page #bo_v_top .more_opt {
    top: calc(100% + .5rem);
    right: 0;
    min-width: 8rem;
}

body.solune-page #bo_v_top .more_opt.solune-view-options {
    display: none;
    gap: .15rem;
    padding: .35rem;
}

body.solune-page #bo_v_top .more_opt.solune-view-options li {
    width: 100%;
    margin: 0;
    padding: 0;
    border: 0;
}

body.solune-page #bo_v_top .more_opt.solune-view-options li a {
    display: flex;
    min-height: 2rem;
    align-items: center;
    justify-content: space-between;
    gap: .6rem;
    padding: 0 .65rem;
    border-radius: .5rem;
    font-size: .74rem;
    font-weight: 700;
}

body.solune-page .btn_top.top .more_opt.solune-view-options {
    gap: .15rem;
    padding: .35rem;
}

body.solune-page .btn_top.top .more_opt.solune-view-options li {
    width: 100%;
    margin: 0;
    padding: 0;
    border: 0;
}

body.solune-page .btn_top.top .more_opt.solune-view-options li a {
    display: flex;
    min-height: 2rem;
    align-items: center;
    gap: .55rem;
    padding: 0 .65rem;
    border-radius: .5rem;
    font-size: .74rem;
    font-weight: 700;
}

body.solune-page #bo_v_atc {
    min-height: 0;
    padding: 1.9rem 2rem 2.1rem;
    background: var(--solune-surface);
}

body.solune-page #bo_v_share {
    display: flex;
    justify-content: flex-end;
    min-height: 2.15rem;
    margin: 0 0 1.3rem;
    padding: 0;
}

body.solune-page #bo_v_share .btn {
    display: inline-flex;
    min-height: 2.15rem;
    align-items: center;
    gap: .38rem;
    padding: 0 .75rem;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-pill);
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    font-size: .72rem;
    font-weight: 700;
}

body.solune-page #bo_v_share .btn:hover,
body.solune-page #bo_v_share .btn:focus-visible {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

body.solune-page #bo_v_img {
    display: grid;
    gap: 1rem;
    margin-bottom: 1.4rem;
}

body.solune-page #bo_v_img img {
    display: block;
    border-radius: var(--solune-radius-sm);
}

body.solune-page #bo_v_con {
    min-height: 0;
    margin: 0 auto 2rem;
    color: var(--solune-text-soft);
    font-size: 1rem;
    line-height: 1.95;
    overflow-wrap: anywhere;
    word-break: keep-all;
}

body.solune-page #bo_v_con p {
    margin: 0 0 1rem;
}

body.solune-page #bo_v_con :is(blockquote, pre, table) {
    margin: 1.25rem 0;
}

body.solune-page #bo_v_con blockquote {
    padding: .85rem 1rem;
    border-left: 3px solid var(--solune-primary);
    border-radius: 0 var(--solune-radius-sm) var(--solune-radius-sm) 0;
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
}

body.solune-page #bo_v_con pre {
    max-width: 100%;
    overflow: auto;
    padding: 1rem;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-sm);
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
    font: .85rem/1.7 var(--solune-mono);
    white-space: pre-wrap;
}

/* ━━━━ board-view-content.css ━━━━
   (옛 파일 · 원래 순서 121 · 원래 조건: 게시글 보기 · 1:1문의 글보기 · solune_board_view_css()) */

/* 본문 · 추천 · 첨부

   board-view.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, head.sub.php 가 원래 순서대로 이어서 실으면 어느 선언이
   이기는지가 달라지지 않는다. */

body.solune-page #bo_v_con :is(ul, ol) {
    margin: 1rem 0;
    padding-left: 1.35rem;
}

body.solune-page #bo_v_con ul { list-style: disc; }
body.solune-page #bo_v_con ol { list-style: decimal; }

body.solune-page #bo_v_con a {
    color: var(--solune-accent);
    text-decoration: underline;
    text-decoration-color: color-mix(in srgb, var(--solune-accent) 35%, transparent);
    text-underline-offset: .16em;
}

body.solune-page #bo_v_act {
    display: flex;
    justify-content: center;
    gap: .55rem;
    margin: 2em 0 0 0;
    padding-top: 1.3rem;
    text-align: center;
}

body.solune-page #bo_v_act .bo_v_act_gng,
body.solune-page #bo_v_act > :is(.bo_v_good, .bo_v_nogood) {
    position: relative;
}

body.solune-page #bo_v_act :is(.bo_v_good, .bo_v_nogood) {
    display: inline-flex;
    min-width: 5.6rem;
    min-height: 2.55rem;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    margin: 0;
    padding: 0 .85rem;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-pill);
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    line-height: 1;
}

body.solune-page #bo_v_act :is(.bo_v_good, .bo_v_nogood):hover {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

body.solune-page #bo_v_act :is(.bo_v_good, .bo_v_nogood) strong {
    color: var(--solune-text);
    font-size: .75rem;
}

body.solune-page #bo_v_file,
body.solune-page #bo_v_link {
    margin: 0;
    padding: 1.25rem 2rem;
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}

body.solune-page #bo_v_file ul,
body.solune-page #bo_v_link ul {
    display: grid;
    gap: .6rem;
}

body.solune-page #bo_v_file li,
body.solune-page #bo_v_link li {
    display: grid;
    grid-template-columns: 1.4rem minmax(0, 1fr);
    gap: .6rem;
    align-items: start;
    margin: 0;
    padding: .85rem 1rem;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-sm);
    background: var(--solune-surface);
}

body.solune-page #bo_v_file li > i,
body.solune-page #bo_v_link li > i {
    float: none;
    margin: .1rem 0 0;
    color: var(--solune-primary);
    font-size: 1rem;
}

body.solune-page #bo_v_file li > a,
body.solune-page #bo_v_link li > a {
    float: none;
    min-width: 0;
    margin: 0;
    color: var(--solune-text-soft);
    overflow-wrap: anywhere;
}

body.solune-page #bo_v_file li > br,
body.solune-page #bo_v_link li > br { display: none; }

body.solune-page #bo_v_file .bo_v_file_cnt,
body.solune-page #bo_v_link .bo_v_link_cnt {
    grid-column: 2;
    color: var(--solune-muted);
    font-size: .7rem;
}

body.solune-page .bo_v_nb {
    margin: 0;
    padding: .55rem 2rem;
    border-top: 1px solid var(--solune-border);
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}

body.solune-page .bo_v_nb li {
    display: grid;
    grid-template-columns: 4.3rem minmax(0, 1fr) auto;
    gap: .7rem;
    align-items: center;
    min-height: 2.8rem;
    padding: .45rem 0;
    border: 0;
}

body.solune-page .bo_v_nb li + li { border-top: 1px solid var(--solune-border); }

/* ━━━━ board-view-comment-base.css ━━━━
   (옛 파일 · 원래 순서 122 · 원래 조건: 게시글 보기 · 1:1문의 글보기 · solune_board_view_css()) */

/* 이전·다음과 기본 스킨 댓글

   board-view.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, head.sub.php 가 원래 순서대로 이어서 실으면 어느 선언이
   이기는지가 달라지지 않는다. */

body.solune-page .bo_v_nb li:hover { background: transparent; }

body.solune-page .bo_v_nb .nb_tit {
    padding: 0;
    color: var(--solune-muted);
    font-size: .72rem;
    font-weight: 700;
}

body.solune-page .bo_v_nb .nb_tit i { color: var(--solune-primary); }

body.solune-page .bo_v_nb li > a {
    min-width: 0;
    overflow: hidden;
    color: var(--solune-text-soft);
    font-size: .82rem;
    text-overflow: ellipsis;
    white-space: nowrap;
}

body.solune-page .bo_v_nb li > a:hover { color: var(--solune-primary); }

body.solune-page .bo_v_nb .nb_date {
    float: none;
    color: var(--solune-muted);
    font-size: .7rem;
}

body.solune-page #bo_vc {
    margin: 0;
    padding: 0 2rem 2rem;
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}

body.solune-page #bo_vc > h2 {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
}

body.solune-page .cmt_btn {
    display: block;
    min-height: 3.75rem;
    margin: 0;
    padding: 0;
    border-bottom: 1px solid var(--solune-border);
    background: transparent;
    color: var(--solune-text);
    font-size: 1rem;
}

body.solune-page .cmt_btn span.total {
    margin: 0;
    padding-bottom: .85rem;
    color: var(--solune-text);
}

body.solune-page .cmt_btn span.total b { font-weight: 800; }
body.solune-page .cmt_btn span.total:after { bottom: -.05rem; height: 2px; background: var(--solune-primary); }

body.solune-page #bo_vc article {
    position: relative;
    margin-top: 0;
    margin-bottom: 0;
    padding: 1.15rem 0;
    border-bottom: 1px solid var(--solune-border);
}

body.solune-page #bo_vc article .pf_img {
    margin-right: .75rem;
}

body.solune-page #bo_vc article .pf_img img {
    width: 2.5rem;
    height: 2.5rem;
    border: 1px solid var(--solune-border);
    background: var(--solune-surface);
}

body.solune-page #bo_vc article .cm_wrap {
    width: calc(100% - 3.25rem);
    max-width: none;
}

body.solune-page #bo_vc header {
    display: flex;
    min-height: 2.5rem;
    align-items: center;
    padding-right: 2.4rem;
    line-height: 1.35;
}

body.solune-page #bo_vc header .guest,
body.solune-page #bo_vc header .member,
body.solune-page #bo_vc header .sv_guest,
body.solune-page #bo_vc header .sv_member {
    color: var(--solune-text);
    font-size: .8rem;
    font-weight: 800;
}

body.solune-page #bo_vc header > span:not(.bo_vc_hdinfo):not(.sound_only) {
    color: var(--solune-muted);
    font-size: .72rem;
}

body.solune-page #bo_vc .bo_vc_hdinfo {
    margin-left: .45rem;
    color: var(--solune-muted);
    font-size: .7rem;
}

body.solune-page #bo_vc .bo_vc_hdinfo i { color: var(--solune-primary); }

body.solune-page #bo_vc .cmt_contents {
    margin: .45rem 0 0;
    padding: 0;
    color: var(--solune-text-soft);
    line-height: 1.7;
}

body.solune-page #bo_vc .cmt_contents p { margin: 0; font-size: .88rem; }

body.solune-page #bo_vc .bo_vl_opt {
    top: 1rem;
    right: 0;
}

body.solune-page #bo_vc .bo_vl_opt .btn_cm_opt {
    display: inline-grid;
    width: 2.15rem;
    height: 2.15rem;
    place-items: center;
    border: 1px solid var(--solune-border);
    border-radius: .7rem;
    background: var(--solune-surface);
    color: var(--solune-muted);
}

body.solune-page #bo_vc .bo_vl_opt .btn_cm_opt:hover,
body.solune-page #bo_vc .bo_vl_opt .btn_cm_opt:focus-visible {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

body.solune-page #bo_vc .bo_vl_opt:focus-within .bo_vc_act {
    display: block !important;
}

body.solune-page #bo_vc .bo_vl_opt:hover .bo_vc_act {
    display: block !important;
}

body.solune-page #bo_vc article[style*="margin-left"] {
    border-left: 2px solid color-mix(in srgb, var(--solune-primary) 38%, var(--solune-border));
    padding-left: 1rem;
}

body.solune-page #bo_vc_w {
    margin: 1.25rem 0 0;
    padding: 1rem;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page #bo_vc_w form { display: grid; gap: .75rem; }

body.solune-page #bo_vc_w textarea {
    display: block;
    width: 100%;
    min-height: 7.5rem;
    margin: 0;
    padding: .85rem;
    border: 1px solid var(--solune-border-strong);
    border-radius: var(--solune-radius-sm);
    background: var(--solune-surface-soft);
    color: var(--solune-text);
    resize: vertical;
}

body.solune-page #bo_vc_w textarea::placeholder { color: var(--solune-muted); }

body.solune-page #bo_vc_w textarea:focus {
    border-color: var(--solune-primary);
    outline: 3px solid color-mix(in srgb, var(--solune-primary) 18%, transparent);
}

body.solune-page #bo_vc_w .btn_confirm {
    display: flex;
    min-height: 2.45rem;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    margin: 0;
}

body.solune-page #bo_vc_w .btn_submit {
    min-height: 2.45rem;
    padding: 0 1rem;
    border: 0;
    border-radius: var(--solune-radius-pill);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: .78rem;
    font-weight: 800;
}

body.solune-page #bo_vc_w .btn_submit:hover,
body.solune-page #bo_vc_w .btn_submit:focus-visible {
    background: var(--solune-primary-hover);
}

body.solune-page #bo_vc_w .chk_box label { color: var(--solune-muted); font-size: .75rem; }
body.solune-page #bo_vc_w .chk_box input[type="checkbox"] + label span { border-color: var(--solune-border-strong); background: var(--solune-surface-soft); }
body.solune-page #bo_vc_w .chk_box input[type="checkbox"]:checked + label span { border-color: var(--solune-primary); background: var(--solune-primary); }

/* ━━━━ board-view-responsive.css ━━━━
   (옛 파일 · 원래 순서 123 · 원래 조건: 게시글 보기 · 1:1문의 글보기 · solune_board_view_css()) */

/* 좁은 화면 규칙

   board-view.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, head.sub.php 가 원래 순서대로 이어서 실으면 어느 선언이
   이기는지가 달라지지 않는다. */

@media (max-width: 780px) {
    body.solune-page .btn_top.top.btn_bo_user {
        display: flex;
        min-height: 0;
        align-items: center;
        justify-content: flex-start;
        gap: .45rem;
        margin: 0 0 .65rem;
        padding: 0 .25rem;
        border: 0;
        background: transparent;
        line-height: 1;
    }

    body.solune-page .btn_top.top.btn_bo_user > li {
        float: none;
        width: auto;
        margin: 0;
    }

    body.solune-page .btn_top.top.btn_bo_user .bo_share {
        position: relative;
    }

    body.solune-page .btn_top.top.btn_bo_user #bo_v_share {
        position: absolute;
        top: calc(100% + .55rem);
        right: auto;
        left: 0;
        display: none;
        min-width: 8rem;
        min-height: 0;
        margin: 0;
        padding: .45rem;
        border: 1px solid var(--solune-border);
        border-radius: .8rem;
        background: var(--solune-surface);
        box-shadow: var(--solune-shadow-md);
    }

    body.solune-page .btn_top.top.btn_bo_user #bo_v_share .btn_scrap {
        display: flex;
        min-height: 2.2rem;
        align-items: center;
        gap: .45rem;
        padding: 0 .65rem;
        border-radius: .55rem;
        color: var(--solune-text-soft);
        font-size: .75rem;
        font-weight: 700;
    }

    body.solune-page .btn_top.top.btn_bo_user #bo_v_share .btn_scrap .sound_only {
        position: static !important;
        width: auto !important;
        height: auto !important;
        margin: 0 !important;
        overflow: visible !important;
        clip: auto !important;
        white-space: nowrap !important;
    }

    body.solune-page .btn_top.top.btn_bo_user #bo_v_share .btn_scrap:hover,
    body.solune-page .btn_top.top.btn_bo_user #bo_v_share .btn_scrap:focus-visible {
        background: var(--solune-primary-soft);
        color: var(--solune-primary);
        }

    body.solune-page #bo_v {
        padding-top: 0;
        border-radius: var(--solune-radius-sm);
    }

    body.solune-page #bo_v > header {
        padding: 1.65rem 1.05rem 1.4rem;
    }

    body.solune-page #bo_v.solune-view--notice .solune-view-kicker {
        min-height: 1.25rem;
        margin-bottom: .6rem;
        padding: 0 .5rem;
        font-size: .58rem;
    }

    body.solune-page #bo_v_title .bo_v_tit {
        font-size: 1.55rem;
    }

    body.solune-page #bo_v_info {
        display: flex;
        min-height: 0;
        align-items: center;
        flex-wrap: wrap;
        gap: .25rem .6rem;
        padding: .85rem 0 0;
        border-top: 1px solid var(--solune-border);
        border-bottom: 0;
        background: transparent;
        line-height: 1.5;
    }

    body.solune-page #bo_v_info > :is(.sv_member, .ip) {
        color: var(--solune-text);
        font-size: .76rem;
        font-weight: 800;
    }

    body.solune-page #bo_v_info > strong {
        display: inline-flex;
        align-items: center;
        gap: .2rem;
        color: var(--solune-muted);
        font-size: .7rem;
        font-weight: 600;
    }

    body.solune-page #bo_v_info > i { color: var(--solune-primary); }

    body.solune-page #bo_v_info .profile_info {
        align-items: flex-start;
    }

    body.solune-page #bo_v_info #bo_v_top {
        margin-top: .85rem;
    }

    body.solune-page #bo_v_top ul.btn_bo_user {
        justify-content: flex-start;
    }

    body.solune-page #bo_v_top ul.btn_bo_user li > :is(a, button) {
        width: 2.35rem;
        height: 2.35rem;
        border-radius: .65rem;
    }

    body.solune-page #bo_v_atc {
        padding: 1.2rem 1.05rem 1.45rem;
    }

    body.solune-page #bo_v_share {
        justify-content: flex-start;
        margin-bottom: 1rem;
    }

    body.solune-page #bo_v_con {
        font-size: .95rem;
        line-height: 1.9;
    }

    body.solune-page #bo_v_file,
    body.solune-page #bo_v_link {
        padding: 1rem 1.05rem;
    }

    body.solune-page .bo_v_nb {
        padding: .45rem 1.05rem;
    }

    body.solune-page .bo_v_nb li {
        grid-template-columns: 3.8rem minmax(0, 1fr);
        gap: .45rem;
    }

    body.solune-page .bo_v_nb .nb_date {
        grid-column: 2;
        margin-top: -.25rem;
    }

    body.solune-page #bo_vc {
        padding: 0 1.05rem 1.25rem;
    }

    body.solune-page #bo_vc article {
        padding: 1rem 0;
    }

    body.solune-page #bo_vc article .comment_inner {
        margin: 0;
        padding: 1rem;
        border: 1px solid var(--solune-border);
        border-radius: .85rem;
        background: var(--solune-surface);
    }

    body.solune-page #bo_vc article[style*="margin-left"] {
        padding-left: .75rem;
    }

    body.solune-page #bo_vc article .pf_img {
        margin-right: .55rem;
    }

    body.solune-page #bo_vc article .pf_img img {
        width: 2.2rem;
        height: 2.2rem;
    }

    body.solune-page #bo_vc article .cm_wrap {
        width: calc(100% - 2.75rem);
    }

    body.solune-page #bo_vc header {
        min-height: 2.2rem;
        padding-right: 2.1rem;
    }

    body.solune-page #bo_vc .cmt_contents p {
        font-size: .84rem;
    }

    body.solune-page #bo_vc article .comment_inner .bo_vl_opt {
        top: .75rem;
        right: .75rem;
    }

    body.solune-page #bo_vc_w {
        padding: .85rem;
    }

    body.solune-page #bo_vc_w .btn_confirm {
        align-items: stretch;
    }
}

@media (prefers-reduced-motion: reduce) {
    body.solune-page #bo_v_top ul.btn_bo_user li > :is(a, button),
body.solune-page #bo_v_share .btn {
        transition: none;
    }
}

/* ━━━━ board-list.css ━━━━
   (옛 파일 · 원래 순서 130 · 원래 조건: 게시판 목록(basic · gallery 스킨의 list.skin.php)) */

/* Solune board list — 밀도형 리스트.
   기존 --solune-* 토큰만 사용하므로 라이트/다크는 테마 전환을 그대로 따라간다. */

#bo_list .cb-wrap { display: flex; flex-direction: column; gap: 1.125rem; }

/* ── 툴바 카드: 윗줄(글 수 + 정렬 + 액션) + 아랫줄(분류 칩) ──
   board.css 가 body.solune-page #bo_btn_top 으로 카드를 걸어두므로
   같은 수준 이상의 선택자로 덮는다. */
body.solune-page #bo_list .cb-toolbar {
    display: flex;
    flex-direction: column;
    /* board.css 의 align-items:center 를 반드시 되돌린다.
       세로 배치에서는 자식이 가운데로 쪼그라들어 카드 폭을 못 채운다. */
    align-items: stretch;
    justify-content: flex-start;
    gap: 0;
    min-height: 0;
    margin: 0;
    padding: 0;
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

#bo_list .cb-total { display: flex; align-items: baseline; gap: .375rem; }
#bo_list .cb-total-count {
    color: var(--solune-text);
    font-size: 1.05rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    line-height: 1;
}
#bo_list .cb-total-label,
#bo_list .cb-total-page { color: var(--solune-muted); font-size: .72rem; font-weight: 700; }
#bo_list .cb-total-sep { color: var(--solune-border-strong); font-size: .72rem; }

/* 아이콘 버튼 */

/* 글쓰기 */

/* ── 카테고리 칩: 툴바 카드의 두 번째 줄 ─────────────────── */
#bo_list .cb-chips {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .4375rem;
    padding: .625rem 1.125rem;
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
#bo_list .cb-chip {
    display: inline-flex;
    align-items: center;
    gap: .375rem;
    height: 32px;
    padding: 0 .8125rem;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-pill);
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-family: inherit;
    font-size: .76rem;
    font-weight: 700;
    cursor: pointer;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
/* 칩이 흰색이 되면서 예전 hover 색(surface-soft)이 칩 줄 배경과 같아져
   hover 가 보이지 않는다. 옅은 프라이머리 틴트로 바꾼다. */
#bo_list .cb-chip:hover {
    border-color: color-mix(in srgb, var(--solune-primary) 36%, var(--solune-border));
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}
#bo_list .cb-chip.is-on,
#bo_list .cb-chip.is-on:hover {
    border-color: var(--solune-primary);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
}
#bo_list .cb-chip-n { font-size: .68rem; font-weight: 800; font-variant-numeric: tabular-nums; opacity: .62; }

/* ── 선택 액션 바 ──────────────────────────────────────── */
#bo_list .cb-selbar {
    position: sticky;
    top: 4.0625rem;
    z-index: 40;
    display: none;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    padding: .625rem .875rem;
    border: 1px solid var(--solune-primary);
    border-radius: 0;
    background: var(--solune-primary-soft);
}
#bo_list .cb-selbar.is-open { display: flex; }
#bo_list .cb-selbar-info { display: flex; align-items: center; gap: .5rem; }
#bo_list .cb-selbar-count {
    display: inline-grid;
    min-width: 22px;
    height: 22px;
    padding: 0 .4375rem;
    place-items: center;
    border-radius: var(--solune-radius-pill);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: .68rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}
#bo_list .cb-selbar-text { color: var(--solune-primary); font-size: .78rem; font-weight: 700; }
#bo_list .cb-selbar-acts { display: flex; align-items: center; gap: .4375rem; }
#bo_list .cb-selbar-btn {
    display: inline-flex;
    align-items: center;
    gap: .375rem;
    height: 30px;
    padding: 0 .75rem;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-family: inherit;
    font-size: .74rem;
    font-weight: 700;
    cursor: pointer;
    transition: border-color .14s ease, background-color .14s ease;
}
#bo_list .cb-selbar-btn:hover { border-color: var(--solune-border-strong); background: var(--solune-surface-soft); }

/* ── 목록 ──────────────────────────────────────────────── */
#bo_list .cb-list {
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}
#bo_list .cb-head {
    display: flex;
    align-items: center;
    gap: .75rem;
    padding: .6875rem 1.125rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
#bo_list .cb-head-label {
    flex: 1;
    color: var(--solune-muted);
    font-size: .68rem;
    font-weight: 800;
    letter-spacing: .1em;
    text-transform: uppercase;
}
#bo_list .cb-head-author,
#bo_list .cb-head-meta {
    color: var(--solune-muted);
    font-size: .68rem;
    font-weight: 800;
    letter-spacing: .04em;
    text-align: right;
}
#bo_list .cb-head-author { width: 84px; }
#bo_list .cb-head-meta { width: 108px; }

/* 체크박스 */
#bo_list .cb-chk { position: relative; display: inline-flex; flex: none; }
#bo_list .cb-chk input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    border: 0;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
#bo_list .cb-chk label {
    display: inline-grid;
    width: 18px;
    height: 18px;
    place-items: center;
    border: 1.5px solid var(--solune-border-strong);
    border-radius: 5px;
    background: var(--solune-surface);
    color: transparent;
    cursor: pointer;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
#bo_list .cb-chk label:hover { border-color: var(--solune-primary); }
#bo_list .cb-chk input:checked + label {
    border-color: var(--solune-primary);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
}
#bo_list .cb-chk input:focus-visible + label { outline: 2px solid var(--solune-primary); outline-offset: 2px; }

/* 행 */
#bo_list .cb-row {
    position: relative;
    display: grid;
    grid-template-columns: 18px 44px minmax(0, 1fr) auto;
    align-items: center;
    gap: .75rem;
    padding: .8125rem 1.125rem;
    border-top: 1px solid var(--solune-border);
    transition: background-color .16s ease;
}
#bo_list .cb-foot { display: flex; align-items: center; gap: 1rem; }
#bo_list .cb-head + .cb-row { border-top: 0; }
#bo_list .cb-row::before {
    content: "";
    position: absolute;
    inset: 0 auto 0 0;
    width: 3px;
    background: var(--solune-primary);
    opacity: 0;
    transition: opacity .16s ease;
}
#bo_list .cb-row:hover { background: var(--solune-surface-soft); }
#bo_list .cb-row:hover::before { opacity: .48; }
#bo_list .cb-row.is-sel { background: var(--solune-primary-soft); }
#bo_list .cb-row.is-sel::before { opacity: 1; }

/* 레일: 플래그 + 글번호 */
#bo_list .cb-rail {
    display: flex;
    width: 44px;
    flex: none;
    flex-direction: column;
    align-items: center;
    gap: .1875rem;
}
/* flex:none 과 nowrap 을 반드시 함께 준다.

   이 배지는 제목 줄(.cb-tit-line, flex)의 항목이다. 그냥 두면 flex-shrink 가
   1 이라 제목이 길 때 배지가 눌리고, white-space 가 normal 이라 눌린 폭에서
   글자가 줄바꿈된다 — 'NEW' 가 'NE' 와 'W' 로 갈려 18px 상자 밖으로 넘쳤다.
   높이는 18px 로 못박혀 있어 상자는 그대로인 채 글자만 삐져나오므로, 상자
   크기만 재면 멀쩡해 보인다(실측할 때는 글자 범위를 따로 재야 한다).

   줄어드는 몫은 제목이 받는다. .cb-tit 는 이미 overflow:hidden 과 말줄임을
   갖고 있어 좁아지면 꼬리를 접는다. */
#bo_list .cb-flag {
    display: inline-grid;
    height: 18px;
    flex: none;
    padding: 0 .375rem;
    place-items: center;
    border-radius: 5px;
    font-size: 10.5px;
    font-weight: 900;
    letter-spacing: .06em;
    white-space: nowrap;
}
#bo_list .cb-flag--hot { background: #fde8e8; color: #b42318; }
#bo_list .cb-flag--new { background: var(--solune-primary-soft); color: var(--solune-primary); }
html[data-theme="dark"] #bo_list .cb-flag--hot { background: #4a1d1a; color: #ffb4ab; }
#bo_list .cb-no {
    color: var(--solune-muted);
    font-size: 10.5px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    line-height: 1;
}

/* 본문: 제목 + 분류 */
#bo_list .cb-body { display: flex; min-width: 0; flex: 1; flex-direction: column; gap: .3125rem; }
#bo_list .cb-tit-line { display: flex; min-width: 0; align-items: center; gap: .375rem; }
/* 줄 높이가 23.2px 라 과녁이 WCAG 2.2 AA 의 24px 에 0.8px 모자랐다.
   글줄 모양은 그대로 두고 최소 높이만 채운다. */
#bo_list .cb-tit {
    display: block;
    min-height: 24px;
    overflow: hidden;
    color: var(--solune-text);
    font-size: var(--solune-board-title-size);
    font-weight: 600;
    line-height: 24px;
    text-decoration: none;
    text-overflow: ellipsis;
    white-space: nowrap;
    transition: color .14s ease;
}
#bo_list .cb-row:hover .cb-tit,
#bo_list .cb-tit:focus-visible { color: var(--solune-primary); }
#bo_list .cb-cmt {
    display: inline-grid;
    min-width: 1.15rem;
    height: 1.15rem;
    flex: none;
    padding: 0 .25rem;
    place-items: center;
    border-radius: .35rem;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: 10.5px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}
/* 분류 칩. 배경을 반드시 적어 준다 — 비워 두면 게시판 스킨의
   `.bo_cate_link {background:#e2eaf6}` 가 그대로 비쳐, 다크에서 밝은
   알약에 옅은 회색 글씨가 얹혀 대비가 1.6:1 까지 떨어진다. 여기서는
   테두리 하나로 조용히 두는 쪽이라 바탕은 투명이다. */
#bo_list .cb-cat {
    display: inline-flex;
    align-items: center;
    align-self: flex-start;
    height: 19px;
    padding: 0 .5rem;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-pill);
    background: transparent;
    color: var(--solune-muted);
    font-size: 10.5px;
    font-weight: 700;
}

/* 작성자 */
#bo_list .cb-author {
    display: flex;
    width: 84px;
    flex: none;
    align-items: center;
    justify-content: flex-end;
    gap: .375rem;
}
#bo_list .cb-avatar {
    display: inline-grid;
    width: 22px;
    height: 22px;
    flex: none;
    place-items: center;
    border-radius: 50%;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: .62rem;
    font-weight: 800;
}
/* 회원 사진일 때는 배지 껍데기를 걷고 이미지가 원을 채우게 한다. */
#bo_list .cb-avatar-photo { overflow: hidden; padding: 0; border: 0; background: none; }
#bo_list .cb-avatar-photo img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }
#bo_list .cb-author-name {
    overflow: hidden;
    color: var(--solune-muted);
    font-size: .72rem;
    font-weight: 600;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 조회 · 날짜 */
#bo_list .cb-meta {
    display: flex;
    width: 108px;
    flex: none;
    align-items: center;
    justify-content: flex-end;
    gap: .625rem;
    color: var(--solune-muted);
    font-size: .72rem;
    font-variant-numeric: tabular-nums;
}
#bo_list .cb-hit { display: inline-flex; align-items: center; gap: .25rem; }

/* 빈 상태 */
#bo_list .cb-empty {
    display: none;
    padding: 3.5rem 1.125rem;
    border-top: 1px solid var(--solune-border);
    color: var(--solune-muted);
    font-size: .82rem;
    text-align: center;
}
#bo_list .cb-empty.is-open { display: block; }

/* ── 모바일 ────────────────────────────────────────────── */
@media (max-width: 767px) {

/* 아이콘·글쓰기는 좁은 폭에서 다음 줄로 내린다. */

/* 칩은 카드 안에서 가로 스크롤 (카드를 뚫지 않도록 음수 마진 없이) */
    #bo_list .cb-chips {
        flex-wrap: nowrap;
        overflow-x: auto;
        padding: .5rem .875rem;
        scrollbar-width: none;
    }
    #bo_list .cb-chips::-webkit-scrollbar { display: none; }

    /* 터치 타깃 44px 이상 */
    #bo_list .cb-chip { height: 44px; padding: 0 1rem; white-space: nowrap; }

#bo_list .cb-head-author,
    #bo_list .cb-head-meta { display: none; }

    #bo_list .cb-row {
        grid-template-columns: 18px 38px minmax(0, 1fr);
        align-items: flex-start;
        padding: .8125rem 1rem;
        row-gap: .4375rem;
    }
    #bo_list .cb-rail { width: 38px; padding-top: .125rem; }
    #bo_list .cb-tit {
        overflow: visible;
        line-height: 1.42;
        overflow-wrap: anywhere;
        white-space: normal;
    }
    #bo_list .cb-tit-line { align-items: flex-start; }

    /* 작성자 · 조회 · 날짜를 제목 아래로 접어 넣는다 */
    #bo_list .cb-foot {
        grid-column: 3;
        flex-wrap: wrap;
        gap: .625rem;
    }
    #bo_list .cb-author,
    #bo_list .cb-meta {
        width: auto;
        justify-content: flex-start;
    }
    #bo_list .cb-avatar { width: 18px; height: 18px; font-size: .56rem; }
    #bo_list .cb-author-name,
    #bo_list .cb-meta { font-size: .7rem; }
}

/* ── 페이지네이션 ──────────────────────────────────────────
   board.css 가 .pg 에 서피스 컨테이너(배경+테두리+그림자)를 정의해 두었다.
   목록·툴바 카드와 같은 결로 읽히도록 그 정의를 그대로 쓰고,
   여기서는 카드 톤만 맞춘다. */
body.solune-page .solune-board-pagination .pg {
    border-color: var(--solune-border);
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

/* ── #bo_list 자체의 흰 카드 걷어내기 ──────────────────────
   skins.css 가 #bo_list 를 흰 카드(배경+테두리+그림자)로 칠한다.
   새 목록은 .cb-list 가 카드 역할을 하므로, 바깥 껍데기는 바탕만 남겨
   칩과 페이지네이션이 카드 밖 바탕 위에 놓이도록 한다. */
body.solune-page #bo_list:not(:where(.qa-skin)) {
    border-color: transparent;
    background: transparent;
    box-shadow: none;
}

/* 콘텐츠 바탕을 테마가 body 에 선언해 둔 페이지 색(--solune-page)으로 맞춘다.
   #wrapper 가 덮어쓰던 oklch(.98)(≈#fafafa)은 흰 카드와 구분이 되지 않아
   칩·페이지네이션이 흰 바탕 위에 떠 보였다. */
body.solune-page #wrapper.solune-wrapper { background: var(--solune-page); }

/* 비로그인 등 체크박스가 없는 목록은 열이 하나 줄어든다.
   4열 그리드를 그대로 두면 마지막 auto 열이 비고 본문이 밀린다. */
#bo_list .cb-row--nochk { grid-template-columns: 44px minmax(0, 1fr) auto; }

@media (max-width: 767px) {
    #bo_list .cb-row--nochk { grid-template-columns: 38px minmax(0, 1fr); }
    #bo_list .cb-row--nochk .cb-foot { grid-column: 2; }
}

/* ── board-list-v2 layout ─────────────────────────────────
   참고 목록의 흐름에 맞춰 제목·툴바·목록·페이지네이션을 한 표면으로 묶는다.
   동적 게시물 마크업과 테마 토큰은 그대로 사용한다. */
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header {
    min-height: 0;
    margin-bottom: 1.375rem !important;
    padding: 0 !important;
    overflow: visible;
    border: 0 !important;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header::before,
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header::after { display: none; }
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header > * { position: static; z-index: auto; }
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header #container_title {
    color: var(--solune-text);
    font-size: clamp(24px, 4.4vw, 32px);
    font-weight: 700;
    letter-spacing: -.02em;
    line-height: 1.15;
}
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header-action {
    min-height: 38px;
    padding: 0 .875rem;
    border: 1px solid var(--solune-border);
    border-radius: 9px;
    background: var(--solune-surface);
    color: var(--solune-text);
    font-size: .8125rem;
    font-weight: 600;
}
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header-action:hover,
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header-action:focus-visible {
    border-color: var(--solune-border-strong);
    background: var(--solune-surface-soft);
    color: var(--solune-text);
}
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header-action.solune-page-header-write {
    border-color: var(--solune-primary);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-weight: 700;
}
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header-action.solune-page-header-write:hover,
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header-action.solune-page-header-write:focus-visible {
    border-color: var(--solune-primary-hover);
    background: var(--solune-primary-hover);
    color: var(--solune-primary-ink);
}

#bo_list .cb-wrap {
    gap: 0;
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: 12px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}
/* 선택 작업바가 고정 헤더 아래에서 목록을 따라갈 수 있도록 클리핑을 해제한다. */
body.solune-page #bo_list .cb-wrap:has(.cb-selbar) { overflow: visible; }
body.solune-page #bo_list .cb-toolbar {
    border: 0;
    border-bottom: 1px solid var(--solune-border);
    border-radius: 12px 12px 0 0;
    background: var(--solune-surface);
    box-shadow: none;
}

#bo_list .cb-chips { border-top: 1px solid var(--solune-border); }
#bo_list .cb-list {
    overflow: visible;
    border: 0;
    border-radius: 0;
    background: var(--solune-surface);
    box-shadow: none;
}
#bo_list .cb-head {
    display: grid;
    grid-template-columns: 18px 44px minmax(0, 1fr) 84px 108px;
    align-items: center;
    gap: .75rem;
    min-height: 36px;
    padding: 0 1.125rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
#bo_list .cb-head:not(:has(.cb-chk)) {
    grid-template-columns: 44px minmax(0, 1fr) 84px 108px;
}
#bo_list .cb-head-no,
#bo_list .cb-head-label,
#bo_list .cb-head-author,
#bo_list .cb-head-meta {
    color: var(--solune-muted);
    font-size: .6875rem;
    font-weight: 700;
    letter-spacing: .01em;
}
#bo_list .cb-head-no { text-align: center; }
#bo_list .cb-head-label { min-width: 0; }
#bo_list .cb-head-author { width: auto; text-align: left; }
#bo_list .cb-head-meta {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: .625rem;
    width: auto;
    text-align: right;
}
#bo_list .cb-head-hit,
#bo_list .cb-head-date { min-width: 0; text-align: right; }
#bo_list .cb-row {
    padding: .6875rem 1.125rem;
    border-top: 0;
    border-bottom: 1px solid var(--solune-border);
}
#bo_list .cb-list > .cb-row:last-child { border-bottom: 0; }
#bo_list .cb-row:hover { background: var(--solune-surface-soft); }
#bo_list .cb-row:hover::before { opacity: .35; }
#bo_list .cb-foot { gap: .75rem; }

body.solune-page .solune-board-pagination {
    min-height: 64px;
    align-items: center;
    margin: 0;
    padding: 1rem;
    border-top: 1px solid var(--solune-border);
    border-radius: 0 0 12px 12px;
    background: var(--solune-surface);
}
body.solune-page .solune-board-pagination .pg {
    padding: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
}
/* 페이지 넘김의 모양은 default.css 의 페이지 넘김 절 한 벌이 맡는다. */

.solune-board-list-actions {
    margin-top: 1rem;
}
.solune-board-search-inline {
    display: flex;
    align-items: center;
    gap: .5rem;
    width: min(100%, 35rem);
    margin: 0 auto;
}
.solune-board-search-inline .solune-board-search-select {
    flex: 0 0 7.25rem;
}
/* 전역 select 배경 규칙이 daisyUI Select의 기본 화살표를 지우므로,
   동일한 currentColor 기반 표시를 Solune 검색 셀렉트에 복원한다.
   appearance는 daisyUI 5의 base-select 동작을 유지하도록 덮어쓰지 않는다. */
body.solune-page #bo_list select.solune-board-search-select {
    background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%) !important;
    background-position: calc(100% - 20px) calc(1px + 50%), calc(100% - 16.1px) calc(1px + 50%) !important;
    background-repeat: no-repeat !important;
    background-size: 4px 4px !important;
    padding-inline: .75rem 1.75rem;
}
body.solune-page #bo_list select.solune-board-search-select:open {
    background-image: linear-gradient(135deg, transparent 50%, currentColor 50%), linear-gradient(45deg, currentColor 50%, transparent 50%) !important;
}
body.solune-page #bo_list #bo_sch select.solune-board-search-select {
    background-color: var(--solune-surface-soft) !important;
    background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%) !important;
}
.solune-board-search-inline .solune-board-search-input {
    height: 40px;
    min-width: 0;
    flex: 1;
    padding: 0 .8125rem;
    border: 1px solid var(--solune-border);
    border-radius: 9px;
    background: var(--solune-surface);
    color: var(--solune-text);
    font-family: inherit;
    font-size: .8125rem;
}
.solune-board-search-inline .solune-board-search-input:focus,
.solune-board-search-inline .solune-board-search-select:focus {
    border-color: var(--solune-primary);
    box-shadow: 0 0 0 3px var(--solune-primary-soft);
    outline: 0;
}
.solune-board-search-inline .solune-board-search-submit {
    flex: 0 0 auto;
    height: 40px;
    padding: 0 1.125rem;
    border: 0;
    border-radius: 9px;
    background: var(--solune-text);
    color: var(--solune-surface);
    font-family: inherit;
    font-size: .8125rem;
    font-weight: 700;
    cursor: pointer;
    transition: filter .14s ease;
}
.solune-board-search-inline .solune-board-search-submit:hover,
.solune-board-search-inline .solune-board-search-submit:focus-visible { filter: brightness(1.15); }

@media (max-width: 767px) {
    #bo_list .cb-head {
        grid-template-columns: 18px minmax(0, 1fr);
        min-height: 40px;
    }
    #bo_list .cb-head:not(:has(.cb-chk)) { display: none; }
    #bo_list .cb-head-no,
    #bo_list .cb-head-label,
    #bo_list .cb-head-author,
    #bo_list .cb-head-meta { display: none; }
    
    #bo_list .cb-row { border-bottom-color: var(--solune-border); }
    .solune-board-search-inline { flex-wrap: wrap; }
    .solune-board-search-inline .solune-board-search-select { flex-basis: 7rem; }
    .solune-board-search-inline .solune-board-search-input { flex-basis: calc(100% - 7.5rem); }
    .solune-board-search-inline .solune-board-search-submit { width: 100%; }
}

/* ── 시안 반영: 괘선으로 끊는 편집형 목록 ───────────────────────
   참고 시안(질문답변 리스트)은 목록 위아래를 진한 줄로 닫고 행 사이는 옅은
   줄로만 나눈다. 제목을 키워(17px) 글이 먼저 읽히게 하고, 글쓴이·조회·날짜는
   작게 내려 눈이 제목 줄을 따라가게 한다.

   시안은 카드 없이 흰 바탕에 바로 얹지만 여기서는 흰 판을 남긴다. 이 화면은
   오른쪽에 흰 사이드바 카드가 서는 두 칸 레이아웃이라, 목록만 바탕에 눕히면
   그 자리만 사이트에서 겉돈다(색을 시안 것으로 바꾸지 않는 까닭과 같다).
   대신 판의 테두리와 그림자를 걷어 괘선이 일을 하게 한다.

   색도 시안의 #111 · #2b5cd9 대신 팔레트를 쓴다 — 진한 줄은 --solune-text,
   강조는 --solune-primary, 옅은 줄은 --solune-border.

   이 절은 위 v2 절을 덮는 마지막 층이다. 값만 바꾸고 위의 규칙과 주석은
   그대로 둔다. */

/* 판: 테두리·그림자를 걷고 안쪽 여백만 남긴다. */
#bo_list .cb-wrap {
    border: 0;
    box-shadow: none;
}

/* 툴바: 바탕을 걷고 목록을 여는 진한 줄을 얹는다. */
body.solune-page #bo_list .cb-toolbar {
    border: 0;
    border-bottom: 1px solid var(--solune-border);
    border-radius: 12px 12px 0 0;
}

#bo_list .cb-chips { padding-inline: 1.25rem; }

/* 열 머리: 회색 띠를 걷고 진한 윗줄로 목록의 시작을 알린다. */
#bo_list .cb-head {
    min-height: 0;
    padding: .8125rem 1.25rem;
    border-top: 1px solid var(--solune-text);
    background: none;
}
#bo_list .cb-head-no,
#bo_list .cb-head-label,
#bo_list .cb-head-author,
#bo_list .cb-head-meta {
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .04em;
}

/* 행: 시안의 넉넉한 위아래 여백(16px). */
#bo_list .cb-row {
    padding: 1rem;
    border-bottom: 1px solid var(--solune-border);
}
/* 마지막 행 아래는 진한 줄로 목록을 닫는다. */
#bo_list .cb-list { border-bottom: 1px solid var(--solune-text); }
#bo_list .cb-list > .cb-row:last-child { border-bottom: 0; }
/* 왼쪽 강조 막대는 고른 행에만 둔다. 얹을 때마다 나오면 넓어진 행에서
   막대가 길게 서서 괘선보다 먼저 눈에 든다. */
#bo_list .cb-row:hover::before { opacity: 0; }
#bo_list .cb-row.is-sel::before { opacity: 1; }

/* 제목: 시안 17px. --solune-board-title-size 는 표형 목록(board-table.css)과
   함께 쓰는 토큰이라 건드리지 않고 이 목록에서만 키운다. */
#bo_list .cb-tit {
    min-height: 26px;
    font-size: 0.9rem;
    letter-spacing: -.02em;
    line-height: 26px;
}

/* 댓글 수: 알약을 걷고 숫자만 남긴다. 제목 옆에서 알약이 두 번째 과녁처럼
   보여 어디를 눌러야 하는지 헷갈렸다. */
#bo_list .cb-cmt {
    min-width: 0;
    height: auto;
    padding: 0;
    border-radius: 0;
    background: none;
    font-size: .78rem;
    font-weight: 700;
}

/* 글쓴이 · 조회 · 날짜 — 시안의 24px 원과 13px 글자. 머리와 행의 칸 너비는
   짝을 맞춰 함께 넓힌다(따로 고치면 열이 어긋난다). */
#bo_list .cb-head { grid-template-columns: 18px 44px minmax(0, 1fr) 120px 108px; }
#bo_list .cb-head:not(:has(.cb-chk)) { grid-template-columns: 44px minmax(0, 1fr) 120px 108px; }
#bo_list .cb-author { width: 120px; justify-content: flex-start; }
#bo_list .cb-head-author { text-align: left; }
#bo_list .cb-avatar { width: 24px; height: 24px; font-size: .66rem; }
#bo_list .cb-author-name { font-size: .82rem; }
#bo_list .cb-meta { font-size: .8rem; }

/* 페이지 넘김: 목록을 닫는 진한 줄 아래 여백에 둔다. */
body.solune-page .solune-board-pagination {
    padding: 1.25rem;
    border-top: 0;
}

@media (max-width: 767px) {
    /* 좁은 폭에서는 시안의 모바일 카드처럼 제목 아래로 접는다. 여백만 시안에
       맞추고 접는 방식은 위 모바일 절을 그대로 쓴다. */
    
    #bo_list .cb-chips { padding-inline: 1rem; }
    /* 좁은 폭에서는 열 이름이 모두 숨는다(위 모바일 절). 남는 것은 전체선택
       상자 하나뿐이라 다섯 칸 격자를 유지할 까닭이 없다 — 빈 칸이 자리만
       차지하므로 가로 한 줄로 접고 44px 과녁만 지킨다. */
    #bo_list .cb-head {
        display: flex;
        min-height: 44px;
        padding: 0 1rem;
    }
    #bo_list .cb-row { padding: 1.125rem 1rem; }
    #bo_list .cb-tit { font-size: 1rem; line-height: 1.45; }
    body.solune-page .solune-board-pagination { padding: 1rem; }
}

/* ── 머리줄로 옮긴 글 수와 단추 ──────────────────────────────
   시안은 제목 바로 아래에 글 수를, 제목 오른쪽 글쓰기 왼편에 관리자·RSS 를
   둔다. 둘 다 머리줄이 그려진 뒤에야 값이 정해져(주석은 head.layout.php 와
   list.skin.php 에) 스킨이 자바스크립트로 옮긴다. 여기서는 옮겨 온 뒤의
   모양과, 비게 된 툴바를 접는 일을 맡는다. */

/* 제목 아래 한 줄 */
body.solune-page .solune-page-header-desc {
    margin: .5rem 0 0;
    color: var(--solune-text-soft);
    font-size: .9375rem;
    line-height: 1.6;
}
body.solune-page .solune-page-header-desc:empty { display: none; }
body.solune-page .solune-page-header-desc .cb-total { display: inline-flex; align-items: baseline; gap: .375rem; }
/* 제목 아래에서는 숫자를 본문 크기에 맞춘다. 툴바에 있을 때의 1.05rem 은
   그 카드 안에서 제목 노릇을 하던 크기라 여기서는 너무 굵다. */
body.solune-page .solune-page-header-desc .cb-total-count { font-size: 1rem; font-weight: 700; }
body.solune-page .solune-page-header-desc .cb-total-label,
body.solune-page .solune-page-header-desc .cb-total-page { font-size: .9375rem; font-weight: 500; }

/* 글쓰기 왼쪽의 아이콘 단추(관리자 · RSS). 글자 단추와 같은 높이·테두리를
   쓰되 정사각이라 좌우 여백만 없앤다. */
body.solune-page:has(#bo_list:not(:where(.qa-skin))) .solune-page-header-icon {
    display: inline-grid;
    width: 38px;
    padding: 0;
    place-items: center;
    color: var(--solune-muted);
}

/* 툴바에는 분류 칩 줄만 남는다(글 수와 단추는 머리줄로 갔다). 칩이 없는
   게시판에서는 스킨이 상자째 내지 않으므로 여기서 숨길 것이 없다. 남은
   줄이 카드 위쪽 모서리를 맡으므로 윗 테두리만 지운다. */
#bo_list .cb-toolbar:has(.cb-chips) .cb-chips { border-top: 0; }

/* ── 시안 v5: 카드 한 장 · 한 줄 행 ─────────────────────────────
   참고: 자유게시판 리스트 v5 (단독).html

   바로 위 "괘선으로 끊는 편집형 목록" 층은 질문답변 시안을 따라 목록 위아래를
   진한 줄로 닫고 행을 두 줄(제목 / 그 아래 분류)로 두었다. v5 는 방향이
   다르다 — 목록을 테두리 둘린 카드 한 장에 담고, 분류 칩 줄을 회색 띠로
   머리에 얹고, 한 행을 "[분류] 제목 댓글수 HOT" 한 줄로 세운다. 행이 낮아진
   만큼 한 화면에 보이는 글이 는다.

   머리와 행은 같은 여섯 칸 격자를 쓴다. 전에는 머리가 다섯 칸(조회·날짜를
   한 칸에), 행이 네 칸(글쓴이·조회·날짜를 한 칸에)이라 열 이름과 값이 서로
   다른 자로 재어져 조금씩 어긋났다. 조회·날짜를 감싸던 상자를
   display:contents 로 풀어 칸마다 따로 서게 한다.

   이 층도 값만 덮고 위의 규칙과 주석은 그대로 둔다. 색은 팔레트를 쓴다 —
   시안 #2b5cd9 -> --solune-primary, #eef2fc -> --solune-primary-soft,
   #f8f9fb -> --solune-surface-soft, #e5484d -> 아래 HOT 의 짙은 빨강. */

/* 이 층은 목록형(basic) 전용이다. 갤러리 스킨도 이 시트(옛 board-list.css)를
   함께 실어서, 넓은 화면(768px 이상)의 행 격자 · display:contents 가 갤러리
   카드에도 걸려 카드 밑줄(글쓴이 · 조회 · 날짜)이 풀려 세로로 쌓였다
   (2026-09-23 이 층을 얹은 날부터, 2026-09-28 에 발견). 그래서 이 층의
   #bo_list 는 모두 #bo_list:not(:where(.cb-gallery)) 로 적는다 — :where 라
   특정도는 그대로다. 아래 :visited 절은 두 스킨이 함께 쓰므로 그대로 둔다. */

/* 판: 위 층이 걷은 테두리를 되살린다. 모서리는 시안의 14.
   overflow 는 건드리지 않는다 — 관리자 화면에서는 sticky 선택 작업줄을 살리려고
   :has(.cb-selbar) 로 풀어 두었고(위 v2 절), 그래서 모서리는 판이 자르지 않고
   칩 띠가 스스로 둥글린다. */
#bo_list:not(:where(.cb-gallery)) .cb-wrap {
    border: 1px solid var(--solune-border);
    border-radius: .875rem;
}

/* 칩 띠: 시안처럼 옅은 바탕에 아래로 선 하나. 안쪽 모서리는 판의 14 에서
   테두리 1 을 뺀 13 이다. */
body.solune-page #bo_list:not(:where(.cb-gallery)) .cb-toolbar {
    border-bottom: 1px solid var(--solune-border);
    border-radius: 13px 13px 0 0;
    background: var(--solune-surface-soft);
}
#bo_list:not(:where(.cb-gallery)) .cb-chips {
    gap: .25rem;
    padding: .75rem 1rem;
    border-top: 0;
    border-radius: 13px 13px 0 0;
    background: var(--solune-surface-soft);
}
#bo_list:not(:where(.cb-gallery)) .cb-chip {
    height: 32px;
    gap: .375rem;
    padding: 0 .8125rem;
    font-size: .8125rem;
    font-weight: 600;
}
/* 개수는 이름보다 한 단 가늘고 작게. 흐리게(opacity) 두던 것을 색으로 바꾼다 —
   투명도는 켜진 칩의 흰 글자 위에서 바탕색이 비쳐 대비를 가늠하기 어렵다. */
#bo_list:not(:where(.cb-gallery)) .cb-chip-n {
    color: var(--solune-muted);
    font-size: .71875rem;
    font-weight: 500;
    opacity: 1;
}
#bo_list:not(:where(.cb-gallery)) .cb-chip.is-on .cb-chip-n { color: inherit; opacity: .78; }

/* 분류가 없는 게시판(예: 질문답변)은 스킨이 칩 띠를 아예 내지 않는다. 그러면 판의 맨 위에
   흰 목록이 곧바로 오는데, 관리자 화면은 sticky 선택 작업줄 때문에 판이 모서리를
   자르지 않아(overflow:visible) 네모난 목록 모서리가 둥근 테두리 밖으로 삐져나왔다.
   칩 띠가 하던 일을 열 머리가 맡게 한다 — 같은 회색 바탕과 윗모서리 13 으로,
   분류가 있는 게시판과 위쪽 마감이 같아 보이게. */
#bo_list:not(:where(.cb-gallery)) .cb-wrap:not(:has(.cb-toolbar)) .cb-list { border-radius: 13px 13px 0 0; }
#bo_list:not(:where(.cb-gallery)) .cb-wrap:not(:has(.cb-toolbar)) .cb-head {
    border-radius: 13px 13px 0 0;
    background: var(--solune-surface-soft);
}

/* 위 층이 목록 위아래에 그은 진한 줄을 걷는다 — v5 는 옅은 선만 쓴다. */
#bo_list:not(:where(.cb-gallery)) .cb-list { border-bottom: 0; }
/* 위 층들은 목록을 진한 줄로 닫았으므로 마지막 행의 선을 지웠다
   (.cb-list > .cb-row:last-child { border-bottom: 0 }). 그 진한 줄을 여기서
   걷었더니 마지막 행과 페이지 넘김 사이에 아무 선이 없게 됐다. 다른 행과
   같은 옅은 선을 되살린다. */
#bo_list:not(:where(.cb-gallery)) .cb-list > .cb-row:last-child { border-bottom: 1px solid var(--solune-border); }

/* 분류 칩: 테두리만 두던 것을 시안처럼 옅은 강조색으로 채운다. 바탕을 반드시
   적는 까닭은 위 기본 절의 주석과 같다(.bo_cate_link 의 밝은 바탕이 비친다). */
#bo_list:not(:where(.cb-gallery)) .cb-cat {
    height: auto;
    padding: 3px 7px;
    border: 0;
    border-radius: 5px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: .71875rem;
    /* 스킨 style.css 의 .bo_cate_link { font-weight: normal !important } 가
       이겨서, 위 기본 절의 700 도 한 번도 먹은 적이 없다(실측 400).
       그 규칙은 다른 목록 스킨도 쓰므로 거기서 지우지 않고 여기서만 맞붙인다. */
    font-weight: 600 !important;
    line-height: 1.2;
}

/* HOT: 옅은 분홍 알약이던 것을 시안처럼 채운 빨강으로. 흰 글자 대비 6.6:1.
   다크에서도 같은 값을 쓴다 — 위 절의 다크 전용 값(어두운 바탕에 분홍 글자)을
   여기서 되돌린다. */
#bo_list:not(:where(.cb-gallery)) .cb-flag--hot,
html[data-theme="dark"] #bo_list:not(:where(.cb-gallery)) .cb-flag--hot {
    height: auto;
    padding: 2px 6px;
    border-radius: 4px;
    background: #b42318;
    color: #fff;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .08em;
    line-height: 1.3;
}

@media (min-width: 768px) {
    /* 머리와 행이 같은 자로 잰다: 선택 18 · 번호 40 · 제목 · 글쓴이 110 · 조회 56 · 날짜 56 */
    #bo_list:not(:where(.cb-gallery)) .cb-head,
    #bo_list:not(:where(.cb-gallery)) .cb-row {
        grid-template-columns: 18px 40px minmax(0, 1fr) 110px 56px 56px;
        column-gap: .875rem;
    }
    #bo_list:not(:where(.cb-gallery)) .cb-head:not(:has(.cb-chk)),
    #bo_list:not(:where(.cb-gallery)) .cb-row--nochk {
        grid-template-columns: 40px minmax(0, 1fr) 110px 56px 56px;
    }
    #bo_list:not(:where(.cb-gallery)) :is(.cb-head-meta, .cb-foot, .cb-meta) { display: contents; }

    /* 열 머리: 시안 12px 흐린 글자, 아래로 선 하나. */
    #bo_list:not(:where(.cb-gallery)) .cb-head {
        padding: .625rem 1.25rem;
        border-top: 0;
        border-bottom: 1px solid var(--solune-border);
    }
    #bo_list:not(:where(.cb-gallery)) :is(.cb-head-no, .cb-head-label, .cb-head-author, .cb-head-hit, .cb-head-date) {
        color: var(--solune-muted);
        font-size: .75rem;
        font-weight: 500;
        letter-spacing: 0;
    }
    #bo_list:not(:where(.cb-gallery)) :is(.cb-head-hit, .cb-head-date) { text-align: right; }

    /* 행: 위아래 13 · 좌우 20. */
    #bo_list:not(:where(.cb-gallery)) .cb-row { padding: .8125rem 1.25rem; }

    /* 번호: 10.5px 굵게이던 것을 시안처럼 13px 보통으로. */
    #bo_list:not(:where(.cb-gallery)) .cb-no {
        font-size: .8125rem;
        font-weight: 400;
    }

    /* 제목 줄: 분류 칩을 제목 앞으로 끌어와 한 줄로 세운다. 마크업 순서(제목 ->
       분류)는 그대로다 — 낭독기는 제목부터 읽는 편이 낫다. */
    #bo_list:not(:where(.cb-gallery)) .cb-body {
        flex-direction: row;
        align-items: center;
        gap: .5rem;
    }
    #bo_list:not(:where(.cb-gallery)) .cb-cat { order: -1; flex: none; align-self: center; }
    #bo_list:not(:where(.cb-gallery)) .cb-tit-line { min-width: 0; flex: 1; gap: .5rem; }
    #bo_list:not(:where(.cb-gallery)) .cb-tit {
        font-size: .9375rem;
        letter-spacing: -.01em;
    }
    #bo_list:not(:where(.cb-gallery)) .cb-cmt { font-size: .78125rem; font-weight: 600; }

    /* 글쓴이 · 조회 · 날짜: 칸이 폭을 정하므로 상자에 박힌 너비를 풀어 준다. */
    #bo_list:not(:where(.cb-gallery)) .cb-author { width: auto; min-width: 0; justify-content: flex-start; gap: .4375rem; }
    #bo_list:not(:where(.cb-gallery)) .cb-avatar { width: 22px; height: 22px; }
    #bo_list:not(:where(.cb-gallery)) .cb-author-name { font-size: .8125rem; font-weight: 400; }
    #bo_list:not(:where(.cb-gallery)) :is(.cb-hit, .cb-datetime) {
        justify-content: flex-end;
        color: var(--solune-muted);
        font-size: .8125rem;
        font-variant-numeric: tabular-nums;
        text-align: right;
    }
    /* 열 이름 "조회" 가 위에 서 있으므로 눈 아이콘은 같은 말을 두 번 하는 셈이다.
       좁은 폭에서는 열 이름이 숨으므로 거기서는 그대로 둔다. */
    #bo_list:not(:where(.cb-gallery)) .cb-hit .fa { display: none; }
}

/* ── 읽은 글 표시(:visited) ───────────────────────────────────
   한 번 열어 본 글은 제목을 흐리게 해서, 목록에 다시 왔을 때 어디까지 봤는지
   눈으로 집어낼 수 있게 한다. basic 과 gallery 가 제목에 같은 .cb-tit 를 쓰고
   이 시트를 함께 실으므로 한 곳에 적는다.

   :visited 로는 색 계열만 바꿀 수 있다 — 브라우저가 방문 기록이 새는 것을
   막으려고 color · background-color · border-color · outline-color 정도만
   허용하고, 투명도도 무시해 불투명하게 그린다. 그래서 굵기나 아이콘으로는
   표시할 수 없다.

   실제 브라우저에서 흐려지는 것은 확인했다(2026-09-18, 사용자 확인).

   다만 이 규칙은 자동화로는 잴 수 없으니 다음에 손볼 때 헛수고하지 말 것.
   방문 기록이 샐까 봐 getComputedStyle 은 늘 방문 전 색을 돌려주고, 자동화로
   띄운 크롬은 창을 띄우고 프로필을 남겨도 :visited 를 아예 칠하지 않는다
   (픽셀을 직접 재서 확인). 규칙이 닿는지까지만 보려면 같은 자리를 :link 로
   바꿔 재면 된다 — 그러면 색이 바뀌므로 선택자·특정도·적재순서를 가릴 수 있다.

   색은 --solune-muted. 대비는 라이트 4.97:1 · 다크 6.62:1 로 본문 기준
   4.5:1 을 넘는다(--solune-text-soft 는 10:1 이라 안전하지만 본래 색과
   너무 비슷해 읽은 글인지 구분되지 않았다).

   hover 를 뒤에 한 번 더 적는다. :visited 와 특정도가 같아(둘 다 1,2,0)
   나중에 적은 쪽이 이기는데, 이 절이 파일 끝이라 그냥 두면 읽은 글에는
   얹었을 때 색이 바뀌지 않는다. */
#bo_list .cb-tit:visited { color: var(--solune-muted); }
#bo_list .cb-row:hover .cb-tit,
#bo_list .cb-tit:focus-visible { color: var(--solune-primary); }

/* ━━━━ board-gallery.css ━━━━
   (옛 파일 · 원래 순서 135 · 원래 조건: 갤러리 목록(gallery 스킨의 list.skin.php)) */

/* 갤러리 목록 — 밝은 카드 격자

   시안 `갤러리 게시판 리디자인 (standalone).html` 의 1b "밝은 카드 갤러리"
   를 따른다. 흰 카드 · 넉넉한 여백 · 파란 액션이 요지다.
   치수(모서리 14px · 간격 22px · 썸네일 16:10)는 시안 그대로 쓰고
   색은 사이트 팔레트(--solune-*)를 쓴다. 시안의 #2F62D8 을 그대로
   넣으면 이 화면만 사이트에서 겉돈다.

   board-list.css(130) 는 `.cb-wrap` 한 장에 목록 전체를 담는 껍데기를
   씌운다. 갤러리는 도구줄 · 선택바 · 카드가 각각 따로 선 카드라
   그 껍데기를 걷어야 한다. 그래서 이 파일은 board-list.css 뒤(135)에
   실리고, 선택자에 `#bo_list.cb-gallery` 를 함께 적어
   `body.solune-page #bo_list .cb-wrap`(1,2,1) 보다 한 겹 위에 선다.

   목록 표시만 바꾼 것이라 마크업의 갈고리(.cb-row · .cb-chk input ·
   .cb-selbar-count · #chkall)는 그대로 두었다. board-list.js 가
   그 이름들로 선택 상태를 센다. */

/* ── 바깥 껍데기 걷기 ──────────────────────────────────── */
body.solune-page #bo_list.cb-gallery .cb-wrap {
    gap: 1.125rem;
    overflow: visible;
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
}

/* 도구줄은 이제 스스로 선 카드다. */
body.solune-page #bo_list.cb-gallery .cb-toolbar {
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page #bo_list.cb-gallery .cb-chips {
    padding: .75rem 1.125rem;
    border-top: 1px solid var(--solune-border);
}

/* ── 선택 작업바 ───────────────────────────────────────── */
/* 시안은 이 줄을 늘 띄워 둔다. 격자에는 열 이름줄이 없어
   전체선택 상자가 여기 말고 설 자리가 없기 때문이다.
   board-list.js 가 붙이는 .is-open 은 강조에만 쓴다. */
body.solune-page #bo_list.cb-gallery .cb-selbar {
    position: static;
    display: flex;
    padding: .6875rem 1.125rem;
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
    transition: border-color .16s ease, background-color .16s ease;
}
body.solune-page #bo_list.cb-gallery .cb-selbar.is-open {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
}
body.solune-page #bo_list.cb-gallery .cb-selbar-info { gap: .625rem; }
body.solune-page #bo_list.cb-gallery .cb-selbar-text {
    color: var(--solune-muted);
    font-size: .78rem;
    font-weight: 600;
}
body.solune-page #bo_list.cb-gallery .cb-selbar.is-open .cb-selbar-text {
    color: var(--solune-primary);
    font-weight: 700;
}
/* 고른 것이 없으면 "전체선택", 있으면 "N 개 글을 선택했습니다". */
body.solune-page #bo_list.cb-gallery .cb-selbar-idle {
    color: var(--solune-muted);
    font-size: .78rem;
    font-weight: 600;
}
body.solune-page #bo_list.cb-gallery .cb-selbar:not(.is-open) .cb-selbar-count,
body.solune-page #bo_list.cb-gallery .cb-selbar:not(.is-open) .cb-selbar-text,
body.solune-page #bo_list.cb-gallery .cb-selbar:not(.is-open) .cb-selbar-clear { display: none; }
body.solune-page #bo_list.cb-gallery .cb-selbar.is-open .cb-selbar-idle { display: none; }
/* 선택 전에도 삭제·복사·이동은 자리를 지킨다(누르면 안내가 뜬다).
   버튼이 나타났다 사라지면 줄 높이가 흔들린다. */
body.solune-page #bo_list.cb-gallery .cb-selbar:not(.is-open) .cb-selbar-btn {
    color: var(--solune-muted);
}

/* 전체선택 상자는 열 이름줄에서 이 바 안으로 옮겨 왔다. */
body.solune-page #bo_list.cb-gallery .cb-chk--all label { border-radius: 5px; }

/* ── 격자 ──────────────────────────────────────────────── */
body.solune-page #bo_list.cb-gallery .cb-list {
    display: grid;
    /* 시안은 본문 832px 를 3열(카드 ≈ 263px)로 나눈다.
       우리 본문은 사이드바를 뺀 ≈ 766px 라 232px 를 최소로 두면
       같은 3열이 서고, 좁아지면 스스로 접힌다. */
    grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));
    gap: 1.375rem;
    overflow: visible;
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
}

/* ── 카드 ──────────────────────────────────────────────── */
body.solune-page #bo_list.cb-gallery .cb-row {
    position: relative;
    display: flex;
    flex-direction: column;
    /* board-list.css 의 `.cb-row { align-items: center }` 를 반드시 덮어야 한다.
       거기서는 한 줄짜리 격자라 가운데 정렬이 맞지만, 세로 flex 에서는
       자식이 늘어나지 않고 제 내용 너비로 줄어든 뒤 가운데로 몰린다.
       그러면 본문이 짧은 글(예: "ㅁㅇㅁ")에서만 카드 좌우에 빈 띠가 생긴다.
       발췌가 긴 카드는 어차피 최대 너비까지 차서 티가 나지 않아,
       한 장만 어긋난 것처럼 보였다. */
    align-items: stretch;
    padding: 0;
    /* overflow 를 숨기지 않는다. 글쓴이 이름을 누르면 열리는 회원 사이드뷰가
       카드 밖으로 나와야 하는데, 여기서 자르면 첫 줄만 보이고 잘린다.
       모서리를 깎는 일은 사진 칸(.cb-card-media)이 스스로 한다. */
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
    transition: border-color .16s ease, box-shadow .16s ease, transform .16s ease;
}
/* 목록형에서 쓰던 왼쪽 강조 막대. 카드에서는 둥근 모서리를 넘어 그려진다. */
body.solune-page #bo_list.cb-gallery .cb-row::before { content: none; }
body.solune-page #bo_list.cb-gallery .cb-row:hover,
body.solune-page #bo_list.cb-gallery .cb-row:focus-within {
    border-color: var(--solune-border-strong);
    box-shadow: var(--solune-shadow-lift);
    transform: translateY(-2px);
    background: var(--solune-surface);
}
/* 회원 사이드뷰가 열린 카드. 이름을 누르면 :focus-within 이 걸려 위 규칙의
   transform 이 살아 있는데, transform 은 쌓임 맥락을 만들어 메뉴를 카드
   안에 가둔다. 그러면 뒤에 오는 카드가 메뉴 위에 그려진다.
   열린 동안에는 들어올림을 멈추고 카드를 형제들 위로 올린다.
   (default.css 가 .cb-wrap · .cb-author 등에 쓰는 것과 같은 방식이다.) */
body.solune-page #bo_list.cb-gallery .cb-row:has(.sv.sv_on) {
    z-index: 61;
    transform: none;
}
body.solune-page #bo_list.cb-gallery .cb-row:has(.sv.sv_on) .cb-card-media img { transform: none; }

body.solune-page #bo_list.cb-gallery .cb-row.is-sel {
    border-color: var(--solune-primary);
    background: var(--solune-surface);
}
body.solune-page #bo_list.cb-gallery .cb-row.bo_notice {
    background: var(--solune-surface);
}

/* ── 썸네일 ────────────────────────────────────────────── */
body.solune-page #bo_list.cb-gallery .cb-card-media {
    position: relative;
    aspect-ratio: 16 / 10;
    overflow: hidden;
    /* 카드 모서리 14px 안쪽에 1px 테두리가 있으니 13px 이 맞는 값이다.
       카드가 아니라 여기서 깎아야 사이드뷰가 카드 밖으로 나갈 수 있다. */
    border-radius: 13px 13px 0 0;
    background: var(--solune-surface-soft);
}
body.solune-page #bo_list.cb-gallery .cb-card-media > a {
    display: block;
    width: 100%;
    height: 100%;
}
body.solune-page #bo_list.cb-gallery .cb-card-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .28s ease;
}
body.solune-page #bo_list.cb-gallery .cb-row:hover .cb-card-media img { transform: scale(1.04); }

/* 첨부가 없는 글. 사진 자리를 비워 두면 카드 높이가 들쭉날쭉해진다. */
body.solune-page #bo_list.cb-gallery .cb-card-noimg {
    display: grid;
    width: 100%;
    height: 100%;
    place-items: center;
    background:
        repeating-linear-gradient(135deg,
            transparent 0 9px,
            var(--solune-border) 9px 10px);
    color: var(--solune-muted);
    font-size: 1.5rem;
}

/* 사진 위 겹침: 왼쪽 위 선택 상자, 오른쪽 아래 배지 */
body.solune-page #bo_list.cb-gallery .cb-card-media .cb-chk {
    position: absolute;
    top: 10px;
    left: 10px;
    z-index: 2;
}
body.solune-page #bo_list.cb-gallery .cb-card-media .cb-chk label {
    width: 22px;
    height: 22px;
    border: 1.6px solid #fff;
    border-radius: 7px;
    /* 시안 값. 사진 위라 흰 테두리와 그림자로 형태를 잡고 속은 비워 둔다. */
    background: rgba(255, 255, 255, .35);
    /* board-list.css 의 `color: transparent` 를 덮으면 체크 표시가 늘 보인다.
       고르지 않은 상태에서는 반드시 투명이어야 한다. */
    color: transparent;
    box-shadow: 0 1px 3px rgba(16, 24, 40, .25);
}
body.solune-page #bo_list.cb-gallery .cb-card-media .cb-chk label:hover {
    border-color: #fff;
    background: rgba(255, 255, 255, .6);
}
body.solune-page #bo_list.cb-gallery .cb-card-media .cb-chk input:checked + label {
    border-color: #fff;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
}

body.solune-page #bo_list.cb-gallery .cb-card-badges {
    position: absolute;
    right: 10px;
    bottom: 10px;
    z-index: 2;
    display: flex;
    gap: .375rem;
    align-items: center;
}
/* 사진 위에서는 --solune-primary-soft 배경이 사진에 묻힌다.
   NEW · 공지는 꽉 찬 색으로, 댓글 수는 어두운 반투명으로 띄운다. */
body.solune-page #bo_list.cb-gallery .cb-card-badges .cb-flag {
    height: 20px;
    padding: 0 .5rem;
    border-radius: 8px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: 10.5px;
    font-weight: 800;
}
body.solune-page #bo_list.cb-gallery .cb-card-badges .cb-flag--hot {
    background: #b42318;
    color: #fff;
}
body.solune-page #bo_list.cb-gallery .cb-card-badges .cb-cmt {
    height: 20px;
    padding: 0 .5rem;
    border-radius: 8px;
    background: rgba(20, 24, 31, .72);
    color: #fff;
    font-size: 10.5px;
    font-weight: 700;
}

/* ── 카드 본문 ─────────────────────────────────────────── */
body.solune-page #bo_list.cb-gallery .cb-body {
    display: flex;
    flex: 1;
    min-width: 0;
    flex-direction: column;
    gap: .5rem;
    padding: 1rem 1rem .875rem;
}
body.solune-page #bo_list.cb-gallery .cb-tit-line { align-items: flex-start; }
body.solune-page #bo_list.cb-gallery .cb-tit {
    display: -webkit-box;
    /* 두 줄까지만 두고 자른다. 시안은 `height: 3em` 으로 두 줄 자리를
       못박아 두는데, 시안의 카드는 전부 제목이 두 줄이라 티가 안 났을
       뿐이다. 실제 글은 한 줄짜리 제목이 흔해서, 자리를 못박으면 제목과
       본문 사이에 빈 줄이 하나 생긴다. 카드 높이는 아래 발자취 줄의
       `margin-top: auto` 가 맞춰 주므로 여기서 붙잡을 필요가 없다. */
    max-height: 3em;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    font-size: .94rem;
    font-weight: 600;
    line-height: 1.5;
    letter-spacing: -.015em;
}
body.solune-page #bo_list.cb-gallery .cb-excerpt {
    display: -webkit-box;
    /* 제목과 같은 이유로 자리를 못박지 않는다. 본문이 "ㅁㅇㅁ" 한 줄인
       글에서 발췌 아래에 빈 줄이 남아 글자 덩어리가 카드 가운데에
       떠 있는 것처럼 보였다. */
    max-height: 3.3em;
    margin: 0;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    color: var(--solune-text-soft);
    font-size: .8rem;
    line-height: 1.65;
}
body.solune-page #bo_list.cb-gallery .cb-cat { align-self: flex-start; }

/* 발자취 줄. 시안처럼 얇은 선 하나로 본문과 떼어 둔다. */
body.solune-page #bo_list.cb-gallery .cb-foot {
    justify-content: space-between;
    gap: .625rem;
    margin-top: auto;
    padding-top: .75rem;
    border-top: 1px solid var(--solune-border);
}
body.solune-page #bo_list.cb-gallery .cb-author { min-width: 0; }
body.solune-page #bo_list.cb-gallery .cb-avatar { width: 20px; height: 20px; font-size: .58rem; }
body.solune-page #bo_list.cb-gallery .cb-meta { flex: none; }

/* 글이 없을 때. 격자 한 칸이 아니라 한 줄을 다 쓴다. */
body.solune-page #bo_list.cb-gallery .cb-empty {
    grid-column: 1 / -1;
    padding: 3rem 1rem;
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
    text-align: center;
}

/* ── 좁은 화면 ─────────────────────────────────────────── */
/* 시안의 모바일(390px)도 2열이다. 한 열로 접으면 사진만 큰 목록이 되어
   갤러리로 훑어보는 맛이 사라진다. */
@media (max-width: 700px) {
    body.solune-page #bo_list.cb-gallery .cb-list {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: .875rem;
    }
    body.solune-page #bo_list.cb-gallery .cb-row { border-radius: 12px; }
    body.solune-page #bo_list.cb-gallery .cb-card-media { border-radius: 11px 11px 0 0; }
    body.solune-page #bo_list.cb-gallery .cb-body { gap: .4375rem; padding: .6875rem .6875rem .75rem; }
    body.solune-page #bo_list.cb-gallery .cb-tit { font-size: .84rem; }
    /* 좁은 칸에서 발췌까지 두면 카드가 글자로 꽉 찬다. 사진과 제목만 남긴다. */
    body.solune-page #bo_list.cb-gallery .cb-excerpt { display: none; }
    body.solune-page #bo_list.cb-gallery .cb-foot { gap: .375rem; padding-top: .5rem; }
    /* 글쓴이는 좁은 화면에서도 남긴다. 이름이 회원 사이드뷰를 여는 손잡이라
       접어 버리면 이 화면에서만 그 메뉴로 갈 길이 없어지고, 목록형 게시판
       (free·notice·qa)은 같은 폭에서 이름을 그대로 보여 준다.
       대신 자리를 내주려고 조회 수를 접는다 — 날짜와 달리 카드에서
       훑어볼 때 덜 쓰인다. */
    body.solune-page #bo_list.cb-gallery .cb-hit { display: none; }
    body.solune-page #bo_list.cb-gallery .cb-avatar { width: 18px; height: 18px; }
    body.solune-page #bo_list.cb-gallery .cb-selbar { padding: .625rem .75rem; }
    body.solune-page #bo_list.cb-gallery .cb-selbar-acts { gap: .3125rem; }
}

@media (prefers-reduced-motion: reduce) {
    body.solune-page #bo_list.cb-gallery .cb-row,
    body.solune-page #bo_list.cb-gallery .cb-card-media img { transition: none; }
    body.solune-page #bo_list.cb-gallery .cb-row:hover { transform: none; }
    body.solune-page #bo_list.cb-gallery .cb-row:hover .cb-card-media img { transform: none; }
}

/* ━━━━ board-view-cards.css ━━━━
   (옛 파일 · 원래 순서 140 · 원래 조건: 게시글 보기(basic · gallery 스킨의 view.skin.php)) */

/* Solune board view — 카드 스택 레이아웃.
   시안(Solune 게시글 보기)의 토큰 값이 테마의 --solune-* 와 동일하므로
   토큰만 갈아끼우면 라이트/다크가 그대로 따라온다.
   board-view.css 와 같은 선택자 깊이를 쓰고 뒤에 로드해서 덮는다. */

/* ── 카드 스택 ─────────────────────────────────────────── */
body.solune-page #bo_v.cv-stack {
    display: flex;
    flex-direction: column;
    gap: 1rem;
    /* default.css 가 #bo_v 를 하나의 흰 카드로 칠한다(!important).
       카드 스택에서는 그 바탕이 카드 사이 간격에 흰색으로 드러나므로 걷어낸다. */
    padding: 0;
    overflow: visible;
    border: 0;
    border-radius: 0;
    background: transparent !important;
    box-shadow: none;
}

body.solune-page #bo_v.cv-stack ~ #bo_list {
    margin-top: 2rem;
}
/* 버튼 묶음도 카드 안에서 굳이 바탕을 칠할 이유가 없다. */
/* 레거시 CSS 가 버튼 묶음 ul 에 흰 배경을 준다. 밝은 화면에서는 안 보이지만
   어두운 화면에서는 버튼 사이 틈이 흰 막대로 드러난다. 머리에 있던 시절에는
   .cv-head 로만 범위를 잡았는데, 버튼이 푸터로 옮겨 가며 범위를 벗어났다. */
body.solune-page #bo_v .cv-head #bo_v_top .btn_bo_user,
body.solune-page #bo_v .cv-actions ul { background: transparent; }
body.solune-page #bo_v.cv-stack > .cv-card,
body.solune-page #bo_v.cv-stack .cv-card {
    margin: 0;
    border: 1px solid var(--solune-border);
    border-radius: 1rem;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

/* ── 제목 카드 ─────────────────────────────────────────── */
body.solune-page #bo_v .cv-head { padding: 1.625rem 1.75rem 1.25rem; }
body.solune-page #bo_v .cv-head > header { margin: 0; padding: 0; border: 0; background: none; }
body.solune-page #bo_v .cv-head #bo_v_title {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: .875rem;
    margin: 0;
    padding: 0;
}
body.solune-page #bo_v .cv-head .bo_v_cate,
body.solune-page #bo_v .cv-head .solune-view-kicker {
    display: inline-flex;
    align-items: center;
    height: 1.5rem;
    padding: 0 .6875rem;
    border: 1px solid var(--solune-primary);
    border-radius: 999px;
    background: transparent;
    color: var(--solune-primary);
    font-size: .7rem;
    font-weight: 800;
    letter-spacing: .02em;
}
body.solune-page #bo_v .cv-head .bo_v_tit {
    color: var(--solune-text);
    font-size: 2.05rem;
    font-weight: 800;
    line-height: 1.28;
    letter-spacing: -.03em;
    text-wrap: pretty;
    word-break: keep-all;
}

/* 작성자 · 메타 · 액션 한 줄 */
body.solune-page #bo_v .cv-head #bo_v_info {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    /* space-between 대신 액션 묶음의 auto 마진으로 민다.
       숨긴 제목까지 셋이 걸려 space-between 이 가운데로 벌어졌다. */
    justify-content: flex-start;
    gap: .875rem;
    margin: .875rem 0 0;
    padding: .875rem 0 0;
    border: 0;
    border-top: 1px solid var(--solune-border);
    background: none;
}
/* 스킨 style.css 의 레거시 클리어픽스가 flex 아이템으로 잡혀
   액션 묶음 오른쪽에 gap 만큼 빈칸을 만든다. */
body.solune-page #bo_v .cv-head #bo_v_info::after { display: none; }
/* 스크린리더용 제목이 flex 아이템으로 끼어 space-between 을 흐트러뜨린다.
   접근성은 유지하되 레이아웃에서는 빼낸다. */
body.solune-page #bo_v .cv-head #bo_v_info > h2 {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
}
body.solune-page #bo_v .cv-head #bo_v_info .profile_info { display: flex; align-items: center; gap: .625rem; margin: 0; }
body.solune-page #bo_v .cv-head .cv-avatar-slot { width: 2.375rem; height: 2.375rem; flex: none; margin: 0; }
body.solune-page #bo_v .cv-head .cv-avatar-slot img {
    width: 2.375rem;
    height: 2.375rem;
    border-radius: 50%;
    object-fit: cover;
}
body.solune-page #bo_v .cv-head .cv-avatar {
    display: inline-grid;
    width: 2.375rem;
    height: 2.375rem;
    place-items: center;
    border-radius: 50%;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: .85rem;
    font-weight: 800;
}
body.solune-page #bo_v .cv-head .profile_info_ct {
    display: block;
    min-width: 0;
    padding: 0;
    line-height: 1.35;
}
body.solune-page #bo_v .cv-head .profile_info_ct br { display: none; }
body.solune-page #bo_v .cv-head .profile_info_ct > strong:first-of-type {
    display: block;
    margin-bottom: .1875rem;
    color: var(--solune-text);
    font-size: .86rem;
    font-weight: 800;
}
/* 댓글 수 · 조회 · 작성일을 한 줄 메타로 모은다. */
body.solune-page #bo_v .cv-head .profile_info_ct > strong ~ strong {
    display: inline-flex;
    align-items: center;
    gap: .25rem;
    margin-right: .625rem;
    color: var(--solune-muted);
    font-size: .72rem;
    font-weight: 500;
    font-variant-numeric: tabular-nums;
}
body.solune-page #bo_v .cv-head .profile_info_ct > strong ~ strong a { color: inherit; }
body.solune-page #bo_v .cv-head .profile_info_ct > strong ~ strong a:hover { color: var(--solune-primary); }

/* 상단 액션 버튼: 아이콘 + 라벨 */
body.solune-page #bo_v .cv-head #bo_v_top { margin: 0 0 0 auto; padding: 0; border: 0; }
body.solune-page #bo_v .cv-head #bo_v_top .btn_bo_user { display: flex; align-items: center; gap: .4375rem; margin: 0; padding: 0; }
body.solune-page #bo_v .cv-head .cv-btn {
    display: inline-flex;
    align-items: center;
    gap: .375rem;
    width: auto;
    min-width: 0;
    height: 2.25rem;
    padding: 0 .8125rem;
    border: 1px solid var(--solune-border);
    border-radius: .625rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-size: .78rem;
    font-weight: 700;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
body.solune-page #bo_v .cv-head .cv-btn:hover {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}
body.solune-page #bo_v .cv-head .cv-btn-label { font-size: inherit; }
body.solune-page #bo_v .cv-head .btn_more_opt {
    display: inline-grid;
    width: 2.25rem;
    height: 2.25rem;
    place-items: center;
    border: 1px solid var(--solune-border);
    border-radius: .625rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
}
body.solune-page #bo_v .cv-head .btn_more_opt:hover {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

/* ── 본문 카드 ─────────────────────────────────────────── */
body.solune-page #bo_v_atc.cv-card { padding: 2.5rem 1.75rem 2.75rem; }
body.solune-page #bo_v_atc.cv-card #bo_v_con {
    max-width: 42rem;
    margin-inline: auto;
    color: var(--solune-text-soft);
    font-size: 1rem;
    line-height: 1.9;
    word-break: keep-all;
    overflow-wrap: anywhere;
}
body.solune-page #bo_v_atc.cv-card #bo_v_con > p { margin: 0 0 1.375rem; }
body.solune-page #bo_v_atc.cv-card #bo_v_con > p:last-child { margin-bottom: 0; }
body.solune-page #bo_v_atc.cv-card #bo_v_share { max-width: 42rem; margin-inline: auto; }

/* ── 이전 / 다음 카드 ──────────────────────────────────── */
body.solune-page #bo_v .bo_v_nb.cv-nb {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    overflow: hidden;
    padding: 0;
    list-style: none;
}
/* board-view.css 가 li 를 3열 그리드(4.3rem …)로 만들어 두었다.
   새 구조는 자식이 링크 하나뿐이라 그대로 두면 4.3rem 칸에 갇힌다. */
body.solune-page #bo_v .bo_v_nb.cv-nb > li {
    display: block;
    min-width: 0;
    min-height: 0;
    padding: 0;
    border: 0;
}
body.solune-page #bo_v .bo_v_nb.cv-nb > li + li { border-left: 1px solid var(--solune-border); }
body.solune-page #bo_v .cv-nb-link {
    display: flex;
    min-width: 0;
    flex-direction: column;
    gap: .375rem;
    height: 100%;
    padding: 1.125rem 1.375rem;
    color: inherit;
    transition: background-color .16s ease;
}
body.solune-page #bo_v .cv-nb-link:hover { background: var(--solune-surface-soft); }
body.solune-page #bo_v .cv-nb-link .nb_tit {
    display: inline-flex;
    align-items: center;
    gap: .3125rem;
    color: var(--solune-muted);
    font-size: .72rem;
    font-weight: 700;
}
body.solune-page #bo_v .cv-nb-title {
    overflow: hidden;
    color: var(--solune-text);
    font-size: .92rem;
    font-weight: 600;
    text-overflow: ellipsis;
    white-space: nowrap;
    transition: color .14s ease;
}
body.solune-page #bo_v .cv-nb-link:hover .cv-nb-title { color: var(--solune-primary); }
body.solune-page #bo_v .cv-nb-link .nb_date {
    color: var(--solune-muted);
    font-size: .7rem;
    font-variant-numeric: tabular-nums;
}

/* ━━━━ board-view-comments.css ━━━━
   (옛 파일 · 원래 순서 141 · 원래 조건: 게시글 보기(basic · gallery 스킨의 view.skin.php)) */

/* 댓글 카드 — 목록 · 스레드 들여쓰기 · 연결선

   board-view-cards.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, 로더가 원래 순서대로 이어서 실으면 어느 선언이 이기는지가
   달라지지 않는다. */

/* ── 댓글 카드 (스레드형) ───────────────────────────────────
   헤더 · 목록 · 작성폼이 한 장의 카드로 이어지도록
   위/아래 모서리만 둥글린다. */
body.solune-page #bo_v .cv-cmt-head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    margin: 0;
    padding: 1rem 1.375rem;
    border: 1px solid var(--solune-border);
    border-bottom: 0;
    border-radius: 1rem 1rem 0 0;
    background: var(--solune-surface-soft);
    box-shadow: var(--solune-shadow-sm);
}
body.solune-page #bo_v .cv-cmt-head .cmt_btn {
    display: inline-flex;
    width: auto;
    min-width: 0;
    min-height: 0;
    flex: none;
    align-items: center;
    margin: 0;
    padding: 0;
    border: 0;
    background: transparent;
}
body.solune-page #bo_v .cv-cmt-head .total {
    display: inline-flex;
    align-items: center;
    margin: 0;
    padding: 0;
    color: var(--solune-text);
    font-size: .95rem;
}
body.solune-page #bo_v .cv-cmt-head .total b { font-weight: 800; }
body.solune-page #bo_v .cv-cmt-head .total:after { display: none; }
body.solune-page #bo_v .cv-cmt-count {
    display: inline-grid;
    min-width: 1.375rem;
    height: 1.375rem;
    margin-left: .4rem;
    padding: 0 .4375rem;
    place-items: center;
    border-radius: 999px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: .7rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}
body.solune-page #bo_v .cv-cmt-tools { display: flex; align-items: center; gap: .5rem; }
body.solune-page #bo_v .cv-fold {
    height: 2.125rem;
    flex: none;
    padding: 0 .75rem;
    border: 1px solid var(--solune-border);
    border-radius: .625rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-family: inherit;
    font-size: .76rem;
    font-weight: 700;
    white-space: nowrap;
    cursor: pointer;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
body.solune-page #bo_v .cv-fold:hover {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

/* 목록 */
body.solune-page #bo_v #bo_vc {
    margin: 0;
    padding: 0;
    border: 1px solid var(--solune-border);
    border-top: 0;
    border-bottom: 0;
    border-radius: 0;
    background: var(--solune-surface);
}
body.solune-page #bo_v #bo_vc > h2 { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

body.solune-page #bo_v #bo_vc article.cv-cmt {
    position: relative;
    display: flex;
    gap: .625rem;
    margin: 0;
    padding: .75rem 1.375rem;
    border: 0;
    transition: background-color .16s ease;
}
body.solune-page #bo_v #bo_vc article.cv-cmt:hover { background: var(--solune-surface-soft); }
/* 스레드 들여쓰기 — 계층당 30px */
body.solune-page #bo_v #bo_vc article.cv-cmt--l1 { padding-left: 3.25rem; }
body.solune-page #bo_v #bo_vc article.cv-cmt--l2 { padding-left: 5.125rem; }
body.solune-page #bo_v #bo_vc article.cv-cmt--l3 { padding-left: 7rem; }

/* 아바타 크기는 여기 한 곳에서만 정한다. 한때 상자는 board-view-inline-form
   에서 2.125rem 으로, 안의 그림은 여기서 1.875rem 으로 따로 정해져 있어
   34px 상자 안에 30px 그림이 들어앉아 있었다. 둘을 같은 값으로 모은다.

   줄은 flex(gap .625rem)에 .cm_wrap 이 flex:1 이라, 키운 만큼 글 칸에서
   가져갈 뿐 줄이 깨지지 않는다. 답글 연결선도 .pf_img 기준 절대배치라
   크기를 따라온다. */
body.solune-page #bo_v #bo_vc article .pf_img {
    position: relative;
    width: 2.5rem;
    height: 2.5rem;
    flex: none;
    align-self: flex-start;
    margin: 0;
}
/* 그누보드가 수정·답변용으로 심어두는 빈 span 이다. margin:10px 두 개가
   행 높이를 117px 까지 부풀렸다. 비어 있을 때는 자리를 차지하지 않게 한다. */
body.solune-page #bo_v #bo_vc article .bo_vc_w:empty { display: none; margin: 0; }
body.solune-page #bo_v #bo_vc article .pf_img img,
body.solune-page #bo_v #bo_vc article .pf_img .cv-avatar {
    display: inline-grid;
    width: 2.5rem;
    height: 2.5rem;
    place-items: center;
    border: 0;
    border-radius: 50%;
    background: var(--solune-surface-tint);
    color: var(--solune-primary);
    /* 그림이 없는 회원은 이 자리에 이름 첫 글자가 선다. 동그라미를 키운
       만큼 글자도 함께 키워야 가운데가 헐렁해 보이지 않는다. */
    font-size: .9375rem;
    font-weight: 800;
    object-fit: cover;
}
/* 답글 연결선: 부모에서 내려와 아바타로 꺾이는 ㄴ 자 */
body.solune-page #bo_v #bo_vc article[data-cv-level]:not([data-cv-level="0"]) .pf_img::before,
body.solune-page #bo_v #bo_vc article[data-cv-level]:not([data-cv-level="0"]) .pf_img::after {
    position: absolute;
    background: var(--solune-border);
    content: "";
}
body.solune-page #bo_v #bo_vc article[data-cv-level]:not([data-cv-level="0"]) .pf_img::before {
    top: 50%;
    left: -1rem;
    width: .75rem;
    height: 1px;
}
body.solune-page #bo_v #bo_vc article[data-cv-level]:not([data-cv-level="0"]) .pf_img::after {
    bottom: 50%;
    left: -1rem;
    width: 1px;
    height: 1.375rem;
}

body.solune-page #bo_v #bo_vc article .cm_wrap {
    display: flex;
    width: auto;
    min-width: 0;
    max-width: none;
    flex: 1;
    flex-direction: column;
    gap: .25rem;
}
body.solune-page #bo_v #bo_vc article .cm_wrap > header {
    display: flex;
    flex-wrap: wrap;
    min-height: 0;
    align-items: baseline;
    gap: .4375rem;
    padding: 0 2.25rem 0 0;
    line-height: 1.3;
}
body.solune-page #bo_v #bo_vc article .cm_wrap > header > h2 { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
body.solune-page #bo_v #bo_vc header :is(.guest, .member, .sv_member) {
    color: var(--solune-text);
    font-size: .82rem;
    font-weight: 800;
}
body.solune-page #bo_v #bo_vc .cv-reply-to { color: var(--solune-muted); font-size: .7rem; }
body.solune-page #bo_v #bo_vc .bo_vc_hdinfo {
    display: inline-flex;
    align-items: center;
    gap: .25rem;
    margin: 0;
    color: var(--solune-muted);
    font-size: .68rem;
    font-variant-numeric: tabular-nums;
}
body.solune-page #bo_v #bo_vc .bo_vc_hdinfo i { color: var(--solune-muted); }
body.solune-page #bo_v #bo_vc .cmt_contents { margin: 0; padding: 0; color: var(--solune-text-soft); }
body.solune-page #bo_v #bo_vc .cmt_contents p { margin: 0; font-size: .86rem; line-height: 1.7; word-break: keep-all; }

body.solune-page #bo_v #bo_vc .bo_vl_opt {
    position: absolute;
    top: .75rem;
    right: 1.375rem;
    z-index: 17;
}
body.solune-page #bo_v #bo_vc .bo_vl_opt .btn_cm_opt {
    display: inline-grid;
    width: 1.75rem;
    height: 1.75rem;
    place-items: center;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-muted);
    /* 완전히 숨기면 행에 들어가기 전까지 조준할 표적이 없어서, 어디를
       겨눠야 하는지 모른 채 hover 가 헛나간다. 옅게라도 항상 보여준다. */
    opacity: .4;
    transition: opacity .16s ease, border-color .14s ease, color .14s ease;
}
body.solune-page #bo_v #bo_vc article:hover .btn_cm_opt,
body.solune-page #bo_v #bo_vc .btn_cm_opt:focus-visible { opacity: 1; }
body.solune-page #bo_v #bo_vc .btn_cm_opt:hover { border-color: var(--solune-primary); color: var(--solune-primary); }
body.solune-page #bo_v #bo_vc_empty {
    margin: 0;
    padding: 3rem 1.375rem;
    color: var(--solune-muted);
    font-size: .85rem;
    text-align: center;
}

/* ━━━━ board-view-comment-form.css ━━━━
   (옛 파일 · 원래 순서 142 · 원래 조건: 게시글 보기(basic · gallery 스킨의 view.skin.php)) */

/* 댓글 작성 폼과 등록 중 상태

   board-view-cards.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, 로더가 원래 순서대로 이어서 실으면 어느 선언이 이기는지가
   달라지지 않는다. */

/* 작성 폼 */
body.solune-page #bo_v #bo_vc_w {
    margin: 0;
    padding: 1.125rem 1.375rem;
    border: 1px solid var(--solune-border);
    border-top: 1px solid var(--solune-border);
    border-radius: 0 0 1rem 1rem;
    background: var(--solune-surface-soft);
}
body.solune-page #bo_v #bo_vc_w > h2 { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) form { display: flex; flex-direction: column; gap: .6875rem; }
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) textarea {
    box-sizing: border-box;
    width: 100%;
    padding: .75rem .8125rem;
    border: 1px solid var(--solune-border-strong);
    border-radius: .75rem;
    background: var(--solune-surface);
    color: var(--solune-text);
    font-family: inherit;
    font-size: .88rem;
    line-height: 1.6;
    resize: vertical;
}
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) textarea:focus { border-color: var(--solune-primary); outline: 0; }
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .bo_vc_w_wr {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: .625rem;
}
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .btn_confirm {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .875rem;
    margin-left: auto;
}
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .cv-write-note { color: var(--solune-muted); font-size: .74rem; }
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .secret_cm label { color: var(--solune-muted); font-size: .75rem; }
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .btn_submit {
    height: 2.375rem;
    padding: 0 1.125rem;
    border: 0;
    border-radius: 999px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-family: inherit;
    font-size: .82rem;
    font-weight: 700;
    cursor: pointer;
}
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .btn_submit:hover { background: var(--solune-primary-hover); }

/* 등록 중 상태. 폼이 실제로 넘어가야 하므로 disabled 대신
   포인터만 막고 스피너로 진행 중임을 알린다. */
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .btn_submit.is-loading {
    position: relative;
    padding-left: 2.375rem;
    background: var(--solune-primary-hover);
    pointer-events: none;
}
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .btn_submit.is-loading::before {
    position: absolute;
    top: 50%;
    left: 1.125rem;
    box-sizing: border-box;
    width: .875rem;
    height: .875rem;
    margin-top: -.4375rem;
    border: 2px solid color-mix(in srgb, var(--solune-primary-ink) 35%, transparent);
    border-top-color: var(--solune-primary-ink);
    border-radius: 50%;
    animation: solune-btn-spin .6s linear infinite;
    content: "";
}
@keyframes solune-btn-spin { to { transform: rotate(360deg); } }
/* 모션을 줄이는 설정에서도 진행 표시는 남기되 속도만 낮춘다. */
@media (prefers-reduced-motion: reduce) {
    body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .btn_submit.is-loading::before { animation-duration: 1.8s; }
}

/* ━━━━ board-view-menu.css ━━━━
   (옛 파일 · 원래 순서 143 · 원래 조건: 게시글 보기(basic · gallery 스킨의 view.skin.php)) */

/* 옵션 메뉴 (본문 · 댓글 공통)

   board-view-comment-form.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, 로더가 원래 순서대로 이어서 실으면 어느 선언이 이기는지가
   달라지지 않는다. */

/* ── 옵션 메뉴 (본문 · 댓글 공통) ────────────────────────────
   댓글 메뉴는 그누보드 기본 스타일만 붙어 폭 58px 에 글자가 세로로
   쪼개졌다. 본문 메뉴와 같은 규격으로 통일한다. */
body.solune-page .cv-menu {
    z-index: 30;
    display: none;
    min-width: 9.25rem;
    flex-direction: column;
    gap: 2px;
    margin: 0;
    padding: .375rem;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface);
    box-shadow: 0 .875rem 2.25rem rgba(29, 52, 48, .1);
    list-style: none;
}
html[data-theme="dark"] body.solune-page .cv-menu { box-shadow: 0 .875rem 2.25rem rgba(0, 0, 0, .4); }
body.solune-page .cv-menu.is-open { display: flex; }
body.solune-page .cv-menu > li { width: auto; margin: 0; padding: 0; border: 0; }

body.solune-page .cv-menu > li > a {
    display: flex;
    width: 100%;
    height: 2.25rem;
    align-items: center;
    gap: .5625rem;
    padding: 0 .6875rem;
    border: 0;
    border-radius: .5625rem;
    background: transparent;
    color: var(--solune-text-soft);
    font-size: .8rem;
    font-weight: 600;
    line-height: 1;
    white-space: nowrap;
    transition: background-color .14s ease, color .14s ease;
}
body.solune-page .cv-menu > li > a > .fa {
    width: .9375rem;
    flex: none;
    color: inherit;
    font-size: .8125rem;
    text-align: center;
}
body.solune-page .cv-menu > li > a:hover,
body.solune-page .cv-menu > li > a:focus-visible {
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

/* board-view.css 가 #bo_v_top .more_opt.solune-view-options li a 로
   더 센 규칙을 걸어둬 본문 메뉴만 옛 모양(space-between, 41px, .74rem)이
   남았다. 같은 깊이로 덮어 두 메뉴를 실제로 같게 만든다. */
body.solune-page #bo_v_top .more_opt.solune-view-options,
body.solune-page .btn_top.top .more_opt.solune-view-options {
    min-width: 9.25rem;
    gap: 2px;
    padding: .375rem;
}
body.solune-page #bo_v_top .more_opt.solune-view-options li a,
body.solune-page .btn_top.top .more_opt.solune-view-options li a {
    display: flex;
    /* 항목이 42px 로 쪼그라들고 테두리 + 흰 배경이 붙어 아이콘마다
       버튼 같은 박스가 생겼다. 폭을 채우고 껍데기를 걷어낸다. */
    width: 100%;
    height: 2.25rem;
    min-height: 0;
    align-items: center;
    justify-content: flex-start;
    gap: .5625rem;
    padding: 0 .6875rem;
    border: 0;
    border-radius: .5625rem;
    background: transparent;
    color: var(--solune-text-soft);
    font-size: .8rem;
    font-weight: 600;
    white-space: nowrap;
}
body.solune-page #bo_v_top .more_opt.solune-view-options li a > .fa,
body.solune-page .btn_top.top .more_opt.solune-view-options li a > .fa {
    display: inline-block;
    width: .9375rem;
    height: auto;
    flex: none;
    padding: 0;
    border: 0;
    background: none;
    font-size: .8125rem;
    line-height: inherit;
    text-align: center;
}

/* 새 창을 여는 항목(복사·이동) 표시 */
body.solune-page .cv-menu .cv-menu-ext {
    margin-left: auto;
    color: var(--solune-muted);
    font-size: .6875rem;
}

/* 되돌릴 수 없는 삭제만 구분선 아래 경고색으로 분리 */
body.solune-page .cv-menu > li.cv-menu-sep { margin-top: .3125rem; padding-top: .3125rem; border-top: 1px solid var(--solune-border); }
body.solune-page .cv-menu > li > a.cv-menu-danger { color: #b42318; }
body.solune-page .cv-menu > li > a.cv-menu-danger:hover,
body.solune-page .cv-menu > li > a.cv-menu-danger:focus-visible { background: #fde8e8; color: #b42318; }
html[data-theme="dark"] body.solune-page .cv-menu > li > a.cv-menu-danger { color: #ffb4ab; }
html[data-theme="dark"] body.solune-page .cv-menu > li > a.cv-menu-danger:hover,
html[data-theme="dark"] body.solune-page .cv-menu > li > a.cv-menu-danger:focus-visible { background: #4a1d1a; color: #ffb4ab; }

/* 댓글 메뉴는 hover 와 클릭을 함께 받는다.
   마우스에서는 포인터를 올리면 바로 열리고, 클릭하면 고정된다.
   board-view.css 가 display:block !important 로 걸어둔 것을 flex 로 되돌려
   항목 사이 간격(gap)이 살아 있게 한다. */
@media (hover: hover) {
    body.solune-page #bo_vc .bo_vl_opt:hover .bo_vc_act.cv-menu,
    body.solune-page #bo_vc .bo_vl_opt:focus-within .bo_vc_act.cv-menu { display: flex !important; }
}
/* 포인터가 없는 기기에서는 hover 가 성립하지 않는다. 탭으로만 연다. */
@media (hover: none) {
    body.solune-page #bo_vc .bo_vl_opt:hover .bo_vc_act,
    body.solune-page #bo_vc .bo_vl_opt:focus-within .bo_vc_act { display: none !important; }
    /* 옵션 버튼이 행 hover 로만 나타나면 터치에서는 아예 보이지 않는다.
       댓글 수정·삭제에 접근할 방법이 없어지므로 항상 보여준다. */
    body.solune-page #bo_v #bo_vc .bo_vl_opt .btn_cm_opt { opacity: 1; }
}
/* 클릭으로 고정한 메뉴는 포인터가 떠나도 남는다. */
body.solune-page #bo_vc .bo_vl_opt .bo_vc_act.cv-menu.is-open { display: flex !important; }
/* A real mouse can still hover on touch-capable desktops even when CSS reports hover:none. */
body.solune-page #bo_vc .bo_vl_opt.is-pointer-hover .bo_vc_act.cv-menu { display: flex !important; }
@media (min-width: 48rem) {
    body.solune-page #bo_vc .bo_vl_opt .btn_cm_opt:hover + .bo_vc_act.cv-menu { display: flex !important; }
}
body.solune-page #bo_v #bo_vc .bo_vl_opt:hover,
body.solune-page #bo_v #bo_vc .bo_vl_opt:focus-within,
body.solune-page #bo_v #bo_vc .bo_vl_opt.is-pointer-hover { z-index: 40; }

/* 댓글 메뉴 위치: 기본 스킨이 left 를 걸어 왼쪽으로 밀려 있었다. */
body.solune-page #bo_v #bo_vc .bo_vc_act.cv-menu {
    position: absolute;
    top: 2.25rem;
    right: 0;
    left: auto;
    width: auto;
}
body.solune-page #bo_v #bo_vc .bo_vl_opt { position: absolute; top: .75rem; right: 1.375rem; }
/* 트리거가 30x38px 이라 942px 폭 행에서 오른쪽 끝 좁은 띠를 정확히 겨눠야 했다.
   보이지 않는 여유 영역을 둘러 hover 로 잡기 쉽게 한다.

   포인터가 있는 넓은 화면에서만 켠다. 실측하면 본문 텍스트의 오른쪽 끝과
   버튼 사이가 데스크톱에서는 최악에도 169px 이라 왼쪽으로 넉넉히 늘려도
   글자를 덮지 않지만, 480px 에서는 이미 18px 겹친다. 좁은 화면에서 켜면
   본문 탭을 가로챈다. 그쪽은 버튼이 항상 보이므로 넓힐 이유도 없다. */
@media (min-width: 48rem) {
    body.solune-page #bo_v #bo_vc .bo_vl_opt::before {
        position: absolute;
        inset: -.875rem -.75rem -.75rem -8rem;
        content: "";
    }
}
/* 여유 영역이 버튼을 덮어 클릭을 가로채지 않도록 버튼을 위로 올린다. */
body.solune-page #bo_v #bo_vc .bo_vl_opt .btn_cm_opt { position: relative; z-index: 1; }
/* 메뉴가 열린 동안에는 옵션 버튼을 계속 보여준다. */
body.solune-page #bo_v #bo_vc .btn_cm_opt[aria-expanded="true"] {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    opacity: 1;
}

/* ━━━━ board-view-inline-form.css ━━━━
   (옛 파일 · 원래 순서 144 · 원래 조건: 게시글 보기(basic · gallery 스킨의 view.skin.php)) */

/* 인라인 답변 · 수정 폼과 모바일 규칙

   board-view-comment-form.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, 로더가 원래 순서대로 이어서 실으면 어느 선언이 이기는지가
   달라지지 않는다. */

/* ── 인라인 답변 · 수정 폼 ──────────────────────────────────
   목록에 그냥 박혀 있어 어느 댓글에 다는 중인지 알 수 없었다.
   카드로 띄우고 제목과 취소를 붙인다. */
body.solune-page #bo_v .bo_vc_w.cv-inline-form {
    display: block;
    /* 폼이 댓글 본문 칼럼 안에 갇혀 깊이 3 에서 카드의 60% 폭까지 줄었다.
       아바타 칸(30px + gap 10px)을 되돌려 대상 댓글의 왼쪽 끝에 맞추고,
       오른쪽은 카드 안쪽 여백까지 늘린다. */
    margin: 0 0 1rem -2.5rem;
    padding: .875rem;
    border: 1px solid var(--solune-primary);
    border-radius: .75rem;
    background: var(--solune-surface-soft);
}
body.solune-page #bo_v .cv-inline-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .625rem;
    margin-bottom: .625rem;
}
body.solune-page #bo_v .cv-inline-title {
    display: inline-flex;
    align-items: center;
    gap: .375rem;
    color: var(--solune-primary);
    font-size: .78rem;
    font-weight: 800;
}
body.solune-page #bo_v .cv-inline-title .fa {
    display: inline-grid;
    width: 1.125rem;
    height: 1.125rem;
    place-items: center;
    border-radius: 999px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: .625rem;
}
body.solune-page #bo_v .cv-inline-cancel {
    display: inline-flex;
    height: 1.75rem;
    align-items: center;
    gap: .3125rem;
    padding: 0 .625rem;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-muted);
    font-family: inherit;
    font-size: .74rem;
    font-weight: 700;
    cursor: pointer;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
body.solune-page #bo_v .cv-inline-cancel:hover {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

/* 하단 줄: 기본 스킨의 float 때문에 비밀글이 안내 문구 앞으로 끌려 나왔다. */
body.solune-page #bo_v :is(#bo_vc_w, .bo_vc_w) .secret_cm,
body.solune-page #bo_v .bo_vc_w .secret_cm { float: none; margin: 0; }

/* ── 모바일 ────────────────────────────────────────────── */
@media (max-width: 767px) {
    body.solune-page #bo_v .cv-head { padding: 1.25rem 1.125rem 1rem; }
    body.solune-page #bo_v .cv-head .bo_v_tit { font-size: 1.5rem; }
    body.solune-page #bo_v .cv-head #bo_v_info { align-items: flex-start; }
    body.solune-page #bo_v .cv-head #bo_v_top .btn_bo_user { flex-wrap: wrap; }
    body.solune-page #bo_v_atc.cv-card { padding: 1.75rem 1.125rem 2rem; }
    body.solune-page #bo_v .bo_v_nb.cv-nb { grid-template-columns: minmax(0, 1fr); }
    body.solune-page #bo_v .bo_v_nb.cv-nb > li + li { border-left: 0; border-top: 1px solid var(--solune-border); }
    body.solune-page #bo_v .cv-cmt-head,
    body.solune-page #bo_v #bo_vc article.cv-cmt,
    body.solune-page #bo_v #bo_vc_w { padding-inline: 1.125rem; }
    /* 좁은 폭에서는 들여쓰기를 절반으로 줄여 본문 폭을 지킨다. */
    body.solune-page #bo_v #bo_vc article.cv-cmt--l1 { padding-left: 2.125rem; }
    body.solune-page #bo_v #bo_vc article.cv-cmt--l2 { padding-left: 3.125rem; }
    body.solune-page #bo_v #bo_vc article.cv-cmt--l3 { padding-left: 4.125rem; }
    body.solune-page #bo_v #bo_vc .bo_vl_opt { right: 1.125rem; }
    body.solune-page #bo_v .cv-cmt-tools { width: 100%; justify-content: space-between; }
    /* 좁은 화면에서는 폭이 곧 사용성이다. 들여쓰기를 버리고 카드 전폭을 쓴다.
       행 들여쓰기(계층당 1rem)와 아바타 칸을 함께 되돌린다. */
    body.solune-page #bo_v .cv-cmt .bo_vc_w.cv-inline-form { margin-left: -2.5rem; }
    body.solune-page #bo_v .cv-cmt--l1 .bo_vc_w.cv-inline-form { margin-left: -3.5rem; }
    body.solune-page #bo_v .cv-cmt--l2 .bo_vc_w.cv-inline-form { margin-left: -4.5rem; }
    body.solune-page #bo_v .cv-cmt--l3 .bo_vc_w.cv-inline-form { margin-left: -5.5rem; }
}

/* ==========================================================================
   글보기 — 시안(비회원용/회원용 게시글 보기) 적용
   시안은 머리·본문·동작을 한 카드에 담고, 제목 위에 분류와 글번호를 한 줄로
   올린다. 치수는 시안 그대로 옮기고 색은 사이트 팔레트를 쓴다.
   ========================================================================== */

/* 한 카드로 합쳤으므로 안쪽 두 덩이는 각자의 테두리·그림자를 버린다. */
body.solune-page #bo_v .cv-article { overflow: hidden; }
body.solune-page #bo_v .cv-article > .cv-head,
body.solune-page #bo_v .cv-article > #bo_v_atc {
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
}
body.solune-page #bo_v .cv-article > .cv-head { padding: 2.5rem 2.75rem 1.75rem; }

/* 분류 · 글번호 */
body.solune-page #bo_v .cv-eyebrow { display: flex; align-items: center; gap: .625rem; margin-bottom: 1rem; }
body.solune-page #bo_v .cv-eyebrow .bo_v_cate,
body.solune-page #bo_v .cv-eyebrow .solune-view-kicker {
    display: inline-flex;
    height: 1.5rem;
    align-items: center;
    border: 0;
    border-radius: 999px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    padding-inline: .625rem;
    font-size: .75rem;
    font-weight: 700;
    letter-spacing: -.01em;
}
body.solune-page #bo_v .cv-eyebrow .cv-no { color: var(--solune-muted); font-size: .78125rem; letter-spacing: -.01em; }

body.solune-page #bo_v .cv-article #bo_v_title { margin: 0; padding: 0; border: 0; }
body.solune-page #bo_v .cv-article .bo_v_tit {
    display: block;
    color: var(--solune-text);
    font-size: 2.125rem;
    font-weight: 700;
    line-height: 1.32;
    letter-spacing: -.035em;
    text-wrap: pretty;
}

/* 글쓴이 줄 — 왼쪽에 사람, 오른쪽에 숫자 */
body.solune-page #bo_v .cv-article #bo_v_info {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1.25rem;
    margin-top: 1.625rem;
    border-top: 1px solid var(--solune-border-subtle, var(--solune-border));
    padding: 1.25rem 0 0;
}
body.solune-page #bo_v .cv-article .cv-avatar-slot { width: 2.5rem; height: 2.5rem; }
body.solune-page #bo_v .cv-article .cv-avatar { font-size: .9375rem; }
body.solune-page #bo_v .cv-article .profile_info_ct { display: flex; flex-direction: column; gap: .1875rem; min-width: 0; }
body.solune-page #bo_v .cv-article .profile_info_ct > strong:first-of-type {
    color: var(--solune-text);
    font-size: .90625rem;
    font-weight: 600;
    letter-spacing: -.015em;
}
body.solune-page #bo_v .cv-article .profile_info_ct .if_date {
    color: var(--solune-muted);
    font-size: .78125rem;
    font-weight: 400;
    letter-spacing: -.01em;
}
body.solune-page #bo_v .cv-stats { display: flex; flex: none; align-items: center; gap: 1.375rem; margin: 0; }
body.solune-page #bo_v .cv-stats > div { display: flex; align-items: baseline; gap: .375rem; }
body.solune-page #bo_v .cv-stats dt { color: var(--solune-muted); font-size: .78125rem; }
body.solune-page #bo_v .cv-stats dd {
    margin: 0;
    color: var(--solune-text-soft);
    font-size: .875rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}
body.solune-page #bo_v .cv-stats dd a { color: inherit; }
body.solune-page #bo_v .cv-stats dd a:hover { color: var(--solune-primary); }

/* 본문 — 머리 바로 아래에서 시작한다. 예전에는 카드가 따로라 빈 띠가 생겼다. */
body.solune-page #bo_v .cv-article > #bo_v_atc { padding: .5rem 2.75rem 2.75rem; }
body.solune-page #bo_v .cv-article #bo_v_con {
    max-width: 56.25rem;
    margin-inline: 0;
    color: var(--solune-text-soft);
    font-size: 1.0625rem;
    line-height: 1.85;
    letter-spacing: -.015em;
    text-wrap: pretty;
}
body.solune-page #bo_v .cv-article #bo_v_con > p { margin: 0 0 1.625rem; }
body.solune-page #bo_v .cv-article #bo_v_share { max-width: 56.25rem; margin-inline: 0; }

/* 동작 푸터 */
body.solune-page #bo_v .cv-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin: 0;
    border-top: 1px solid var(--solune-border-subtle, var(--solune-border));
    background: var(--solune-surface-soft);
    padding: 1.125rem 2.75rem;
}
body.solune-page #bo_v .cv-actions ul { display: flex; align-items: center; gap: .5rem; margin: 0; padding: 0; list-style: none; }
body.solune-page #bo_v .cv-actions .cv-btn,
body.solune-page #bo_v .cv-actions .btn_more_opt {
    display: inline-flex;
    height: 2.25rem;
    min-height: 0;
    align-items: center;
    gap: .375rem;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    cursor: pointer;
    padding-inline: .875rem;
    font-size: .8125rem;
    font-weight: 600;
}
body.solune-page #bo_v .cv-actions .cv-btn:hover,
body.solune-page #bo_v .cv-actions .btn_more_opt:hover {
    border-color: var(--solune-border-strong);
    background: var(--solune-surface);
    color: var(--solune-text);
}
body.solune-page #bo_v .cv-actions .btn_more_opt { width: 2.25rem; justify-content: center; padding-inline: 0; }
body.solune-page #bo_v .cv-actions .cv-btn-primary {
    border-color: var(--solune-primary);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    padding-inline: 1rem;
}
body.solune-page #bo_v .cv-actions .cv-btn-primary:hover {
    border-color: var(--solune-primary-hover);
    background: var(--solune-primary-hover);
    color: var(--solune-primary-ink);
}
/* 복사가 끝났다고 알리는 짧은 상태. 색만 바꾸고 폭은 건드리지 않는다. */
body.solune-page #bo_v .cv-actions .cv-btn.is-done { border-color: var(--solune-primary); color: var(--solune-primary); }

/* 이전글 · 다음글 — 시안은 두 장의 카드다. */
body.solune-page #bo_v .bo_v_nb.cv-nb {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: .75rem;
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
    overflow: visible;
}
body.solune-page #bo_v .bo_v_nb.cv-nb > li {
    min-width: 0;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface);
}
body.solune-page #bo_v .bo_v_nb.cv-nb > li + li { border-left: 1px solid var(--solune-border); text-align: right; }
body.solune-page #bo_v .bo_v_nb.cv-nb > li:hover { border-color: var(--solune-border-strong); }
body.solune-page #bo_v .cv-nb-link {
    display: flex;
    flex-direction: column;
    gap: .5rem;
    padding: 1.125rem 1.25rem;
}
body.solune-page #bo_v .cv-nb-link:hover { background: none; }
body.solune-page #bo_v .cv-nb-link .nb_tit {
    color: var(--solune-muted);
    font-size: .71875rem;
    font-weight: 700;
    letter-spacing: .08em;
}
body.solune-page #bo_v .cv-nb-link .cv-nb-title {
    color: var(--solune-text);
    font-size: .9375rem;
    font-weight: 600;
    line-height: 1.5;
    letter-spacing: -.02em;
}
body.solune-page #bo_v .cv-nb-link .nb_date { color: var(--solune-muted); font-size: .78125rem; }

@media (max-width: 48rem) {
    body.solune-page #bo_v .cv-article > .cv-head { padding: 1.5rem 1.25rem 1.125rem; }
    body.solune-page #bo_v .cv-article > #bo_v_atc { padding: .5rem 1.25rem 1.75rem; }
    body.solune-page #bo_v .cv-actions { padding: 1rem 1.25rem; }
    body.solune-page #bo_v .cv-article .bo_v_tit { font-size: 1.5rem; }
    body.solune-page #bo_v .cv-article #bo_v_con { font-size: 1rem; }
    body.solune-page #bo_v .bo_v_nb.cv-nb { grid-template-columns: minmax(0, 1fr); }
    body.solune-page #bo_v .bo_v_nb.cv-nb > li + li { text-align: left; }
}

/* SNS 공유칸과 이미지칸은 쓸 게 없어도 마크업이 남아 본문 위에 빈 띠를 만든다.
   안에 공백 문자만 있어 :empty 로는 안 잡히므로 자식 요소 유무로 본다. */
body.solune-page #bo_v .cv-article #bo_v_share:not(:has(*)),
body.solune-page #bo_v .cv-article #bo_v_img:not(:has(*)) { display: none; }
/* 본문 아래 여백은 섹션 패딩이 맡는다. 문단 마진까지 더하면 푸터가 밀린다. */
body.solune-page #bo_v .cv-article #bo_v_con { margin-bottom: 0; }

/* 레거시 스킨 CSS 가 .btn_bo_user li 에 고정폭을 준다. 상단 버튼 묶음이었을
   때는 문제가 없었지만 푸터로 옮기니 "답변"이 두 줄로 접히고 "목록으로"가
   잘렸다. 폭을 풀고 글자가 끊기지 않게 한다. */
body.solune-page #bo_v .cv-actions ul > li { width: auto; min-width: 0; margin: 0; padding: 0; }
body.solune-page #bo_v .cv-actions .cv-btn,
body.solune-page #bo_v .cv-actions .cv-btn-label { white-space: nowrap; }
body.solune-page #bo_v .cv-actions .cv-actions-right { margin-left: auto; }

/* board-view.css 의 #bo_v_top ul.btn_bo_user li > :is(a, button) 은 버튼을
   2.6rem 정사각으로 묶는다. 머리에서 아이콘만 있던 시절의 규칙이라, 글자를
   단 푸터 버튼에서는 상자보다 글자가 길어져 밖으로 삐져나온다.
   푸터에서는 폭을 글자에 맡기고, 아이콘 하나뿐인 ⋮ 만 정사각으로 남긴다. */
body.solune-page #bo_v_top.cv-actions ul.btn_bo_user li > :is(a, button) {
    width: auto;
    height: 2.25rem;
    padding-inline: .875rem;
}
body.solune-page #bo_v_top.cv-actions ul.btn_bo_user li > .cv-btn-primary { padding-inline: 1rem; }
body.solune-page #bo_v_top.cv-actions ul.btn_bo_user li > .btn_more_opt { width: 2.25rem; padding-inline: 0; }

/* 삭제는 시안처럼 붉은 기를 띠되, 평소에는 테두리까지 붉히지 않는다. */
body.solune-page #bo_v .cv-actions .cv-btn-danger { color: var(--solune-danger, #b42318); }
body.solune-page #bo_v .cv-actions .cv-btn-danger:hover {
    border-color: var(--solune-danger, #b42318);
    color: var(--solune-danger-strong, #912018);
}

/* 머리줄로 옮겨 온 복사·이동 메뉴(⋮).
   버튼은 옆의 목록 버튼과 같은 규격으로 세우고, 메뉴는 <li> 안에서
   절대배치로 매달리므로 그 li 가 위치 기준을 갖게 한다. */
body.solune-page:where(:has(#bo_v:not(.qa-skin))) .solune-page-header-slot { display: flex; align-items: center; }
/* 복사·이동 권한이 없으면 스킨이 버튼을 아예 그리지 않아 자리가 빈다. 그대로 두면
   목록 버튼과의 gap 8px 만 남아 목록이 오른쪽 레일에 닿지 못한다. */
body.solune-page .solune-page-header-slot:empty { display: none; }
body.solune-page .solune-page-header-slot > li { position: relative; width: auto; margin: 0; padding: 0; list-style: none; }
body.solune-page .solune-page-header-slot .btn_more_opt {
    display: inline-grid;
    width: 2.375rem;
    height: 2.375rem;
    place-items: center;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    cursor: pointer;
    padding: 0;
    font-size: .875rem;
}
body.solune-page .solune-page-header-slot .btn_more_opt:hover,
body.solune-page .solune-page-header-slot .btn_more_opt[aria-expanded="true"] {
    border-color: var(--solune-border-strong);
    color: var(--solune-text);
}
body.solune-page .solune-page-header-slot .btn_more_opt:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: 2px; }
body.solune-page .solune-page-header-slot .cv-menu { top: calc(100% + .375rem); right: 0; left: auto; }

/* ==========================================================================
   댓글 — 시안(비회원용 게시글 보기) 적용
   ========================================================================== */

/* 한 줄 위아래가 12px 이라 촘촘했다. 시안은 22px 에 머리카락 구분선을 함께
   둔다. 선이 있으면 같은 간격이라도 덩어리가 또렷하게 갈린다. */
body.solune-page #bo_v #bo_vc article.cv-cmt {
    gap: .875rem;
    /* 흰 카드 위에 놓이므로 --solune-surface-soft 로는 보이지 않는다. 테두리색을
       옅게 섞어 눈에는 걸리되 목록을 가르지는 않을 만큼만 남긴다. */
    border-top: 1px solid color-mix(in srgb, var(--solune-border) 62%, transparent);
    padding-block: 1.375rem;
}
body.solune-page #bo_v #bo_vc article.cv-cmt:first-of-type { border-top: 0; }
/* 아바타 크기는 여기서 정하지 않는다. 한때 줄이 넓어진 만큼 30px 이 작아
   보여 여기서 상자만 34px 로 키웠는데, 안의 그림은 board-view-comments 가
   30px 로 잡고 있어 34px 상자에 30px 그림이 들어앉았다. 상자와 그림을
   함께 쥐고 있는 그쪽 한 곳으로 모았다(지금 40px). */
/* 댓글 본문. 클래스 이름은 .cmt_contents 다 — 예전에 .cv-cmt-body 로 적어
   두어 규칙이 헛돌았고, 그래서 13.76px 그대로였다. 시안은 15px 인데 그보다
   조금 더 키운다. 글 본문 17px 보다는 작아 위아래 관계는 유지된다. */
body.solune-page #bo_v #bo_vc article .cmt_contents {
    margin-top: .5625rem;
    color: var(--solune-text-soft);
    font-size: 1rem;
    line-height: 1.75;
    letter-spacing: -.015em;
}
body.solune-page #bo_v #bo_vc article .cmt_contents > p { margin: 0; font-size: inherit; line-height: inherit; }
body.solune-page #bo_v #bo_vc article .cmt_contents > p + p { margin-top: .75rem; }

/* --- 댓글 쓰기 폼 --------------------------------------------------------
   시안은 폼을 옅은 카드에 담고 그 안에 이름·비밀번호와 자동등록방지를
   각자의 칸으로 나눈다. 예전에는 바탕도 테두리도 없이 요소가 흩어져 있었다.
   comment_box() 가 폼을 다른 자리로 옮기므로 id 와 class 를 함께 잡는다. */
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) {
    /* 댓글 목록에 그대로 붙인다. 떨어뜨려 두면 폼이 딴 카드처럼 보여
       "어디에 쓰는 칸인지" 가 한 번 끊긴다. 목록의 마지막 줄과 폼 사이는
       선 하나로만 나눈다 — 목록은 아래 테두리가 없으므로 폼의 위 테두리가
       그 한 줄이 된다. 아래 모서리만 둥글려 카드를 닫는다. */
    margin-top: 0;
    border: 1px solid var(--solune-border);
    border-radius: 0 0 .75rem .75rem;
    /* 목록과 같은 흰 바탕. surface-soft 로 옅게 눌러 두면 폼만 다른 면처럼
       보였다. 값을 직접 적지 않고 토큰을 쓰는 이유는 다크 때문이다 —
       #fff 로 못박으면 어두운 화면에서 이 칸만 하얗게 튄다. */
    background: var(--solune-surface);
    padding: 1.5rem;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) > h2 {
    position: static;
    width: auto;
    height: auto;
    margin: 0 0 .875rem;
    overflow: visible;
    clip: auto;
    clip-path: none;
    color: var(--solune-text);
    font-size: .90625rem;
    font-weight: 700;
    letter-spacing: -.02em;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) #wr_content {
    width: 100%;
    box-sizing: border-box;
    border: 1px solid var(--solune-border-strong);
    border-radius: .625rem;
    background: var(--solune-surface);
    padding: .875rem 1rem;
    font-size: .9375rem;
    line-height: 1.7;
    letter-spacing: -.015em;
    resize: vertical;
}

/* 이름·비밀번호는 두 칸으로 나란히 */
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .bo_vc_w_info {
    display: grid;
    gap: .625rem;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: .75rem;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .bo_vc_w_info > :is(#wr_name, #wr_password) {
    width: 100%;
    height: 2.625rem;
    box-sizing: border-box;
    border: 1px solid var(--solune-border-strong);
    border-radius: .625rem;
    background: var(--solune-surface);
    padding-inline: .875rem;
    font-size: .875rem;
}

/* 자동등록방지는 css/default.css 의 "자동등록방지" 절이 맡는다. 한때 이
   화면만의 규칙을 여기에 따로 두었는데, 같은 마크업을 쓰는 화면이 일곱이라
   한 벌로 모았다. */

/* 맨 아래 줄 — 안내·비밀글·등록 */
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .btn_confirm {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: .875rem;
    margin-top: .875rem;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .cv-write-note { margin-right: auto; color: var(--solune-muted); font-size: .75rem; }
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .btn_submit {
    height: 2.625rem;
    border: 0;
    border-radius: .625rem;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    cursor: pointer;
    padding-inline: 1.25rem;
    font: inherit;
    font-size: .875rem;
    font-weight: 700;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .btn_submit:hover { background: var(--solune-primary-hover); }

@media (max-width: 40rem) {
    body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) { padding: 1.125rem; }
    body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .bo_vc_w_info { grid-template-columns: minmax(0, 1fr); }
}

/* 레거시 CSS 가 .bo_vc_w_wr 를 flex 로 두어 정보 칸과 등록 줄이 좌우로
   나뉘고, 정보 칸이 846px 중 705px 로 눌렸다. 시안처럼 위아래로 쌓는다. */
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .bo_vc_w_wr {
    display: block;
    width: auto;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .bo_vc_w_info { float: none; width: auto; }

/* 비밀글: 레거시 .selec_chk 는 입력 요소를 숨기고 빈 span을 대신 그린다.
   댓글폼에서는 daisyUI checkbox를 실제 컨트롤로 보여 주고, 라벨은 별도
   테두리 없이 등록 버튼과 같은 줄에서 상태를 알아보기 쉽게 한다. */
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .secret_cm > input[type="checkbox"].checkbox {
    position: static;
    z-index: auto;
    display: inline-grid;
    width: 1.125rem;
    height: 1.125rem;
    flex: none;
    margin: 0;
    opacity: 1;
    overflow: visible;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .secret_cm {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    margin-right: .375rem;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .secret_cm .solune-secret-label {
    display: inline-flex;
    min-height: 2.375rem;
    align-items: center;
    gap: .5rem;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: var(--solune-text-soft);
    font-size: .78125rem !important;
    font-weight: 700;
    line-height: 1.2;
    cursor: pointer;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease, box-shadow .14s ease;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .secret_cm .solune-secret-label > span { display: none; }
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .secret_cm:hover .solune-secret-label {
    color: var(--solune-primary);
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .secret_cm > input[type="checkbox"].checkbox:focus-visible + .solune-secret-label {
    outline: 2px solid color-mix(in srgb, var(--solune-primary) 55%, transparent);
    outline-offset: 3px;
}
body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .secret_cm > input[type="checkbox"].checkbox:checked + .solune-secret-label {
    color: var(--solune-primary);
}

@media (prefers-reduced-motion: reduce) {
    body.solune-page #bo_v :is(#bo_vc_w, aside.bo_vc_w) .secret_cm .solune-secret-label { transition: none; }
}

/* ━━━━ board-write.css ━━━━
   (옛 파일 · 원래 순서 150 · 원래 조건: 글쓰기(basic · gallery 스킨의 write.skin.php)) */

/* Solune board write — 글쓰기 폼.
   목록·본문과 달리 손이 닿지 않아 그누보드 기본 모양이 그대로 남아 있었다.
   라벨이 전부 sound_only 라 화면에는 아무 설명이 없었고, 파일 첨부는 브라우저
   기본 위젯, 버튼은 기본 스타일이었다. 본문 쪽 규칙과 같은 결로 맞춘다. */

/* 시안(자유게시판 글쓰기 v5)은 폼 전체를 카드 한 장에 담는다 — 머리띠에
   작성자와 옵션, 가운데에 입력, 바닥띠에 단추다. 우리는 덩이마다 카드를
   따로 세워 두어(실측 회원 3장 · 비회원 4장) 화면이 조각나 보였다.
   #bo_w 를 그 한 장으로 삼고, 안의 .cw-card 들은 테두리를 걷어 구역으로만
   남긴다. overflow 를 감추는 까닭은 머리띠·바닥띠가 모서리까지 꽉 차야
   하기 때문이다. */
body.solune-page #bo_w:not(:where(.qa-skin)) {
    overflow: hidden;
    padding: 0;
    border: 1px solid var(--solune-border);
    border-radius: 1rem;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

/* 블록 사이 간격. 기본 스킨은 구분선만 그어 그룹이 보이지 않았다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .write_div { margin: 0 0 1.125rem; padding: 0; border: 0; }
body.solune-page #bo_w:not(:where(.qa-skin)) .write_div:last-of-type { margin-bottom: 0; }
body.solune-page #bo_w:not(:where(.qa-skin)) #autosave_wrapper.write_div { margin: 0; }

/* 보이는 라벨 */

/* 입력 공통 */
body.solune-page #bo_w:not(:where(.qa-skin)) :is(input[type="text"], input[type="password"], input[type="email"], select, textarea) {
    box-sizing: border-box;
    width: 100%;
    padding: .6875rem .8125rem;
    border: 1px solid var(--solune-border-strong);
    border-radius: .625rem;
    background: var(--solune-surface);
    color: var(--solune-text);
    font-family: inherit;
    font-size: .9rem;
    line-height: 1.5;
    transition: border-color .14s ease, box-shadow .14s ease;
}
body.solune-page #bo_w:not(:where(.qa-skin)) :is(input[type="text"], input[type="password"], input[type="email"], select, textarea):focus {
    border-color: var(--solune-primary);
    box-shadow: none;
}

body.solune-page #bo_w:not(:where(.qa-skin)) :is(input[type="text"], input[type="password"], input[type="email"], select, textarea):focus-visible {
    outline: 2px solid var(--solune-primary);
    outline-offset: 1px;
}
body.solune-page #bo_w:not(:where(.qa-skin)) ::placeholder { color: var(--solune-muted); }
body.solune-page #bo_w:not(:where(.qa-skin)) select { height: auto; }

/* 제목: 임시저장 버튼이 입력 위에 겹치지 않게 한 줄로 둔다. */
body.solune-page #bo_w:not(:where(.qa-skin)) #autosave_wrapper { display: flex; align-items: center; gap: .625rem; }
/* 제목은 시안에서 48 높이에 16px 반굵게다 — 한 화면에서 가장 먼저 읽히는
   칸이라 다른 입력보다 한 뼘 크다. */
body.solune-page #bo_w:not(:where(.qa-skin)) #autosave_wrapper #wr_subject {
    height: 3rem;
    flex: 1;
    font-size: 1rem;
    font-weight: 600;
}
body.solune-page #bo_w:not(:where(.qa-skin)) #btn_autosave {
    height: 2.5rem;
    flex: none;
    padding: 0 .875rem;
    border: 1px solid var(--solune-border);
    border-radius: .625rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-family: inherit;
    font-size: .78rem;
    font-weight: 700;
    white-space: nowrap;
    cursor: pointer;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
body.solune-page #bo_w:not(:where(.qa-skin)) #btn_autosave:hover {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

/* 본문: 댓글 입력창과 같은 결 */
body.solune-page #bo_w:not(:where(.qa-skin)) textarea#wr_content { min-height: 20rem; resize: vertical; }
body.solune-page #bo_w:not(:where(.qa-skin)) #char_count_desc { margin: 0 0 .5rem; color: var(--solune-muted); font-size: .76rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) #char_count_wrap { margin-top: .375rem; color: var(--solune-muted); font-size: .74rem; text-align: right; }

/* 에디터 단축키 일람(.cke_sc)은 글쓰기 화면만의 것이 아니다 —
   1:1문의 작성과 답변 폼에도 같은 버튼이 붙는데 이 파일은 게시판
   글쓰기 스킨만 싣는다. 그래서 default.css 로 옮겼다. */

/* 옵션 체크박스 줄 */
body.solune-page #bo_w:not(:where(.qa-skin)) .bo_v_option {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem .875rem;
    margin: 0;
    padding: .6875rem .8125rem;
    border: 1px solid var(--solune-border);
    border-radius: .625rem;
    background: var(--solune-surface-soft);
    list-style: none;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .bo_v_option li { margin: 0; padding: 0; }
body.solune-page #bo_w:not(:where(.qa-skin)) .bo_v_option label { color: var(--solune-text-soft); font-size: .8rem; }

/* 링크 · 첨부: 스킨 style.css 가 라벨을 입력창 안쪽 40x38 아이콘 상자로
   절대배치해 두어, 글자를 넣으면 세로로 쪼개지고 입력창과 겹쳤다.
   배치를 풀어 라벨을 위로 올린다. */
body.solune-page #bo_w:not(:where(.qa-skin)) :is(.bo_w_link label, .bo_w_flie .lb_icon) {
    position: static;
    width: auto;
    height: auto;
    line-height: 1;
    font-size: .78rem;
    text-align: left;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .bo_w_link .frm_input { padding-left: .8125rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .bo_w_flie .frm_file { margin-top: 0; padding-left: .625rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .bo_w_flie .file_wr {
    position: static;
    height: auto;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .bo_w_flie .frm_input { margin: .5rem 0 0; }
body.solune-page #bo_w:not(:where(.qa-skin)) .bo_w_flie .file_del { position: static; top: auto; right: auto; }

/* 링크 · 첨부: 라벨을 위에 두고 입력을 아래로 */
body.solune-page #bo_w:not(:where(.qa-skin)) :is(.bo_w_link, .bo_w_flie) { display: flex; flex-direction: column; }
body.solune-page #bo_w:not(:where(.qa-skin)) .file_wr { display: flex; flex-direction: column; margin: 0 0 .5rem; }

/* 파일 입력: 브라우저 기본 위젯이 테마와 따로 놀았다. */
body.solune-page #bo_w:not(:where(.qa-skin)) input[type="file"] {
    box-sizing: border-box;
    width: 100%;
    padding: .5rem .625rem;
    border: 1px dashed var(--solune-border-strong);
    border-radius: .625rem;
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    font-family: inherit;
    font-size: .8rem;
    cursor: pointer;
}
body.solune-page #bo_w:not(:where(.qa-skin)) input[type="file"]::file-selector-button {
    margin-right: .625rem;
    padding: .375rem .75rem;
    border: 0;
    border-radius: .5rem;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-family: inherit;
    font-size: .78rem;
    font-weight: 700;
    cursor: pointer;
    transition: background-color .14s ease;
}
body.solune-page #bo_w:not(:where(.qa-skin)) input[type="file"]:hover { border-color: var(--solune-primary); }
body.solune-page #bo_w:not(:where(.qa-skin)) input[type="file"]:hover::file-selector-button { background: color-mix(in srgb, var(--solune-primary) 18%, transparent); }
body.solune-page #bo_w:not(:where(.qa-skin)) .file_del { display: inline-flex; align-items: center; gap: .375rem; margin-top: .4375rem; color: var(--solune-muted); font-size: .76rem; }

/* 하단 버튼: 본문 쪽 규칙과 같게 오른쪽 정렬 + pill */
body.solune-page #bo_w:not(:where(.qa-skin)) .btn_confirm {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: .5rem;
    margin-top: 1.5rem;
    padding-top: 1.25rem;
    border-top: 1px solid var(--solune-border);
}
body.solune-page #bo_w:not(:where(.qa-skin)) .btn_confirm .btn_cancel {
    display: inline-flex;
    height: 2.625rem;
    align-items: center;
    padding: 0 1.125rem;
    border: 1px solid var(--solune-border);
    border-radius: 999px;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-size: .85rem;
    font-weight: 700;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .btn_confirm .btn_cancel:hover {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}
body.solune-page #bo_w:not(:where(.qa-skin)) .btn_confirm .btn_submit {
    height: 2.625rem;
    padding: 0 1.5rem;
    border: 0;
    border-radius: 999px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-family: inherit;
    font-size: .85rem;
    font-weight: 700;
    cursor: pointer;
    transition: background-color .14s ease;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .btn_confirm .btn_submit:hover { background: var(--solune-primary-hover); }

@media (max-width: 767px) {
    /* 카드 자체에는 여백을 두지 않는다 — 머리띠와 바닥띠가 모서리까지 닿아야
       한 장으로 읽힌다. 안쪽 여백은 .card-body 가 갖는다(아래 40rem 블록). */
    body.solune-page #bo_w:not(:where(.qa-skin)) { padding: 0; }
    body.solune-page #bo_w:not(:where(.qa-skin)) #autosave_wrapper { flex-wrap: wrap; }
    body.solune-page #bo_w:not(:where(.qa-skin)) #btn_autosave { width: 100%; }
    body.solune-page #bo_w:not(:where(.qa-skin)) textarea#wr_content { min-height: 14rem; }
    body.solune-page #bo_w:not(:where(.qa-skin)) .btn_confirm > * { flex: 1; justify-content: center; }
}

/* ==========================================================================
   글쓰기 — 시안(비회원용·회원용 글쓰기) 적용
   폼을 네 덩이(작성자 정보 · 글 내용 · 링크와 첨부 · 자동등록방지)로 나누고
   라벨을 눈에 보이게 세운다. 예전에는 라벨이 전부 sound_only 라 입력칸만
   줄줄이 서 있었고, half_input 이 float 라 칸마다 들여쓰기가 어긋났다.
   치수는 시안대로, 색은 사이트 팔레트를 쓴다.
   ========================================================================== */

body.solune-page #bo_w:not(:where(.qa-skin)) #fwrite { display: flex; flex-direction: column; gap: 0; width: 100% !important; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card {
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
}
/* 구역 사이는 선 하나로만 가른다. 시안도 "링크와 첨부" 앞에 같은 선을 긋는다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card + .cw-card { border-top: 1px solid var(--solune-border); }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card > .card-body { display: flex; flex-direction: column; gap: 1.125rem; padding: 1.75rem 2rem; }
/* 비회원의 "작성자 정보" 는 시안에서 본문 안의 옅은 상자다(회원의 머리띠에
   해당하는 자리). 구역 전체를 띠로 만들면 이름·비밀번호 입력까지 회색
   바탕에 잠겨 읽기 나쁘므로, 상자만 옅게 두고 테두리로 묶는다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card:has(.cw-grid) > .card-body {
    margin: 1.25rem;
    padding: 1.125rem;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface-soft);
}
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: .625rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card-head h2 { margin: 0; color: var(--solune-text); font-size: .9375rem; font-weight: 700; letter-spacing: -.02em; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card-head span { color: var(--solune-muted); font-size: .78125rem; letter-spacing: -.01em; }

/* 회원 프로필 줄 */
/* 위의 .cw-card > .card-body 규칙이 더 구체적이라 column 이 이긴다.
   같은 깊이로 적어야 프로필 줄이 좌우로 갈린다. */
/* 회원 프로필 줄은 시안의 머리띠다 — 옅은 바탕에 아래로 선 하나. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card > .cw-author-card {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: .875rem 1.25rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
/* 머리띠 다음 구역에는 선을 두 번 긋지 않는다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card:has(> .cw-author-card) + .cw-card { border-top: 0; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-author { display: flex; min-width: 0; align-items: center; gap: .75rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-avatar {
    display: grid;
    width: 2.625rem;
    height: 2.625rem;
    flex: none;
    place-items: center;
    border-radius: 999px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: 1rem;
    font-weight: 700;
}
/* 사진을 올린 회원은 그림이 동그라미를 채운다. 옅은 강조색 바탕은 이니셜을
   받치려고 깔아 둔 것이라 그때는 지운다 — 목록의 .cb-avatar-photo 와 같다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-avatar-photo { overflow: hidden; background: none; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-avatar img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-author-text { display: flex; min-width: 0; flex-direction: column; gap: .25rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-author-name { display: flex; align-items: center; gap: .4375rem; color: var(--solune-text); font-size: .9375rem; font-weight: 700; letter-spacing: -.02em; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-author-badge { border: 0; background: var(--solune-primary-soft); color: var(--solune-primary); font-size: .6875rem; font-weight: 700; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-author-note { color: var(--solune-muted); font-size: .78125rem; letter-spacing: -.01em; }

/* 라벨 + 입력 한 짝 */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-field { display: flex; flex-direction: column; gap: .4375rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-field-label { display: flex; align-items: center; gap: .3125rem; color: var(--solune-text-soft); font-size: .8125rem; font-weight: 600; letter-spacing: -.015em; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-field-label b { color: var(--solune-danger, #b42318); font-size: .75rem; font-weight: 700; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-grid { display: grid; gap: 1.125rem 1.25rem; grid-template-columns: repeat(2, minmax(0, 1fr)); }
body.solune-page #bo_w:not(:where(.qa-skin)) :is(.cw-field, .cw-inline-field) :is(input.input, select.select) { height: 2.75rem; font-size: .90625rem; }

/* 링크·첨부는 라벨을 왼쪽에 붙인다 */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-inline-field { display: flex; align-items: center; gap: .75rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-inline-label { width: 3.25rem; flex: none; color: var(--solune-muted); font-size: .78125rem; font-weight: 600; font-variant-numeric: tabular-nums; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-file { display: flex; flex-direction: column; gap: .5rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-file-desc { margin-left: 4rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-file-del { margin-left: 4rem; }

/* 옵션 체크박스 */
/* 공지 · 비밀글 · HTML 은 시안에서 알약 토글이다 — 테두리 안에 작은 점과
   이름이 들어가고, 켜면 강조색으로 물든다. 네모 체크박스로 두었을 때는
   글 내용 아래에 홀로 떠 무엇을 켜는 것인지 눈에 잘 안 들어왔다.

   체크박스 자체를 점으로 바꾼다. daisyUI 의 .checkbox 는 CDN 에 실리는
   파일에 규칙이 없어(실측: 컴포넌트 클래스 0개) 브라우저 기본 네모가
   그대로 나오던 자리다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-options { display: flex; flex-wrap: wrap; align-items: center; gap: .375rem; margin: 0; padding: 0; list-style: none; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-options > li { margin: 0; padding: 0; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-opt {
    display: inline-flex;
    height: 2rem;
    align-items: center;
    gap: .375rem;
    padding: 0 .75rem;
    border: 1px solid var(--solune-border);
    border-radius: 999px;
    background: var(--solune-surface);
    color: var(--solune-muted);
    cursor: pointer;
    font-size: .8125rem;
    font-weight: 600;
    letter-spacing: -.015em;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-opt:hover { border-color: var(--solune-primary); color: var(--solune-primary); }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-opt:has(input:checked) {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-opt input[type="checkbox"] {
    width: .5rem;
    height: .5rem;
    flex: none;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: var(--solune-border-strong);
    appearance: none;
    -webkit-appearance: none;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-opt input[type="checkbox"]:checked { background: var(--solune-primary); }
/* 점은 작아서 초점 표시를 알약이 대신 받는다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-opt:has(input:focus-visible) { outline: 2px solid var(--solune-primary); outline-offset: 2px; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-opt input[type="checkbox"]:focus-visible { outline: 0; }

/* 맨 아래 줄 */
/* 맨 아래 줄도 시안처럼 카드 안의 띠다. 한때 카드 바깥에 떠 있어 단추가
   어느 폼에 딸린 것인지 흐릿했다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: .5rem;
    margin: 0;
    padding: .875rem 1.25rem;
    border: 0;
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-actions-note { margin-right: auto; color: var(--solune-muted); font-size: .78125rem; }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-actions .btn { height: 2.5rem; min-height: 0; border-radius: .625rem; font-size: .875rem; font-weight: 600; }

@media (max-width: 40rem) {
    body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card > .card-body { padding: 1.25rem 1.125rem; }
    body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card > .cw-author-card { padding: .875rem 1.125rem; }
    body.solune-page #bo_w:not(:where(.qa-skin)) .cw-card:has(.cw-grid) > .card-body { margin: 1.125rem; padding: 1rem; }
    body.solune-page #bo_w:not(:where(.qa-skin)) .cw-actions { padding: .875rem 1.125rem; }
    body.solune-page #bo_w:not(:where(.qa-skin)) .cw-grid { grid-template-columns: minmax(0, 1fr); }
    body.solune-page #bo_w:not(:where(.qa-skin)) .cw-inline-field { flex-direction: column; align-items: stretch; gap: .375rem; }
    body.solune-page #bo_w:not(:where(.qa-skin)) :is(.cw-file-desc, .cw-file-del) { margin-left: 0; }
    /* flex 항목이라 width:100% 만으로는 줄어든다. 한 줄을 통째로 차지하게 basis 로 준다. */
    body.solune-page #bo_w:not(:where(.qa-skin)) .cw-actions-note { flex: 0 0 100%; margin: 0 0 .25rem; }
}

/* 자동등록방지 — 댓글 폼과 같은 모양으로 맞춘다.
   그림 · 음성듣기 · 새로고침 · 입력이 한 줄로 서고 안내는 아래 한 줄로 간다.
   (댓글 쪽 규칙은 board-view.skin 에서만 실리는 board-view-cards.css 에 있어
   이 화면에는 오지 않는다. 그래서 같은 값을 여기에 한 번 더 적는다.) */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-captcha-card { padding: 1.25rem 1.5rem; }
/* 자동등록방지는 css/default.css 의 "자동등록방지" 절이 맡는다. 한때 이
   화면만의 규칙을 여기에 따로 두었는데, 같은 마크업을 쓰는 화면이 일곱이라
   한 벌로 모았다. */

/* 첨부. 한때 레거시 점선을 걷어 실선으로 두었는데, 시안 v5 는 다시
   점선 드롭존이다 — 끌어다 놓을 수 있는 자리임을 점선이 알린다.
   브라우저가 그리는 파일 단추는 ::file-selector-button 으로만 만질 수
   있어, 그 안쪽만 작은 단추로 맞추고 나머지는 상자에 맡긴다. */
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-file .file-input {
    height: auto;
    min-height: 3.25rem;
    padding: .625rem .75rem;
    border: 1.5px dashed var(--solune-border-strong);
    border-radius: .625rem;
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    font-size: .8125rem;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-file .file-input:hover { border-color: var(--solune-primary); }
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-file .file-input::file-selector-button {
    height: 2rem;
    margin-right: .75rem;
    padding: 0 .875rem;
    border: 1px solid var(--solune-border);
    border-radius: 999px;
    background: var(--solune-surface);
    color: var(--solune-primary);
    cursor: pointer;
    font-family: inherit;
    font-size: .8125rem;
    font-weight: 600;
}
body.solune-page #bo_w:not(:where(.qa-skin)) .cw-file .file-input::file-selector-button:hover { border-color: var(--solune-primary); background: var(--solune-primary-soft); }

/* ━━━━ default.css ━━━━
   (옛 파일 · 원래 순서 300 · 원래 조건: 모든 화면 · head.sub.php) */

/* 팔레트 — 사이트 전체의 색은 여기 한 곳에서 정한다.

   한때 세 벌이었다. 이 파일의 :root 에 초록 계열, community.css 가
   html[data-theme] 로 남색 계열을 다시 깔고, 쇼핑몰은 shop-ondam.css 가
   .solune-shop-page 안에서 온담 팔레트로 또 덮었다. 부트 스크립트가
   data-theme 를 언제나 세우므로 :root 의 초록은 어느 화면에서도 보인 적이
   없다 — 새 화면을 만들며 "primary 가 뭐지" 하고 물으면 파일마다 답이
   달랐다. 실제로 보이던 값(community 것)을 여기로 옮기고 그쪽 블록은
   걷어냈다. 이제 두 층이다: 여기(기본) 위에 쇼핑몰만 shop-ondam.css 로
   갈아끼운다.

   색은 data-theme 별로, 반지름·글꼴·그림자 눈금은 :root 에 둔다.
   data-theme 는 head.sub.php 의 부트 스크립트와 theme.js 가
   data-solune-theme 와 함께 늘 세운다. */
:root {
    --solune-primary-ink: #ffffff;
    --solune-danger: #bd4e54;
    --solune-shadow-sm: 0 1px 2px rgba(24, 45, 42, .05);
    --solune-shadow-md: 0 14px 36px rgba(29, 52, 48, .08);
    --solune-shadow-lift: 0 10px 22px -8px rgba(29, 52, 48, .16);
    --solune-radius-sm: 10px;
    --solune-radius-md: 16px;
    --solune-radius-lg: 24px;
    --solune-radius-pill: 999px;
    --solune-shell: 1240px;
    /* Match the reference site's Pretendard rendering stack. */
    --solune-font: "Pretendard Variable", Pretendard, "Noto Sans KR", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
    --solune-font-size: 16px;
    --solune-body-letter-spacing: -.01em;
    --solune-heading-letter-spacing: -.04em;
    --solune-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

html[data-theme="light"] {
    /* 페이지 바닥. 시안(index-uiux2.html)의 --color-base-200 값 그대로다. */
    --color-base-200: #f5f7fa;
    --solune-page: #f5f7fa;
    --solune-surface: #ffffff;
    --solune-surface-soft: #f8fafc;
    --solune-surface-tint: #edf4ff;
    --solune-text: #101828;
    --solune-text-soft: #344054;
    --solune-muted: #667085;
    --solune-border: #d9e0ea;
    --solune-border-strong: #c6d0dd;
    --solune-primary: #3159b7;
    --solune-primary-hover: #254a9f;
    --solune-primary-soft: #edf4ff;
    --solune-accent: #3159b7;
    --color-primary: #3159b7;
    --color-primary-content: #ffffff;
    --color-secondary: #4361b5;
    --color-secondary-content: #ffffff;
}

html[data-theme="dark"] {
    /* daisyUI 기본 토큰이 초록기가 도는 값이었다(#182321 · #101816 · #2d4039).
       카드와 표면은 남색(--solune-surface 계열)이라 bg-base-100 을 쓰는 곳마다
       두 계열이 어긋났다. 남색 쪽으로 맞춘다. */
    --color-base-100: #182235;
    --color-base-200: #0b1220;
    --color-base-300: #33445f;
    --color-base-content: #edf2ff;
    --solune-page: #0b1220;
    --solune-surface: #182235;
    --solune-surface-soft: #202c42;
    --solune-surface-tint: #263a63;
    --solune-text: #edf2ff;
    --solune-text-soft: #c7d2e6;
    --solune-muted: #9aa8bf;
    --solune-border: #33445f;
    --solune-border-strong: #455979;
    --solune-primary: #8eaeff;
    --solune-primary-hover: #b4c8ff;
    --solune-primary-soft: #24365e;
    --solune-accent: #a9bfff;
    --color-primary: #8eaeff;
    --color-primary-content: #0b1220;
    --color-secondary: #aab8ff;
    --color-secondary-content: #151b3a;
    /* 아래 셋은 community 블록에 없어 이 파일의 옛 다크 값이 그대로 보이던
       것들이다. 잉크는 초록 팔레트의 흔적(#10231a)인데 값을 바꾸면 화면이
       바뀌므로 그대로 둔다 — 남색으로 맞추려면 --color-primary-content 와
       같은 #0b1220 이 맞다. */
    --solune-primary-ink: #10231a;
    --solune-danger: #ff989c;
    --solune-shadow-sm: 0 1px 2px rgba(0, 0, 0, .24);
    --solune-shadow-md: 0 18px 42px rgba(0, 0, 0, .26);
    --solune-shadow-lift: 0 10px 22px -8px rgba(0, 0, 0, .6);
}

html[data-theme="light"], html[data-theme="dark"] { color-scheme: light; }
html[data-theme="dark"] { color-scheme: dark; }

* { box-sizing: border-box; }
html { min-width: 0; overflow-x: hidden; overflow-y: scroll; background: var(--solune-page); }
/* 한국어는 낱말(어절) 경계에서 끊어야 읽힌다. 기본값(normal)은 글자 단위로
   끊어 "어디인가 / 요?" 처럼 낱말 가운데가 갈라진다. 시안도 body 에 건다.
   overflow-wrap 을 짝으로 두는 이유가 있다 — keep-all 만 두면 끊을 곳이 없는
   긴 URL 이나 영문 한 덩어리가 상자를 넘는다. */
body { margin: 0; background: var(--solune-page); color: var(--solune-text); font: 400 var(--solune-font-size)/1.6 var(--solune-font); letter-spacing: var(--solune-body-letter-spacing); word-break: keep-all; overflow-wrap: anywhere; }
body, input, button, select, textarea { font-family: var(--solune-font); }
/* drawer 를 열 때 배경 스크롤을 잠근다. body 에 overflow:hidden 을 주면
   body 가 스크롤 컨테이너가 되어 그 안의 position:sticky 헤더가 기준을
   잃고 위로 밀려 올라간다. 게다가 실제 페이지 스크롤은 뷰포트에 있어
   잠기지도 않았다. 잠금은 뿌리 요소에 건다.
   스크롤바가 사라지며 생기는 폭 변화는 --solune-scrollbar-w 로 메운다
   (오버레이 스크롤바 환경에서는 0 이라 아무 일도 일어나지 않는다). */
html.solune-drawer-open {
    overflow-y: hidden;
    /* daisyUI 는 drawer 가 열리면 뿌리에 scrollbar-gutter: stable 을 얹어
       스크롤바 자리를 예약한다. 우리는 사라지는 폭을 직접 재서 메우므로
       둘이 겹치면 자리가 두 번 잡혀 본문이 밀린다. CDN 규칙이라 고칠 수
       없어 여기서 끈다. */
    scrollbar-gutter: auto !important;
    padding-right: var(--solune-scrollbar-w, 0px);
}
a { color: inherit; text-decoration: none; }
button, input, select, textarea { font-size: inherit; }
button { cursor: pointer; }
img { max-width: 100%; height: auto; }
ul, ol, dl, dt, dd, p, h1, h2, h3, h4, h5, h6, fieldset { margin: 0; padding: 0; }
ul, ol { list-style: none; }
fieldset { border: 0; }
hr { display: none; }
table { border-collapse: collapse; border-spacing: 0; width: 100%; }
::selection { background: var(--solune-primary); color: #fff; }

/*
 * Critical typography baseline for the Tailwind Browser runtime.
 * These values are available before its generated utility stylesheet arrives,
 * so the first paint uses the same metrics as the settled Solune UI.
 */
body.solune-page .text-xs { font-size: .75rem; line-height: 1rem; }
body.solune-page .text-sm { font-size: .875rem; line-height: 1.4285714; }
body.solune-page .text-base { font-size: 1rem; line-height: 1.5; }
body.solune-page .text-lg { font-size: 1.125rem; line-height: 1.6; }
body.solune-page .text-xl { font-size: 1.25rem; line-height: 1.4; }

body.solune-page [class~="text-[.65rem]"] { font-size: .65rem; line-height: 1; }
body.solune-page [class~="text-[.7rem]"] { font-size: .7rem; line-height: 1.4; }
body.solune-page .font-semibold { font-weight: 600; }
body.solune-page .font-bold { font-weight: 700; }
body.solune-page .font-black { font-weight: 900; }
body.solune-page .tracking-tight { letter-spacing: -.025em; }

@media (min-width: 40rem) {
    body.solune-page [class~="sm:text-4xl"] { font-size: 2.25rem; line-height: 1.1111111; }
}

:focus-visible { outline: 3px solid var(--solune-accent); outline-offset: 3px; }
.sound_only, legend { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; }
.solune-shell { width: min(var(--solune-shell), calc(100% - 48px)); margin: 0 auto; }

/* Shared shell utilities. The active community header lives in community.css. */
.solune-skip-link { position: fixed; z-index: 10000; top: -60px; left: 20px; padding: 10px 16px; border-radius: var(--solune-radius-sm); background: var(--solune-text); color: var(--solune-surface); transition: top .2s ease; }
.solune-skip-link:focus { top: 20px; }
/* 로그인 안내는 화면에 띄우지 않는다. 낭독기에는 남겨야 하므로 display:none
   이 아니라 sr-only 방식으로 감춘다. 다만 안에 로그아웃 링크가 있어 그대로
   감추기만 하면 보이지 않는 탭 정지가 된다(포커스가 어디 갔는지 알 수 없다).
   건너뛰기 링크와 같이, 포커스가 들어오면 상단 띠로 내려오게 한다. */
.solune-login-msg {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    border: 0;
    clip: rect(0, 0, 0, 0);
    clip-path: inset(50%);
    white-space: nowrap;
}
.solune-login-msg:focus-within {
    position: fixed;
    z-index: 10000;
    top: 0;
    right: 0;
    left: 0;
    width: auto;
    height: auto;
    margin: 0;
    padding: 8px 20px;
    overflow: visible;
    clip: auto;
    clip-path: none;
    background: var(--solune-text);
    color: var(--solune-surface);
    text-align: center;
    font-size: 12px;
}
.solune-login-msg a { color: var(--solune-primary); font-weight: 700; }
.solune-avatar { display: inline-grid; width: 28px; height: 28px; place-items: center; border-radius: 50%; background: var(--solune-primary-soft); color: var(--solune-primary); font-size: 11px; font-weight: 800; }

/* Page layout */
.solune-wrapper { min-height: 480px; }

.solune-main-content { min-width: 0; }

.solune-sidebar { display: grid; gap: 14px; min-width: 0; }
 .solune-login-card, .solune-empty-card, .solune-winpage { border: 1px solid var(--solune-border); border-radius: var(--solune-radius-md); background: var(--solune-surface); box-shadow: var(--solune-shadow-sm); }

/* ── 팝업 한 장짜리 화면의 공통 껍데기 (.solune-winpage) ──────────────

   포인트 · 쪽지 · 스크랩 · 설문 결과는 모두 코어가 window.open 으로 여는
   작은 창이다(600~620px). 네 화면이 같은 카드 문법을 쓰도록 겹치던 규칙을
   여기 한 곳으로 모았다. 카드 재질(테두리 · 모서리 · 그림자)은 바로 위
   .solune-side-card 줄이 함께 맡는다 — 홈의 패널과 같은 값을 쓰려는
   것이다. 전에는 화면마다 제 파일에서 24px 모서리와 들뜬 그림자를 따로
   적어, 창을 열면 사이트와 재질이 달라 보였다.

   각 화면 고유의 것은 제 파일에 남는다 —
   point.css · memo.css · scrap.css · skin/poll/basic/style.css. */
body.solune-page:has(.solune-winpage) { min-height: 100vh; margin: 0; background: var(--solune-page); }
/* .new_win 을 함께 적어 (0,3,1) 로 올린다. 코어 css/default.css 가 팝업에
   거는 값들이 있고, 전에는 각 화면이 #point 처럼 id 로 이겼다. 공통으로
   내리면서 id 가 빠졌으므로 클래스 하나를 더 끼워 같은 힘을 만든다. */
body.solune-page .new_win.solune-winpage {
    width: min(calc(100% - 1.5rem), 42rem);
    margin: clamp(.75rem, 4vw, 2rem) auto;
    overflow: hidden;
    color: var(--solune-text);
    text-align: left;
}
/* 창 제목. 코어는 높이 50px 과 후광 그림자를 박아 둔다. */
body.solune-page .solune-winpage #win_title {
    display: flex;
    height: auto;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin: 0;
    background: none;
    box-shadow: none;
    color: var(--solune-text);
    font-size: clamp(1.25rem, 3vw, 1.5rem);
    font-weight: 900;
    letter-spacing: -.04em;
    line-height: 1.3;
}
/* 본문 여백과 목록. 세 화면이 같은 값을 따로 적고 있었다. */
/* 본문은 카드 안의 한 겹일 수도 있고(포인트·쪽지·설문), 카드 자신일
   수도 있다(스크랩). 둘 다 잡는다. */
body.solune-page .solune-winpage .solune-win-body,
body.solune-page .solune-winpage.solune-win-body { display: grid; gap: 1.25rem; padding: clamp(1rem, 3vw, 1.5rem) !important; }
body.solune-page .solune-winpage .solune-win-list { display: grid; gap: .65rem; margin: 0; padding: 0; list-style: none; }
body.solune-page .solune-winpage .solune-win-empty {
    display: grid !important;
    grid-column: 1 / -1;
    min-height: 9rem;
    place-items: center;
    padding: 2rem 1rem;
    border: 1px dashed var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
}
/* 페이지 넘김과 버튼 줄 */
body.solune-page .solune-winpage .solune-pg-wrap {
    display: flex;
    width: 100%;
    float: none;
    justify-content: center;
    margin: 0;
    padding: .1rem 0;
    text-align: center;
}
body.solune-page .solune-winpage .win_btn { display: flex; justify-content: flex-end; gap: .5rem; margin: 0 !important; padding: 0; }
/* 제목이 본문 밖(창의 직계)에 있는 스킨도 있다 — 설문 결과가 그렇다.
   그때는 본문 여백이 안 걸리므로 제목이 카드 모서리에 붙는다. 직계일
   때만 같은 여백을 준다. 포인트·쪽지처럼 제목이 본문 안에 있는 스킨은
   이 규칙에 걸리지 않는다. */
body.solune-page .solune-winpage:not(.solune-win-body) > #win_title { padding: clamp(1rem, 3vw, 1.5rem) clamp(1rem, 3vw, 1.5rem) 0; }
/* 창닫기. 네 화면이 같은 버튼을 쓴다. */
body.solune-page .solune-winpage .win_btn .btn_close {
    display: inline-flex;
    height: auto;
    min-height: 2.5rem;
    align-items: center;
    justify-content: center;
    margin: 0;
    padding: 0 1rem;
    border: 1px solid var(--solune-border-strong);
    border-radius: var(--solune-radius-sm);
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-family: inherit;
    font-size: .875rem;
    font-weight: 700;
    cursor: pointer;
}
body.solune-page .solune-winpage .win_btn .btn_close:hover { border-color: var(--solune-primary); color: var(--solune-primary); }
/* 목록 안의 제목 링크와 날짜 아이콘 */
body.solune-page .solune-winpage .solune-win-list a:hover { color: var(--solune-primary); text-decoration: none; }
body.solune-page .solune-winpage .fa-clock-o { margin-right: .2rem; color: var(--solune-primary); }

/* ── 팝업을 머리 · 본문 · 바닥으로 (.solune-win-head 가 있는 창) ────────

   시안 `팝업 페이지 개선`. 코어가 여는 창은 600x600 안팎인데 카드는 내용만큼
   길어져(1500~1800px) 창 전체가 밀렸다. 제목도 창닫기도 화면 밖으로 나가
   스크롤해야 보였고, 목록을 보다 창을 닫으려면 끝까지 내려야 했다.

   한때 카드를 창 높이에 딱 맞추고 본문에 overflow 를 주어 가운데만 굴렸는데,
   창 스크롤과 본문 스크롤이 겹쳐 쓰기 불편했다. 다음엔 머리를 창 위에 붙여
   (sticky) 봤는데 그것도 불편하다고 했다. 지금은 구르는 곳이 창 하나뿐이고
   붙는 것도 없다 — 카드는 내용만큼 자라고 머리는 목록과 함께 올라간다.
   창을 닫는 길은 바닥의 창닫기와 창 자체의 닫기 단추가 맡는다.

   머리를 갖춘 창에만 건다 — 설문 결과(skin/poll/basic)는 아직 옛 구조라
   그대로 두어야 한다. :has() 로 갈라 두면 그쪽은 이 블록에 걸리지 않는다. */
body.solune-page .new_win.solune-winpage:has(> .solune-win-head) {
    --solune-win-gap: clamp(.75rem, 4vw, 2rem);
    display: flex;
    min-height: calc(100vh - var(--solune-win-gap) * 2);
    flex-direction: column;
    margin: var(--solune-win-gap) auto;
}

body.solune-page .solune-win-head {
    display: flex;
    flex: none;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    padding: clamp(1rem, 3vw, 1.25rem) clamp(1rem, 3vw, 1.5rem);
    border-bottom: 1px solid var(--solune-border);
}
body.solune-page .solune-win-head-text { min-width: 0; }
/* 제목은 창 이름이라 한 단 낮춘다. 누가 무엇을 보고 있는지는 아래 한 줄이 맡는다. */
body.solune-page .solune-win-head #win_title { display: block; font-size: 1.25rem; font-weight: 800; letter-spacing: -.03em; }
body.solune-page .solune-win-sub { margin: .25rem 0 0; color: var(--solune-muted); font-size: .8125rem; }
body.solune-page .solune-win-sub strong { color: var(--solune-text); font-weight: 700; }
/* 닫기. 바닥의 창닫기와 같은 일을 하지만, 목록이 길어도 늘 손 닿는 데 있다. */
body.solune-page .solune-win-close {
    display: grid;
    width: 2.25rem;
    height: 2.25rem;
    flex: none;
    place-items: center;
    border: 0;
    border-radius: var(--solune-radius-sm);
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
    cursor: pointer;
    font-size: 1rem;
}
body.solune-page .solune-win-close:hover { background: var(--solune-primary-soft); color: var(--solune-primary); }

/* 본문은 내용만큼 자란다. 여백은 위 공통 규칙이 이미 준다. */
body.solune-page .solune-winpage:has(> .solune-win-head) .solune-win-body {
    min-height: 0;
    flex: 1;
    /* 격자가 아니라 세로 flex 로 쌓는다. 공통 규칙은 본문을 grid 로 두는데,
       칸 높이를 잘못 재는 자리가 있었다 — 보유 포인트 상자가 든 줄을 36px
       (안쪽 여백만)로 잡아, 상자는 잘리고 다음 줄이 그 위에 겹쳤다. flex 는
       칸을 제 높이대로 쌓아 그런 일이 없다. 간격은 gap 이 그대로 맡는다. */
    display: flex;
    flex-direction: column;
}
/* flex 로 바꾸면 칸이 가로로 늘지 않으므로 폭을 되돌려 준다. */
body.solune-page .solune-winpage:has(> .solune-win-head) .solune-win-body > * { flex: none; }

body.solune-page .solune-win-foot {
    display: grid;
    flex: none;
    gap: .75rem;
    padding: clamp(.75rem, 3vw, 1rem) clamp(1rem, 3vw, 1.5rem);
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
/* 바닥에서는 창닫기를 가운데에 둔다. 시안도 그렇고, 바닥이 좁아 오른쪽 끝에
   붙이면 페이지 번호와 축이 어긋난다. */
body.solune-page .solune-win-foot .win_btn { justify-content: center; }
/* 쪽수와 창닫기는 한 줄에 나란히 둔다. 따로 쌓으면 600px 창에서 바닥만
   189px 을 먹어 목록이 두 줄 반밖에 안 보였다. 소계·안내처럼 한 줄을 다
   쓰는 것은 flex-basis 100% 로 제 줄에 남는다. */
body.solune-page .solune-win-foot {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
}
body.solune-page .solune-win-foot > :is(.point_status, .win_desc) { flex: 1 0 100%; }
body.solune-page .solune-win-foot > .solune-pg-wrap { flex: 1; margin: 0; }
/* 창닫기는 줄 오른쪽 끝에. 자리는 justify-content 로 잡는다 — .win_btn 의
   margin 은 위쪽 규칙이 !important 로 0 을 박아 두어 auto 마진이 안 먹는다. */
body.solune-page .solune-win-foot { justify-content: flex-end; }
body.solune-page .solune-win-foot > .win_btn { flex: none; }

/* Home */

.solune-empty-card { display: grid; min-height: 210px; place-items: center; align-content: center; padding: 30px; text-align: center; }
.solune-empty-icon { display: grid; width: 46px; height: 46px; margin-bottom: 14px; place-items: center; border-radius: 50%; background: var(--solune-primary-soft); color: var(--solune-primary); font-size: 22px; }
.solune-empty-card h2 { font-size: 20px; font-weight: 800; line-height: 1.35; letter-spacing: var(--solune-heading-letter-spacing); }
.solune-empty-card p { margin-top: 7px; color: var(--solune-muted); font-size: 13px; }

/* Latest */

.solune-latest-list { border-top: 1px solid var(--solune-border); }
.solune-latest-list li { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 16px; align-items: center; padding: 13px 0; border-bottom: 1px solid var(--solune-border); }
.solune-latest-list li:last-child { border-bottom: 0; }
.solune-latest-subject { min-width: 0; overflow: hidden; border-bottom: 0 !important; color: var(--solune-text-soft); text-overflow: ellipsis; white-space: nowrap; font-size: 15px; line-height: 1.6; }
.solune-latest-subject:hover { color: var(--solune-primary); }

.solune-latest-meta { display: flex; gap: 10px; color: var(--solune-muted); font-size: 11px; white-space: nowrap; }
.solune-latest-empty { padding: 22px 0 6px; color: var(--solune-muted); font-size: 13px; }

/* Login and common sidebar skins */
.solune-login-card { padding: 22px; }

.solune-login-submit { width: 100%; margin-top: 10px; }

/* 소셜 로그인 막대(로그인 화면 · 사이드바 로그인 상자). 모양은 코어 skin/social/style.css 의
   #sns_login .sns-icon 이 정하는데 모서리가 2px 라 각져 보였다. 코어 파일은
   고칠 수 없어 여기서 덮는다. 카드의 로그인 단추 · 입력 칸과 같은 .7rem 은 40px 높이의
   막대에서 너무 둥글다는 지시를 받아 6px 로 줄였다(테마의 가장 작은 토큰
   --solune-radius-sm 도 10px 이라 값을 직접 적는다). 왼쪽 아이콘 칸도 같이
   둥글게 잘리도록 overflow 를 감춘다. 회원가입의 소셜 단추(#sns_register · .rf-card-social)는
   따로 디자인돼 있어 걸리지 않는다. */
body.solune-page #sns_login .sns-icon { overflow: hidden; border-radius: 6px; }
/* 같은 코어 시트가 이 영역에 흰 바탕(.login-sns { background:#fff })과 회색 제목(#777)을
   준다. 라이트에서는 카드도 흰색이라 안 드러났지만, 다크에서는 사이드바 · 로그인 카드
   안에 흰 상자가 하나 떠 있었다. 바탕은 비우고 제목은 테마 글자색을 따르게 한다. */
body.solune-page #sns_login { background: transparent; }
body.solune-page #sns_login h3 { color: var(--solune-text-soft); }

.solune-sidebar .po, .solune-sidebar .visit, .solune-sidebar .connect { padding: 20px; border: 1px solid var(--solune-border); border-radius: var(--solune-radius-md); background: var(--solune-surface); }
.solune-sidebar .po h2, .solune-sidebar .visit h2, .solune-sidebar .connect h2 { margin-bottom: 12px; font-size: 17px; }
.solune-sidebar .po li, .solune-sidebar .visit li, .solune-sidebar .connect li { border-top: 1px solid var(--solune-border); color: var(--solune-text-soft); font-size: 12px; }
.solune-sidebar .po a, .solune-sidebar .visit a, .solune-sidebar .connect a { display: block; padding: 8px 0; }

/* Board, member and common Gnuboard surfaces */
#bo_list, #bo_v, #bo_w, .mbskin, .new_win, #faq_wrap, #qa_wrap, #ctt { color: var(--solune-text); }
.bo_v, .tbl_wrap, .tbl_frm01, .win_ { border-color: var(--solune-border); }
.tbl_head01 table, .tbl_frm01 table { border-top: 2px solid var(--solune-text); }
.tbl_head01 th, .tbl_frm01 th { padding: 12px 10px; border-bottom: 1px solid var(--solune-border); background: var(--solune-surface-soft); color: var(--solune-text-soft); font-size: 13px; }
.tbl_head01 td, .tbl_frm01 td { padding: 12px 10px; border-bottom: 1px solid var(--solune-border); color: var(--solune-text-soft); font-size: 13px; }
.tbl_head01 td a:hover { color: var(--solune-primary); }
.bo_tit h1, #bo_v_title, #bo_w h2, .mbskin h2, #faq_wrap h2 { color: var(--solune-text); letter-spacing: -.05em; }
.bo_notice { background: var(--solune-primary-soft) !important; }
.bo_notice a, .bo_cate a:hover, .bo_cate_on a { color: var(--solune-primary) !important; }
.bo_cate { border-bottom-color: var(--solune-border); }
.bo_cate a { color: var(--solune-muted); }
.btn_bo_user a, .btn_confirm .btn_submit, .btn_submit, .btn_b01, .btn_b02, .btn_cancel, .btn_frmline { display: inline-flex; align-items: center; justify-content: center; min-height: 38px; padding: 0 14px; border: 1px solid var(--solune-border-strong); border-radius: var(--solune-radius-sm); background: var(--solune-surface); color: var(--solune-text-soft); font-size: 12px; font-weight: 700; }
.btn_bo_user a:hover, .btn_b01:hover, .btn_b02:hover, .btn_cancel:hover, .btn_frmline:hover { border-color: var(--solune-primary); color: var(--solune-primary); }
.btn_submit, .btn_confirm .btn_submit { border-color: var(--solune-primary); background: var(--solune-primary); color: #fff; }
.btn_submit:hover, .btn_confirm .btn_submit:hover { background: var(--solune-primary-hover); color: #fff; }
input[type=text], input[type=password], input[type=email], input[type=number], input[type=search], select, textarea { border: 1px solid var(--solune-border); border-radius: var(--solune-radius-sm); background: var(--solune-surface); color: var(--solune-text); }
input[type=text], input[type=password], input[type=email], input[type=number], input[type=search], select { height: 40px; padding: 0 11px; }
textarea { padding: 11px; }
/* 입력칸 포커스 표시.
   전에는 outline 을 끄고 3px 옅은 후광(--solune-primary-soft)만 남겼다.
   흰 바탕에 옅은 틴트라 상태 대비가 3:1 에 한참 못 미쳐, 키보드로 다닐 때
   어디에 있는지 알기 어려웠다. 후광을 걷고 2px 실선 한 겹으로 바꾼다.

   테두리 색이 바뀌는 것은 마우스 클릭에도 남겨 둔다(어느 칸을 만지는지
   알려 주는 신호). 링은 키보드로 들어왔을 때만 그린다.

   자체 표시를 가진 컴포넌트(커뮤니티 검색 패널 등)는 제 규칙에서
   outline:0 으로 이 링을 끄므로 두 겹이 되지 않는다. */
input:focus, select:focus, textarea:focus { border-color: var(--solune-primary) !important; box-shadow: none; outline: 0; }
input:focus-visible, select:focus-visible, textarea:focus-visible {
    outline: 2px solid var(--solune-primary);
    outline-offset: 1px;
}
.bo_v_con, .wr_content, #ctt_con { color: var(--solune-text-soft); font-size: 16px; line-height: 1.75; }
.bo_v_con img, #ctt_con img { max-width: 100%; }
.bo_vc_w textarea, .comment-box textarea { width: 100%; min-height: 110px; }

/* Footer */

.solune-brand-footer { display: inline-flex; min-width: 0; align-items: center; gap: 10px; color: var(--solune-text); }

.solune-brand-footer strong { display: block; font-weight: 800; font-size: 17px; line-height: 1.05; letter-spacing: -.04em; }
.solune-brand-footer small { display: block; margin-top: 3px; color: var(--solune-muted); font: 500 9px/1 var(--solune-font); letter-spacing: .08em; text-transform: uppercase; }

.solune-top-button { position: fixed; z-index: 30; right: 24px; bottom: 24px; display: grid; width: 42px; height: 42px; place-items: center; border: 1px solid var(--solune-border); border-radius: 50%; background: var(--solune-surface); color: var(--solune-text); box-shadow: var(--solune-shadow-md); font-size: 18px; opacity: 0; pointer-events: none; transform: translateY(8px); transition: opacity .2s, transform .2s; }
.solune-top-button.is-visible { opacity: 1; pointer-events: auto; transform: translateY(0); }
.solune-top-button:hover { border-color: var(--solune-primary); color: var(--solune-primary); }

@media (max-width: 780px) {
    body { font-size: var(--solune-font-size); }
    .solune-shell { width: min(100% - 32px, var(--solune-shell)); }
    
    .solune-sidebar { margin-top: 22px; }

}

@media (max-width: 460px) {
    .solune-shell { width: calc(100% - 24px); }
    
    .solune-latest-list li { display: block; }
    .solune-latest-meta { justify-content: space-between; margin-top: 5px; }

.solune-top-button { right: 14px; bottom: 14px; }
}

@media (prefers-reduced-motion: reduce) {
    *, *:before, *:after { scroll-behavior: auto !important; animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
}

/* Solune board overrides: keep the stock Gnuboard markup, replace only its visual layer. */
#bo_list, #bo_v, #bo_w { width: 100% !important; max-width: none; }
#bo_list { margin-bottom: 0; }
#bo_list .tbl_head01 { overflow: hidden; border: 1px solid var(--solune-border); border-radius: var(--solune-radius-md); background: var(--solune-surface); }
#bo_list .tbl_head01 table { border-top: 0; }
#bo_list .tbl_head01 th { border-bottom: 1px solid var(--solune-border); background: var(--solune-surface-soft); color: var(--solune-muted); font-size: 11px; letter-spacing: .04em; }
#bo_list .tbl_head01 td { height: 54px; border-bottom: 1px solid var(--solune-border); background: var(--solune-surface); }
#bo_list .tbl_head01 tr:last-child td { border-bottom: 0; }
#bo_list tbody tr { border-left: 0; transition: background .2s; }
#bo_list tbody tr:hover, #bo_list tbody .even td { border-left: 0; background: var(--solune-surface-soft); }
#bo_list .bo_tit { color: var(--solune-text); font-weight: 700; }
#bo_list .bo_tit:hover { color: var(--solune-primary); }
#bo_list .td_num, #bo_list .td_date, #bo_list .td_name, #bo_list .td_datetime { color: var(--solune-muted); font-size: 12px; }
#bo_list .cnt_cmt, #bo_list .bo_cmt { background: var(--solune-primary-soft); color: var(--solune-primary); }
#bo_list .bo_notice td { background: var(--solune-surface-tint) !important; border-bottom-color: var(--solune-border); }
#bo_list .bo_notice .notice_icon { color: var(--solune-primary); }
#bo_cate { margin: 0 0 20px; }
#bo_cate ul { border-radius: var(--solune-radius-sm); background: var(--solune-surface); }
#bo_cate li { padding: 0; }
#bo_cate a, #bo_cate #bo_cate_on { margin: 0 2px; padding: 7px 13px; border: 0; border-radius: 8px; background: transparent; color: var(--solune-muted); box-shadow: none; font-size: 12px; line-height: 1.4; }
#bo_cate a:hover, #bo_cate #bo_cate_on { background: var(--solune-primary-soft); color: var(--solune-primary); }
#bo_btn_top { min-height: 38px; margin: 0 0 12px; }
#bo_list_total { color: var(--solune-muted); font-size: 12px; line-height: 38px; }
.bo_fx { margin: 0; }

#bo_v { overflow: hidden; border: 1px solid var(--solune-border); border-radius: var(--solune-radius-md); background: var(--solune-surface) !important; }
#bo_v > header { padding: 30px 32px 22px; border-bottom: 1px solid var(--solune-border); }
#bo_v_title .bo_v_cate, .bo_v_cate { background: var(--solune-primary-soft); color: var(--solune-primary); }
#bo_v_title .bo_v_tit, .bo_v_tit { margin-top: 10px; color: var(--solune-text); font-size: clamp(24px, 3vw, 34px); font-weight: 800; letter-spacing: -.06em; }
#bo_v_info { color: var(--solune-muted); border-bottom-color: var(--solune-border); }
#bo_v_info .sv_member, #bo_v_info .sv_guest { color: var(--solune-text-soft); }

/* --- 회원 사이드뷰 -------------------------------------------------------
   글쓴이 이름을 누르면 열리는 그누보드 기본 메뉴. 마크업과 토글은 코어가
   만들고(js/common.js 가 .sv 에 sv_on 을 붙인다) 우리는 모양만 준다.
   그누보드 기본 스타일은 루트 css/default.css 에 있는데 이 테마는 그 파일을
   싣지 않아, 메뉴가 display:inline 인 채로 한 줄에 납작하게 펼쳐져 있었다.
   daisyUI dropdown 결에 맞춰 카드형 메뉴로 세운다. */
.sv_wrap { position: relative; display: inline-flex; align-items: center; font-weight: inherit; }
/* 이름 옆 회원 아이콘. 코어가 22x22 이미지를 그대로 뱉어 글줄을 밀어내므로
   daisyUI avatar 처럼 둥근 틀에 담아 글자 크기에 맞춘다. */
.sv_wrap .sv_member, .sv_wrap .sv_guest { display: inline-flex; align-items: center; }
.sv_wrap .profile_img {
    display: inline-flex;
    width: 1.25rem;
    height: 1.25rem;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    margin-right: .35rem;
    border-radius: 50%;
    background: var(--solune-surface-soft);
    box-shadow: 0 0 0 1px var(--solune-border);
}
.sv_wrap .profile_img img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; }
/* 목록의 글쓴이 칸에는 테마가 이미 이니셜 아바타를 그린다. 거기서는 코어
   아이콘을 숨겨 둘이 겹치지 않게 한다. 나머지 자리(홈 최신글·본문·댓글)
   에서는 코어 아이콘이 그 역할을 한다. */
.cb-author:has(.cb-avatar) .profile_img { display: none; }

.sv_wrap .sv {
    position: absolute;
    z-index: 60;
    top: calc(100% + .35rem);
    left: 0;
    display: none;
    /* 폭은 내용이 정한다. 예전엔 9.5rem(152px) 을 못 박아, 가장 긴 항목
       글자가 69px 인데도 오른쪽에 52px 이 그냥 비어 있었다. 항목이 하나뿐인
       비회원 메뉴가 너무 좁아지지 않을 만큼만 최소값을 남긴다. */
    min-width: 6rem;
    padding: .25rem;
    border: 1px solid var(--solune-border);
    border-radius: .625rem;
    background: var(--solune-surface);
    box-shadow: 0 .625rem 1.5rem color-mix(in srgb, var(--solune-text) 12%, transparent), 0 1px 2px color-mix(in srgb, var(--solune-text) 6%, transparent);
    text-align: left;
    white-space: nowrap;
}
.sv_wrap .sv.sv_on { display: block; }
.sv_wrap .sv a {
    display: flex;
    min-height: 2rem;
    align-items: center;
    border-radius: .375rem;
    color: var(--solune-text-soft);
    padding: .3rem .55rem;
    font-size: .8125rem;
    font-weight: 500;
    line-height: 1.3;
}
.sv_wrap .sv a:hover { background: var(--solune-primary-soft); color: var(--solune-primary); }
.sv_wrap .sv a:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: -2px; }
/* JS 가 없으면 코어가 .sv_nojs 를 붙여 메뉴를 그냥 펼친다. 그때는 뜨는
   메뉴가 아니라 이름 아래 목록으로 둔다. */
.sv_nojs .sv_wrap .sv { position: static; display: block; box-shadow: none; }
/* 목록의 글쓴이 칸은 이름을 말줄임하려고 overflow 를 숨기고 있어 메뉴가
   잘렸다. 말줄임은 그대로 두고, 그 칸에서 메뉴가 열린 동안에만 연다. */
/* 홈 최신글·갤러리 패널은 마크업에 overflow-hidden 이 붙어 있어(모서리를
   깎으려는 것) 사이드뷰가 카드 안에서 잘렸다. 열린 동안에만 연다.
   대표 패널 위의 3px 그라디언트 바는 자체 border-radius 가 있어
   overflow 없이도 모서리를 넘지 않는다. */
body.solune-page .solune-reference-panel:has(.sv.sv_on),
body.solune-page #bo_list .cb-wrap:has(.sv.sv_on),
body.solune-page #bo_list .cb-card:has(.sv.sv_on),
body.solune-page #bo_list .cb-author-name:has(.sv.sv_on),
body.solune-page #bo_list .cb-author:has(.sv.sv_on),
body.solune-page .cb-author-name:has(.sv.sv_on),
body.solune-page .cb-author:has(.sv.sv_on),
/* 새글 목록 카드와 팝업 창(쪽지)도 같은 사정이다. 둘 다 모서리를 깎으려고
   overflow 를 숨기는데, 마지막 줄에서 메뉴를 열면 카드 아래로 넘치는 만큼이
   잘려 나갔다(실측 77px · 38px). 열린 동안에만 연다 — 그 사이 모서리가
   네모로 보이지만, 메뉴가 잘려 누를 수 없는 것보다는 낫다. */
body.solune-page .nw-card:has(.sv.sv_on),
body.solune-page .solune-winpage:has(.sv.sv_on),
/* 전체검색 결과도 같다. 게시판 하나가 카드 하나인데 모서리를 깎으려고
   overflow 를 숨겨, 결과가 한 줄뿐인 게시판에서 메뉴를 열면 138px 중
   127px 이 잘려 나갔다(실측). 열린 동안에만 연다. */
body.solune-page .sch_res_list .search_board_result:has(.sv.sv_on),
/* 게시판 그룹(group.php)의 게시판 카드도 같은 까닭으로 숨기고 있어, 카드
   아래쪽 줄에서 메뉴를 열면 170px 중 157px 이 잘렸다(실측). */
body.solune-page .solune-group-grid > .lt_wr:has(.sv.sv_on) { overflow: visible; }
#bo_v_atc { padding: 30px 32px; }
#bo_v_con { color: var(--solune-text-soft); font-size: 15px; line-height: 1.9; }
#bo_v_con a { color: var(--solune-accent); }
#bo_v_file li, #bo_v_link li { border-color: var(--solune-border); background: var(--solune-surface-soft); box-shadow: none; }
#bo_v_file a, #bo_v_link a { color: var(--solune-text-soft); }
#bo_v_file li:hover, #bo_v_link li:hover { border-color: var(--solune-primary); }
#bo_v_nb li { border-color: var(--solune-border); }
#bo_v_nb li:hover { background: var(--solune-surface-soft); }
#bo_v_act .bo_v_good, #bo_v_act .bo_v_nogood { border-color: var(--solune-border); color: var(--solune-text-soft); }
#bo_v_act a:hover { border-color: var(--solune-primary); background: var(--solune-primary-soft); color: var(--solune-primary); }
#bo_vc { margin: 0; padding: 24px 32px 30px; background: var(--solune-surface-soft); }
.cmt_btn { margin-top: 0; border-bottom-color: var(--solune-border); background: transparent; color: var(--solune-text); }
.cmt_btn span.total { color: var(--solune-primary); }
.cmt_btn span.total:after { background: var(--solune-primary); }
#bo_vc article .comment_inner { border-bottom-color: var(--solune-border); background: var(--solune-surface); }
#bo_vc .cmt_contents { color: var(--solune-text-soft); }
#bo_vc_empty { color: var(--solune-muted); }
#bo_vc_w { border-color: var(--solune-border); }

#bo_w { padding: 30px 32px; border: 1px solid var(--solune-border); border-radius: var(--solune-radius-md); background: var(--solune-surface); }
#bo_w .write_div { margin: 0; padding: 14px 0; border-bottom: 1px solid var(--solune-border); }
#bo_w .write_div:last-of-type { border-bottom: 0; }
#bo_w .frm_input, #bo_w select, #bo_w textarea { width: 100%; }
#bo_w .half_input { width: calc(50% - 6px); }
#bo_w .bo_v_option { display: flex; flex-wrap: wrap; gap: 12px; }
#bo_w .bo_v_option li { color: var(--solune-muted); font-size: 12px; }
#bo_w .btn_confirm { margin-top: 22px; }
#bo_w .btn_confirm .btn_submit, #bo_w .btn_confirm .btn_cancel { min-width: 96px; }

@media (max-width: 780px) {
    #bo_list .tbl_head01 { border-radius: var(--solune-radius-sm); }
    #bo_list .tbl_head01 th { font-size: 10px; }
    #bo_list .tbl_head01 td { height: auto; padding: 11px 7px; font-size: 12px; }
    #bo_list .td_num, #bo_list .td_date, #bo_list .td_name { display: none; }
    #bo_list .td_subject { width: 100%; }
    #bo_v > header { padding: 22px 18px 18px; }
    #bo_v_atc { padding: 22px 18px; }
    #bo_vc { padding: 20px 18px 24px; }
    #bo_w { padding: 20px 16px; }
    #bo_w .half_input { width: 100%; }
}

/* 필수 입력 표시.
   그누보드5 기본 테마는 .required 에 img/require.png 를 오른쪽 위(100% 0)로
   깔아 빨간 별을 낸다. 우리 테마에도 같은 파일이 이미 들어 있는데 아무 규칙도
   참조하지 않아 표시가 없었다.

   기본 테마와 다른 점 둘. 여기 입력칸은 모서리가 둥글어 100% 0 으로 딱
   붙이면 별이 곡선에 걸치므로 살짝 띄운다. 그리고 class 뿐 아니라 required
   속성만 가진 칸(로그인 폼 등)도 함께 잡는다.

   :invalid 로 거는 이유 — required 인 칸은 비어 있으면 :invalid, 채우면
   :valid 다. 다 적은 칸에까지 별이 남아 있으면 잔소리가 된다.
   (:not(:placeholder-shown) 은 쓰면 안 된다. placeholder 가 없는 칸은 비어
   있어도 그 조건이 참이라 표시가 통째로 사라진다.)

   !important 는 폼마다 background 를 단축 속성으로 깔아 background-image 를
   함께 지우기 때문에 필요하다. 순서가 아니라 특이도 문제라 뒤에 놓아도
   이기지 못한다. 색은 각 폼이 정하고 표시만 그 위에 얹는다. */
body.solune-page :is(input, textarea, select):is(.required, [required]):invalid {
    background-image: url("../img/require.png") !important;
    background-repeat: no-repeat !important;
    background-position: right .3125rem top .3125rem !important;
    background-size: 9px 9px !important;
}

/* daisyUI 의 .input 래퍼(로그인·아웃로그인 폼) 안에서는 위 규칙이 진다.
   daisyUI 는 @layer 안에서 자식 input 의 배경을 덮는데, 레이어 안의
   !important 는 레이어 밖 !important 보다 세기 때문이다. 그 자리에서는
   입력칸 대신 래퍼에 별을 얹는다. */
body.solune-page .input:has(> :is(input, textarea, select):is(.required, [required]):invalid) { position: relative; }
body.solune-page .input:has(> :is(input, textarea, select):is(.required, [required]):invalid)::after {
    content: "";
    position: absolute;
    top: .375rem;
    right: .375rem;
    width: 9px;
    height: 9px;
    background: url("../img/require.png") no-repeat center / 9px 9px;
    pointer-events: none;
}

/* ── 자동등록방지 (kcaptcha) — 테마 전체가 이 한 벌을 쓴다 ────────────

   코어가 내는 마크업은 어디서나 같다.

       <fieldset id="captcha" class="captcha">
         <legend><label for="captcha_key">자동등록방지</label></legend>
         <img id="captcha_img"> <input id="captcha_key" class="captcha_box">
         <button id="captcha_mp3"><span></span>숫자음성듣기</button>
         <button id="captcha_reload"><span></span>새로고침</button>
         <span id="captcha_info">…</span>
       </fieldset>

   그런데 그것들이 줄바꿈 없이 이어져 나와, 손대지 않으면 "숫자음성듣기
   새로고침 자동등록방지 숫자를 순서대로..." 처럼 한 줄로 뭉쳐 보인다.
   격자로 앉혀 그림 · 입력칸 · 단추 둘을 한 줄에, 안내를 그 아래에 둔다.

   쓰는 곳 — 쪽지쓰기 · 메일보내기 · 비밀번호 찾기 · 회원가입 · 설문 결과 ·
   게시판 글쓰기 · 댓글 폼. 일곱이 같은 마크업을 쓴다.

   단, 댓글 폼만은 fieldset 의 class 가 다르다 — 코어가 captcha_html('_comment') 로
   불러 class="_comment" 로 낸다. 한때 틀 규칙을 #captcha.captcha 로만 걸어 두어,
   댓글에는 격자도 크기 변수(--cap-h)도 걸리지 않았다 — 그림이 418x158 로 부풀고
   입력칸은 126x28, 단추는 20x20 으로 제멋대로였다(비회원으로 글보기에서 실측).
   둘을 함께 받는다. #captcha 하나로 좁히지 않는 까닭은, 다른 방식의
   캐차(리캡차 등)가 같은 id 를 쓸 때 거기까지 격자가 걸리지 않게 하려는 것이다.

   한때 글쓰기와 댓글 폼은 board-write.css · board-view-inline-form.css 에
   제 규칙을 따로 갖고 있었다. 걷어서 이리로 모았다 — 같은 것을 세 벌로
   들고 있으면 한 곳을 고칠 때 나머지가 조용히 어긋난다.

   단추 안의 글자("숫자음성듣기" · "새로고침")는 지우지 않고 font-size: 0
   으로만 감춘다. 화면 낭독기는 그대로 읽고, 눈에는 아이콘이 대신 선다. */

body.solune-page #captcha:is(.captcha, ._comment) {
    /* 네 자리(그림 · 입력칸 · 음성 · 새로고침)를 300px 화면에서도 한 줄에
       세운다. 크기를 못으로 박으면 좁은 폭에서 넘치므로 폭을 따라 함께
       줄어들게 둔다 — 높이 하나(--cap-h)를 넷이 나눠 쓰므로 아무 폭에서나
       줄이 어긋나지 않는다.

       300px 화면에서 이 줄에 주어지는 폭은 242px 이다. 그림 72 + 단추 34
       둘 + 사이 4 셋 = 152 를 빼면 입력칸에 90px 이 남아 여섯 자리가 들어간다. */
    --cap-h: clamp(2.125rem, 9vw, 2.75rem);
    --cap-img: clamp(4.5rem, 24vw, 7.5rem);
    display: grid;
    grid-template-columns: var(--cap-img) minmax(0, 1fr) var(--cap-h) var(--cap-h);
    gap: clamp(.25rem, 1.5vw, .5rem);
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
}
/* 폰(UA 기준)에서는 코어가 마크업을 다르게 낸다 — class 에 m_captcha 가 붙고,
   음성 단추(#captcha_mp3) 대신 <audio id="captcha_audio" controls> 재생기가 맨 앞에 온다.
   위 네 칸 격자를 그대로 쓰면 재생기(300x54)가 첫 칸을 차지하고 나머지가
   한 칸씩 밀려, 입력칸이 음성 단추 자리(35x35)에 앉아 숫자 여섯 자리를 칠 수 없었다
   (실측, iPhone UA — 비밀번호 찾기 · 댓글 모두). 칸을 셋(그림 · 입력칸 · 새로고침)으로
   줄이고, 재생기는 그 위에 한 줄을 통째로 쓰게 한다. DOM 순서를 그대로 두니 탭 순서도 같다. */
body.solune-page #captcha:is(.captcha, ._comment).m_captcha {
    grid-template-columns: var(--cap-img) minmax(0, 1fr) var(--cap-h);
}
body.solune-page #captcha.m_captcha #captcha_audio {
    grid-column: 1 / -1;
    width: 100%;
    height: 40px;
}
/* 코어는 이 legend 안에 진짜 라벨(for="captcha_key")을 담아 둔다. 테마가
   legend 를 전부 숨기고 있어(default.css 의 !important) 다른 칸에는 보이는
   라벨이 있는데 여기만 없었다. 같은 무게로 되살린다. */
body.solune-page #captcha:is(.captcha, ._comment) > legend {
    position: static !important;
    width: auto !important;
    height: auto !important;
    overflow: visible !important;
    margin: 0 !important;
    padding: 0 !important;
    clip: auto !important;
    grid-column: 1 / -1;
    color: var(--solune-text);
    font-size: .8125rem;
    font-weight: 600;
}
/* 그림 · 입력칸 · 단추 둘이 한 줄이다. 넷의 높이가 같아야 줄이 서는데
   그림만 42px 이라 2px 어긋나 있었다. */
body.solune-page #captcha_img {
    width: 100%;
    height: var(--cap-h);
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface-soft);
    /* cover 가 아니라 contain 이다. 폭이 줄면 cover 는 숫자의 좌우를 잘라
       읽을 수 없게 만든다. 남는 자리는 옅은 바탕이 채운다. */
    object-fit: contain;
}
/* 입력칸도 같은 높이를 쓴다. 좁은 폭에서는 좌우 여백도 줄여 여섯 자리를
   지킨다. 화면마다 입력칸 높이를 따로 박아 두는 곳이 있어(쪽지쓰기의
   .frm_input 규칙 등) #captcha 를 함께 적어 그보다 세게 둔다. */
body.solune-page #captcha .captcha_box {
    height: var(--cap-h);
    /* min-height 도 함께 준다. 팝업 화면의 입력칸 공통 규칙이 min-height
       2.75rem 을 깔아 두어, 높이만 낮추면 그 바닥에 걸려 좁은 폭에서
       입력칸만 44px 로 남고 줄이 어긋났다. */
    min-height: var(--cap-h);
    padding: 0 clamp(.5rem, 2vw, .875rem);
    letter-spacing: .125em;
}
body.solune-page :is(#captcha_mp3, #captcha_reload) {
    /* grid 가 아니라 flex 다. 코어는 단추 안에 아이콘 자리 span 하나와 글자
       ("숫자음성듣기")를 나란히 두는데, grid 에서는 그 글자가 이름 없는 칸이
       되어 줄이 둘로 나뉜다. place-items:center 는 칸마다 가운데를 맞추므로
       아이콘이 윗줄에 갇혀 6px 떠올랐다. flex 는 둘을 한 줄에 두어 글자 폭이
       0 이어도 아이콘이 단추 한가운데 선다. */
    display: flex;
    /* 100% 가 아니라 --cap-h 다. 위 격자에서는 칸 폭이 이미 --cap-h 라 둘이
       같은 값이지만, 그 격자를 제 사정에 맞게 갈아 끼우는 화면이 있다 —
       회원정보 입력은 이 줄을 flex 로 펴고 단추에 글자를 붙인다. 거기서
       100% 는 "줄 전체"가 되어 단추 하나가 한 줄을 통째로 먹었다. 제
       크기를 스스로 말하게 두면 어느 배치에서도 정사각이 나온다. */
    width: var(--cap-h);
    height: var(--cap-h);
    overflow: hidden;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    /* 글자는 화면 낭독기에만 남긴다. 자리는 아이콘이 맡는다. */
    font-size: 0;
    cursor: pointer;
}
body.solune-page :is(#captcha_mp3, #captcha_reload):hover { background: var(--solune-surface-soft); color: var(--solune-primary); }

/* 이름표. 두 단추는 아이콘만 남고 글자는 낭독기 몫이라(font-size:0), 눈으로
   보는 사람에게는 네모 둘이다. 올리거나 키보드 포커스가 오면 이름을 아래에
   띄운다. 코어가 찍는 마크업이라 title 속성을 붙일 수 없어 — 단추 안에는
   글자 노드만 있고 걸어 둘 속성이 없다 — 이름을 여기 적는다. 단추가 둘뿐이고
   코어가 고정으로 내는 문구다.

   overflow 를 되돌리는 까닭 — 위 규칙이 글자를 가두려고 hidden 을 두는데
   그대로면 이름표가 단추 안에서 잘린다. 글자는 font-size:0 이 이미 지운다. */
body.solune-page :is(#captcha_mp3, #captcha_reload) { position: relative; overflow: visible; }
body.solune-page #captcha_mp3::after { content: "숫자음성듣기"; }
body.solune-page #captcha_reload::after { content: "새로고침"; }
body.solune-page :is(#captcha_mp3, #captcha_reload)::after {
    position: absolute;
    z-index: 5;
    top: calc(100% + .35rem);
    left: 50%;
    border-radius: .375rem;
    background: var(--solune-text);
    color: var(--solune-surface);
    padding: .25rem .5rem;
    opacity: 0;
    font-size: .6875rem;
    font-weight: 600;
    line-height: 1.4;
    white-space: nowrap;
    pointer-events: none;
    transform: translateX(-50%);
    transition: opacity .15s ease;
}
body.solune-page :is(#captcha_mp3, #captcha_reload):is(:hover, :focus-visible)::after { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
    body.solune-page :is(#captcha_mp3, #captcha_reload)::after { transition: none; }
}
/* 아이콘. 코어가 단추 안에 빈 span 을 하나 두고 가는데 그것을 쓴다.
   마스크로 그려 currentColor 를 따라가게 한다. */
body.solune-page :is(#captcha_mp3, #captcha_reload) > span {
    display: block;
    /* 단추가 줄면 아이콘도 함께 줄어야 테두리와의 사이가 일정하다. */
    width: clamp(.9rem, 4vw, 1.125rem);
    height: clamp(.9rem, 4vw, 1.125rem);
    background: currentColor;
}
body.solune-page #captcha_mp3 > span {
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='round' stroke-linecap='round'%3E%3Cpath d='M2.5 6.5h3l4-3v11l-4-3h-3z'/%3E%3Cpath d='M12 6.5a3.5 3.5 0 0 1 0 5M14 4.5a6 6 0 0 1 0 9'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='round' stroke-linecap='round'%3E%3Cpath d='M2.5 6.5h3l4-3v11l-4-3h-3z'/%3E%3Cpath d='M12 6.5a3.5 3.5 0 0 1 0 5M14 4.5a6 6 0 0 1 0 9'/%3E%3C/svg%3E") center / contain no-repeat;
}
body.solune-page #captcha_reload > span {
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 9a5.5 5.5 0 1 1-1.6-3.9'/%3E%3Cpath d='M14.5 2.5v3.2h-3.2'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 18 18' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.5 9a5.5 5.5 0 1 1-1.6-3.9'/%3E%3Cpath d='M14.5 2.5v3.2h-3.2'/%3E%3C/svg%3E") center / contain no-repeat;
}
body.solune-page #captcha_info {
    grid-column: 1 / -1;
    color: var(--solune-muted);
    font-size: .75rem;
}

/* ── 페이지 넘김 — 테마 전체가 이 한 벌을 쓴다 ─────────────────────

   왜 한 곳으로 모았나. 전에는 페이저가 두 갈래였다.

     .solune-pg   solune_theme_get_paging() 이 내는 것. 폭을 타고 접힌다.
                   새글과 1:1문의 두 화면만 썼다.
     .pg_*         코어 get_paging() 이 내는 것. 나머지 열세 곳이 썼고,
                   모양은 시트 열 군데(board-pagination · board-list ·
                   board-cardlist · board-table · default · point ·
                   shop-pages · skins · faq 스킨 · member 스킨)에 흩어져
                   화면마다 크기도 강조색도 조금씩 달랐다. 접히지도 않아
                   좁은 폭에서는 줄이 넘치거나 카드 밖으로 잘렸다.

   이제 스킨은 모두 solune_theme_get_paging() 으로 내고, 모양과 접는 규칙은
   이 절 하나가 맡는다. 코어 마크업을 그대로 내보내는 자리(관리자 화면,
   테마가 손대지 않는 코어 스킨)를 위해 맨 아래에 호환 블록을 남긴다.

   한때 css/pagination.css 라는 파일로 따로 뒀다가 이리로 들였다. 테마의
   CSS 파일이 이미 너무 많아 더 늘리지 않기로 했다(CLAUDE.local.md).
   default.css 는 300 층이라 예전(330)보다 먼저 실리지만, 그 사이에 실리는
   community-* · shop-* 에는 페이저를 다루는 규칙이 남아 있지 않다. */

/* ── 폭을 재는 자 ──────────────────────────────────────────────────

   접는 기준은 화면 폭이 아니라 페이저에게 실제로 주어진 폭이다. 둘은 자주
   어긋난다 — 사이드가 붙는 1024px 창에서 본문 카드는 640px 뿐이고, 쪽지·
   포인트는 아예 600px 짜리 팝업 창이다. 화면 폭으로 재면 그런 자리에서
   아직 넓은 줄 알고 번호를 다 펴 두었다가 줄이 넘쳤다.

   그래서 감싸는 상자를 하나 두고 그것을 자로 쓴다. 상자는 늘 주어진 줄을
   가득 채워야 한다(width:100%) — flex 항목으로 들어가 제 내용만큼만 넓어
   지면 자기 자신을 재는 꼴이 되어 아무 의미가 없다. */
body.solune-page .solune-pg-wrap {
    container: pg / inline-size;
    width: 100%;
}

body.solune-page .solune-pg {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: .375rem;
}

/* 번호 묶음은 자리만 만들고 간격은 바깥 flex 가 준다. 한 폭에서 통째로
   숨겨야 해서 요소 자체는 남긴다. */
body.solune-page .solune-pg-nums { display: contents; }

body.solune-page .solune-pg-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.125rem;
    height: 2.125rem;
    padding: 0 .625rem;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-muted);
    font-size: .8125rem;
    font-weight: 500;
    line-height: 1;
    text-decoration: none;
    transition: border-color .15s ease, color .15s ease;
}
body.solune-page .solune-pg-num {
    font-family: var(--solune-mono);
    font-variant-numeric: tabular-nums;
}
body.solune-page a.solune-pg-btn:hover,
body.solune-page a.solune-pg-btn:focus-visible {
    border-color: var(--solune-border-strong);
    color: var(--solune-text);
}
body.solune-page .solune-pg-num.is-current {
    border-color: transparent;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-weight: 600;
}

/* 넓은 폭에서는 번호가 다 보이므로 요약 줄은 숨는다. */
body.solune-page .solune-pg-of { display: none; }

/* ── 접는 차례 ────────────────────────────────────────────────────

   번호마다 지금 쪽에서 몇 칸 떨어졌는지가 data-solune-pg-d 로 적혀 있다.
   멀리 있는 것부터 사라진다. 자바스크립트를 쓰지 않는다.

   눈금은 버튼 하나가 34px, 사이가 6px 인 것을 놓고 셈했다.
     700  번호 열 개 + 앞뒤 네 개가 겨우 들어가는 폭
     520  번호 여섯 개
     380  번호를 다 접고 처음·이전·요약·다음·맨끝 다섯만
     300  다섯도 안 들어간다. 처음·맨끝을 접어도 이전·다음으로 어디든 가고
          몇 쪽인지는 요약이 알려 준다. */
@container pg (max-width: 700px) {
    body.solune-page .solune-pg-num[data-solune-pg-d="4"],
    body.solune-page .solune-pg-num[data-solune-pg-d="5"] { display: none; }
}
@container pg (max-width: 520px) {
    body.solune-page .solune-pg-num[data-solune-pg-d="2"],
    body.solune-page .solune-pg-num[data-solune-pg-d="3"] { display: none; }
}
@container pg (max-width: 380px) {
    body.solune-page .solune-pg-nums { display: none; }
    body.solune-page .solune-pg-of {
        display: inline-flex;
        align-items: center;
        height: 2.125rem;
        padding: 0 .5rem;
        color: var(--solune-muted);
        font-family: var(--solune-mono);
        font-size: .8125rem;
        font-variant-numeric: tabular-nums;
    }
}
@container pg (max-width: 300px) {
    body.solune-page .solune-pg-edge { display: none; }
}

/* ── 코어 마크업 호환 ─────────────────────────────────────────────

   테마가 내지 않는 페이저 — 관리자 화면이나 테마가 손대지 않는 코어 스킨 —
   는 아직 get_paging() 의 .pg_wrap 을 그대로 낸다. 그쪽도 같은 모양으로
   보이게 해 둔다.

   접는 일은 여기서 못 한다. 코어 마크업에는 지금 쪽에서 몇 칸 떨어졌는지가
   적혀 있지 않아 무엇부터 숨길지 고를 수 없다. 대신 줄이 넘치면 가로로
   굴린다 — 잘려서 누를 수 없게 되는 것만은 막는다. */
body.solune-page .pg_wrap {
    display: flex;
    max-width: 100%;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: flex-start;
    overflow-x: auto;
    margin-top: 1.5rem;
    scrollbar-width: none;
}
body.solune-page .pg_wrap::-webkit-scrollbar { display: none; }
body.solune-page .pg_wrap .pg {
    display: flex;
    margin: 0 auto;
    align-items: center;
    gap: .375rem;
}
body.solune-page :is(.pg_page, .qa_page, .pg_current) {
    display: inline-flex;
    min-width: 2.125rem;
    height: 2.125rem;
    flex: none;
    align-items: center;
    justify-content: center;
    padding: 0 .625rem;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-muted);
    font-family: var(--solune-mono);
    font-size: .8125rem;
    font-weight: 500;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    text-decoration: none;
    transition: border-color .15s ease, color .15s ease;
}
body.solune-page :is(.pg_page, .qa_page):hover,
body.solune-page :is(.pg_page, .qa_page):focus-visible {
    border-color: var(--solune-border-strong);
    color: var(--solune-text);
}
body.solune-page .pg_current {
    border-color: transparent;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-weight: 600;
}
/* 처음·이전·다음·맨끝은 글자라 번호보다 넓다. 고정폭을 풀어 준다. */
body.solune-page :is(.pg_start, .pg_prev, .pg_next, .pg_end) { font-family: inherit; }

/* 에디터 단축키 일람: 입력창 위의 작은 도구 버튼과 도움말 패널로 정리한다.
   smarteditor2가 버튼 클릭 뒤 같은 위치에 패널을 동적으로 삽입하므로
   코어의 .cke_sc 마크업과 열기·닫기 스크립트는 건드리지 않는다. */
body.solune-page .cke_sc {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    flex-wrap: wrap;
    margin: 0 0 .625rem;
    text-align: right;
}
body.solune-page .btn_cke_sc {
    display: inline-flex;
    min-height: 2.25rem;
    align-items: center;
    gap: .375rem;
    padding: 0 .8125rem;
    border: 1px solid var(--solune-border-strong);
    border-radius: .625rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-family: inherit;
    font-size: .78125rem;
    font-weight: 700;
    line-height: 1.2;
    text-decoration: none;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease, box-shadow .14s ease;
}
body.solune-page .btn_cke_sc::before {
    color: var(--solune-primary);
    content: "\f11c";
    font-family: FontAwesome;
    font-size: .8125rem;
    font-weight: 400;
}
body.solune-page .btn_cke_sc:hover,
body.solune-page .btn_cke_sc:focus-visible {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--solune-primary) 12%, transparent);
}
body.solune-page .cke_sc_def {
    width: 100%;
    flex: 0 0 100%;
    box-sizing: border-box;
    margin: 0 0 .875rem;
    padding: 1rem;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface-soft);
    box-shadow: var(--solune-shadow-sm);
    text-align: left;
    animation: solune-shortcut-panel-in .16s ease-out both;
}
body.solune-page .cke_sc_def dl {
    display: grid;
    grid-template-columns: minmax(6rem, .75fr) minmax(0, 1.25fr) minmax(6rem, .75fr) minmax(0, 1.25fr);
    margin: 0 0 .875rem;
    text-align: left;
}
body.solune-page .cke_sc_def dl::after { display: none; }
body.solune-page .cke_sc_def :is(dt, dd) {
    float: none;
    width: auto;
    min-width: 0;
    min-height: 2.375rem;
    box-sizing: border-box;
    margin: 0;
    padding: .625rem .6875rem;
    border-bottom: 1px solid var(--solune-border);
    line-height: 1.35;
}
body.solune-page .cke_sc_def dt {
    color: var(--solune-primary);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: .75rem;
    font-weight: 800;
    letter-spacing: .02em;
}
body.solune-page .cke_sc_def dd {
    color: var(--solune-text-soft);
    font-size: .8125rem;
}
body.solune-page .btn_cke_sc_close {
    display: inline-flex;
    min-height: 2.125rem;
    align-items: center;
    justify-content: center;
    margin-left: auto;
    padding: 0 .8125rem;
    border: 1px solid var(--solune-border-strong);
    border-radius: .5625rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-family: inherit;
    font-size: .75rem;
    font-weight: 700;
    line-height: 1.2;
    cursor: pointer;
    transition: border-color .14s ease, background-color .14s ease, color .14s ease;
}
body.solune-page .btn_cke_sc_close:hover,
body.solune-page .btn_cke_sc_close:focus-visible {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}

@keyframes solune-shortcut-panel-in {
    from { opacity: 0; transform: translateY(-.25rem); }
    to { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
    body.solune-page .btn_cke_sc,
    body.solune-page .btn_cke_sc_close { transition: none; }
    body.solune-page .cke_sc_def { animation: none; }
}

@media (max-width: 40rem) {
    body.solune-page .cke_sc_def { padding: .75rem; }
    body.solune-page .cke_sc_def dl { grid-template-columns: minmax(6.25rem, .9fr) minmax(0, 1.1fr); }
}

/* ── 팝업레이어 (관리자 > 팝업레이어관리) ─────────────────────────────
   코어 bbs/newwin.inc.php(폰은 mobile/newwin.inc.php)가 내는 마크업이다.
   커뮤니티 홈은 head.layout.php, 쇼핑몰 홈은 shop/shop.head.php 가 헤더
   바로 뒤에서 부른다. 한때 테마에 이 모양이 아예 없어 팝업이 헤더 안에
   맨 글자로 끼었다(2026-09-28). basic 과 같은 짜임(#hd_pop 을 높이 0 인
   기준 상자로, .hd_pops 를 그 위에 띄움)에 사이트 팔레트를 입힌다.

   위치(top · left)와 크기(.hd_pops_con 의 width · height)는 관리자가 적은
   값이 style 속성으로 온다. 겹침 순서는 40 — 본문(슬라이더 1)과 맨 위로
   단추(30)보다 위, 붙어 다니는 헤더(커뮤니티 50 · 쇼핑몰 60)와 서랍보다
   아래다. 그래서 스크롤하면 팝업이 헤더 밑으로 지나간다. */
#hd_pop {
    position: relative;
    z-index: 40;
    max-width: 80rem;
    height: 0;
    margin-inline: auto;
}
#hd_pop > h2 {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
/* 팝업인지 한눈에 알게 한다(2026-09-28 요청 — 처음 모양은 본문 카드와 같은
   흰 바탕 · 옅은 테두리라 페이지의 일부로 읽혔다). 본문 어디에도 없는 세
   가지를 준다: 주색 머리띠(::before "알림"), 크고 깊은 그림자에 주색이 도는
   테두리, 나타날 때 살짝 떠오르는 움직임. 머리띠 글자는 코어가 이미 둔
   "팝업레이어 알림" 제목(h2, 낭독기 전용)과 겹치므로 낭독기에서는 뺀다
   (content 의 / 뒤 대체 글 ""). */
.hd_pops {
    position: absolute;
    max-width: calc(100vw - 2rem);
    overflow: hidden;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 45%, var(--solune-border));
    border-radius: .75rem;
    background: var(--solune-surface);
    box-shadow:
        0 0 0 4px color-mix(in srgb, var(--solune-primary) 12%, transparent),
        /* 그림자는 글자색이 아니라 검정으로 — 다크에서는 글자색이 밝아 그림자가
           뿌연 후광으로 번졌다. */
        0 28px 56px -16px rgb(0 0 0 / .38),
        0 10px 20px -10px rgb(0 0 0 / .24);
    color: var(--solune-text);
    animation: solune-pop-in .32s cubic-bezier(.16, 1, .3, 1) both;
}
.hd_pops::before {
    display: block;
    padding: .5rem 1.25rem;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    content: "알림" / "";
    font-size: .75rem;
    font-weight: 700;
    letter-spacing: .08em;
}
@keyframes solune-pop-in {
    from { opacity: 0; transform: translateY(.75rem) scale(.98); }
    to { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
    .hd_pops { animation: none; }
}
.hd_pops_con {
    max-width: 100%;
    overflow: auto;
    padding: 1.25rem;
    font-size: .875rem;
    line-height: 1.65;
}
.hd_pops_con img { max-width: 100%; height: auto; }
.hd_pops_footer {
    display: flex;
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
.hd_pops_footer button {
    min-height: 2.75rem;
    padding: 0 1rem;
    border: 0;
    background: none;
    color: var(--solune-text-soft);
    font-size: .8125rem;
    cursor: pointer;
}
.hd_pops_footer .hd_pops_reject { flex: 1; text-align: left; }
/* 닫기는 주색 글자로 — "닫을 수 있는 창" 이라는 것이 드러나게. */
.hd_pops_footer .hd_pops_close { flex: none; border-left: 1px solid var(--solune-border); color: var(--solune-primary); font-weight: 600; }
.hd_pops_footer button:hover { background: var(--solune-surface); color: var(--solune-primary); }

/* 폰. 관리자가 적은 가로 위치 · 폭이 화면보다 크면 팝업이 화면 밖으로
   나간다. 인라인 style 을 이겨야 해서 여기만 !important 를 쓴다. */
@media (max-width: 40rem) {
    .hd_pops { left: 1rem !important; }
    .hd_pops_con { width: auto !important; }
}

/* ━━━━ community.css ━━━━
   (옛 파일 · 원래 순서 310 · 원래 조건: 모든 화면 · head.sub.php) */

/* Solune community layer: DaisyUI owns components; this file owns the community header.

   팔레트는 여기 없다. 한때 이 자리에서 html[data-theme] 로 남색 토큰을
   다시 깔았는데, 그것이 곧 사이트 기본값이었으므로 default.css 로 옮겼다.
   색을 고칠 일이 있으면 그쪽을 본다. */

/* 페이지 레일. 헤더·서비스 전환·검색·푸터가 모두 이 한 자를 쓴다.
   전에는 셸에 여백이 없고 요소마다 따로 여백을 줘서, 푸터만 32px 바깥에
   서고 헤더는 16px 안에 서는 식으로 세로줄이 어긋났다.
   #container_wr 의 좌우 여백도 같은 값으로 맞춰 둔다. */
/* 스크롤 리빌. 시안과 같은 값(.35s ease-out, 12px 올라오며 나타남).
   숨김 상태는 [data-solune-js] 안에만 둔다. 이 플래그는 head 의 부트
   스크립트가 IntersectionObserver 가 있고 모션 축소가 아닐 때만 켠다.
   그래서 JS 가 꺼져 있으면 내용이 처음부터 그냥 보인다. */
.solune-reveal { transition: opacity .35s ease-out, transform .35s ease-out; }
[data-solune-js="on"] .solune-reveal { opacity: 0; transform: translateY(12px); }
[data-solune-js="on"] .solune-reveal[data-shown="true"] { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
    .solune-reveal { opacity: 1; transform: none; }
}

.solune-shell { width: min(100%, 80rem); margin-inline: auto; padding-inline: 1rem; }
@media (min-width: 40rem) { .solune-shell { padding-inline: 1.5rem; } }
@media (min-width: 64rem) { .solune-shell { padding-inline: 2rem; } }
.solune-wrapper { min-height: 32rem; }

/* 홈도 다른 페이지와 같은 페이지 바닥 위에 놓는다. 흰 바탕에 흰 카드를
   얹으면 카드 경계가 테두리 하나로만 남아 패널이 떠 보이지 않는다.
   html 에도 같이 걸어 오버스크롤 여백까지 같은 색으로 둔다. */
html:has(body.solune-home-page) { background: var(--solune-page); }
body.solune-home-page { background: var(--solune-page); }
body.solune-home-page #wrapper.solune-wrapper { background: var(--solune-page); }
.solune-avatar { display: inline-grid; width: 2rem; height: 2rem; place-items: center; border-radius: 50%; background: var(--solune-primary-soft); color: var(--solune-primary); font-size: .7rem; font-weight: 800; }

.solune-brand-footer strong { font-size: 1.1rem; }
.solune-brand-footer .solune-community-logo { height: 30px; width: auto; }

/* 푸터의 사이트 정보(사업자 정보, tail.layout.php). 로고 · 링크 줄과 저작권 줄
   사이에 선 하나로 떼어 둔다. 항목은 [라벨 값] 짝을 한 줄에 흘려 넣고 폭이
   모자라면 다음 줄로 넘긴다 — 한 항목이 두 줄로 쪼개지지 않게 짝끼리 묶는다.
   글자는 12px 이고, 라벨은 흐리게(--solune-muted, 4.97:1) 값은 한 단 진하게
   둔다. 주소처럼 긴 값만 제 안에서 줄을 바꾼다. */
.solune-footer-company {
    padding-block: 1.25rem;
    border-bottom: 1px solid var(--solune-border);
}
.solune-footer-company-title {
    margin: 0 0 .625rem;
    color: var(--solune-text-soft);
    font-size: .75rem;
    font-weight: 700;
}
.solune-footer-company-list {
    display: flex;
    flex-wrap: wrap;
    gap: .375rem 1.25rem;
    margin: 0;
    font-size: .75rem;
    line-height: 1.6;
}
.solune-footer-company-list > div { display: flex; min-width: 0; gap: .375rem; }
.solune-footer-company-list dt { flex: none; color: var(--solune-muted); font-weight: 500; }
.solune-footer-company-list dd { min-width: 0; margin: 0; color: var(--solune-text-soft); overflow-wrap: anywhere; }

/* Keep the home and board shells on one visual grid instead of mixing DaisyUI spacing with stock Gnuboard spacing. */
#container_wr {
    grid-template-columns: minmax(0, 1fr) 18rem;
    gap: 2rem;
    /* 위 여백은 헤더 높이(64px)의 절반이자 열 간격과 같은 눈금이다.
       시안은 48px 이지만 이 사이트에선 헤더 아래가 빈 띠로 읽혔다.
       아래는 푸터 앞이라 48px 을 남긴다. */
    padding: 2rem 2rem 3rem;
}
#container_wr > .solune-main-content,
#container_wr > .solune-sidebar { min-width: 0; }
#container_wr > .solune-sidebar { gap: 1rem; }
.solune-reference-panel,
.solune-sidebar > .card,
.solune-sidebar > #ol_before,
.solune-sidebar #popular,
.solune-sidebar #poll,
.solune-sidebar #visit,
.solune-sidebar .po,
.solune-sidebar .visit,
.solune-sidebar .connect {
    border-radius: .75rem !important;
    box-shadow: 0 1px 2px rgba(15, 23, 42, .05), 0 1px 3px rgba(15, 23, 42, .04) !important;
}
.solune-reference-panel > :first-child { min-height: 3.75rem; }

/* 홈 패널. 카드 자체를 조용히 둔다. 배경 틴트도 파란 제목도 굵은 행도 없다.
   목록이 굵고 파랗게 깔리면 무엇이 무엇인지가 오히려 흐려진다.

   한때 공지사항만 대표로 세워 파란 기가 도는 테두리와 위쪽 3px 그라디언트
   바를 줬는데, 나란히 놓고 보니 그 카드만 겉돌았다. 다섯 패널을 똑같이 둔다.
   대표를 다시 세울 일이 생기면 이 자리에 규칙을 더하면 된다. */
body.solune-home-page .solune-reference-panel {
    border-color: var(--solune-border);
    background: var(--solune-surface);
}
body.solune-home-page .solune-reference-panel > :first-child {
    border-bottom-color: var(--solune-border);
    background: transparent;
}
body.solune-home-page .solune-reference-panel > :first-child h2 {
    color: var(--solune-text);
    font-size: 1.125rem;
    /* 사이드바 카드 제목(community-search.css 의 .solune-sidebar-widget-head h2)
       이 800 이다. 900 은 이 자리만 굵어 보였다. */
    font-weight: 800;
    letter-spacing: -.025em;
}
body.solune-home-page .solune-reference-panel .solune-latest-list li {
    border-bottom-color: var(--solune-border);
    border-radius: 0;
}

/* 회원 카드. 시안은 다른 사이드바 카드와 같은 흰 카드다. 파란 그라디언트와
   상단 바를 얹으면 사이드바에서 이 카드만 튀어, 정작 봐야 할 수치가 밀린다. */
body.solune-home-page .solune-reference-panel {
    position: relative;
    transition: box-shadow .25s ease, border-color .25s ease;
}
body.solune-home-page .solune-reference-panel:is(:hover, :focus-within) {
    box-shadow: var(--solune-shadow-lift) !important;
}

body.solune-page .solune-member-card-body { position: relative; padding: 1.25rem !important; }
body.solune-page .solune-member-card-head { align-items: center; gap: .75rem; }
body.solune-page .solune-member-card-head > div { min-width: 0; }
body.solune-page .solune-member-avatar {
    width: 2.75rem !important;
    height: 2.75rem !important;
    flex: 0 0 2.75rem;
    border: 0;
    background: linear-gradient(135deg, var(--solune-primary), color-mix(in oklab, var(--solune-primary) 55%, #7C3AED));
    color: #fff;
    font-size: 1rem !important;
    font-weight: 800;
    box-shadow: none;
}
/* ── 게시판 그룹 (group.php) ──────────────────────────────────────────
   시안(커뮤니티 그룹)을 옮긴 것이다. 안내 한 줄 · 게시판 바로가기 칩 ·
   두 칸 격자 순서다.

   접는 기준은 화면이 아니라 이 덩이의 폭이다 — 사이드가 붙는 1024px 창에서
   본문은 640px 뿐이라 화면으로 재면 두 칸을 그대로 두었다가 카드가 눌린다
   (CLAUDE.local.md). 시안이 720px 에서 접는 것을 그대로 따른다. */
body.solune-page .solune-group { container: gr / inline-size; }
body.solune-page .solune-group-lead {
    margin: 0 0 20px;
    color: var(--solune-muted);
    font-size: 14px;
    line-height: 1.7;
}
body.solune-page .solune-group-lead strong { color: var(--solune-text); font-weight: 700; }

body.solune-page .solune-group-tabs {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 10px;
    margin: 0 0 20px;
}
body.solune-page .solune-group-tab {
    display: flex;
    min-width: 0;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    border: 1px solid var(--solune-border);
    border-radius: 12px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
    color: var(--solune-text);
    text-decoration: none;
}
body.solune-page .solune-group-tab:hover { border-color: var(--solune-primary); text-decoration: none; }
body.solune-page .solune-group-tab-mark {
    display: inline-flex;
    width: 36px;
    height: 36px;
    flex: none;
    align-items: center;
    justify-content: center;
    border-radius: 10px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: 14px;
    font-weight: 800;
}
body.solune-page .solune-group-tab-text { display: flex; min-width: 0; flex-direction: column; }
body.solune-page .solune-group-tab-name {
    overflow: hidden;
    font-size: 14px;
    font-weight: 700;
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.solune-page .solune-group-tab-count { margin-top: 1px; color: var(--solune-muted); font-size: 12px; }

/* 게시판 카드 격자. 코어는 float 와 인라인 margin 으로 흘려 두어, 블록
   높이가 다르면 셋째 것부터 위 블록에 걸쳐 제목이 겹쳤다. */
body.solune-page .solune-group-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 20px;
    align-items: start;
}
body.solune-page .solune-group-grid > .lt_wr {
    min-width: 0;
    float: none;
    margin: 0;
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}
/* 최신글 스킨은 홈 패널과 함께 쓰는 것이라 그 안의 규칙은 건드리지 않는다.
   여기서는 카드 안쪽 여백과 머리줄 선만 더한다. */
body.solune-page .solune-group-grid .solune-latest > header {
    margin: 0;
    padding: 16px 20px;
    border-bottom: 1px solid var(--solune-border);
}
body.solune-page .solune-group-grid .solune-latest-list { padding: 4px 20px; }
body.solune-page .solune-group-grid .solune-latest-empty-state { padding: 1.5rem 1.25rem; }

body.solune-page .solune-group-empty {
    margin: 0;
    padding: 3rem 0;
    color: var(--solune-muted);
    font-size: 14px;
    text-align: center;
}

@container gr (max-width: 720px) {
    body.solune-page .solune-group-grid { grid-template-columns: minmax(0, 1fr); }
    body.solune-page .solune-group-tabs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* 회원이미지가 있으면 그림이 동그라미를 채운다. 그라데이션은 이니셜을
   받치려고 깔아 둔 것이라 여기서는 지운다 — 가장자리가 투명한 gif 를
   올린 회원에게는 보라색이 비쳐 보인다. */
body.solune-page .solune-member-avatar.is-photo {
    overflow: hidden;
    background: var(--solune-surface-soft);
}
body.solune-page .solune-member-avatar img {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
}
body.solune-page .solune-member-card h2 { max-width: 100%; overflow: hidden; color: var(--solune-text); font-size: 1.125rem; font-weight: 900; letter-spacing: -.02em; line-height: 1.3; text-overflow: ellipsis; white-space: nowrap; }
/* 세 수치는 성격이 다르다. 포인트는 쌓이고, 안 읽은 쪽지는 지금 할 일이고,
   스크랩은 모아 둔 개수다. 같은 무게로 늘어놓으면 그 차이가 지워지므로
   안 읽은 쪽지에만 표시를 두고 나머지는 한 기준선에 맞춰 훑게 한다. */
body.solune-page .solune-member-card-stats {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0;
    border: 0;
    border-block: 1px solid var(--solune-border);
    border-radius: 0;
    background: none;
    padding: 0;
}
body.solune-page .solune-member-stat {
    display: flex;
    min-width: 0;
    min-height: 3.25rem;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .15rem;
    border-radius: 0;
    padding: .55rem .35rem;
    transition: background-color .18s ease;
}
body.solune-page .solune-member-stat + .solune-member-stat { border-left: 0; box-shadow: inset 1px 0 0 var(--solune-border); }
body.solune-page .solune-member-stat:hover { background: color-mix(in oklab, var(--solune-primary) 8%, transparent); }
/* 10.4px 라 본문 크기로 취급된다. 장식용 흐림(52%)이 아니라 70% 를 써서
   4.5:1 을 넘긴다. 카드 배경 대비 라이트 5.55 · 다크 7.4 로 측정했다. */
body.solune-page .solune-member-stat-label { color: color-mix(in oklab, var(--color-base-content) 70%, transparent); font-size: .65rem; font-weight: 600; white-space: nowrap; }
body.solune-page .solune-member-stat-value {
    position: relative;
    display: inline-flex;
    align-items: center;
    color: var(--solune-text);
    font-size: .95rem;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    letter-spacing: -.02em;
    line-height: 1.2;
    white-space: nowrap;
    transition: color .18s ease;
}
body.solune-page .solune-member-stat:hover .solune-member-stat-value { color: var(--solune-primary); }
body.solune-page .solune-member-stat-unread .solune-member-stat-value { color: var(--solune-primary); }
/* 개수 자체가 뜻을 지고 링크 이름에도 적혀 있다. 점은 거들 뿐 혼자 알리지 않는다. */
body.solune-page .solune-member-stat-dot { width: .3rem; height: .3rem; align-self: flex-start; margin-left: .28rem; border-radius: 0; background: var(--color-error); }

/* 회원 카드 보조 동작은 daisyUI 인라인 버튼으로 표현해 링크의 역할과
   터치 영역을 한눈에 구분한다. 버튼의 색·높이·포커스 상태는 daisyUI
   토큰을 따른다. */
body.solune-page .solune-member-card-action { min-width: 0; }
body.solune-page .solune-member-card-action.btn-primary { color: var(--color-primary-content); }
/* 로그아웃. 한때 글자색만 var(--color-error) 로 박아 두었는데, daisyUI 의
   btn-outline 은 hover 에 바탕을 같은 빨강으로 채우므로 이 규칙이 hover 에도
   이겨 빨강 바탕에 빨강 글자가 되어 글씨가 사라졌다(2026-09-28).
   색은 사이트 팔레트(--solune-danger, 흰 바탕 4.79:1)로 바꾸고, hover 는 꽉
   채우지 않고 같은 색의 옅은 틴트만 깐다 — 로그아웃은 주된 동작이 아니라
   옆의 "관리자"(꽉 찬 주색)보다 튀지 않게.
   틴트 위에서는 대비가 조금 떨어져(라이트 4.25:1) hover 글자를 본문 글자색
   쪽으로 20% 섞는다 — 라이트는 더 짙게, 다크는 더 밝게 가서 둘 다 오른다
   (라이트 5.66 · 다크 7.3:1). */
body.solune-page .solune-member-card-action.btn-outline.btn-error {
    border-color: var(--solune-danger);
    color: var(--solune-danger);
}
body.solune-page .solune-member-card-action.btn-outline.btn-error:is(:hover, :focus-visible, :active) {
    border-color: var(--solune-danger);
    background: color-mix(in srgb, var(--solune-danger) 9%, transparent);
    box-shadow: none;
    color: color-mix(in srgb, var(--solune-danger) 80%, var(--solune-text));
}

/* ━━━━ community-header.css ━━━━
   (옛 파일 · 원래 순서 311 · 원래 조건: 모든 화면 · head.sub.php) */

/* 헤더 · 서비스 전환 · 검색 · drawer

   community.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, 로더가 원래 순서대로 이어서 실으면 어느 선언이 이기는지가
   달라지지 않는다. */

/* Reference community header geometry and interactions. The service switch
   remains in document flow; only the main header and its search dock stick. */
.solune-community-header-shell { background: var(--solune-surface); }
.solune-community-header-sticky { position: sticky; z-index: 50; top: 0; background: var(--solune-surface); }
.solune-community-service-switch { border-bottom: 1px solid var(--solune-border); background: var(--solune-surface); }
.solune-community-service-switch-inner { display: flex; min-height: 2.5rem; align-items: center; justify-content: space-between; gap: 1rem; }
.solune-community-service-links, .solune-community-member-menu { display: flex; align-items: center; }
/* 링크의 좌우 여백만큼 글자가 레일에서 안으로 밀린다. 로고·카드와 첫 글자를
   맞추려고 그만큼 당긴다. 눌리는 영역은 그대로다. */
.solune-community-service-links { gap: .25rem; margin-inline-start: -.7rem; }
/* 시안은 구분자 막대 대신 활성 항목 아래 파란 바로 현재 위치를 알린다.
   가로 막대가 없으니 두 항목이 나란한 탭으로 읽힌다. */
.solune-community-service-link { position: relative; display: inline-flex; align-items: center; padding: .55rem .7rem; color: color-mix(in oklab, var(--color-base-content) 55%, transparent); font-size: .75rem; font-weight: 700; line-height: 1.6; white-space: nowrap; transition: color .2s ease; }
.solune-community-service-link:hover, .solune-community-service-link:focus-visible { background: transparent; color: var(--solune-primary); }
.solune-community-service-link-active { color: var(--solune-text); }
.solune-community-service-link-active::after { content: ""; position: absolute; z-index: 1; right: .7rem; bottom: -2px; left: .7rem; height: 2px; border-radius: 2px; background: var(--solune-primary); }
.solune-community-member-menu { margin-left: auto; min-height: 2.25rem; gap: 1rem; color: var(--solune-muted); font-size: .8125rem; font-weight: 400; line-height: 1.6; white-space: nowrap; }
/* 안내 링크 묶음. 기본은 없는 것처럼 두고(직접 자식으로 배치된다), 좁은
   화면의 쇼핑몰에서만 shop.css 가 이 상자를 가로 스크롤로 바꾼다. */
.solune-community-member-utilities { display: contents; }
.solune-community-member-menu :is(a, button) { display: inline-flex; min-width: 2.75rem; min-height: 2.25rem; align-items: center; justify-content: center; padding-inline: .25rem; }
/* daisyUI swap 을 헤더 눈금에 맞춘다. display 는 건드리지 않는다 - .swap 은
   inline-grid 로 두 아이콘을 같은 칸(grid-area 1/1)에 겹쳐 두는데, 여기서
   inline-flex 로 덮으면 둘이 나란히 놓여 좌우로 오가는 것처럼 보인다.
   크기와 색만 준다. 예제의 40px 아이콘은 이 줄에서 너무 크다. */
.solune-community-member-menu .solune-theme-swap { min-width: 2.75rem; min-height: 2.25rem; padding-inline: .25rem; }
.solune-theme-swap { color: inherit; }
.solune-theme-swap svg { width: 1.15rem; height: 1.15rem; fill: currentColor; }
.solune-theme-swap:hover { color: var(--solune-text); }
/* 체크박스가 숨어 있어 포커스 표시가 label 에 걸려야 보인다. 다만
   :focus-within 은 마우스로 눌러도 걸려, 토글할 때마다 큰 테두리가 남았다.
   :has(input:focus-visible) 로 키보드 이동일 때만 그린다. */
.solune-theme-swap:has(input:focus-visible) { border-radius: .5rem; outline: 2px solid var(--solune-primary); outline-offset: 1px; }
/* 테마의 범용 input:focus 규칙이 숨은 체크박스에도 3px 링을 씌워, 클릭할
   때마다 아이콘 둘레에 상자가 그려졌다. 이 컴포넌트는 자체 포커스 표시를
   가지므로 범용 규칙을 끈다. */
.solune-theme-swap input:focus,
.solune-theme-swap input:focus-visible { box-shadow: none; outline: 0; }
.solune-community-member-menu button { border: 0; background: transparent; color: inherit; cursor: pointer; font: inherit; }
.solune-community-member-menu :is(a, button):hover { color: var(--solune-text); }
/* 현재 접속자 수(service_switch.php). 링크 글자보다 한 단 진하게, 주색으로 짚는다. */
.solune-community-connect-num { margin-left: .25rem; color: var(--solune-primary); font-weight: 700; font-variant-numeric: tabular-nums; }

/* 좁은 화면의 커뮤니티 안내 링크(FAQ · Q&A · 새글 · 접속자). 접속자를 더하자(2026-09-29)
   390px 에서도 오른쪽 링크가 왼쪽 "커뮤니티 · 쇼핑몰" 위로 겹쳤다(320px 은 전부터
   32px 겹쳐 있었다). 쇼핑몰 줄(default_shop.css)과 같이 안내 링크 묶음만 가로로
   넘겨 보게 하고, 로그인 · 회원가입 · 다크 토글은 제자리에 둔다. 오른쪽 끝을 흐리게
   해 넘겨 볼 것이 있다고 알리고, 끝까지 넘기면 같은 폭의 끝 여백이 마지막 링크를
   흐림 밖으로 꺼낸다. */
@media (max-width: 639px) {
    .solune-community-member-utilities {
        display: flex;
        min-width: 0;
        align-items: center;
        gap: .25rem;
        overflow-x: auto;
        scrollbar-width: none;
        padding-inline-end: 1.5rem;
        -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 1.5rem), transparent);
        mask-image: linear-gradient(to right, #000 calc(100% - 1.5rem), transparent);
    }
    .solune-community-member-utilities::-webkit-scrollbar { display: none; }
    .solune-community-member-menu > :is(a, .solune-theme-swap) { flex: 0 0 auto; }
}
.solune-community-member-signup { color: var(--solune-primary); font-weight: 700; }

.solune-community-header {
    position: relative;
    z-index: 1;
    isolation: isolate;
    border-bottom: 1px solid color-mix(in srgb, var(--solune-border) 84%, transparent);
    background: transparent;
    box-shadow: 0 1px 3px color-mix(in srgb, var(--solune-text) 8%, transparent), 0 0 0 1px color-mix(in srgb, var(--solune-text) 3%, transparent);
    transition: border-color .18s ease, box-shadow .18s ease;
}
.solune-community-header::before {
    position: absolute;
    z-index: -1;
    inset: 0;
    background: color-mix(in srgb, var(--solune-surface) 88%, transparent);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    content: "";
    pointer-events: none;
    transition: background-color .18s ease;
}
.solune-community-header.is-scrolled {
    border-bottom-color: var(--solune-border);
    box-shadow: var(--solune-shadow-sm), 0 4px 12px color-mix(in srgb, var(--solune-text) 7%, transparent);
}
.solune-community-header.is-scrolled::before { background: var(--solune-surface); }
/* 띄울 팝업이 없으면 기준 상자째 뺀다. 한때 팝업을 헤더 안에서 불러
   선택자가 .solune-community-header > #hd_pop 이었는데, 헤더 뒤로 옮기면서
   (default 절의 "팝업레이어" 참고) 어디서든 걸리게 고쳤다. */
#hd_pop:not(:has(.hd_pops)) { display: none; }
.solune-community-mainbar { display: flex; min-height: 4rem; flex-wrap: wrap; align-items: center; gap: .75rem; padding-block: 0; }

/* 헤더·서비스 전환·검색을 #container_wr 과 같은 레일 위에 세운다.
   본문 여백을 32px 로 바꾼 뒤 헤더만 16px 에 남아 한 칸씩 어긋나 있었다.
   시안도 셋을 같은 2rem 레일에 둔다. */
@media (min-width: 70.0625rem) {
    .solune-community-mainbar { width: min(100%, 80rem); }
}

.solune-community-drawer.drawer { display: grid; order: 1; flex: none; grid-auto-columns: auto; width: auto; min-width: 0; height: auto; min-height: 0; overflow: visible; }
.solune-community-drawer .drawer-content { display: flex; grid-column-start: 1; width: auto; min-width: 0; }
.solune-community-drawer .drawer-side { z-index: 120; }
.solune-community-drawer-toggle { width: 2.75rem; height: 2.75rem; min-height: auto; padding: 0; border-color: transparent; border-radius: .25rem; background: transparent; color: var(--solune-text); }
.solune-community-drawer-toggle:hover, .solune-community-drawer-toggle:focus-visible { background: var(--solune-surface-soft); color: var(--solune-primary); }
.solune-community-drawer-toggle-desktop { display: inline-flex; }
.solune-community-drawer-toggle-mobile { display: none; }

/* ━━━━ community-drawer.css ━━━━
   (옛 파일 · 원래 순서 312 · 원래 조건: 모든 화면 · head.sub.php) */

/* drawer (좌측 패널)

   community-header.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, 로더가 원래 순서대로 이어서 실으면 어느 선언이 이기는지가
   달라지지 않는다. */

/* --- Drawer (좌측 패널) -------------------------------------------------
   레퍼런스 index-uiux2.html 의 drawer 를 그대로 옮긴다. 헤드와 하단 동작은
   제자리에 두고 nav 만 스크롤하도록 3행 그리드로 세운다.
   테마의 --radius-field 는 4px 이라 레퍼런스의 8px 모서리와 다르다.
   같은 모양을 내야 하므로 여기서는 .5rem 을 그대로 적는다. */
.solune-community-drawer-side { z-index: 120; }
.solune-community-drawer-side .drawer-overlay { border: 0; padding: 0; }

.solune-community-drawer-panel {
    display: grid;
    grid-template-rows: auto minmax(0, 1fr) auto;
    width: min(20.5rem, 86vw);
    height: 100dvh;
    border-right: 1px solid var(--solune-border);
    /* 시안은 배경을 bg-base-100 에 맡기지만, 이 테마의 다크 base-100 은
       초록기가 돌아 헤드·하단의 남색과 어긋난다. 테마 표면색을 직접 준다.
       라이트에서는 #ffffff 로 시안과 같은 값이다. */
    background: var(--solune-surface);
    box-shadow: 8px 0 28px -12px rgb(15 23 42 / .28);
    overscroll-behavior: contain;
}
html[data-theme="dark"] .solune-community-drawer-panel { box-shadow: 8px 0 28px -12px rgb(0 0 0 / .7); }
/* 다크에서 로고가 남색 헤드에 묻는다. drawer 안에서만 반전한다. */
html[data-theme="dark"] .solune-community-drawer-brand .solune-community-logo { filter: brightness(0) invert(1); opacity: .92; }

.solune-community-drawer-head {
    display: flex; align-items: center; justify-content: space-between; gap: .75rem;
    min-height: 4rem; padding: .9rem 1rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
.solune-community-drawer-brand { display: inline-flex; min-width: 0; flex: 0 0 auto; align-items: center; color: var(--solune-text); }

.solune-community-drawer-close {
    flex: 0 0 auto;
    width: 2.75rem; height: 2.75rem; min-height: 2.75rem;
    display: inline-flex; align-items: center; justify-content: center;
    padding: 0; border: 0; border-radius: .5rem;
    background: transparent;
    /* daisyUI btn-sm 이 글리프를 12px/600 으로 줄인다. 시안은 16px/400 이다. */
    font-size: 1rem; font-weight: 400;
    color: color-mix(in oklab, var(--color-base-content) 60%, transparent);
    transition: background .18s ease, color .18s ease;
}
.solune-community-drawer-close:hover,
.solune-community-drawer-close:focus-visible {
    background: color-mix(in oklab, var(--color-base-content) 8%, transparent);
    color: var(--color-base-content);
}

.solune-community-drawer-nav {
    min-height: 0;
    overflow-y: auto; overscroll-behavior: contain;
    padding: .85rem .75rem 1rem;
    scrollbar-color: var(--solune-border-strong) transparent;
    scrollbar-width: thin;
}
/* daisyUI 의 .menu 를 쓰면 li 가 flex 가 되고 자식에 padding-inline 12px 과
   폭 보정이 붙어, 행이 부모보다 21px 넓어지고 하위 메뉴 들여쓰기가 먹지 않는다.
   시안도 .menu 를 쓰지 않는다. 전용 클래스로 갈아 끼운다. */
.solune-community-drawer-menu { display: grid; gap: .1rem; width: 100%; margin: 0; padding: 0; list-style: none; }
.solune-community-drawer-menu li { display: list-item; margin: 0; padding: 0; }

.solune-community-drawer-menu .solune-community-drawer-menu-row { display: flex; align-items: center; gap: .15rem; }

.solune-community-drawer-menu .solune-community-drawer-menu-link {
    flex: 1 1 auto; min-width: 0;
    display: flex; align-items: center; gap: .65rem;
    min-height: 2.75rem;
    padding: .5rem .55rem;
    border: 0; border-radius: .5rem;
    background: transparent;
    font-size: .875rem; font-weight: 600; letter-spacing: -.01em; line-height: 1.35;
    color: color-mix(in oklab, var(--color-base-content) 82%, transparent);
    transition: background .18s ease, color .18s ease;
}
.solune-community-drawer-menu .solune-community-drawer-menu-link:hover,
.solune-community-drawer-menu .solune-community-drawer-menu-link:focus-visible {
    background: color-mix(in oklab, var(--color-primary) 9%, transparent);
    color: var(--color-primary);
}
.solune-community-drawer-menu .solune-community-drawer-menu-link span,
.solune-community-drawer-nav .solune-community-drawer-submenu-link span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.solune-community-drawer-menu .solune-community-drawer-menu-link i {
    flex: 0 0 auto; width: 1.1rem;
    text-align: center;
    color: color-mix(in oklab, var(--color-base-content) 45%, transparent);
    transition: color .18s ease;
}
.solune-community-drawer-menu .solune-community-drawer-menu-link:hover i,
.solune-community-drawer-menu .solune-community-drawer-menu-link:focus-visible i { color: var(--color-primary); }

.solune-community-drawer-nav .solune-community-drawer-submenu-toggle {
    flex: 0 0 auto;
    width: 2.75rem; height: 2.75rem; min-height: 2.75rem;
    display: inline-flex; align-items: center; justify-content: center;
    padding: 0; border: 0; border-radius: .5rem;
    background: transparent; cursor: pointer;
    font-size: .7rem; font-weight: 400;
    color: color-mix(in oklab, var(--color-base-content) 45%, transparent);
    transition: background .18s ease, color .18s ease;
}
.solune-community-drawer-nav .solune-community-drawer-submenu-toggle:hover,
.solune-community-drawer-nav .solune-community-drawer-submenu-toggle:focus-visible {
    background: color-mix(in oklab, var(--color-base-content) 8%, transparent);
    color: var(--color-base-content);
}
.solune-community-drawer-nav .solune-community-drawer-submenu-toggle i { transition: transform .25s ease; }
.solune-community-drawer-nav .solune-community-drawer-submenu-toggle[aria-expanded="true"] { color: var(--color-primary); }
.solune-community-drawer-nav .solune-community-drawer-submenu-toggle[aria-expanded="true"] i { transform: rotate(180deg); }

/* 하위 메뉴는 얇은 레일에 걸어 둔다. 깊게 들여쓰지 않아도 중첩이 읽힌다. */
.solune-community-drawer-nav .solune-community-drawer-submenu {
    display: grid; gap: .05rem;
    margin: .1rem 0 .35rem 1.3rem;
    padding: 0 0 0 .75rem;
    border-left: 1px solid var(--solune-border);
}
.solune-community-drawer-nav .solune-community-drawer-submenu-link {
    display: flex; align-items: center;
    min-height: 2.5rem;
    padding: .4rem .55rem;
    border: 0; border-radius: .5rem;
    background: transparent;
    font-size: .82rem; font-weight: 500; line-height: 1.35;
    color: color-mix(in oklab, var(--color-base-content) 68%, transparent);
    transition: background .18s ease, color .18s ease;
}
.solune-community-drawer-nav .solune-community-drawer-submenu-link:hover,
.solune-community-drawer-nav .solune-community-drawer-submenu-link:focus-visible {
    background: color-mix(in oklab, var(--color-primary) 9%, transparent);
    color: var(--color-primary);
}
.solune-community-drawer-nav .solune-community-drawer-submenu[hidden] { display: none; }

/* 지금 보고 있는 자리. hover 와 같은 옅은 틴트로는 손이 얹힌 것과 구별되지
   않아, 왼쪽에 표식을 하나 세우고 글자를 진하게 한다 — 색 말고도 알아볼 수
   있는 신호를 같이 둔다. */
.solune-community-drawer-nav .solune-community-drawer-submenu-link.is-current,
.solune-community-drawer-menu .solune-community-drawer-menu-link.is-current {
    position: relative;
    background: color-mix(in oklab, var(--color-primary) 12%, transparent);
    color: var(--color-primary);
    font-weight: 700;
}
.solune-community-drawer-nav .solune-community-drawer-submenu-link.is-current::before,
.solune-community-drawer-menu .solune-community-drawer-menu-link.is-current::before {
    content: "";
    position: absolute;
    top: .45rem;
    bottom: .45rem;
    left: -.75rem;
    width: 2px;
    border-radius: 1px;
    background: var(--color-primary);
}
/* 묶음 링크 왼쪽에는 하위 목록의 세로선이 없다. 표식을 안쪽으로 당긴다. */
.solune-community-drawer-menu .solune-community-drawer-menu-link.is-current::before { left: -.2rem; }
.solune-community-drawer-menu .solune-community-drawer-menu-link.is-current i { color: var(--color-primary); }

/* 하단 동작. 주 CTA 를 두지 않아 두 개가 서로 대등하게 읽힌다.
   -edit 는 파란 강조, -logout 은 세션을 끝낸다는 신호로 따뜻한 hover 를 쓴다. */
.solune-community-drawer-actions {
    display: grid; grid-template-columns: 1fr 1fr; gap: .5rem;
    padding: .85rem 1rem calc(.85rem + env(safe-area-inset-bottom, 0px));
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
}
.solune-drawer-action {
    display: inline-flex; align-items: center; justify-content: center; gap: .45rem;
    min-height: 2.75rem;
    padding: .5rem .6rem;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--color-base-100);
    font-size: .82rem; font-weight: 700; letter-spacing: -.01em;
    color: color-mix(in oklab, var(--color-base-content) 80%, transparent);
    transition: background .18s ease, border-color .18s ease, color .18s ease;
}
.solune-drawer-action i { font-size: .85rem; }
.solune-drawer-action-edit:hover,
.solune-drawer-action-edit:focus-visible {
    border-color: color-mix(in oklab, var(--color-primary) 45%, transparent);
    background: color-mix(in oklab, var(--color-primary) 10%, var(--color-base-100));
    color: var(--color-primary);
}
.solune-drawer-action-logout:hover,
.solune-drawer-action-logout:focus-visible {
    border-color: color-mix(in oklab, var(--color-error) 45%, transparent);
    background: color-mix(in oklab, var(--color-error) 10%, var(--color-base-100));
    color: var(--color-error);
}

/* 시안은 hover 와 키보드 포커스를 같은 9% 틴트 하나로 처리하고 outline 을 지운다.
   ui-ux-pro-max 의 Focus States(severity High)는 "대체 없이 outline 을 없애지 말 것,
   모든 조작 요소에 보이는 포커스 링을 둘 것"이라고 한다. 틴트만으로는 키보드
   사용자가 현재 위치를 짚기 어려워, hover 모양은 시안 그대로 두고 포커스에만
   링을 되돌린다. */
.solune-community-drawer-panel :is(a, button, label):focus-visible {
    outline: 2px solid var(--solune-primary);
    outline-offset: 2px;
}
/* 스크롤되는 nav 안에서 포커스가 위아래 끝에 붙어 잘리지 않게 한다.
   (Focus Not Obscured (Minimum), WCAG 2.2 AA) */
.solune-community-drawer-nav { scroll-padding-block: .75rem; }
.solune-community-brand { display: inline-flex; order: 0; align-items: center; color: var(--solune-text); letter-spacing: 0; flex-shrink: 0; }
.solune-community-logo { display: block; height: 2rem; width: auto; }
.solune-community-mega { display: flex; order: 0; min-width: 0; flex: 1 1 auto; align-self: stretch; align-items: center; }
.solune-community-mega-list { display: flex; max-width: none; min-width: 0; flex-wrap: wrap; align-items: center; gap: .15rem; margin-left: 1rem; overflow: visible; }
.solune-community-mega-item { position: relative; display: flex; }
.solune-community-mega-trigger { display: inline-flex; align-items: center; gap: .35rem; border: 0; border-radius: .5rem; background: transparent; color: color-mix(in oklab, var(--color-base-content) 78%, transparent); cursor: pointer; padding: .6rem .8rem; font: inherit; font-size: .875rem; font-weight: 700; letter-spacing: -.015em; line-height: 1.6; white-space: nowrap; transition: background-color .2s ease, color .2s ease; }
.solune-community-mega-item:hover > .solune-community-mega-trigger, .solune-community-mega-item:focus-within > .solune-community-mega-trigger, .solune-community-mega-trigger:hover, .solune-community-mega-trigger:focus-visible, .solune-community-mega-trigger-active { background: var(--solune-primary-soft); color: var(--solune-primary); }
body.solune-page .solune-community-mega-trigger i { font-size: .5rem !important; transition: transform .16s; }
.solune-community-mega-item:hover > .solune-community-mega-trigger i, .solune-community-mega-item:focus-within > .solune-community-mega-trigger i, .solune-community-mega-trigger-active i { transform: rotate(180deg); }
.solune-community-mega-panel { position: absolute; z-index: 80; top: 100%; left: 0; width: max-content; min-width: 12rem; max-width: min(34rem, calc(100vw - 2rem)); visibility: hidden; border: 1px solid var(--solune-border); border-radius: .625rem; background: var(--solune-surface); box-shadow: 0 18px 36px color-mix(in srgb, var(--solune-text) 10%, transparent); opacity: 0; pointer-events: none; transform: translateY(-.35rem); transition: opacity .16s, transform .16s, visibility .16s; }
.solune-community-mega-item:hover > .solune-community-mega-panel, .solune-community-mega-item:focus-within > .solune-community-mega-panel, .solune-community-mega-panel-open { visibility: visible; opacity: 1; pointer-events: auto; transform: translateY(0); }
.solune-community-mega-panel-inner { display: grid; justify-content: start; padding: .875rem; }
.solune-community-mega-section { min-width: 12rem; }
.solune-community-mega-links { display: grid; gap: .25rem; }
.solune-community-mega-link { display: flex; min-height: 2.25rem; align-items: center; border-radius: .5rem; color: var(--solune-muted); padding-inline: .75rem; font-size: .875rem; font-weight: 500; line-height: 1.6; }
.solune-community-mega-link:hover, .solune-community-mega-link:focus-visible { background: var(--solune-surface-soft); color: var(--solune-primary); }
.solune-community-mega-empty { color: var(--solune-muted); cursor: default; }
.solune-community-search-control { position: relative; order: 0; flex: none; margin-left: auto; }
.solune-community-search-toggle { width: 2.75rem; height: 2.75rem; min-height: auto; padding: 0; border-color: transparent; border-radius: .7rem; background: transparent; color: var(--solune-text); transition: background-color .16s, box-shadow .16s, color .16s; }
.solune-community-search-toggle:hover, .solune-community-search-toggle:focus-visible, .solune-community-search-control-open .solune-community-search-toggle { background: var(--solune-primary-soft); color: var(--solune-primary); }
.solune-community-search-control-open .solune-community-search-toggle { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--solune-primary) 28%, transparent); }
/* 그림자는 아래로만 떨어져야 한다. `0 4px 12px` 은 흐림 12 에서 아래로 민
   4 를 뺀 8px 만큼 위로도 번지는데, 독은 헤더 바로 밑에 붙으므로 그 번짐이
   검색바 위에 옅은 띠로 남는다. 커뮤니티에서는 헤더의 `isolation: isolate`
   가 우연히 그것을 가려 왔고 쇼핑몰 헤더에는 그것이 없어 그대로 보였다 —
   가려지는 자리에 기대지 않고 번짐 자체를 없앤다. 퍼짐 -4 로 상자를 줄이고
   8px 내리면 그림자 위끝이 독 위끝과 정확히 맞는다(8 + 4 - 12 = 0).
   아래로 닿는 깊이는 전과 같은 16px 이다. */
.solune-community-search-dock { position: absolute; z-index: 70; top: 100%; right: 0; left: 0; display: none; border-bottom: 1px solid var(--solune-border); background: var(--solune-surface); box-shadow: 0 8px 12px -4px color-mix(in srgb, var(--solune-text) 7%, transparent); animation: solune-search-slide-down .16s ease-out both; }
.solune-community-search-dock-open { display: block; }
[data-solune-header].solune-search-active .solune-community-header { border-bottom: 0; box-shadow: none; }
.solune-community-search-dock > .solune-shell { padding-block: 1.75rem 2rem; }
@keyframes solune-search-slide-down { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } }

/* ━━━━ community-search.css ━━━━
   (옛 파일 · 원래 순서 313 · 원래 조건: 모든 화면 · head.sub.php) */

/* 사이트 검색줄

   community-header.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, 로더가 원래 순서대로 이어서 실으면 어느 선언이 이기는지가
   달라지지 않는다. */

/* 시안의 검색줄은 알약이 아니라 사각에 가까운 입력 한 줄이다.
   틴트 바닥·둥근 모서리·파란 아이콘 배지·굵은 버튼이 겹쳐 있으면
   검색창 자체보다 장식이 먼저 읽힌다. */
.solune-community-search-panel { min-height: 0; gap: normal; border-color: var(--solune-border); border-radius: .5rem; background: var(--solune-surface); box-shadow: var(--solune-shadow-sm); padding: 0 .75rem; transition: border-color .16s, box-shadow .16s; }
/* 포커스가 세 겹으로 그려지고 있었다. 패널의 파란 테두리, 그 바깥의 3px
   흐린 후광, 그리고 일반 폼 규칙(input:focus)이 입력에 따로 씌우는 3px 링.
   ui-ux-pro-max 의 Focus Appearance 는 "2 CSS px 둘레 + 3:1 상태 대비"
   한 겹이면 충분하고, 흐린 저대비 box-shadow 는 쓰지 말라고 한다.
   테두리 1px + 링 1px 으로 또렷한 2px 선 하나만 남긴다. */
.solune-community-search-panel:focus-within { border-color: var(--solune-primary); box-shadow: 0 0 0 1px var(--solune-primary); }
/* 패널이 이미 상태를 보이므로 안쪽 입력의 기본 링은 끈다. */
body.solune-page .solune-community-search-panel input[name="stx"]:focus,
body.solune-page .solune-community-search-panel input[name="stx"]:focus-visible { border-color: transparent; box-shadow: none; outline: 0; }
.solune-community-search-panel > .fa-search { display: inline-block; width: auto; height: auto; flex: 0 0 auto; border-radius: 0; background: none; color: color-mix(in oklab, var(--color-base-content) 45%, transparent); padding-inline: .5rem; font-size: 1rem; }
.solune-community-search-panel input[name="stx"] { min-width: 0; height: auto; flex: 1 1 auto; border: 0; background: transparent; color: var(--solune-text); padding: .75rem .5rem; font-size: .875rem; font-weight: 400; line-height: 1.4; outline: 0; }
.solune-community-search-panel input[name="stx"]::placeholder { color: var(--solune-muted); font-weight: 400; opacity: 1; }
.solune-community-search-panel button[type="submit"] { min-width: 0; min-height: 2rem; height: 2rem; border: 0; border-radius: .5rem; background: var(--solune-primary); color: var(--solune-primary-ink); padding-inline: .75rem; font-size: .75rem; font-weight: 600; box-shadow: none; transition: background-color .16s; }
.solune-community-search-panel button[type="submit"]:hover, .solune-community-search-panel button[type="submit"]:focus-visible { background: var(--solune-primary-hover); }
.solune-community-search-panel button[type="submit"]:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: 2px; }
.solune-community-search-popular { display: flex; align-items: baseline; flex-wrap: wrap; gap: .75rem; margin-top: 1.25rem; }
.solune-community-search-popular h2 { flex: 0 0 auto; margin: 0; color: var(--solune-text); font-size: .75rem; font-weight: 700; letter-spacing: -.01em; line-height: 1.5; }
.solune-community-search-keyword-list { display: flex; min-width: 0; flex: 1 1 auto; flex-wrap: wrap; gap: .5rem; margin: 0; padding: 0; list-style: none; }
.solune-community-search-keyword { min-height: 1.75rem; border-color: var(--solune-border); background: transparent; color: var(--solune-muted); padding: .25rem .75rem; font-size: .75rem; font-weight: 500; line-height: 1.4; text-decoration: none; transition: border-color .16s ease, background-color .16s ease, color .16s ease; }
.solune-community-search-keyword:hover, .solune-community-search-keyword:focus-visible { border-color: var(--solune-primary); background: var(--solune-primary-soft); color: var(--solune-primary); }
.solune-community-search-popular-empty { margin: 0; color: var(--solune-muted); font-size: .75rem; }

@media (max-width: 1120px) {
    .solune-community-mainbar { gap: .5rem; }
    .solune-community-mega { display: none; }
    .solune-community-drawer.drawer { order: -1; }
    .solune-community-drawer-toggle-mobile { display: inline-flex; }
    .solune-community-drawer-toggle-desktop { display: none; }
    .solune-community-brand { margin-right: auto; }
}

@media (max-width: 639px) {
    .solune-login-msg { overflow: hidden; padding-inline: .75rem; font-size: .6875rem; text-overflow: ellipsis; white-space: nowrap; }
    .solune-community-service-switch-inner { min-height: 2.5rem; gap: .25rem; overflow: hidden; }
    .solune-community-service-links, .solune-community-member-menu { min-height: 2.5rem; font-size: .6875rem; }
    .solune-community-service-links { flex: 0 0 auto; }
    .solune-community-service-link { padding: .5rem .55rem; font-size: .75rem; }
        .solune-community-member-menu { min-width: 0; flex: 1 1 auto; justify-content: flex-end; gap: .25rem; }
    .solune-community-member-menu :is(a, button) { min-width: auto; min-height: 2.5rem; padding-inline: .2rem; }
    .solune-community-member-menu button { width: 2rem; flex: 0 0 2rem; padding-inline: 0; }
    .solune-community-mainbar { flex-wrap: nowrap; gap: .35rem; }
    .solune-community-search-dock > .solune-shell { padding-block: 1.25rem 1.5rem; }
    .solune-community-search-popular { align-items: flex-start; gap: .5rem; margin-top: 1rem; }
    .solune-community-search-popular h2 { width: 100%; }
}

.solune-sidebar .solune-sidebar-widget { position: relative; width: 100%; min-width: 0; max-width: 100%; border: 1px solid var(--solune-border); border-radius: 1rem; background: var(--solune-surface); box-shadow: var(--solune-shadow-sm); }
.solune-sidebar .solune-sidebar-widget-head { display: flex; align-items: flex-start; justify-content: space-between; gap: .75rem; padding: 1.25rem 1.25rem .75rem; }
.solune-sidebar .solune-sidebar-widget-head > div { min-width: 0; }
.solune-sidebar .solune-sidebar-widget-head h2 { margin: 0; padding: 0; color: var(--solune-text); font-size: .95rem; font-weight: 800; letter-spacing: -.02em; line-height: 1.4; }

/* ━━━━ community-sidebar.css ━━━━
   (옛 파일 · 원래 순서 314 · 원래 조건: 모든 화면 · head.sub.php) */

/* 사이드바 위젯 — 인기검색어 · 최근 댓글 · 접속자집계

   community-header.css 가 800줄을 넘겨 갈라 놓은 것이다. 규칙을 옮기지 않고 자르기만
   했으므로, 로더가 원래 순서대로 이어서 실으면 어느 선언이 이기는지가
   달라지지 않는다. */

/* 시안은 테두리 없는 텍스트 링크다. 다만 시안 그대로는 높이가 18px 라
   WCAG 2.2 AA 의 24 CSS px 최소 타깃에 못 미쳐, 모양만 따르고
   세로 여백으로 타깃 크기는 지킨다. */
.solune-sidebar .solune-sidebar-head-link { display: inline-flex; min-width: 0; min-height: 1.75rem; flex: none; align-items: center; justify-content: center; gap: .3rem; border-radius: .5rem; color: color-mix(in oklab, var(--color-base-content) 50%, transparent); font-size: .7rem; font-weight: 600; transition: color .2s ease; }
.solune-sidebar .solune-sidebar-head-link:hover, .solune-sidebar .solune-sidebar-head-link:focus-visible { background: transparent; color: var(--solune-primary); }
.solune-sidebar .solune-sidebar-head-link-text { padding-inline: 0; }
body.solune-page .solune-sidebar .solune-popular-search-link .fa { color: inherit; font-size: .7rem; }
/* 시안은 상태 표시를 알약이 아니라 점 하나 + 회색 글씨로 둔다.
   위젯 제목 옆에서 배지가 파랗게 뜨면 정작 수치보다 먼저 눈에 걸린다. */
.solune-sidebar .solune-sidebar-status { display: inline-flex; min-height: 1.75rem; flex: none; align-items: center; gap: .4rem; border-radius: 0; background: none; color: color-mix(in oklab, var(--color-base-content) 50%, transparent); padding-inline: 0; font-size: .66rem; font-weight: 700; white-space: nowrap; }
.solune-sidebar .solune-sidebar-status i { width: .45rem; height: .45rem; border-radius: 50%; background: #16A34A; box-shadow: 0 0 0 3px color-mix(in oklab, #16A34A 20%, transparent); }
.solune-sidebar .solune-popular-widget ul { display: grid; width: 100%; min-width: 0; gap: 0; margin: 0; padding: .25rem 1.25rem 1.25rem; list-style: none; }
.solune-sidebar .solune-popular-widget li { min-width: 0; border-top: 1px solid var(--solune-border); color: var(--solune-text-soft); font-size: .8125rem; }
.solune-sidebar .solune-popular-widget li:first-child { border-top: 0; }
.solune-sidebar .solune-popular-widget a { display: grid; grid-template-columns: 1.5rem minmax(0, 1fr) auto; gap: .7rem; align-items: center; overflow: hidden; border-radius: 0; padding: .65rem 0; color: inherit; font-size: .82rem; font-weight: 600; line-height: 1.4; transition: color .2s ease; }
.solune-sidebar .solune-popular-widget a:hover, .solune-sidebar .solune-popular-widget a:focus-visible { background: transparent; color: var(--solune-primary); }
.solune-sidebar .solune-popular-rank { color: var(--solune-primary); font-size: .8rem; font-variant-numeric: tabular-nums; font-weight: 800; }
.solune-sidebar .solune-popular-word { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.solune-sidebar .solune-popular-widget a > .fa { color: var(--solune-muted); font-size: .75rem; }
.solune-sidebar .solune-popular-empty { padding: .75rem .25rem 0; border-top: 0; color: var(--solune-muted); font-size: .75rem; }

/* 최근 댓글 위젯. 인기검색어 위젯과 같은 목록 리듬을 쓰되, 본문 2줄 + 메타 1줄 구조. */
.solune-sidebar .solune-comment-widget ul { display: grid; width: 100%; min-width: 0; gap: 0; margin: 0; padding: .25rem 1.25rem 1.25rem; list-style: none; }
.solune-sidebar .solune-comment-widget li { min-width: 0; border-top: 1px solid var(--solune-border); }
.solune-sidebar .solune-comment-widget li:first-child { border-top: 0; }
.solune-sidebar .solune-comment-link { display: grid; min-width: 0; gap: .3rem; overflow: hidden; border-radius: 0; padding: .7rem 0; color: inherit; }
.solune-sidebar .solune-comment-link:hover .solune-comment-excerpt,
.solune-sidebar .solune-comment-link:focus-visible .solune-comment-excerpt { color: var(--solune-primary); }
.solune-sidebar .solune-comment-link:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: 2px; }
.solune-sidebar .solune-comment-excerpt {
    display: -webkit-box;
    overflow: hidden;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    color: color-mix(in oklab, var(--color-base-content) 82%, transparent);
    font-size: .8rem;
    line-height: 1.45;
    word-break: keep-all;
    transition: color .2s ease;
}
.solune-sidebar .solune-comment-meta { display: inline-flex; min-width: 0; align-items: center; gap: .45rem; color: color-mix(in oklab, var(--color-base-content) 45%, transparent); font-size: .66rem; }
.solune-sidebar .solune-comment-board { flex: none; border: 1px solid var(--solune-border); border-radius: 999px; background: var(--solune-surface-soft); padding: .1rem .4rem; color: inherit; font-weight: 700; white-space: nowrap; }
.solune-sidebar .solune-comment-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.solune-sidebar .solune-comment-meta time { flex: none; font-variant-numeric: tabular-nums; }
.solune-sidebar .solune-comment-empty { padding: .75rem .25rem 0; border-top: 0; color: var(--solune-muted); font-size: .75rem; }
/* 접속자집계: 오늘을 리드 수치로 세우고 최고 기록 대비 비율을 함께 보여준다.
   숫자 네 개를 같은 크기로 나열하면 무엇을 봐야 하는지가 드러나지 않는다. */
.solune-sidebar .solune-visit-widget .solune-visit-stats { display: grid; gap: .8rem; margin: 0 1.25rem 1.25rem; padding: 0; border: 0; background: none; }
.solune-sidebar .solune-visit-widget .solune-visit-stats dt {
    margin: 0;
    padding: 0;
    border: 0;
    color: var(--solune-muted);
    font-size: .66rem;
    font-weight: 700;
    letter-spacing: .02em;
}
.solune-sidebar .solune-visit-widget .solune-visit-stats dd { margin: 0; padding: 0; border: 0; font-variant-numeric: tabular-nums; }

.solune-sidebar .solune-visit-widget .solune-visit-lead dd { display: flex; flex-wrap: wrap; align-items: baseline; gap: .5rem; margin-top: .15rem; }
.solune-sidebar .solune-visit-widget .solune-visit-figure {
    color: var(--solune-text);
    font-size: 2rem;
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1.05;
}
/* 증감 방향은 화살표와 보조 텍스트로도 전달한다. 색만으로 구분하지 않는다. */
.solune-sidebar .solune-visit-widget .solune-visit-delta {
    display: inline-flex;
    align-items: center;
    gap: .22rem;
    padding: .14rem .45rem;
    border: 1px solid transparent;
    border-radius: 999px;
    font-size: .68rem;
    font-weight: 800;
}
.solune-sidebar .solune-visit-widget .solune-visit-delta .fa { font-size: .6rem; }
.solune-sidebar .solune-visit-widget .solune-visit-delta-down {
    border-color: color-mix(in oklab, var(--color-error) 30%, transparent);
    background: color-mix(in oklab, var(--color-error) 10%, transparent);
    color: var(--color-error);
}
.solune-sidebar .solune-visit-widget .solune-visit-delta-up {
    border-color: color-mix(in oklab, #15803d 30%, transparent);
    background: color-mix(in oklab, #15803d 10%, transparent);
    color: #15803d;
}
html[data-theme="dark"] .solune-sidebar .solune-visit-widget .solune-visit-delta-up { color: #4ade80; }

.solune-sidebar .solune-visit-widget .solune-visit-peak { padding-top: .8rem; border-top: 1px solid var(--solune-border); }
.solune-sidebar .solune-visit-widget .solune-visit-peak dt { float: left; }
.solune-sidebar .solune-visit-widget .solune-visit-peak dd { display: grid; gap: .4rem; }
.solune-sidebar .solune-visit-widget .solune-visit-peak-value { color: var(--solune-text); font-size: .95rem; font-weight: 800; text-align: right; }
.solune-sidebar .solune-visit-widget .solune-visit-bar { display: block; width: 100%; height: .35rem; }
.solune-sidebar .solune-visit-widget .solune-visit-caption { color: var(--solune-muted); font-size: .66rem; }
.solune-sidebar .solune-visit-widget .solune-visit-caption b { color: var(--solune-primary); font-weight: 800; }

.solune-sidebar .solune-visit-widget .solune-visit-cell {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: .5rem;
    padding-top: .55rem;
    border-top: 1px solid var(--solune-border);
}
.solune-sidebar .solune-visit-widget .solune-visit-cell dd { color: var(--solune-text); font-size: .95rem; font-weight: 800; }
.solune-sidebar .solune-visit-widget .btn_admin { position: absolute; top: 1.2rem; right: 1.1rem; display: inline-grid; width: 1.5rem; height: 1.5rem; place-items: center; color: color-mix(in oklab, var(--color-base-content) 50%, transparent); }
.solune-sidebar .solune-visit-widget .btn_admin:hover { color: var(--solune-primary); }
body.solune-page .solune-visit-widget .solune-sidebar-status { margin-right: 2rem; }
.solune-sidebar #popular.solune-sidebar-widget-empty { display: none; }

/* 설문조사. 시안(index-uiux.html)은 다른 사이드바 위젯과 같은 상자를 쓰고
   여백을 상자 한 곳에만 준다. 예전에는 header 에 margin, p·ul·버튼에 각각
   padding 1.25rem 을 따로 붙여 두어 한 곳만 건드려도 줄이 어긋났다.
   결과보기는 알약이 아니라 회색 텍스트 링크이고, 관리 톱니는 떠 있지 않고
   옆에 붙는다. */
body.solune-page .solune-sidebar #poll { position: relative; margin: 0; border: 1px solid var(--solune-border); background: var(--solune-surface); padding: 1.15rem 1.25rem 1.25rem; }
body.solune-page .solune-sidebar #poll header { display: flex; align-items: center; gap: .6rem; margin: 0 0 .8rem; border-bottom: 1px solid var(--solune-border); padding: 0 0 .8rem; }
body.solune-page .solune-sidebar #poll header h2 { float: none; display: block; flex: 1 1 auto; color: var(--solune-text); font-size: .95rem; font-weight: 800; letter-spacing: -.02em; line-height: 1.4; }
body.solune-page .solune-sidebar #poll header .btn_result { display: inline-flex; min-height: 1.75rem; float: none; height: auto; align-items: center; border: 0; border-radius: 0; background: none; color: var(--solune-muted); padding: 0; font-size: .68rem; font-weight: 600; line-height: 1.2; transition: color .2s ease; }
body.solune-page .solune-sidebar #poll header .btn_result:hover, body.solune-page .solune-sidebar #poll header .btn_result:focus-visible { background: none; color: var(--solune-primary); }
body.solune-page .solune-sidebar #poll header .btn_admin { position: static; display: inline-grid; width: 1.75rem; height: 1.75rem; place-items: center; margin: 0; color: var(--solune-muted); }
body.solune-page .solune-sidebar #poll header .btn_admin:hover { color: var(--solune-primary); }
body.solune-page .solune-sidebar #poll .poll_con > p:not(.poll_error) { margin: 0 0 .75rem; padding: 0; color: var(--solune-text); font-size: .82rem; font-weight: 600; line-height: 1.5; }
body.solune-page .solune-sidebar #poll ul { display: grid; gap: .15rem; margin: 0; padding: 0; }
/* 시안의 보기 한 줄은 44px 다. 이 스킨은 19px 라 WCAG 2.2 AA 의 24 CSS px
   최소 타깃에 미달했다. 시안 높이를 그대로 쓰면서 그 문제도 함께 없앤다. */
body.solune-page .solune-sidebar #poll li { padding: 0; color: var(--solune-text-soft); font-size: .8rem; }
body.solune-page .solune-sidebar #poll .chk_box { position: relative; display: block; }
body.solune-page .solune-sidebar #poll .chk_box input[type="radio"] + label { display: flex; min-height: 2.75rem; align-items: center; gap: .6rem; border-radius: .5rem; padding: .5rem .65rem; color: inherit; cursor: pointer; transition: background .18s ease; }
body.solune-page .solune-sidebar #poll .chk_box input[type="radio"] + label:hover { background: var(--solune-surface-soft); }
/* 레거시 스킨 CSS 는 표식을 label 안에 절대배치한다. 줄 높이를 키우면 좌상단에
   남아 세로 가운데를 다시 잡아 줘야 했다. 시안처럼 흐름 안의 원으로 돌린다.
   static 이 아니라 relative 인 이유가 있다 — 안쪽 점이 absolute + inset 이라,
   원이 위치 기준을 갖지 않으면 .chk_box 에 붙어 줄 전체를 덮는 막대가 된다. */
body.solune-page .solune-sidebar #poll .chk_box input[type="radio"] + label span { position: relative; top: auto; left: auto; width: 1.05rem; height: 1.05rem; flex: none; transform: none; border: 2px solid var(--solune-border-strong); border-radius: 50%; background: var(--solune-surface); }
/* 고른 항목은 색만 바꾸면 눈에 띄지 않는다. 시안처럼 옅은 바탕을 함께 깐다. */
body.solune-page .solune-sidebar #poll .chk_box input[type="radio"]:checked + label { background: var(--solune-surface-soft); color: var(--solune-text); font-weight: 700; }
body.solune-page .solune-sidebar #poll .chk_box input[type="radio"]:checked + label span { border-color: var(--solune-primary); }
body.solune-page .solune-sidebar #poll .chk_box input[type="radio"]:checked + label span:before { content: ""; position: absolute; inset: 2px; width: auto; height: auto; margin: 0; border-radius: 50%; background: var(--solune-primary); }
/* 입력이 화면에서 숨겨져 있어 키보드 포커스가 보이지 않는다. 라벨에 링을 돌려준다. */
body.solune-page .solune-sidebar #poll .chk_box input[type="radio"]:focus-visible + label { outline: 2px solid var(--solune-primary); outline-offset: 2px; }
/* 항목을 안 고르고 누르면 예전에는 alert 창이 떴다. 시안은 폼 안에서 알린다. */
body.solune-page .solune-sidebar #poll .poll_con > p.poll_error { margin: .5rem 0 0; color: var(--color-error, #dc2626); font-size: .72rem; font-weight: 600; }
body.solune-page .solune-sidebar #poll_btn { margin-top: .9rem; padding: 0; }
body.solune-page .solune-sidebar #poll_btn .btn_poll { width: 100%; height: 2.75rem; border: 0; border-radius: .5rem; background: var(--solune-primary); color: var(--solune-primary-ink); cursor: pointer; font-size: .8rem; font-weight: 700; line-height: 2.75rem; transition: background .2s ease; }
body.solune-page .solune-sidebar #poll_btn .btn_poll:hover { background: var(--solune-primary-hover); }

.solune-home-empty-summary { display: flex; min-height: 5rem; align-items: center; gap: .75rem; padding: 1rem 1.25rem; color: var(--solune-muted); }
.solune-home-empty-summary-icon { display: inline-grid; width: 2.25rem; height: 2.25rem; flex: none; place-items: center; border-radius: .625rem; background: var(--solune-primary-soft); color: var(--solune-primary); font-size: .875rem; }
.solune-home-empty-summary-copy { min-width: 0; font-size: .8125rem; }
.solune-latest-empty-state { display: flex; min-height: 7rem; align-items: center; justify-content: center; gap: .875rem; padding: 1rem 1.25rem; text-align: left; }
.solune-latest-empty-icon { display: inline-grid; width: 2.75rem; height: 2.75rem; flex: none; place-items: center; border-radius: .75rem; background: var(--solune-primary-soft); color: var(--solune-primary); font-size: 1rem; }
.solune-latest-empty-copy { min-width: 0; }

.solune-top-button { opacity: 0; pointer-events: none; transform: translateY(.5rem); }
.solune-top-button.is-visible { opacity: 1 !important; pointer-events: auto; transform: translateY(0); }

/* Tailwind's font-black is intentionally softened for the editorial card hierarchy. */
body.solune-page .solune-reference-panel .font-black { font-weight: 800; }
body.solune-page .solune-reference-panel h1.font-black, body.solune-page .solune-reference-panel h2.font-black { line-height: 1.6; }
.solune-reference-panel .solune-reference-latest > .solune-latest > header { display: none; }
.solune-reference-panel .solune-reference-latest > .solune-latest { padding: .35rem 1.25rem 1rem; }
.solune-reference-panel .solune-latest-list { border-top: 0; }
/* daisyUI .menu 를 걷어낸 자리. .menu 가 ul·li·항목의 display 와 gap 을
   대신 잡아 주고 있었지만, 그 대가로 li 자식 전체에 hover 배경과 pointer
   커서를 얹어 글쓴이·날짜까지 누를 수 있는 것처럼 보이게 했다. 같은 누수를
   drawer 에서도 겪었다. 필요한 배치만 직접 적는다. */
.solune-latest-list { display: flex; width: 100%; flex-direction: column; gap: 0; margin: 0; padding: 0; list-style: none; }
.solune-latest-list > li { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 1rem; margin: 0; padding: 0; list-style: none; }
.solune-latest-subject { display: flex; min-width: 0; align-items: center; gap: .5rem; }
.solune-latest-subject .truncate { min-width: 0; }
.solune-latest-meta { display: flex; align-items: center; gap: .5rem; }
/* 사이드뷰를 켜면 이름이 아이콘을 품은 inline-flex 가 된다. 그것을 감싼
   span 이 인라인이라 글자 baseline 아래로 여백이 생기고, 그만큼 이름이
   날짜보다 위로 밀렸다. span 도 flex 로 두어 높이를 내용에 맞춘다.
   메타 글자가 11px 로 작아 아이콘도 1rem 으로 줄인다. */
.solune-latest-meta > span { display: inline-flex; min-width: 0; align-items: center; }
.solune-latest-meta .profile_img { width: 1rem; height: 1rem; margin-right: .3rem; }
.solune-reference-panel .solune-latest-list li { grid-template-columns: minmax(0, 1fr) auto; min-height: 0; padding: 0; }
/* 목록에서 눈이 가야 하는 것은 제목이다. 스킨 마크업의
   text-base-content/75 는 옅어 메타와 무게가 비슷했다. 홈 패널 안에서만
   실색으로 올린다 — 패널 밖(게시판 그룹 · 쇼핑몰 공지)은 그대로 둔다. */
.solune-reference-panel .solune-latest-subject { padding-block: .75rem; color: var(--solune-text); font-weight: 400; }
.solune-reference-panel .solune-latest-meta { align-items: center; gap: .5rem; padding-block: .5rem; }
.solune-board-grid { align-items: start; }

/* 갤러리 패널: 썸네일 + 제목. 텍스트 목록 패널과 같은 여백 리듬을 유지한다. */
.solune-reference-panel .solune-reference-latest > .solune-latest-gallery { padding: 1rem 1.25rem 1.25rem; }
.solune-latest-gallery .solune-gallery-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.1rem .875rem; }
/* 전폭 패널에서는 폭이 두 배가 되므로 4단으로 넓힌다. (Tailwind md = 48rem) */
@media (min-width: 48rem) {
    .solune-latest-gallery .solune-gallery-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
.solune-latest-gallery .solune-gallery-item { min-width: 0; }
.solune-latest-gallery .solune-gallery-link { display: grid; min-width: 0; gap: .5rem; }
.solune-latest-gallery .solune-gallery-thumb {
    display: block;
    overflow: hidden;
    aspect-ratio: 4 / 3;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--color-base-200);
}
.solune-latest-gallery .solune-gallery-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform .45s cubic-bezier(.16, 1, .3, 1); }
.solune-latest-gallery .solune-gallery-link:hover .solune-gallery-thumb img { transform: scale(1.04); }
.solune-latest-gallery .solune-gallery-subject {
    display: -webkit-box;
    overflow: hidden;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    color: var(--solune-text-soft);
    font-size: .8125rem;
    font-weight: 700;
    line-height: 1.45;
    word-break: keep-all;
}
.solune-latest-gallery .solune-gallery-link:hover .solune-gallery-subject { color: var(--solune-primary); }
.solune-latest-gallery .solune-gallery-meta { display: flex; gap: .65rem; margin-top: .3rem; color: var(--solune-muted); font-size: .7rem; }

/* The stock board/member markup remains untouched; DaisyUI tokens flow through this visual bridge. */
.tbl_head01 table, .tbl_frm01 table { border-top-color: var(--solune-text); }
.tbl_head01 th, .tbl_frm01 th { background: var(--color-base-200); }
.btn_submit, .btn_confirm .btn_submit { border-color: var(--solune-primary); background: var(--solune-primary); }

@media (max-width: 1023px) {
    /* 시안의 48/32 여백은 1280 기준이다. 좁아지면 본문이 먼저 눌리므로
       여기서부터는 여백을 줄여 본문 폭을 지킨다. */
    #container_wr { grid-template-columns: minmax(0, 1fr) 16rem; gap: 1.5rem; padding: 2rem 1.5rem 3rem; }
    .solune-shell { width: min(100%, 80rem); }
}

@media (max-width: 639px) {
    #container_wr { display: block; padding: 1.25rem 1rem 3rem; }
    #container_wr > .solune-sidebar { margin-top: 1.5rem; }
    .solune-shell { width: 100%; }

.solune-reference-panel .solune-latest-list li { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: .5rem; }
    .solune-reference-panel .solune-latest-meta { justify-content: flex-end; margin-top: 0; }
}

/* --- 게시판 머리줄 -------------------------------------------------------
   시안(비회원용 게시글 보기)은 게시판 이름 26px 옆에 목록·글쓰기를 나란히
   두고, 그 아래를 옅은 실선 하나로 끊는다. 색은 사이트 팔레트를 쓴다. */
body.solune-page .solune-page-header {
    /* base-300 은 채도 0 의 회색이라 이 줄만 다른 계열로 보였다. */
    border-bottom: 1px solid var(--solune-border);
    padding-bottom: 1.125rem;
}
body.solune-page .solune-page-header-title {
    margin: 0;
    color: var(--solune-text);
    font-size: 1.625rem;
    font-weight: 700;
    letter-spacing: -.03em;
    line-height: 1.3;
}
body.solune-page .solune-page-header-actions { display: flex; flex: none; align-items: center; gap: .5rem; }
body.solune-page .solune-page-header-action {
    display: inline-flex;
    height: 2.375rem;
    align-items: center;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    padding-inline: 1rem;
    font-size: .84375rem;
    font-weight: 600;
    white-space: nowrap;
}
body.solune-page .solune-page-header-action:hover,
body.solune-page .solune-page-header-action:focus-visible {
    border-color: var(--solune-border-strong);
    color: var(--solune-text);
}
body.solune-page .solune-page-header-action:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: 2px; }
body.solune-page .solune-page-header-write {
    border-color: var(--solune-primary);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    padding-inline: 1.125rem;
}
body.solune-page .solune-page-header-write:hover,
body.solune-page .solune-page-header-write:focus-visible {
    border-color: var(--solune-primary-hover);
    background: var(--solune-primary-hover);
    color: var(--solune-primary-ink);
}

@media (max-width: 40rem) {
    body.solune-page .solune-page-header-title { font-size: 1.375rem; }
}

/* daisyUI .breadcrumbs 는 위아래로 8px 씩 패딩을 준다. 상자는 오른쪽 사이드
   카드와 같은 높이에서 시작하지만 글자만 8px 내려가 어긋나 보였다. 시안은
   패딩 없이 글자가 카드 윗변과 같은 줄에서 시작한다. 아래쪽 여백은 mb-3 가
   맡고 있으므로 위쪽만 없앤다. */
body.solune-page .breadcrumbs { padding-top: 0; }

/* --- 홈 · 자주 묻는 질문 -------------------------------------------------
   시안(gnuboard5-solune)의 FAQ 묶음. 질문 줄은 Q 배지 + 제목 + 여닫이 표시,
   항목 사이는 점선이다. 여닫이는 <details> 라 자바스크립트가 없어도 열린다. */
/* 이 패널은 옆 카드가 남긴 빈칸을 메우는 자리다. 그래서 높이를 그 줄에
   맞춘다. 홈 격자는 align-items: start 라 카드마다 제 높이를 갖는데,
   여기서만 stretch 로 되돌린다.

   펼침도 높이를 건드리면 안 된다. 목록이 남는 공간만큼만 차지하게 두고
   넘치면 목록 안에서 스크롤시킨다. min-height: 0 이 없으면 flex 항목이
   내용만큼 부풀어 overflow 가 걸리지 않는다. */
body.solune-page .solune-faq-list {
    display: flex;
    min-height: 0;
    flex-direction: column;
    padding: 0 1.25rem;
    overscroll-behavior: contain;
}
/* 두 칸으로 갈라지는 폭에서만 높이를 묶는다. 한 칸일 때는 옆에 맞출 카드가
   없으니 자연스러운 높이가 낫다.
   height: 0 + flex-grow 가 요점이다. align-self: stretch 만으로는 모자란다 —
   격자 행은 가장 큰 칸에 맞춰 늘어나므로, 항목을 다 펼치면 FAQ 자신이 가장
   커져 행까지 끌고 올라간다. 목록의 본디 높이를 0 으로 두면 카드 높이 계산에
   끼어들지 못하고, 남는 자리만 받아 그 안에서 스크롤한다. */
@media (min-width: 48rem) {
    body.solune-page .solune-faq-panel { align-self: stretch; }
    body.solune-page .solune-faq-list { height: 0; flex: 1 1 0; overflow-y: auto; }
}
body.solune-page .solune-faq-list::-webkit-scrollbar { width: .375rem; }
body.solune-page .solune-faq-list::-webkit-scrollbar-thumb { border-radius: 999px; background: var(--solune-border-strong); }
body.solune-page .solune-faq-list::-webkit-scrollbar-track { background: transparent; }
body.solune-page .solune-faq-item {
    border-bottom: 1px dashed var(--solune-border);
    border-radius: 0;
    background: none;
}
body.solune-page .solune-faq-item:last-child { border-bottom: 0; }
body.solune-page .solune-faq-q {
    display: flex;
    min-height: 0;
    align-items: center;
    gap: .625rem;
    padding: .8125rem 0;
    color: var(--solune-text);
    cursor: pointer;
    font-size: .84375rem;
    font-weight: 600;
    letter-spacing: -.015em;
    list-style: none;
}
body.solune-page .solune-faq-q::-webkit-details-marker { display: none; }
body.solune-page .solune-faq-badge {
    flex: none;
    border-radius: .3125rem;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    padding: .1875rem .4375rem;
    font-size: .6875rem;
    font-weight: 600;
}
body.solune-page .solune-faq-subject { min-width: 0; flex: 1; }
/* 여닫이 화살표. 열림·닫힘을 같은 자리에서 뒤집는다. */
body.solune-page .solune-faq-q::after {
    content: "\f107"; /* fa-angle-down */
    flex: none;
    color: var(--solune-muted);
    font: normal normal normal 14px/1 FontAwesome;
    transition: transform .16s ease, color .16s ease;
}
body.solune-page .solune-faq-item[open] > .solune-faq-q::after { color: var(--solune-primary); transform: rotate(180deg); }
body.solune-page .solune-faq-item:hover > .solune-faq-q { color: var(--solune-primary); }
body.solune-page .solune-faq-q:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: -2px; }
body.solune-page .solune-faq-a { padding: 0 0 .875rem 2rem; }
body.solune-page .solune-faq-a p { margin: 0; color: var(--solune-text-soft); font-size: .78125rem; line-height: 1.7; letter-spacing: -.01em; }

/* 시안의 FAQ 는 즉시 열리고 닫힌다. daisyUI collapse 는 grid-template-rows 를
   0.2s 로 굴리고 내용에도 여러 전환을 걸어 두는데, 한 항목이 접히면서 다른
   항목이 펼쳐지는 배타 아코디언에서는 그 사이가 어수선하게 보인다. 전부 끈다.
   화살표 회전도 같이 끊어 한 박자에 바뀌게 한다. */
body.solune-page .solune-faq-item,
body.solune-page .solune-faq-q,
body.solune-page .solune-faq-q::after,
body.solune-page .solune-faq-a {
    transition: none;
    animation: none;
}

/* 스크롤이 생기지 않게 한다.
   카드 높이는 옆 카드에 묶여 있고(309px) 목록에 쓸 수 있는 자리는 246px 다.
   닫힌 상태로 이미 246 을 채우고 있어 답이 두 줄만 되어도 12px 넘쳤다.

   두 가지로 푼다. 질문 줄의 위아래 패딩을 13px 에서 10px 로 줄여 네 줄에서
   24px 를 벌고(줄 높이는 44px 로 남아 터치 목표를 지킨다), 답은 두 줄로
   고정한다. 줄 수를 고정해야 '내용이 길어도' 라는 조건이 성립한다 — 글자
   수가 늘어도 차지하는 높이가 변하지 않는다.
   전문은 더보기(faq.php)에서 본다. */
body.solune-page .solune-faq-q { padding: .625rem 0; }
body.solune-page .solune-faq-a { padding-bottom: .625rem; }
body.solune-page .solune-faq-a p {
    display: -webkit-box;
    overflow: hidden;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}
/* 위 계산이 어긋나더라도 스크롤 막대가 나타나지는 않게 한다. */
body.solune-page .solune-faq-list { overflow-y: hidden; }

/* 스크롤로 헤더가 붙을 때 크기를 줄인다(온담 시안).
   시안은 바 76 -> 56px, 로고 27 -> 22px 를 .2s ease 로 옮긴다. 우리 바는
   64px, 로고 32px 이라 같은 비율(-25% / -19%)로 48px, 26px 로 간다.
   문턱은 시안과 같은 70px 이고 is-condensed 는 theme.js 가 붙인다. */
.solune-community-mainbar { transition: min-height .2s ease; }
/* 헤더 브랜드의 로고만 줄인다. 드로어 패널에도 같은 클래스의 로고가 있고
   그 패널은 헤더 안에 들어 있어, 범위를 좁히지 않으면 함께 줄어든다. */
.solune-community-brand .solune-community-logo { transition: height .2s ease; }
.solune-community-header.is-condensed .solune-community-mainbar { min-height: 3rem; }
.solune-community-header.is-condensed .solune-community-brand .solune-community-logo { height: 1.625rem; }

/* 모션을 줄여 달라고 한 사람에게는 크기만 바뀌고 움직이지는 않게 한다. */
@media (prefers-reduced-motion: reduce) {
    .solune-community-mainbar,
    .solune-community-brand .solune-community-logo { transition: none; }
}

/* 시안의 헤더는 position: fixed 라 줄어들어도 본문이 밀리지 않는다. 우리 헤더는
   sticky 여서 흐름 안에 자리를 차지하고, 줄어드는 순간 문서가 그만큼 짧아져
   본문이 위로 튄다(측정: 16px).
   줄어든 만큼을 헤더 아래 여백으로 되돌려 흐름 높이를 그대로 둔다. 그 여백은
   이미 지나온 자리라 화면에는 보이지 않고, 문서 높이가 변하지 않아 튀지도
   않는다. */
.solune-community-header-sticky { transition: margin-bottom .2s ease; }
.solune-community-header-sticky:has(.solune-community-header.is-condensed) { margin-bottom: 1rem; }
@media (prefers-reduced-motion: reduce) {
    .solune-community-header-sticky { transition: none; }
}

/* 사이드바 로그인 상자의 자동로그인(skin/outlogin/basic/outlogin.skin.1.php).
   글자 전체가 누르는 자리(label)라 체크박스만이 아니라 줄 전체가 눌린다.
   daisyUI 체크박스(기본 24px)는 이 좁은 상자에서 커 보여 18px 로 줄인다 —
   누르는 자리는 줄 높이 28px 로 WCAG 2.2 AA(24px)를 넘는다. */
#ol_before .solune-ol-auto {
    display: inline-flex;
    min-height: 1.75rem;
    align-items: center;
    gap: .5rem;
    color: var(--solune-text-soft);
    font-size: .75rem;
    cursor: pointer;
}
#ol_before .solune-ol-auto .checkbox { width: 1.125rem; height: 1.125rem; flex: none; }
/* 한 줄: 왼쪽 자동로그인 · 오른쪽 회원가입 · 아이디·비밀번호 찾기(127.0.0.9 시안과 같은 짜임).
   두 쪽 글자를 12px 로 맞춰 사이드 폭(안쪽 약 248px)에 한 줄로 든다. 폭이 모자라면
   오른쪽 묶음이 다음 줄로 넘어간다. 링크 줄 높이도 28px 로 맞춰 누르는 자리를 지킨다. */
#ol_before .solune-ol-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: .25rem .75rem;
    margin-top: .25rem;
}
#ol_before .solune-ol-links { font-size: .75rem; }
#ol_before .solune-ol-links a { display: inline-flex; min-height: 1.75rem; align-items: center; }

/* ━━━━ skin/member/basic/login.css ━━━━
   (옛 파일 · 원래 순서 350 · 원래 조건: 로그인(member 스킨 login.skin.php)) */

/* Solune login layout. Loaded after the shared member, daisyUI and community layers. */
body.solune-page:has(#mb_login.solune-login-page) {
    background: #eef4ff;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page {
    --solune-login-primary: #1257d6;
    --solune-login-primary-hover: #0b46b7;
    --solune-login-primary-soft: #e6efff;
    --solune-login-page: #eef4ff;
    --solune-login-surface: #ffffff;
    --solune-login-text: #1b3157;
    --solune-login-text-soft: #5f6f8a;
    --solune-login-muted: #78869c;
    --solune-login-border: #cbd6e6;
    --solune-login-input: #ffffff;
    --solune-login-shadow: 0 1.5rem 3.5rem rgba(47, 79, 137, .14);
    width: 100% !important;
    max-width: none !important;
    min-height: 100vh;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    color: var(--solune-login-text);
    text-align: center;
}

html[data-solune-theme="dark"] body.solune-page:has(#mb_login.solune-login-page) {
    background: #101b31;
}

html[data-solune-theme="dark"] body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page {
    --solune-login-primary: #9ab8ff;
    --solune-login-primary-hover: #bad0ff;
    --solune-login-primary-soft: #263b67;
    --solune-login-page: #101b31;
    --solune-login-surface: #182640;
    --solune-login-text: #eef4ff;
    --solune-login-text-soft: #c7d3e8;
    --solune-login-muted: #9eacc2;
    --solune-login-border: #405575;
    --solune-login-input: #202f4a;
    --solune-login-shadow: 0 1.5rem 3.5rem rgba(0, 0, 0, .28);
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-shell {
    width: min(100%, 35.5rem);
    min-height: 100vh;
    margin: 0 auto;
    padding: 5.5rem 1rem 5.5rem;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-brand {
    display: inline-flex;
    width: 3.5rem;
    height: 3.5rem;
    align-items: center;
    justify-content: center;
    margin: 0 0 2.55rem;
    color: var(--solune-login-primary);
    font-size: 2.7rem;
    line-height: 1;
    text-decoration: none;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-brand:hover,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-brand:focus-visible {
    color: var(--solune-login-primary-hover);
    outline: 0;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-mark {
    display: block;
    width: auto;
    height: auto;
    color: inherit;
    font-size: inherit;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-card {
    width: 100%;
    margin: 0;
    padding: 0 !important;
    overflow: hidden;
    border: 1px solid rgba(176, 193, 218, .55) !important;
    border-radius: 1.05rem;
    background: var(--solune-login-surface);
    box-shadow: var(--solune-login-shadow);
    text-align: left;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-card .card-body {
    display: block !important;
    padding: 3.55rem 2.5rem 1.95rem !important;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #solune-login-title {
    position: static !important;
    display: block !important;
    width: auto;
    height: auto;
    /* 아래 입력 칸과의 간격. 한때 제목 아래 설명 줄("아이디와 비밀번호를 입력하고
       …")이 이 간격을 맡았는데, 지시를 받아 그 줄을 걷어 제목이 대신 갖는다. */
    margin: 0 0 2.35rem;
    color: var(--solune-login-text);
    font-size: clamp(1.85rem, 4vw, 2.08rem);
    font-weight: 700;
    letter-spacing: -.045em;
    line-height: 1.3;
    /* 제목은 "로그인" 한 마디다. 한때 "Solune 커뮤니티에 오신 것을 환영합니다"
       두 줄을 가운데에 두었는데, 지시를 받아 짧게 줄이고 입력 칸과 같은 왼쪽 선에 맞춘다.
       그 아래 설명 줄도 지시를 받아 걷었다. */
    text-align: left;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #flogin,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #login_fs {
    display: block;
    margin: 0;
    padding: 0;
    border: 0;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-fieldset {
    min-width: 0;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #login_fs legend {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-field {
    margin: 0 0 2.4rem;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-label {
    display: block;
    min-height: 0;
    margin: 0 0 .6rem;
    padding: 0;
    color: var(--solune-login-text);
    font-size: .9rem;
    font-weight: 700;
    line-height: 1.4;
    text-align: left;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-label .label-text {
    color: inherit;
    font: inherit;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-control {
    display: flex;
    width: 100%;
    min-height: 3.75rem;
    align-items: center;
    gap: 0;
    padding: 0 !important;
    border: 1px solid var(--solune-login-border) !important;
    border-radius: .7rem;
    background: var(--solune-login-input) !important;
    box-shadow: none !important;
    transition: border-color .16s, box-shadow .16s;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-control:focus-within {
    border-color: var(--solune-login-primary) !important;
    box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--solune-login-primary) 17%, transparent) !important;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-control-icon {
    width: 3.35rem;
    flex: 0 0 3.35rem;
    color: var(--solune-login-muted);
    font-size: 1.05rem;
    text-align: center;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #login_fs .solune-login-control .solune-login-input {
    min-width: 0;
    width: 100%;
    /* 바깥 상자 안쪽 높이(3.75rem - 테두리 2px)에 딱 맞춘다. 한때 3.65rem(58.4px)이라
       안쪽(58px)보다 0.4px 커서 아래 테두리를 살짝 덮었다. 평소에는 칸이 투명해 안 보이다가,
       자동 완성으로 칸이 불투명해지면 테두리가 가늘게 끊겨 보였다. */
    min-height: calc(3.75rem - 2px);
    margin: 0 !important;
    padding: .8rem .35rem .8rem 0 !important;
    border: 0 !important;
    outline: 0;
    background: transparent !important;
    box-shadow: none !important;
    color: var(--solune-login-text);
    font: inherit;
    font-size: .95rem;
    flex: 1 1 auto;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-input::placeholder {
    color: var(--solune-login-muted);
    opacity: 1;
}

/* 브라우저 자동 완성(autofill).
   크롬은 저장해 둔 아이디·비밀번호를 채우면 그 <input> 에 연한 파란 바탕(#e8f0fe)을
   강제로 칠한다. 이 화면은 테두리·바탕이 바깥 상자(.solune-login-control)에 있고 <input> 은
   그 안에 투명하게 앉아 있어, 파란색이 칸 안에 따로 떠 있는 사각형으로 보였다.

   그 바탕은 background 로는 덮이지 않는다. 칸과 같은 색의 안쪽 그림자로 덮고,
   "자동으로 채워진 칸" 이라는 신호는 바깥 상자 전체가 옆은 강조색으로 물드는
   것으로 옮긴다 — 신호를 아예 지우면 저장된 값이 들어갔다는 걸 알아채기 어렵다.
   :autofill 은 새 이름, :-webkit-autofill 은 옛 이름이다. :is() 는 모르는 이름이 있어도
   나머지를 살리므로 둘을 함께 적는다.

   기존 입력 규칙이 box-shadow: none !important 라 같은 선택자에 상태를 더해
   특정도를 올리고 !important 를 맞붙인다. */
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-control:has(.solune-login-input:is(:autofill, :-webkit-autofill)) {
    border-color: color-mix(in srgb, var(--solune-login-primary) 40%, var(--solune-login-border)) !important;
    background: var(--solune-login-primary-soft) !important;
}
/* 포커스 테두리는 자동 완성 색보다 앞선다. 위 선택자가 :has() 로 더 세서 따로 적는다. */
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-control:has(.solune-login-input:is(:autofill, :-webkit-autofill)):focus-within {
    border-color: var(--solune-login-primary) !important;
}
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #login_fs .solune-login-control .solune-login-input:is(:autofill, :-webkit-autofill) {
    -webkit-box-shadow: 0 0 0 100px var(--solune-login-primary-soft) inset !important;
    box-shadow: 0 0 0 100px var(--solune-login-primary-soft) inset !important;
    -webkit-text-fill-color: var(--solune-login-text) !important;
    caret-color: var(--solune-login-text);
}
/* 눈 단추의 hover 바탕이 칸과 같은 색이 되어 사라지지 않게 한 단 진하게 둔다. */
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-control:has(.solune-login-input:is(:autofill, :-webkit-autofill)) .solune-login-visibility:is(:hover, :focus-visible) {
    background: color-mix(in srgb, var(--solune-login-primary) 16%, var(--solune-login-primary-soft));
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-visibility {
    display: inline-grid;
    width: 2.8rem;
    min-width: 2.8rem;
    height: 2.8rem;
    flex: 0 0 2.8rem;
    place-items: center;
    margin-right: .35rem;
    padding: 0;
    border: 0;
    border-radius: .55rem;
    background: transparent;
    color: var(--solune-login-muted);
    font-size: .95rem;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-visibility:hover,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-visibility:focus-visible {
    background: var(--solune-login-primary-soft);
    color: var(--solune-login-primary);
    outline: 0;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-submit {
    display: flex;
    width: 100%;
    min-height: 3.75rem;
    align-items: center;
    justify-content: center;
    margin: .3rem 0 0;
    padding: 0 1rem;
    border: 1px solid var(--solune-login-primary) !important;
    border-radius: .7rem;
    background: var(--solune-login-primary) !important;
    color: #fff !important;
    font-size: 1rem;
    font-weight: 800;
    line-height: 1.2;
    transition: background-color .16s, border-color .16s, box-shadow .16s, transform .16s;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-submit:hover,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-submit:focus-visible {
    border-color: var(--solune-login-primary-hover) !important;
    background: var(--solune-login-primary-hover) !important;
    box-shadow: 0 .5rem 1rem color-mix(in srgb, var(--solune-login-primary) 22%, transparent);
    outline: 0;
    transform: translateY(-1px);
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-submit:active {
    transform: translateY(0);
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-options {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    margin: 1rem 0 0;
    color: var(--solune-login-text-soft);
    font-size: .85rem;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-auto {
    display: inline-flex;
    min-height: 1.5rem;
    align-items: center;
    gap: .5rem;
    cursor: pointer;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-auto .checkbox {
    width: 1.15rem;
    height: 1.15rem;
    flex: 0 0 1.15rem;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-link,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-register a {
    color: var(--solune-login-primary);
    font-weight: 700;
    text-decoration: none;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-link:hover,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-link:focus-visible,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-register a:hover,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-register a:focus-visible {
    text-decoration: underline;
    text-underline-offset: .2em;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-register {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .45rem;
    margin-top: 0;
    padding-top: 0;
    border-top: 0;
    color: var(--solune-login-text-soft);
    font-size: .85rem;
    line-height: 1.5;
    text-align: center;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-divider {
    min-height: 0;
    margin: 1.35rem 0 1.3rem;
    color: transparent;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-divider::before,
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-divider::after {
    height: 1px;
    background: var(--solune-login-border);
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #sns_login {
    margin-top: 1.6rem;
    padding: 1.25rem 0 0;
    border-top: 1px solid var(--solune-login-border);
    /* 코어 skin/social/style.css 의 .login-sns 가 흰 바탕(#fff)을 칠한다. 라이트에서는
       카드도 흰색이라 드러나지 않았지만, 다크에서는 카드 안에 흰 상자가 하나 생기고
       그 위의 밝은 제목 "소셜계정으로 로그인" 이 대비 1.12:1 로 묻혔다. 카드 바탕이
       비치게 투명으로 둔다. */
    background: transparent;
}

/* 비회원 구매 · 비회원 주문 조회 카드(로그인 주소에 주문서 · 주문조회가 걸렸을 때).
   위 로그인 카드와 한 벌로 보이게 폭 · 여백 · 모서리 · 테두리를 맞춘다
   (2026-09-29 — 폭 31rem 로 로그인 카드(33.5rem)보다 좁고, 단추는 daisyUI
   기본값을 받아 파란 바탕에 진한 남색 글자였다). 로그인 틀(.solune-login-shell)은
   화면 높이를 다 차지해 이 카드가 한참 아래로 밀리므로, 이 카드가 있을 때만
   그 최소 높이와 아래 여백을 풀고 아래 여백은 이 카드가 대신 갖는다. */
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page:has(.solune-login-extra) .solune-login-shell {
    min-height: 0;
    padding-bottom: 0;
}
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-extra {
    width: min(calc(100% - 2rem), 33.5rem);
    margin: 1.25rem auto 5.5rem;
    padding: 2.25rem 2.5rem 2.5rem;
    border: 1px solid rgba(176, 193, 218, .55);
    border-radius: 1.05rem;
    background: var(--solune-login-surface);
    box-shadow: var(--solune-login-shadow);
    text-align: left;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-extra h2 {
    margin: 0 0 .5rem;
    color: var(--solune-login-text);
    font-size: 1.25rem;
    font-weight: 800;
    letter-spacing: -.02em;
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-extra p {
    margin: 0 0 1rem;
    padding: 0;
    color: var(--solune-login-text-soft);
    font-size: .8rem;
    line-height: 1.65;
}

/* 비회원 개인정보 안내(관리자 > 쇼핑몰설정의 de_guest_privacy). 한때 높이를 10rem
   으로 박아 두어 관리자가 비워 둔 사이트에서는 빈 파란 상자만 160px 남았다.
   글이 짧으면 그만큼만, 길면 10rem 에서 굴린다. 비었으면 상자째 뺀다. */
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #guest_privacy:empty { display: none; }
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #guest_privacy {
    max-height: 10rem;
    margin: 1rem 0;
    padding: .9rem;
    overflow-y: auto;
    border: 1px solid var(--solune-login-border);
    border-radius: .7rem;
    background: var(--solune-login-primary-soft);
    color: var(--solune-login-text-soft);
    font-size: .75rem;
    line-height: 1.65;
}

/* 동의 줄. 체크박스(24px)와 한 줄 문구를 가운데로 맞춘다 — 위 끝에 맞추면
   문구가 상자보다 위로 떠 보였다. 문구 전체가 눌리는 자리다. */
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-agree {
    display: flex;
    align-items: center;
    gap: .625rem;
    margin: 1.25rem 0;
    color: var(--solune-login-text);
    font-size: .875rem;
    line-height: 1.5;
}
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-agree label { cursor: pointer; }

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-agree .checkbox {
    margin-top: 0;
    flex: 0 0 auto;
}

/* 비회원으로 구매하기 · 비회원 주문 조회 확인. 위 로그인 단추(.solune-login-submit)
   와 같은 모양으로 — daisyUI .btn-primary 의 글자색(--color-primary-content)이
   진한 남색이라 파란 바탕에서 읽히지 않았다. */
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-extra .btn_confirm { margin: 0; padding: 0; }
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-extra .btn-primary {
    --btn-fg: #fff;
    display: flex;
    width: 100%;
    min-height: 3.75rem;
    align-items: center;
    justify-content: center;
    padding: 0 1rem;
    border: 1px solid var(--solune-login-primary);
    border-radius: .7rem;
    background: var(--solune-login-primary);
    color: #fff;
    font-size: 1rem;
    font-weight: 800;
    line-height: 1.2;
    transition: background-color .16s, border-color .16s, box-shadow .16s;
}
body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-extra .btn-primary:is(:hover, :focus-visible) {
    border-color: var(--solune-login-primary-hover);
    background: var(--solune-login-primary-hover);
    box-shadow: 0 .5rem 1rem color-mix(in srgb, var(--solune-login-primary) 22%, transparent);
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #mb_login_od_wr .frm_input {
    width: 100%;
    margin: 0 0 .75rem;
    border: 1px solid var(--solune-login-border);
    border-radius: .7rem;
    background: var(--solune-login-input);
    color: var(--solune-login-text);
}

body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #mb_login_odinfo {
    margin: 1rem 0 0;
    padding: .8rem;
    border-radius: .65rem;
    background: var(--solune-login-primary-soft);
    color: var(--solune-login-text-soft);
    font-size: .75rem;
}

@media (prefers-reduced-motion: reduce) {
    body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page * {
        transition-duration: .01ms !important;
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
    }
}

@media (max-width: 540px) {
    body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-shell {
        padding: 3.5rem .75rem 3.5rem;
    }

    body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-brand {
        margin-bottom: 1.65rem;
    }

    body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-card .card-body {
        padding: 2.35rem 1.25rem 1.8rem !important;
    }

    body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page #solune-login-title {
        margin-bottom: 1.85rem;
        font-size: 1.7rem;
    }

    body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-options {
        align-items: flex-start;
        flex-direction: column;
        gap: .15rem;
    }

    body.solune-page:has(#mb_login.solune-login-page) #mb_login.solune-login-page .solune-login-extra {
        width: auto;
        margin-inline: .75rem;
        margin-bottom: 3.5rem;
        padding: 1.85rem 1.25rem 1.8rem;
    }
}

/* ━━━━ memo.css ━━━━
   (옛 파일 · 원래 순서 350 · 원래 조건: 쪽지(member 스킨 memo · memo_form · memo_view)) */

/* The memo popup keeps Gnuboard's actions and data flow inside a focused Solune card. */

/* 제목은 본문(.solune-win-body) 밖, 카드의 직계다. 코어가 여기에
   padding:10px 10px 10px 20px 을 박아 두어 한쪽만 좁았다. 본문과 같은
   여백으로 맞춘다 — 공통 규칙에 !important 로 이기고 있어 여기서 값을
   준다. */
body.solune-page .solune-memo-page #win_title {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin: 0;
    padding: clamp(1rem, 3vw, 1.5rem) clamp(1rem, 3vw, 1.5rem) 0 !important;
    color: var(--solune-text);
    font-size: clamp(1.2rem, 3vw, 1.55rem);
    font-weight: 900;
    letter-spacing: -.045em;
    line-height: 1.3;
}

body.solune-page .solune-memo-page #win_title .win_total {
    flex: 0 0 auto;
    margin: .15rem 0 0;
    color: var(--solune-muted);
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: -.01em;
    line-height: 1.4;
    text-align: right;
}

body.solune-page .solune-memo-page .solune-memo-tabs {
    display: flex !important;
    flex-wrap: wrap;
    gap: .35rem;
    margin: 0 !important;
    padding: .25rem !important;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface-soft);
    list-style: none;
}

body.solune-page .solune-memo-page .solune-memo-tabs li {
    display: block !important;
    margin: 0 !important;
    padding: 0 !important;
    list-style: none;
}

body.solune-page .solune-memo-page .solune-memo-tabs li a {
    display: inline-flex;
    min-height: 2.25rem;
    align-items: center;
    justify-content: center;
    padding: 0 .85rem;
    border: 1px solid transparent;
    border-radius: calc(var(--solune-radius-md) - .2rem);
    color: var(--solune-muted);
    font-size: .76rem;
    font-weight: 800;
    line-height: 1;
    transition: border-color .18s ease, background-color .18s ease, color .18s ease;
}

body.solune-page .solune-memo-page .solune-memo-tabs li a:hover,
body.solune-page .solune-memo-page .solune-memo-tabs li a:focus-visible {
    border-color: var(--solune-border-strong);
    color: var(--solune-primary);
}

body.solune-page .solune-memo-page .solune-memo-tabs li.selected a {
    border-color: var(--solune-primary);
    background: var(--solune-primary);
    color: var(--color-primary-content, #fff);
    box-shadow: 0 5px 14px color-mix(in srgb, var(--solune-primary) 20%, transparent);
}

body.solune-page .solune-memo-page .solune-memo-list {
    border: 0;
}

body.solune-page .solune-memo-page .solune-memo-row {
    display: grid !important;
    grid-template-columns: 3rem minmax(0, 1fr) auto;
    align-items: center;
    column-gap: .85rem;
    min-height: 4.5rem;
    margin: 0;
    padding: .75rem 1rem;
    border: 1px solid var(--solune-border);
    border-radius: .85rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    list-style: none;
    transition: border-color .18s ease, background-color .18s ease, box-shadow .18s ease, transform .18s ease;
}

body.solune-page .solune-memo-page .solune-memo-row:not(.read) {
    border-color: color-mix(in srgb, var(--solune-primary) 35%, var(--solune-border));
    background: var(--solune-primary-soft);
}

body.solune-page .solune-memo-page .solune-memo-row:hover {
    border-color: color-mix(in srgb, var(--solune-primary) 55%, var(--solune-border));
    box-shadow: var(--solune-shadow-sm);
    transform: translateY(-1px);
}

body.solune-page .solune-memo-page .solune-memo-row .memo_li {
    float: none;
    min-width: 0;
}

body.solune-page .solune-memo-page .solune-memo-row .profile_big_img {
    position: relative;
    display: grid;
    width: 3rem;
    height: 3rem;
    margin: 0;
    place-items: center;
    border-radius: 1rem;
    background: linear-gradient(135deg, var(--solune-primary), color-mix(in srgb, var(--solune-primary) 55%, #7c3aed));
    overflow: visible;
}

body.solune-page .solune-memo-page .solune-memo-row .profile_big_img img {
    width: 3rem;
    height: 3rem;
    border: 2px solid var(--solune-surface);
    border-radius: 1rem;
    object-fit: cover;
}

body.solune-page .solune-memo-page .solune-memo-row .memo_li.memo_name {
    padding: 0;
    color: var(--solune-text);
    font-size: .82rem;
    font-weight: 800;
    line-height: 1.35;
}

body.solune-page .solune-memo-page .solune-memo-row .memo_datetime {
    margin-left: .35rem;
    color: var(--solune-muted);
    font-size: .68rem;
    font-weight: 600;
    white-space: nowrap;
}

body.solune-page .solune-memo-page .solune-memo-row .memo_preview a {
    display: block;
    min-width: 0;
    margin: .3rem 0 0;
    overflow: hidden;
    padding: 0;
    color: var(--solune-text-soft);
    font-size: .76rem;
    font-weight: 600 !important;
    line-height: 1.45;
    text-overflow: ellipsis;
    white-space: nowrap;
}

body.solune-page .solune-memo-page .solune-memo-row .memo_preview a:hover {
    color: var(--solune-primary);
    text-decoration: none;
}

body.solune-page .solune-memo-page .solune-memo-row .memo_del {
    position: static;
    display: grid;
    width: 2rem;
    height: 2rem;
    margin: 0;
    padding: 0;
    place-items: center;
    border: 1px solid transparent;
    border-radius: .6rem;
    color: var(--solune-muted);
    font-size: .85rem;
}

body.solune-page .solune-memo-page .solune-memo-row .memo_del:hover,
body.solune-page .solune-memo-page .solune-memo-row .memo_del:focus-visible {
    border-color: color-mix(in srgb, var(--color-error) 25%, var(--solune-border));
    background: color-mix(in srgb, var(--color-error) 8%, transparent);
    color: var(--color-error);
}

body.solune-page .solune-memo-page .solune-memo-row .no_read {
    position: absolute;
    right: -.2rem;
    bottom: -.2rem;
    width: .7rem;
    height: .7rem;
    border: 2px solid var(--solune-surface);
    border-radius: 999px;
    background: var(--solune-primary);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--solune-primary) 20%, transparent);
    text-indent: -9999px;
}

body.solune-page .solune-memo-page .win_desc.solune-memo-note {
    display: flex;
    align-items: center;
    gap: .5rem;
    margin: 0;
    padding: .75rem 1rem;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 22%, var(--solune-border));
    border-radius: var(--solune-radius-md);
    background: var(--solune-primary-soft);
    color: var(--solune-text-soft);
    font-size: .74rem;
    line-height: 1.5;
}

body.solune-page .solune-memo-page .solune-memo-note .fa {
    color: var(--solune-primary);
}

body.solune-page .solune-memo-page .solune-memo-actions .btn_close {
    margin: 0;
}

/* Message view */
body.solune-page #memo_view .solune-memo-message {
    margin: 0;
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: .85rem;
    background: var(--solune-surface-soft);
    box-shadow: var(--solune-shadow-sm);
}

body.solune-page #memo_view .solune-memo-message > header {
    display: none;
}

body.solune-page #memo_view .solune-memo-message #memo_view_ul {
    background: transparent;
}

body.solune-page #memo_view .solune-memo-message .memo_from {
    display: flex;
    align-items: center;
    gap: .75rem;
    margin: 0;
    padding: 1rem 1.1rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface);
}

body.solune-page #memo_view .solune-memo-message .memo_from li {
    float: none;
}

body.solune-page #memo_view .solune-memo-message .memo_from li.memo_profile {
    flex: 0 0 2.75rem;
    margin: 0;
}

body.solune-page #memo_view .solune-memo-message .memo_from li.memo_profile img {
    width: 2.75rem;
    height: 2.75rem;
    border: 2px solid var(--solune-primary-soft);
    border-radius: .85rem;
    object-fit: cover;
}

body.solune-page #memo_view .solune-memo-message .memo_from li.memo_view_nick {
    min-width: 0;
    width: auto;
    flex: 1 1 auto;
    color: var(--solune-text);
    font-size: .84rem;
    font-weight: 900;
}

body.solune-page #memo_view .solune-memo-message .memo_from li.memo_view_date {
    display: block;
    color: var(--solune-muted);
    font-size: .68rem;
    line-height: 1.4;
    white-space: nowrap;
}

body.solune-page #memo_view .solune-memo-message .memo_from li.memo_op_btn {
    position: static !important;
}

body.solune-page #memo_view .solune-memo-message .memo_from li.memo_op_btn a {
    display: grid;
    width: 2rem;
    height: 2rem;
    margin: 0;
    padding: 0;
    place-items: center;
    border-radius: .6rem;
}

body.solune-page #memo_view .solune-memo-message > p {
    min-height: 10rem;
    margin: 0;
    padding: 1.2rem 1.1rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-size: .86rem;
    line-height: 1.75;
}

body.solune-page #memo_view .solune-memo-message .memo_btn {
    display: flex;
    justify-content: space-between;
    gap: .75rem;
    width: auto;
    padding: .75rem 1.1rem;
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface);
}

body.solune-page #memo_view .solune-memo-message .memo_btn a {
    width: auto;
    padding: 0;
    color: var(--solune-muted);
    font-size: .74rem;
    font-weight: 800;
}

body.solune-page #memo_view .solune-memo-message .memo_btn a:hover {
    color: var(--solune-primary);
    text-decoration: none;
}

/* Compose view */
body.solune-page #memo_write .solune-memo-form {
    display: grid;
    gap: 1rem;
}

body.solune-page #memo_write .solune-memo-form .form_01 {
    padding: 0;
    border: 0;
    background: transparent;
}

body.solune-page #memo_write .solune-memo-form .form_01 > ul {
    display: grid;
    gap: .9rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

body.solune-page #memo_write .solune-memo-form .form_01 > ul > li {
    margin: 0;
    padding: 0;
}

body.solune-page #memo_write .solune-memo-form input[type="text"],
body.solune-page #memo_write .solune-memo-form textarea {
    width: 100%;
    box-sizing: border-box;
}

/* 자동등록방지 입력칸은 뺀다. 그 칸의 높이는 default.css 의 공통 절이
   --cap-h 로 잡아 그림·단추와 같은 값을 쓰는데, 여기 규칙이 (1,2,2) 로
   그보다 세서 좁은 화면에서 이 칸만 44px 로 남고 나머지가 35px 이 되어
   줄이 9px 어긋났다. 화면 전용 규칙이 공용 부품의 치수를 가로채지 않게
   한다. */
body.solune-page #memo_write .solune-memo-form input[type="text"]:not(.captcha_box) {
    height: 2.75rem;
}

body.solune-page #memo_write .solune-memo-form textarea {
    min-height: 10rem;
    resize: vertical;
}

body.solune-page #memo_write .solune-memo-form .frm_info {
    display: block;
    margin-top: .45rem;
    color: var(--solune-muted);
    font-size: .7rem;
    line-height: 1.5;
}

body.solune-page :is(#memo_write, #memo_view) .solune-memo-actions {
    align-items: center;
}

body.solune-page :is(#memo_write, #memo_view) .solune-memo-actions .reply_btn {
    min-width: 6rem;
    margin: 0;
}

/* 머리의 한 줄 설명(.solune-win-sub)은 p 다. 코어 회원 스킨의
   `#memo_view p`(skin/member/basic/style.css:1910)가 쪽지 본문 문단을
   겨냥해 padding:10px · min-height:150px · 흰 바탕을 주는데 태그로만 잡아
   머리의 이 줄까지 걸렸다 — 머리가 92px 에서 221px 로 부풀어 탭이 130px
   아래로 밀렸다. 그 자리에서만 되돌린다. */
body.solune-page #memo_view .solune-win-head .solune-win-sub {
    min-height: 0;
    padding: 0;
    background: none;
    line-height: 1.5;
}

@media (max-width: 40rem) {
    body.solune-page .solune-memo-page {
        width: calc(100% - 1rem);
        margin: .5rem auto;
        border-radius: var(--solune-radius-md);
    }

    body.solune-page .solune-memo-page .solune-memo-content {
        gap: 1rem;
        padding: 1rem !important;
    }

    body.solune-page .solune-memo-page #win_title {
        display: block;
    }

    body.solune-page .solune-memo-page #win_title .win_total {
        margin-top: .35rem;
        text-align: left;
    }

    body.solune-page .solune-memo-page .solune-memo-tabs li {
        flex: 1 1 0;
    }

    body.solune-page .solune-memo-page .solune-memo-tabs li a {
        width: 100%;
        padding-inline: .45rem;
    }

    body.solune-page .solune-memo-page .solune-memo-row {
        grid-template-columns: 2.6rem minmax(0, 1fr) auto;
        column-gap: .65rem;
        padding: .7rem;
    }

    body.solune-page .solune-memo-page .solune-memo-row .profile_big_img,
    body.solune-page .solune-memo-page .solune-memo-row .profile_big_img img {
        width: 2.6rem;
        height: 2.6rem;
        border-radius: .8rem;
    }

    body.solune-page .solune-memo-page .solune-memo-row .memo_datetime {
        display: block;
        margin: .2rem 0 0;
    }

    body.solune-page .solune-memo-page .solune-memo-row .memo_preview a {
        font-size: .72rem;
    }

    body.solune-page #memo_view .solune-memo-message .memo_from {
        flex-wrap: wrap;
        padding: .9rem;
    }

    body.solune-page #memo_view .solune-memo-message .memo_from li.memo_view_date {
        width: calc(100% - 3.5rem);
        margin-top: -.5rem;
        margin-left: 3.5rem;
    }

    body.solune-page #memo_view .solune-memo-message .memo_from li.memo_op_btn {
        margin-left: auto;
    }

    body.solune-page #memo_view .solune-memo-message > p {
        min-height: 8rem;
        padding: 1rem .9rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    body.solune-page .solune-memo-page .solune-memo-tabs li a,
    body.solune-page .solune-memo-page .solune-memo-row {
        transition: none;
    }
}

/* ── 시안 `팝업 페이지 개선` 1b 마무리 ──────────────────────────────── */

/* 탭은 이제 본문 밖, 머리 바로 아래다. 시안처럼 밑줄 탭으로 둔다. */
/* 탭은 쪽지 목록 · 쪽지쓰기 · 쪽지 보기 셋이 함께 쓴다 — 탭으로 오가는 한
   창이라 모양이 달라지면 옮겨 다닐 때마다 눈에 걸린다. :is() 로 묶어도
   특정도는 id 하나 그대로라 아래 규칙들과의 셈이 달라지지 않는다. */
body.solune-page :is(#memo_list, #memo_write, #memo_view).solune-memo-page .solune-memo-tabs {
    display: flex;
    flex: none;
    gap: 1rem;
    margin: 0;
    /* !important 를 쓰는 까닭 — 위의 옛 상자형 탭 규칙이 padding 에
       !important 를 달고 있어(코어 .win_ul 을 이기려던 것) 같은 무게가
       아니면 여기 값이 진다. 그 4px 이 남아 있으면 고른 탭의 파란 밑줄이
       줄 아래 회색 선에서 5px 떠 보인다 — 밑줄은 그 선 위에 앉아야 한다.
       옛 규칙은 지우지 않는다 — 코어 `.new_win .win_ul li` 가 li 를 띄우고
       (float) 흰 바탕에 둥근 테두리를 두르는데 그것을 되돌리는 것이 그
       규칙이다. 여기서는 그 위에 밑줄 모양만 얹는다. */
    padding: 0 clamp(1rem, 3vw, 1.5rem) !important;
    /* 네 변을 먼저 지우고 아래만 다시 긋는다. 옛 상자형 탭 규칙이 테두리를
       사방에 두르는데, 그 위 · 좌 · 우가 남아 있으면 머리의 아래 선과 탭 줄의
       위 선이 같은 자리(y=100)에 겹쳐 두 겹으로 보이고, 카드 양옆에도 세로
       선이 남는다. */
    border: 0;
    border-bottom: 1px solid var(--solune-border);
    border-radius: 0;
    background: none;
    list-style: none;
}
body.solune-page :is(#memo_list, #memo_write, #memo_view).solune-memo-page .solune-memo-tabs li { margin: 0; }
body.solune-page :is(#memo_list, #memo_write, #memo_view).solune-memo-page .solune-memo-tabs a {
    display: flex;
    height: 2.5rem;
    align-items: center;
    padding: 0 .25rem;
    /* 링크도 마찬가지다. 옛 규칙의 1px 투명 테두리가 위 · 좌 · 우에 남아
       글자 자리를 1px 씩 밀고 있었다. 아래 한 줄만 남긴다. */
    border: 0;
    border-bottom: 2px solid transparent;
    border-radius: 0;
    background: none;
    color: var(--solune-muted);
    font-size: .875rem;
    font-weight: 500;
}
body.solune-page :is(#memo_list, #memo_write, #memo_view).solune-memo-page .solune-memo-tabs .selected a {
    border-bottom-color: var(--solune-primary);
    background: none;
    color: var(--solune-text);
    font-weight: 700;
}

/* 한 줄 = 사진 · 보낸이와 미리보기 · 날짜 · 지우기. 줄마다 카드를 두던 것을
   가는 선 하나로 바꾼다 — 좁은 창에서 카드 스무 장은 읽기 어렵다. */
body.solune-page #memo_list.solune-memo-page .solune-memo-list .solune-win-list { display: block; gap: 0; }
body.solune-page #memo_list.solune-memo-page .solune-memo-row {
    display: grid;
    grid-template-columns: 2.75rem minmax(0, 1fr) auto auto;
    gap: .75rem;
    align-items: center;
    margin: 0;
    padding: .75rem .25rem;
    border: 0;
    border-bottom: 1px solid var(--solune-border);
    border-radius: 0;
    background: none;
}
body.solune-page #memo_list.solune-memo-page .solune-memo-row:last-child { border-bottom: 0; }
body.solune-page #memo_list.solune-memo-page .solune-memo-row .memo_name { display: grid; gap: .1rem; min-width: 0; }
body.solune-page #memo_list.solune-memo-page .solune-memo-who { color: var(--solune-text); font-size: .875rem; font-weight: 700; }
/* 안 읽음 표시는 사진 오른쪽 아래 점이 이미 맡고 있다(.no_read). 이름 옆에
   하나 더 두면 같은 말을 두 번 하게 되어 넣지 않는다. */
body.solune-page #memo_list.solune-memo-page .solune-memo-row .memo_preview { min-width: 0; }
body.solune-page #memo_list.solune-memo-page .solune-memo-row .memo_preview a {
    display: block;
    overflow: hidden;
    color: var(--solune-muted);
    font-size: .8125rem;
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.solune-page #memo_list.solune-memo-page .solune-memo-row .memo_datetime { color: var(--solune-muted); font-size: .75rem; font-variant-numeric: tabular-nums; }

/* 보관일수 안내. 알림 상자로 두면 목록보다 먼저 눈에 드는데, 알아 두면 좋은
   것이지 지금 무엇을 하라는 말이 아니다. 가운데 작은 글씨 한 줄로 둔다. */
body.solune-page #memo_list.solune-memo-page .solune-memo-note {
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    color: var(--solune-muted);
    font-size: .75rem;
    text-align: center;
}
body.solune-page #memo_list.solune-memo-page .solune-memo-note strong { color: var(--solune-text); font-weight: 700; }

/* 제목은 머리의 공통 크기에 맞춘다. */
/* 머리 안에 들어온 제목. 위쪽 규칙은 제목이 카드의 직계였던 시절 것이라
   좌우·위 여백을 제목 자신에게 주는데(그것도 !important 로), 지금은 머리가
   그 여백을 갖는다. 그대로 두면 여백이 두 겹이 되어 제목 상자가 45px 로
   부풀었다 — 포인트 창의 26px 와 견주면 쪽지 머리만 커 보이던 까닭이다.
   같은 무게로 되돌린다. 이제 쪽지 세 화면이 모두 머리를 쓰지만, 위 규칙은
   포인트·스크랩 같은 다른 팝업이 아직 써서 남겨 둔다. */
body.solune-page .solune-memo-page .solune-win-head #win_title {
    display: block;
    padding: 0 !important;
    font-size: 1.25rem;
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1.3;
}

/* 날짜와 지우기는 줄의 칸이다. 옛 규칙이 날짜를 오른쪽에 절대배치로 띄워
   지우기 단추와 겹쳤다. */
body.solune-page #memo_list.solune-memo-page .solune-memo-row .memo_datetime { position: static; right: auto; top: auto; }
/* 코어 스킨의 `#memo_list .memo_del` 이 (1,1,0) 이라 자리뿐 아니라 색과 크기도
   가져간다 — 밝은 회색 #c7c9cb 은 다크에서 날짜보다 튀었다. id 를 함께 적어
   되돌린다. */
body.solune-page #memo_list.solune-memo-page .solune-memo-row .memo_del {
    position: static;
    right: auto;
    top: auto;
    padding: 0;
    color: var(--solune-muted);
    font-size: .85rem;
}
body.solune-page #memo_list.solune-memo-page .solune-memo-row .memo_del:hover,
body.solune-page #memo_list.solune-memo-page .solune-memo-row .memo_del:focus-visible { color: var(--color-error); }
/* 고른 탭은 밑줄로만 알린다. 옛 상자 탭의 테두리를 지운다. */
body.solune-page :is(#memo_list, #memo_write, #memo_view).solune-memo-page .solune-memo-tabs :is(li, a) { border-color: transparent; box-shadow: none; }
body.solune-page :is(#memo_list, #memo_write, #memo_view).solune-memo-page .solune-memo-tabs .selected a { border-bottom-color: var(--solune-primary); }

/* get_sideview() 는 이름 앞에 22px 아바타를 하나 더 붙인다. 줄 왼쪽에 이미
   같은 사진이 42px 로 서 있어 두 번 나오는 셈이라 안쪽 것만 감춘다. */
body.solune-page #memo_list.solune-memo-page .solune-memo-who .profile_img { display: none; }
/* 안내는 가운데 한 줄로. 시안이 그렇게 둔다. */
body.solune-page #memo_list.solune-memo-page .solune-memo-note { display: block; text-align: center; }

/* ── 쪽지쓰기 ─────────────────────────────────────────────────────
   시안 `팝업 페이지 개선` 의 1b-쪽지쓰기. 받은쪽지 목록과 같은 껍데기(머리 ·
   탭 · 본문 · 바닥)를 쓰고, 그 안에 칸 셋을 세로로 쌓는다.

   규칙을 여기에 두는 까닭 — 쪽지 목록과 쪽지쓰기는 탭으로 오가는 한 창이라
   같은 시트가 맡는 편이 낫다. 테마에 CSS 파일이 이미 너무 많아 새로 만들지
   않는다(CLAUDE.local.md). */

/* 폼이 카드의 세로 flex 한 칸을 맡는다. 본문과 바닥이 그 안에 있어서, 폼을
   그냥 두면 둘이 폼 높이에 갇힌다. */
body.solune-page #memo_write.solune-memo-page .solune-memo-form {
    display: flex;
    min-height: 0;
    flex: 1;
    flex-direction: column;
    margin: 0;
}

body.solune-page #memo_write.solune-memo-page .solune-memo-write { gap: 1.125rem; }

body.solune-page #memo_write.solune-memo-page .solune-memo-field { display: flex; min-width: 0; flex-direction: column; gap: .375rem; }
body.solune-page #memo_write.solune-memo-page .solune-memo-field > label,
body.solune-page #memo_write.solune-memo-page .solune-memo-field-head label {
    color: var(--solune-text);
    font-size: .8125rem;
    font-weight: 600;
}
/* 필수는 글자로 적는다. 코어는 입력칸 오른쪽 위에 빨간 별 하나를 얹는데
   (default.css 가 !important 로 깐다) 그것만으로는 무엇이 필수인지 읽히지
   않는다. 글자를 세웠으니 별은 끈다. */
body.solune-page #memo_write.solune-memo-page .solune-memo-req { color: var(--solune-danger); font-weight: 700; }
body.solune-page #memo_write.solune-memo-page :is(input, textarea):is(.required, [required]):invalid { background-image: none !important; }

body.solune-page #memo_write.solune-memo-page .solune-memo-hint {
    margin: 0;
    color: var(--solune-muted);
    font-size: .75rem;
    line-height: 1.5;
}
body.solune-page #memo_write.solune-memo-page .solune-memo-hint strong { color: var(--solune-text); font-weight: 700; }

body.solune-page #memo_write.solune-memo-page .solune-memo-field-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: .5rem;
}
body.solune-page #memo_write.solune-memo-page .solune-memo-count {
    color: var(--solune-muted);
    font-family: var(--solune-mono);
    font-size: .75rem;
    font-variant-numeric: tabular-nums;
}

/* 입력칸. 테마는 모든 텍스트 입력에 테두리와 배경을 !important 로 다시
   그리므로 같은 무게로 맞춘다. */
body.solune-page #memo_write.solune-memo-page :is(.frm_input, textarea, .captcha_box) {
    width: 100%;
    padding: 0 .875rem;
    border: 1px solid var(--solune-border) !important;
    border-radius: .5rem;
    background: var(--solune-surface) !important;
    color: var(--solune-text);
    font-size: .875rem;
}
/* .captcha_box 는 빼 둔다. 자동등록방지 칸의 높이는 그 줄(default.css 의
   자동등록방지 절)이 --cap-h 로 정하고 그림 · 단추와 함께 줄어드는데,
   여기서 2.75rem 을 박으면 좁은 폭에서 입력칸만 44px 로 남아 줄이 어긋난다. */
body.solune-page #memo_write.solune-memo-page .frm_input { height: 2.75rem; }
/* 한 칸 더 끼워 올린다. 위 공용 규칙의 :is(.frm_input, textarea, .captcha_box)
   는 :is() 안에서 가장 센 인자(.frm_input, 클래스)의 값을 가져가 (1,3,1) 이
   되는데, 여기를 클래스 없이 적으면 (1,2,2) 라 진다. 그래서 padding 이
   0 14px 로 남아 내용이 칸 맨 위에 붙어 있었다.
   높이는 시안(165px)에 맞춘다 — 8rem 은 두세 줄이라 쓰기 답답했다. */
body.solune-page #memo_write.solune-memo-page .solune-memo-write textarea {
    min-height: 10.25rem;
    padding: .875rem;
    line-height: 1.6;
    resize: vertical;
}
/* 포커스는 한 겹만. 테마에 모든 입력에 걸리는 규칙이 둘 있어 그대로 두면
   링이 겹쳐 세 겹이 된다. */
body.solune-page #memo_write.solune-memo-page :is(.frm_input, textarea, .captcha_box):focus {
    border-color: var(--solune-primary) !important;
    box-shadow: 0 0 0 3px color-mix(in oklch, var(--solune-primary) 20%, transparent) !important;
}
body.solune-page #memo_write.solune-memo-page :is(.frm_input, textarea, .captcha_box):focus-visible { outline: 0; }

/* 자동등록방지는 css/default.css 의 "자동등록방지" 절이 맡는다. 쪽지쓰기
   말고도 메일보내기 · 비밀번호 찾기 · 회원가입 · 설문 결과가 같은 마크업을
   쓴다. 이 화면만의 사정이 아니라 옮겼다. */

/* ── 바닥 ─────────────────────────────────────────────────────────
   창닫기와 보내기(쪽지 보기에서는 답장) 둘뿐이라 오른쪽 끝에 모은다.
   그 하나가 주된 행동이라 채워 그린다. 두 화면이 같은 바닥을 쓰므로 모양도
   한 벌이다 — 답장만 코어 스킨의 링크 모양(45px 파란 덩이)으로 남아 옆의
   창닫기(40px)와 높이가 어긋났다. */
body.solune-page :is(#memo_write, #memo_view).solune-memo-page .solune-memo-actions {
    display: flex;
    justify-content: flex-end;
    gap: .5rem;
}
body.solune-page :is(#memo_write, #memo_view).solune-memo-page .solune-memo-actions .reply_btn {
    height: 2.5rem;
    padding: 0 1.25rem;
    border: 0;
    border-radius: .5rem;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: .875rem;
    font-weight: 600;
}
body.solune-page :is(#memo_write, #memo_view).solune-memo-page .solune-memo-actions .reply_btn:hover { background: var(--solune-primary-hover); }

/* 좁은 폭에서 그림을 아래로 내리던 규칙은 걷었다. 이제 네 자리가 폭을 따라
   함께 줄어들어 300px 에서도 한 줄에 선다. */

/* ━━━━ point.css ━━━━
   (옛 파일 · 원래 순서 350 · 원래 조건: 포인트(member 스킨 point.skin.php)) */

/* 코어 css 의 `#point { text-align: center }` 는 id 하나(1,0,0)라 공통
   껍데기(.new_win.solune-winpage, (0,3,1))로는 못 이긴다. 전에는 이
   파일이 #point 로 껍데기를 통째로 적어서 같이 눌렸는데, 껍데기를
   default.css 로 내리면서 이 한 줄만 여기 남는다. 포인트에만 있는 문제라
   공통으로 올리지 않는다. */
body.solune-page #point.solune-winpage { text-align: left; }

/* The point popup keeps the Gnuboard data flow but uses a focused Solune card. */

body.solune-page #point.solune-point-page .solune-point-balance {
    width: 100%;
    overflow: hidden;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 25%, var(--solune-border));
    border-radius: var(--solune-radius-md);
    background: var(--solune-primary-soft);
    box-shadow: none;
}

body.solune-page #point.solune-point-page .solune-point-balance .stat {
    min-width: 0;
    padding: 1.1rem 1.25rem;
}

body.solune-page #point.solune-point-page .solune-point-balance .stat-value {
    margin-top: .25rem;
    color: var(--solune-primary);
    font-size: clamp(1.75rem, 5vw, 2.25rem);
    font-weight: 900;
    letter-spacing: -.05em;
    line-height: 1.1;
}

body.solune-page #point.solune-point-page .point_list {
    display: grid;
    gap: .5rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

body.solune-page #point.solune-point-page .point_list li.solune-point-entry {
    display: flex;
    min-width: 0;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    min-height: 4.25rem;
    padding: .8rem 1rem;
    border: 1px solid var(--solune-border);
    border-radius: .75rem;
    background: var(--solune-surface);
    color: var(--solune-text);
    list-style: none;
}

body.solune-page #point.solune-point-page .point_list li.solune-point-entry.point_use {
    border-color: color-mix(in srgb, var(--color-error) 25%, var(--solune-border));
    background: color-mix(in srgb, var(--color-error) 5%, var(--solune-surface));
}

body.solune-page #point.solune-point-page .solune-point-entry-copy {
    display: grid;
    min-width: 0;
    gap: .28rem;
}

body.solune-page #point.solune-point-page .point_tit {
    display: block;
    min-width: 0;
    overflow: hidden;
    color: var(--solune-text);
    font-size: .82rem;
    font-weight: 800;
    line-height: 1.35;
    text-overflow: ellipsis;
    white-space: nowrap;
}

body.solune-page #point.solune-point-page .point_date1,
body.solune-page #point.solune-point-page .point_date {
    float: none;
    color: var(--solune-muted);
    font-size: .7rem;
    line-height: 1.35;
}

body.solune-page #point.solune-point-page .point_date.txt_expired {
    margin-left: 0;
    color: var(--color-error);
}

body.solune-page #point.solune-point-page .point_num {
    position: static;
    flex: none;
    margin-left: auto;
    color: var(--solune-primary);
    font-size: .9rem;
    font-weight: 900;
    line-height: 1.2;
}

body.solune-page #point.solune-point-page .point_use .point_num {
    color: var(--color-error);
}

body.solune-page #point.solune-point-page .point_list li.solune-point-empty {
    display: block;
    padding: 2rem 1rem;
    border: 1px dashed var(--solune-border-strong);
    border-radius: .75rem;
    color: var(--solune-muted);
    text-align: center;
}

body.solune-page #point.solune-point-page .point_list li.point_status {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-top: .25rem;
    padding: .9rem 1rem;
    border: 0;
    border-radius: .75rem;
    background: var(--color-neutral);
    color: var(--color-neutral-content);
    font-size: .8rem;
    font-weight: 800;
}

/* 페이지 넘김의 모양은 default.css 의 페이지 넘김 절 한 벌이 맡는다. */

body.solune-page #point.solune-point-page .solune-point-actions {
    display: flex;
    justify-content: flex-end;
    gap: .5rem;
    margin: 0;
}

body.solune-page #point.solune-point-page .solune-point-actions .btn_close {
    margin: 0;
}

@media (max-width: 40rem) {
    body.solune-page #point.solune-point-page {
        width: calc(100% - 1rem);
        margin: .5rem auto;
        border-radius: var(--solune-radius-md);
    }

body.solune-page #point.solune-point-page .point_list li.solune-point-entry {
        min-height: 4rem;
        padding-inline: .8rem;
    }

}

/* ── 시안 `팝업 페이지 개선` 1a 마무리 ────────────────────────────────
   같은 파일 안이라 여기 값이 위를 덮는다. 옛 마크업(stats · list-row)을
   쓰던 규칙은 위에 남아 있지만 그 클래스가 더는 나오지 않아 걸리지 않는다. */

/* 보유 포인트. 시안은 채운 색 카드다 — 지나간 기록(목록)과 지금 값을 가른다. */
body.solune-page #point.solune-point-page .solune-point-balance {
    display: flex;
    width: 100%;
    height: auto;
    min-height: 0;
    overflow: visible;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    margin: 0;
    padding: 1.125rem 1.25rem;
    border: 0;
    border-radius: var(--solune-radius-sm);
    background: var(--solune-primary);
    /* 채운 칸의 글씨는 --color-primary-content 를 쓴다. --solune-primary-ink 는
       다크에서 초록 팔레트의 흔적(#10231a)이 남아 있다 — default.css 의 토큰
       주석에 그 사정이 적혀 있다. 브랜드 마크도 같은 짝을 쓴다. */
    color: var(--color-primary-content, #fff);
}
body.solune-page #point.solune-point-page .solune-point-balance-label { margin: 0; opacity: .85; font-size: .78rem; }
body.solune-page #point.solune-point-page .solune-point-balance-value {
    margin: .25rem 0 0;
    font-size: 1.875rem;
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
}
body.solune-page #point.solune-point-page .solune-point-balance-value span { margin-left: .15rem; font-size: .875rem; font-weight: 500; }
body.solune-page #point.solune-point-page .solune-point-balance-date { margin: 0; opacity: .8; font-size: .75rem; }

body.solune-page #point.solune-point-page .solune-point-count { margin: 0; color: var(--solune-muted); font-size: .8125rem; }
body.solune-page #point.solune-point-page .solune-point-count strong { color: var(--solune-text); font-weight: 700; }

/* 목록. 시안은 칸을 나눈 표다 — 줄마다 카드를 두면 열다섯 줄이 카드 열다섯
   장이 되어 좁은 창에서 숨 쉴 틈이 없다. 가는 선 하나로 가른다. */
body.solune-page #point.solune-point-page .solune-point-list { display: block; gap: 0; }
/* 위쪽 옛 규칙이 `.point_list li.클래스` 로 (1,3,1) 이라 클래스 하나로는 못
   이긴다. 같은 모양으로 적어 나중 것이 이기게 한다. */
body.solune-page #point.solune-point-page .point_list li.solune-point-colhead,
body.solune-page #point.solune-point-page .point_list li.solune-point-entry {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: .25rem .75rem;
    align-items: center;
    margin: 0;
    border: 0;
    border-bottom: 1px solid var(--solune-border);
    border-radius: 0;
    background: none;
    padding: .75rem .25rem;
}
body.solune-page #point.solune-point-page .point_list li.solune-point-colhead {
    min-height: 0;
    padding: .4rem .25rem;
    color: var(--solune-muted);
    font-size: .72rem;
}
body.solune-page #point.solune-point-page .point_list li.solune-point-colhead span:last-child { text-align: right; }
body.solune-page #point.solune-point-page .point_list li.solune-point-entry { min-height: 0; }
body.solune-page #point.solune-point-page .point_list li.solune-point-entry:last-child { border-bottom: 0; }
/* 사용 줄은 숫자만 붉게 둔다. 옛 규칙은 줄 전체를 물들여, 적립과 사용이
   번갈아 나오면 줄무늬가 됐다. */
body.solune-page #point.solune-point-page .point_list li.solune-point-entry.point_use { border-color: var(--solune-border); background: none; }
body.solune-page #point.solune-point-page .solune-point-entry-copy { display: grid; gap: .15rem; min-width: 0; }
body.solune-page #point.solune-point-page .point_tit { color: var(--solune-text); font-size: .875rem; font-weight: 600; }
body.solune-page #point.solune-point-page :is(.point_date1, .point_date) { color: var(--solune-muted); font-size: .72rem; font-variant-numeric: tabular-nums; }
body.solune-page #point.solune-point-page .solune-point-entry-num { text-align: right; }
body.solune-page #point.solune-point-page .point_num { display: block; color: var(--solune-primary); font-size: .9375rem; font-weight: 800; font-variant-numeric: tabular-nums; }
body.solune-page #point.solune-point-page .point_use .point_num { color: var(--solune-danger); }
body.solune-page #point.solune-point-page .solune-point-rest { display: block; margin-top: .15rem; color: var(--solune-muted); font-size: .72rem; font-variant-numeric: tabular-nums; }

/* 소계. 시안은 바닥에 세 칸으로 둔다. 전에는 검은 띠 하나였다. */
body.solune-page #point.solune-point-page .solune-point-sum {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: .75rem;
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
}
body.solune-page #point.solune-point-page .solune-point-sum dt { margin: 0; color: var(--solune-muted); font-size: .7rem; }
body.solune-page #point.solune-point-page .solune-point-sum dd { margin: .15rem 0 0; color: var(--solune-text); font-size: .9375rem; font-weight: 800; font-variant-numeric: tabular-nums; }
body.solune-page #point.solune-point-page .solune-point-sum-plus dd { color: var(--solune-primary); }
body.solune-page #point.solune-point-page .solune-point-sum-minus dd { color: var(--solune-danger); }

/* 바닥으로 내려온 창닫기는 가운데 둔다. 위쪽 옛 규칙이 오른쪽 끝으로 밀고
   있어 같은 힘으로 다시 적는다. */
body.solune-page #point.solune-point-page .solune-point-actions { justify-content: center; }

/* ━━━━ scrap.css ━━━━
   (옛 파일 · 원래 순서 350 · 원래 조건: 스크랩(member 스킨 scrap · scrap_popin)) */

/* The scrap popup keeps the original Gnuboard actions inside a calm Solune card. */

body.solune-page .solune-scrap-page #win_title {
    margin: 0;
    padding: 0 !important;
    color: var(--solune-text);
    font-size: clamp(1.2rem, 3vw, 1.55rem);
    font-weight: 900;
    letter-spacing: -.045em;
    line-height: 1.3;
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row {
    display: grid !important;
    grid-template-areas:
        "title title delete"
        "category date delete";
    grid-template-columns: minmax(0, 1fr) auto auto;
    align-items: center;
    column-gap: .75rem;
    row-gap: .45rem;
    min-height: 4.8rem;
    margin: 0;
    padding: .85rem 1rem;
    border: 1px solid var(--solune-border);
    border-radius: .85rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    list-style: none;
    transition: border-color .18s ease, background-color .18s ease, box-shadow .18s ease, transform .18s ease;
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row:hover {
    border-color: color-mix(in srgb, var(--solune-primary) 55%, var(--solune-border));
    background: var(--solune-surface-tint);
    box-shadow: var(--solune-shadow-sm);
    transform: translateY(-1px);
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_tit {
    display: block;
    min-width: 0;
    overflow: hidden;
    padding: 0;
    color: var(--solune-text);
    font-size: .84rem;
    font-weight: 900;
    line-height: 1.4;
    text-overflow: ellipsis;
    white-space: nowrap;
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_tit:hover {
    color: var(--solune-primary);
    text-decoration: none;
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_cate {
    display: inline-flex;
    width: fit-content;
    align-items: center;
    margin: 0;
    padding: .25rem .55rem;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 22%, var(--solune-border));
    border-radius: 999px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: .67rem;
    font-weight: 800;
    line-height: 1.2;
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_cate:hover {
    border-color: var(--solune-primary);
    text-decoration: none;
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_datetime {
    color: var(--solune-muted);
    font-size: .68rem;
    line-height: 1.3;
    white-space: nowrap;
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_datetime .fa {
    margin-right: .2rem;
    color: var(--solune-primary);
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_del {
    position: static;
    display: grid;
    grid-area: delete;
    width: 2rem;
    height: 2rem;
    margin: 0;
    padding: 0;
    place-items: center;
    border: 1px solid transparent;
    border-radius: .6rem;
    color: var(--solune-muted);
    font-size: .85rem;
}

body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_del:hover,
body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_del:focus-visible {
    border-color: color-mix(in srgb, var(--color-error) 25%, var(--solune-border));
    background: color-mix(in srgb, var(--color-error) 8%, transparent);
    color: var(--color-error);
}

body.solune-page #scrap.solune-scrap-page :is(.solune-scrap-empty, .empty_li, .empty_list) {
    display: grid !important;
    grid-column: 1 / -1;
    min-height: 9rem;
    place-items: center;
    padding: 2rem 1rem;
    border: 1px dashed var(--solune-border-strong);
    border-radius: .85rem;
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    font-size: .82rem;
    font-weight: 700;
    text-align: center;
}

body.solune-page #scrap.solune-scrap-page .win_btn.solune-scrap-actions,
body.solune-page #scrap_do.solune-scrap-page .win_btn.solune-scrap-actions {
    display: flex;
    justify-content: flex-end;
    gap: .5rem;
    margin: 0 !important;
    padding: 0;
}

body.solune-page .solune-scrap-page .solune-scrap-actions .btn_close {
    margin: 0;
}

/* Scrap confirmation popup */
body.solune-page #scrap_do.solune-scrap-page {
    width: min(calc(100% - 1.5rem), 36rem);
    padding: clamp(1rem, 3vw, 1.5rem) !important;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-form {
    display: grid;
    gap: 1rem;
    margin: 0;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-form-body {
    padding: 0;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-form-body > ul {
    display: grid;
    gap: .9rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-form-body > ul > li {
    margin: 0;
    padding: 0;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-form-body .scrap_tit {
    display: block;
    margin: 0;
    padding: .9rem 1rem;
    border: 1px solid var(--solune-border);
    border-radius: .85rem;
    background: var(--solune-surface-soft);
    color: var(--solune-text);
    font-size: .84rem;
    font-weight: 900;
    line-height: 1.5;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-form-body > ul > li + li label {
    display: block;
    margin-bottom: .45rem;
    color: var(--solune-text-soft);
    font-size: .76rem;
    font-weight: 800;
}

body.solune-page #scrap_do.solune-scrap-page textarea {
    display: block;
    width: 100%;
    min-height: 9rem;
    box-sizing: border-box;
    resize: vertical;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-note {
    display: flex;
    align-items: flex-start;
    gap: .5rem;
    margin: 0;
    padding: .75rem 1rem;
    border: 1px solid color-mix(in srgb, var(--solune-primary) 22%, var(--solune-border));
    border-radius: var(--solune-radius-md);
    background: var(--solune-primary-soft);
    color: var(--solune-text-soft);
    font-size: .74rem;
    line-height: 1.5;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-note::before {
    content: "\f05a";
    flex: 0 0 auto;
    color: var(--solune-primary);
    font-family: FontAwesome;
}

body.solune-page #scrap_do.solune-scrap-page .solune-scrap-actions .btn_submit {
    margin: 0;
}

@media (max-width: 40rem) {
    body.solune-page #scrap.solune-scrap-page,
    body.solune-page #scrap_do.solune-scrap-page {
        width: calc(100% - 1rem);
        margin: .5rem auto;
        border-radius: var(--solune-radius-md);
    }

    body.solune-page #scrap.solune-scrap-page .solune-scrap-row {
        grid-template-areas:
            "title delete"
            "category date";
        grid-template-columns: minmax(0, 1fr) auto;
        column-gap: .6rem;
        padding: .75rem;
    }

    body.solune-page #scrap.solune-scrap-page .solune-scrap-row .scrap_datetime {
        justify-self: end;
    }
}

@media (prefers-reduced-motion: reduce) {
    body.solune-page #scrap.solune-scrap-page .solune-scrap-row {
        transition: none;
    }
}

/* ── 시안 `팝업 페이지 개선` 1c 마무리 ──────────────────────────────── */

body.solune-page #scrap.solune-scrap-page .solune-scrap-list { display: block; gap: 0; }
/* 한 줄은 두 단이다 — 위에 게시판과 날짜, 아래에 제목. 제목이 주인공이라
   가장 넓은 자리를 주고, 지우기만 오른쪽 끝에 세운다. */
body.solune-page #scrap.solune-scrap-page .solune-scrap-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: .75rem;
    align-items: center;
    margin: 0;
    padding: .75rem .25rem;
    border: 0;
    border-bottom: 1px solid var(--solune-border);
    border-radius: 0;
    background: none;
}
body.solune-page #scrap.solune-scrap-page .solune-scrap-row:last-child { border-bottom: 0; }
body.solune-page #scrap.solune-scrap-page .solune-scrap-copy { display: grid; gap: .3rem; min-width: 0; }
body.solune-page #scrap.solune-scrap-page .solune-scrap-meta { display: flex; align-items: center; gap: .5rem; }
body.solune-page #scrap.solune-scrap-page .scrap_cate {
    display: inline-flex;
    position: static;
    align-items: center;
    padding: .1rem .45rem;
    border: 0;
    border-radius: var(--solune-radius-sm);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: .7rem;
    font-weight: 700;
}
body.solune-page #scrap.solune-scrap-page .scrap_datetime { position: static; color: var(--solune-muted); font-size: .72rem; font-variant-numeric: tabular-nums; }
body.solune-page #scrap.solune-scrap-page .scrap_tit {
    display: block;
    overflow: hidden;
    color: var(--solune-text);
    font-size: .875rem;
    font-weight: 600;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 비어 있을 때. 시안은 아이콘 한 칸과 한 줄이다. */
body.solune-page #scrap.solune-scrap-page .solune-scrap-empty { gap: .875rem; border: 0; background: none; }
body.solune-page #scrap.solune-scrap-page .solune-scrap-empty-icon {
    display: grid;
    width: 3rem;
    height: 3rem;
    place-items: center;
    border-radius: var(--solune-radius-md);
    background: var(--solune-surface-soft);
    color: var(--solune-muted-soft);
    font-size: 1.125rem;
}

/* 바닥으로 내려온 창닫기는 가운데. 위쪽 옛 규칙이 .win_btn 까지 적어 (1,4,1)
   이라 같은 모양으로 다시 적는다. */
body.solune-page #scrap.solune-scrap-page .win_btn.solune-scrap-actions { justify-content: center; }
/* 제목은 창 이름이라 머리의 공통 크기(1.25rem)에 맞춘다. 위쪽 옛 규칙이
   1.55rem 까지 키우고 있었다. */
body.solune-page .solune-scrap-page .solune-win-head #win_title { font-size: 1.25rem; font-weight: 800; letter-spacing: -.03em; }

/* ━━━━ popup.css ━━━━
   (옛 파일 · 원래 순서 390 · 원래 조건: 모든 화면 · head.sub.php — 맨 뒤) */

/* 팝업 창의 공통 껍데기.

   그누보드는 별창으로 뜨는 화면을 다 같은 모양으로 짠다.

       .new_win > #win_title  +  본문  +  .win_btn

   커뮤니티(프로필 · 추천메일 · 본인확인 · 비밀번호 재설정 · 설문 결과)와
   쇼핑몰(사용후기 쓰기 · 상품문의 쓰기 · 쿠폰 내역 · 상품 추천 · 재입고
   알림 · 큰 이미지)이 같은 뼈대를 쓰므로 한 벌로 덮는다. 창마다 다른
   것만 아래 "창별로 다른 것"에 적는다.

   쪽지 · 포인트 · 스크랩 세 창은 각자 제 스타일시트(memo.css · point.css ·
   scrap.css)를 갖고 있고 그쪽이 이 파일보다 먼저 실린다. 껍데기를 여기서
   덮으면 그 손질이 지워진다 — 제목의 실선, 바닥의 회색 버튼 띠가 그렇게
   덧그려졌다. 그래서 껍데기를 통째로 중첩 블록 하나에 넣고, 바깥 선택자의
   :not() 이 세 창을 한 번에 비켜 가게 한다. 새 창을 그렇게 따로 꾸미면
   그 이름도 목록에 더한다.

   skins.css 의 공통 다리에서 `.new_win` 을 뺐다. 그쪽은 `:is(#bo_list, …)`
   안에 두어 id 무게를 갖는데, 팝업 껍데기는 이제 이 파일이 통째로
   맡으므로 두 곳이 겹칠 이유가 없다. */

/* 쇼핑몰은 온담을 따라 모서리를 굴리지 않는다. 규칙을 하나 더 얹어
   덮으려 하면 카드 규칙의 :not() 세 개에 밀리므로 토큰으로 넘긴다. */
body.solune-shop-page { --solune-popup-radius: 0; }

/* skins.css 의 공통 다리가 하던 글꼴·제목색 몫. 아래 껍데기는 세 창을
   비켜 가므로, 이것만은 모든 팝업에 그대로 남긴다. */
body.solune-page .new_win,
body.solune-page .new_win :is(h1, h2, h3, h4, h5) {
    color: var(--solune-text);
    font-family: var(--solune-font);
}

/* --- 창 바탕 --- */

/* 팝업은 브라우저 창 하나를 통째로 쓴다. 본문 페이지와 달리 헤더도
   푸터도 없어, 카드를 가운데 세우는 일을 body 가 해야 한다.

   .new_win 이 팝업에만 나오는 것은 아니다 — 아이디·비밀번호 찾기처럼
   헤더와 사이드바를 낀 보통 페이지 안에도 들어간다. 그런 화면의 바탕까지
   바꾸면 안 되므로, 사이트 헤더가 없을 때만 건다. */
body.solune-page:not(:has([data-solune-header])):has(.new_win:not(.solune-winpage)) {
    margin: 0;
    min-height: 100vh;
    background: var(--solune-surface-soft);
}

/* --- 껍데기 --- */

body.solune-page .new_win:not(.solune-winpage) {
    width: min(100% - 2rem, 46rem);
    margin: clamp(.75rem, 3vw, 2rem) auto;
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-popup-radius, var(--solune-radius-lg));
    background: var(--solune-surface);
    box-shadow: 0 1px 2px color-mix(in srgb, var(--solune-text) 6%, transparent);
    color: var(--solune-text);
    text-align: left;

    /* 제목.
       코어는 여기에 높이 50px 과 후광 그림자를 박아 둔다. 그림자 대신
       실선 한 줄로 머리와 몸을 가른다. */
    & #win_title {
        height: auto;
        margin: 0;
        border-bottom: 1px solid var(--solune-border);
        background: var(--solune-surface);
        box-shadow: none;
        color: var(--solune-text);
        padding: 1.15rem 1.5rem;
        font-size: 1.25rem;
        font-weight: 900;
        letter-spacing: -.04em;
        line-height: 1.3;
    }

    & #win_title .win_total {
        border-radius: 0;
        background: var(--solune-surface-soft);
        color: var(--solune-text-soft);
    }

    /* 본문 상자는 창마다 이름이 다르다(new_win_con · form_01 · tbl_wrap).
       여백은 한 곳에서만 준다 — 겹쳐 붙으면 창마다 안쪽 폭이 달라진다. */
    & > form > :is(.new_win_con, .form_01, .tbl_wrap),
    & > :is(.new_win_con, .form_01, .tbl_wrap, ul) {
        margin: 0;
        padding: 1.5rem;
    }

    & :is(.new_win_con, .form_01) > ul {
        display: grid;
        gap: 1.1rem;
        margin: 0;
        padding: 0;
        list-style: none;
    }

    & :is(.new_win_con, .form_01) > ul > li {
        margin: 0;
        min-width: 0;
    }

    & .frm_info {
        display: block;
        margin-top: .35rem;
        color: var(--solune-muted);
        font-size: .78rem;
        line-height: 1.5;
    }

    /* 입력칸. 모서리를 굴리지 않고 테두리 한 줄로 둔다. */
    & :is(.frm_input, input[type="text"], input[type="email"], input[type="tel"], input[type="password"], textarea, select) {
        width: 100%;
        border: 1px solid var(--solune-border-strong);
        border-radius: var(--solune-popup-radius, var(--solune-radius-sm));
        background: var(--solune-surface);
        color: var(--solune-text);
        padding: .6rem .8rem;
        font: inherit;
        font-size: .9rem;
    }

    /* 한 줄짜리 입력만 44px 를 보장한다. 높이를 위 규칙에 함께 두면 :is()
       가 속성 선택자 무게를 얻어 아래 textarea 규칙을 눌러 버린다.
       textarea 도 .frm_input 을 달고 있어 여기서 따로 빼 준다. */
    & :is(.frm_input, input[type="text"], input[type="email"], input[type="tel"], input[type="password"], select):not(textarea) {
        min-height: 2.75rem;
    }

    & textarea {
        min-height: 8rem;
        line-height: 1.6;
        resize: vertical;
    }

    & :is(.frm_input, textarea, select):focus {
        border-color: var(--solune-primary);
        box-shadow: none !important;
        outline: 2px solid color-mix(in srgb, var(--solune-primary) 45%, transparent);
        outline-offset: 1px;
    }

    & ::placeholder { color: var(--solune-muted-soft); }

    /* 좌우 두 칸짜리 줄(상품문의의 이메일 · 휴대폰). 코어는 float 로 띄운다. */
    & li:has(> .form_left) {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 1.1rem;
    }

    & :is(.form_left, .form_right) {
        float: none;
        width: auto;
        min-width: 0;
    }

    /* 체크상자.
       코어 스킨은 label 안의 빈 span 을 배경 이미지로 칠해 표식을 만든다.
       그 이미지는 파란색이라 팔레트에서 겉돈다. 진짜 입력을 보이게
       되돌리고 accent-color 로 색만 맞춘다. */
    & .chk_box label > span { display: none !important; }

    & .chk_box :is(input[type="checkbox"], input[type="radio"]) {
        position: static;
        width: 1.05rem;
        height: 1.05rem;
        margin: 0;
        accent-color: var(--solune-primary);
        opacity: 1;
    }

    & .chk_box > label {
        display: inline-flex;
        min-height: 2.75rem;
        align-items: center;
        gap: .5rem;
        color: var(--solune-text-soft);
        font-size: .9rem;
        font-weight: 600;
        cursor: pointer;
    }

    /* 바닥 버튼.
       쿠폰 내역만 .btn_close 가 .win_btn 없이 창의 직계다. 버튼 규칙을
       .win_btn 안쪽으로 좁히지 않고 둘 다 잡는 이유다. */
    & .win_btn {
        display: flex;
        align-items: center;
        justify-content: flex-end;
        gap: .5rem;
        margin: 0;
        border-top: 1px solid var(--solune-border);
        background: var(--solune-surface-soft);
        padding: 1rem 1.5rem;
        text-align: right;
    }

    /* 창 안 어디에 있든 잡는다. 본인확인처럼 .win_btn 도 .new_win_con 도
       아닌 .cert_btn 안에 버튼을 두는 스킨이 있다. */
    & :is(.btn_submit, #btn_submit, .btn_close) {
        display: inline-flex;
        min-width: 6.5rem;
        min-height: 2.75rem;
        align-items: center;
        justify-content: center;
        /* 카드와 같은 결로. 쇼핑몰은 0, 커뮤니티는 살짝 둥글다. */
        border-radius: var(--solune-popup-radius, var(--solune-radius-sm));
        padding: 0 1.25rem;
        font-size: .9rem;
        font-weight: 800;
        letter-spacing: -.02em;
        cursor: pointer;
    }

    /* 추천메일만 보내기 단추에 .btn_submit 대신 id 를 쓴다
       (btn_b02 reply_btn + #btn_submit). 그래서 둘 다 잡는다. */
    & :is(.btn_submit, #btn_submit) {
        order: 2;
        border: 1px solid var(--solune-primary);
        background: var(--solune-primary);
        color: var(--color-primary-content, #fff);
    }

    & :is(.btn_submit, #btn_submit):hover {
        border-color: var(--solune-primary-hover);
        background: var(--solune-primary-hover);
    }

    & .btn_close {
        order: 1;
        border: 1px solid var(--solune-border-strong);
        background: var(--solune-surface);
        color: var(--solune-text-soft);
    }

    & .btn_close:hover {
        border-color: var(--solune-text-soft);
        color: var(--solune-text);
    }

    & :is(.btn_submit, #btn_submit, .btn_close):focus-visible {
        outline: 2px solid var(--solune-primary);
        outline-offset: 2px;
    }

    /* 빈 상태는 본문(위시리스트 · 쿠폰존)과 같은 점선 상자로. */
    & :is(.empty_li, .empty_list) {
        display: block;
        border: 1px dashed var(--solune-border-strong);
        color: var(--solune-muted);
        padding: 2.5rem 1rem;
        text-align: center;
        font-size: .9rem;
    }

    /* 팝업 폭은 window.open 이 정하지만 사용자가 줄일 수 있다. */
    @media (max-width: 640px) {
        width: 100%;
        margin: 0;
        border-inline: 0;

        & > form > :is(.new_win_con, .form_01, .tbl_wrap),
        & > :is(.new_win_con, .form_01, .tbl_wrap, ul) {
            padding: 1.15rem;
        }

        & #win_title { padding: 1rem 1.15rem; }
        & .win_btn { padding: .85rem 1.15rem; }
        & li:has(> .form_left) { grid-template-columns: minmax(0, 1fr); }
    }
}

/* --- 헤더가 있는 페이지 안의 .new_win --- */

/* 아이디·비밀번호 찾기, 본인인증 다시 하기처럼 헤더와 사이드바를 낀 보통
   페이지 안에도 .new_win 이 들어간다. 이때는 창을 가운데 세울 이유가 없다.
   46rem 로 묶어 두면 같은 페이지의 다른 카드보다 좁아 단이 어긋난다.
   본인인증 화면에서 위아래 두 카드의 폭이 달랐다. 겉모습은 그대로 두고
   폭만 본문에 맡긴다. */
body.solune-page:has([data-solune-header]) .new_win {
    width: auto;
    margin-inline: 0;
}

/* 본인인증의 인증수단 상자는 스킨이 #find_info 로 모서리를 3px 로 못 박아
   둔다. 같은 페이지의 다른 카드와 어긋나므로 무게를 맞춰 되돌린다. */
body.solune-page #find_info.new_win {
    border-radius: var(--solune-popup-radius, var(--solune-radius-lg));
}

/* 동의 체크상자. 스킨은 안내 카드 오른쪽 끝에 띄워 두는데, 문구를 드러내고
   나면 제목과 떨어져 읽힌다. 표 아래 한 줄로 내린다. */
body.solune-page .member_cert_refresh_agree {
    position: static;
    display: flex;
    align-items: center;
    gap: .5rem;
    border-top: 1px solid var(--solune-border);
    margin: 0 1.25rem 1.25rem;
    padding: 1rem 0 0;
}

body.solune-page .member_cert_refresh_agree label {
    display: inline-flex;
    min-height: 2.75rem;
    align-items: center;
    gap: .5rem;
    color: var(--solune-text-soft);
    font-size: .9rem;
    font-weight: 600;
    cursor: pointer;
}

body.solune-page .member_cert_refresh_agree label > span { display: none; }

body.solune-page .member_cert_refresh_agree b { font-weight: 600; }

body.solune-page .member_cert_refresh_agree input[type="checkbox"] {
    position: static;
    width: 1.05rem;
    height: 1.05rem;
    margin: 0;
    accent-color: var(--solune-primary);
    opacity: 1;
}

/* 인증수단 단추 세 개는 한 줄로. */
body.solune-page .cert_btn {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
}

/* --- 창별로 다른 것 --- */

/* 프로필 — 이름 띠 · 표 · 인사말.
   스킨은 이름 자리에 큰 프로필 사진과 get_sideview() 를 나란히 찍는다.
   sideview 안에도 22px 사진이 들어 있어 같은 얼굴이 두 번 나온다.
   큰 것만 남기고 sideview 쪽 사진은 접는다. 제목의 sideview 도 같다. */
body.solune-page #profile :is(#win_title, .profile_name) .sv_wrap .profile_img { display: none; }

body.solune-page #profile #win_title .sv_wrap a {
    color: inherit;
    font: inherit;
    cursor: default;
}

body.solune-page #profile .profile_name {
    display: flex;
    align-items: center;
    gap: .9rem;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
    padding: 1.25rem 1.5rem;
    font-size: 1.05rem;
    font-weight: 800;
    letter-spacing: -.02em;
}

body.solune-page #profile .my_profile_img img {
    display: block;
    width: 3.5rem;
    height: 3.5rem;
    border: 1px solid var(--solune-border);
    border-radius: 50%;
    object-fit: cover;
}

/* 표는 라벨·값이 번갈아 나오는 네 칸짜리다. 좁은 창에서 라벨이 눌려
   "회원가입 / 일" 처럼 글자가 끊기므로, 칸을 풀어 두 쌍씩 세운다. */
body.solune-page #profile .tbl_head02 { border: 0; }

body.solune-page #profile .tbl_head02 table {
    width: 100%;
    border: 0;
    border-collapse: collapse;
}

body.solune-page #profile .tbl_head02 :is(tbody, tr) { display: block; }

body.solune-page #profile .tbl_head02 tr {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: .25rem 1.25rem;
}

body.solune-page #profile .tbl_head02 :is(th, td) {
    display: block;
    width: auto;
    border: 0;
    background: none;
    padding: 0;
    text-align: left;
    white-space: nowrap;
}

body.solune-page #profile .tbl_head02 th {
    grid-row: 1;
    color: var(--solune-muted);
    font-size: .8rem;
    font-weight: 700;
}

body.solune-page #profile .tbl_head02 td {
    grid-row: 2;
    margin-bottom: 1rem;
    color: var(--solune-text);
    font-size: .95rem;
    font-weight: 700;
}

/* 홈페이지 줄은 colspan 으로 한 칸을 다 쓴다. */
body.solune-page #profile .tbl_head02 td[colspan] {
    grid-column: 1 / -1;
    overflow: hidden;
    text-overflow: ellipsis;
}

body.solune-page #profile .tbl_head02 th i {
    margin-right: .3rem;
    color: var(--solune-muted-soft);
}

body.solune-page #profile .new_win_con > section {
    border: 1px solid var(--solune-border);
    border-radius: var(--solune-popup-radius, var(--solune-radius-md));
    background: var(--solune-surface-soft);
    padding: 1rem 1.15rem;
}

body.solune-page #profile .new_win_con > section h2 {
    margin: 0 0 .4rem;
    color: var(--solune-muted);
    font-size: .8rem;
    font-weight: 800;
}

body.solune-page #profile .new_win_con > section p {
    margin: 0;
    color: var(--solune-text-soft);
    font-size: .9rem;
    line-height: 1.65;
}

/* 사용후기 쓰기 — 평점.
   스킨은 li 를 33.333% 로 띄워 다섯 줄이 3열 두 줄로 접힌다. 다섯을 한
   줄에 늘어놓고 각각을 고를 수 있는 칸으로 만든다. */
body.solune-shop-page #sit_use_write #sit_use_write_star {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: .5rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

body.solune-shop-page #sit_use_write #sit_use_write_star:after { display: none; }

body.solune-shop-page #sit_use_write #sit_use_write_star > li {
    position: relative;
    float: none;
    width: auto;
    min-width: 0;
    margin: 0;
    border: 1px solid var(--solune-border);
    background: var(--solune-surface);
    padding: .85rem .5rem;
    text-align: center;
    transition: border-color .15s, background .15s;
}

body.solune-shop-page #sit_use_write #sit_use_write_star > li:has(:checked) {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
}

/* 라디오를 칸 전체에 깔아 어디를 눌러도 골라지게 한다. 화면에서 지우지
   않고 투명하게만 두어 키보드 초점과 낭독기 이름은 그대로 남는다. */
body.solune-shop-page #sit_use_write #sit_use_write_star input[type="radio"] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    opacity: 0;
    cursor: pointer;
}

body.solune-shop-page #sit_use_write #sit_use_write_star label {
    display: block;
    min-height: 0;
    color: var(--solune-text-soft);
    font-size: .82rem;
    font-weight: 700;
    pointer-events: none;
}

body.solune-shop-page #sit_use_write #sit_use_write_star > li:has(:checked) label {
    color: var(--solune-primary);
}

body.solune-shop-page #sit_use_write #sit_use_write_star img {
    display: block;
    width: 5.3rem;
    max-width: 100%;
    height: auto;
    margin: .4rem auto 0;
}

/* 라디오가 칸 전체를 덮고 있어 키보드 초점 링은 칸에 그린다. */
body.solune-shop-page #sit_use_write #sit_use_write_star > li:has(:focus-visible) {
    outline: 2px solid var(--solune-primary);
    outline-offset: 2px;
}

/* 재입고 알림 — 상품 이름 띠와 약관 상자. */
body.solune-shop-page #sit_sms_new .form_01 { padding: 1.5rem; }

body.solune-shop-page #sit_sms_new .prd_name {
    border-left: 3px solid var(--solune-primary);
    background: var(--solune-surface-soft);
    color: var(--solune-text);
    padding: .9rem 1rem;
    font-size: 1rem;
    font-weight: 800;
}

body.solune-shop-page #sit_sms_new li > strong {
    display: block;
    margin: 0 0 .5rem;
    color: var(--solune-text-soft);
    font-size: .85rem;
    font-weight: 800;
}

body.solune-shop-page #sit_sms_new textarea {
    min-height: 9rem;
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
    font-size: .82rem;
}

body.solune-shop-page #sit_sms_new #sms_agree { padding: 0; }

/* 상품 추천 — 표를 라벨 위 · 입력 아래로 편다. 두 칸짜리 표는 좁은
   창에서 라벨 칸이 눌려 글자가 세로로 쌓인다. */
body.solune-shop-page #sit_rec_new .tbl_wrap { margin: 0; }

body.solune-shop-page #sit_rec_new table {
    width: 100%;
    border: 0;
    border-collapse: collapse;
}

body.solune-shop-page #sit_rec_new :is(tbody, tr) { display: block; }

body.solune-shop-page #sit_rec_new tr + tr { margin-top: 1.1rem; }

body.solune-shop-page #sit_rec_new :is(th, td) {
    display: block;
    width: auto;
    border: 0;
    background: none;
    padding: 0;
    text-align: left;
}

body.solune-shop-page #sit_rec_new th {
    margin-bottom: .4rem;
    color: var(--solune-text-soft);
    font-size: .85rem;
    font-weight: 800;
}

/* 쿠폰 내역 — 쿠폰 한 장을 카드로. 오른쪽 끝에 할인값을 크게 둔다. */
body.solune-shop-page #coupon > ul {
    display: grid;
    gap: .6rem;
    list-style: none;
}

/* 빈 상태 줄은 쿠폰 카드가 아니다. 아래 .empty_li 규칙에 넘긴다. */
body.solune-shop-page #coupon > ul > li:not(.empty_li) {
    display: grid;
    gap: .5rem;
    border: 1px solid var(--solune-border);
    background: var(--solune-surface);
    padding: 1rem 1.15rem;
}

body.solune-shop-page #coupon .cou_top {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: .75rem;
}

body.solune-shop-page #coupon .cou_tit {
    color: var(--solune-text);
    font-size: .98rem;
    font-weight: 800;
    letter-spacing: -.02em;
}

body.solune-shop-page #coupon .cou_pri {
    flex: none;
    color: var(--ondam-sale, var(--solune-primary));
    font-size: 1.35rem;
    font-weight: 900;
    letter-spacing: -.03em;
}

body.solune-shop-page #coupon .cou_top + div {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: .5rem;
    color: var(--solune-muted);
    font-size: .8rem;
}

/* 쿠폰 내역은 .win_btn 없이 창닫기가 직계라 바닥 띠를 직접 만든다. */
body.solune-shop-page #coupon > .btn_close {
    display: block;
    width: calc(100% - 3rem);
    margin: 0 1.5rem 1.5rem;
}

/* 큰 이미지 보기 — 창 크기를 스크립트가 이미지에 맞춰 다시 잡는다.
   카드 폭을 좁히면 그 계산과 어긋나므로 여기서는 폭을 풀어 둔다. */
body.solune-shop-page #sit_pvi_nw.new_win {
    width: auto;
    margin: 0;
    border: 0;
    border-radius: 0;
    background: var(--solune-surface);
    box-shadow: none;
}

body.solune-shop-page #sit_pvi_nw #sit_pvi_nwbig img {
    max-width: 100%;
    height: auto;
}

body.solune-shop-page #sit_pvi_nw ul { padding: 0 1.5rem; }

body.solune-shop-page #sit_pvi_nw li img {
    border: 1px solid var(--solune-border);
    object-fit: cover;
}

body.solune-shop-page #sit_pvi_nw .img_thumb:hover img,
body.solune-shop-page #sit_pvi_nw .img_thumb:focus-visible img {
    border-color: var(--solune-primary);
}

/* --- 좁은 창 --- */

/* 공통 껍데기 몫은 위 중첩 블록 안에 있다. 여기는 창별 예외만 남긴다. */
@media (max-width: 640px) {
    body.solune-shop-page #sit_sms_new .form_01 { padding: 1.15rem; }

    body.solune-shop-page #sit_use_write #sit_use_write_star {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    body.solune-shop-page #coupon > .btn_close {
        width: calc(100% - 2.3rem);
        margin: 0 1.15rem 1.15rem;
    }
}

/* --- 게시물 복사 · 이동 (bbs/move.php) ------------------------------------
   시안 `게시물 복사이동 (1).html` 을 따른다 — 고를 게시판이 표의 줄이 아니라
   테두리를 두른 카드 한 줄씩이고, 지금 게시물이 있는 게시판에는 표시가 붙는다.

   이 화면은 스킨이 없다. 마크업이 코어 bbs/move.php 안에 그대로 적혀 있어
   테마가 쓸 수 있는 것은 CSS 뿐이다. 그래서 시안의 몇 가지는 옮기지 못했다.

     - 머리 오른쪽 × 단추, 원본 글 정보 띠(게시판 · 제목 · 글번호),
       "선택 2 / 4" 세는 줄 — 마크업에도 자료에도 없다.
     - 게시판 이름과 "그룹 · 아이디"를 두 줄로 나누는 것 — 코어가 그 셋을
       글자 하나로 이어 붙여 놓아 CSS 로는 자를 수 없다.

   옮긴 것은 카드 줄 · 현재 게시판 표시 · 머리와 설명 줄 · 바닥 단추다. */

/* 창은 게시판 목록만 담으므로 좁게. 기본값(46rem)은 이 내용에 비해 넓다.

   폭을 좁히는 것만으로는 모자란다. 목록 스킨이 window.open 으로 여는 창이
   500px 이라(skin/board/basic/list.skin.php 의 select_copy) 껍데기의
   640px 이하 규칙이 늘 걸리는데, 그 규칙은 창을 화면 끝까지 늘리고
   (width:100% · margin:0 · border-inline:0) 모서리를 죽인다. 폭만 다시
   좁히면 창이 왼쪽에 붙고 오른쪽에 빈 띠가 남는다(484px 창에서 32px).
   여백과 좌우 테두리를 함께 되돌려 카드 꼴을 지킨다. */
body.solune-page #copymove.new_win:not(.solune-winpage) {
    width: min(100% - 2rem, 35rem);
    margin: clamp(.75rem, 3vw, 2rem) auto;
    border-inline: 1px solid var(--solune-border);
    /* 머리줄(#win_title)과 바닥 단추 줄(.win_btn)이 제 바탕을 창 끝까지
       그려 둥근 모서리를 네모로 덮는다. 창에서 잘라 낸다 — 이 창에는
       밖으로 나가야 할 것(이름 드롭다운 · 툴팁)이 없다. */
    overflow: hidden;
}

/* 표 껍데기의 테두리·배경을 걷는다. 줄마다 카드가 서므로 겉테두리가 겹친다. */
body.solune-page #copymove .tbl_head01 {
    border: 0;
    border-radius: 0;
    background: none;
    margin: 0;
    /* 표를 가로로 굴리던 상자다. 줄이 카드가 되어 굴릴 것이 없다. */
    overflow: visible;
    /* 아래쪽 여백을 비우면 마지막 카드의 테두리가 바닥 단추 줄의 윗선에
       그대로 붙는다(실측 369px 에서 두 선이 겹쳤다). */
    padding: 1.25rem 1.5rem;
}
/* 자료 표에 걸어 둔 min-width(640px)를 푼다. 그것 때문에 좁은 창에서 줄이
   창 밖으로 나갔다 — 표일 때는 가로로 굴려 읽는 것이 맞지만 지금은 카드다. */
body.solune-page #copymove table { display: block; width: 100%; min-width: 0; border: 0; margin: 0; }

/* 설명 줄. 코어가 <caption> 에 적어 둔 문장을 제목 아래 한 줄로 내린다
   (가운데 정렬된 표 제목이 아니라 머리를 받아 주는 글이다). */
body.solune-page #copymove caption {
    display: block;
    width: auto;
    height: auto;
    overflow: visible;
    margin: 0 0 1rem;
    padding: 0;
    color: var(--solune-muted);
    font-size: .8125rem;
    font-weight: 400;
    line-height: 1.5;
    text-align: left;
    clip-path: none;
}

/* 머리줄 — 전체 선택. 표의 머리가 아니라 목록 위 한 줄로 둔다. */
body.solune-page #copymove thead { display: block; }
body.solune-page #copymove thead tr {
    display: flex;
    align-items: center;
    gap: .625rem;
    border: 0;
    background: none;
    padding: 0 .25rem .5rem;
}
body.solune-page #copymove thead th {
    border: 0;
    background: none;
    padding: 0;
    color: var(--solune-muted);
    font-size: .8125rem;
    font-weight: 600;
    text-align: left;
}

/* 목록 — 줄 하나가 카드 하나다. */
body.solune-page #copymove tbody { display: grid; gap: .375rem; }
body.solune-page #copymove tbody tr {
    display: grid;
    min-width: 0;
    grid-template-columns: 1.125rem minmax(0, 1fr);
    gap: .75rem;
    align-items: center;
    border: 1px solid var(--solune-border);
    border-radius: .625rem;
    background: var(--solune-surface);
    padding: .75rem .875rem;
}
body.solune-page #copymove tbody tr:hover { border-color: var(--solune-primary); }
/* 바탕에 !important 를 다시 쓴다. skins.css 의 `.tbl_head01 tbody td` 가
   코어의 줄무늬(bg0·bg1)를 지우려고 !important 로 흰 바탕을 깔아 두는데,
   여기서는 줄 자체가 카드라 칸이 카드 바탕을 덮어 버린다 — 현재 게시판 줄의
   옅은 강조색이 흰 사각형에 가려져 있었다. 특정도로는 못 이긴다. */
body.solune-page #copymove tbody td { min-width: 0; border: 0; background: none !important; padding: 0; text-align: left; }
/* 글자 전체가 과녁이다 — 코어가 <label for> 로 감싸 두었다.
   낭독기 전용 라벨(.sound_only)은 뺀다. 그 라벨도 td 안의 label 이라
   함께 잡으면 감춰 둔 글이 화면에 나온다. */
body.solune-page #copymove tbody td label:not(.sound_only) {
    display: block;
    min-width: 0;
    color: var(--solune-text);
    cursor: pointer;
    font-size: .875rem;
    line-height: 1.45;
    overflow-wrap: anywhere;
}
body.solune-page #copymove :is(thead, tbody) input[type="checkbox"] {
    width: 1.125rem;
    height: 1.125rem;
    margin: 0;
    accent-color: var(--solune-primary);
    cursor: pointer;
}

/* 지금 이 게시물이 있는 게시판. 코어가 줄에 copymove_currentbg 를, 이름 뒤에
   copymove_current 를 붙여 준다. 옅은 강조 바탕과 작은 알약으로 나눈다. */
body.solune-page #copymove tbody tr.copymove_currentbg {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
}
body.solune-page #copymove .copymove_current {
    display: inline-flex;
    align-items: center;
    margin-left: .375rem;
    border-radius: 999px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    padding: .1rem .45rem;
    font-size: .6875rem;
    font-weight: 700;
    vertical-align: middle;
}
