.printing-page { --print-danger: var(--class-destructive, #ff6b6b); }
.printing-heading { display:flex; align-items:flex-end; justify-content:space-between; gap:24px; }
.printing-count { min-width:84px; display:flex; align-items:baseline; justify-content:flex-end; gap:7px; color:var(--class-muted); }
.printing-count strong { color:var(--class-primary); font-size:2rem; line-height:1; }
.model-board { margin-top:48px; }
.board-title-row { display:flex; align-items:end; justify-content:space-between; gap:20px; padding-bottom:16px; border-bottom:1px solid var(--class-border); }
.board-title-row h2 { margin:0; font-size:2rem; }
.board-title-row p { margin:0; color:var(--class-muted); }
.model-list { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; padding-top:20px; }
.model-state { grid-column:1/-1; padding:56px 20px; border-block:1px solid var(--class-border); color:var(--class-muted); text-align:center; }
.model-card { min-width:0; display:grid; grid-template-rows:180px auto; overflow:hidden; border:1px solid var(--class-border); border-radius:8px; background:var(--class-card); color:var(--class-fg); }
.model-preview { position:relative; display:grid; place-items:center; border:0; border-bottom:1px solid var(--class-border); background:linear-gradient(145deg,#111722,#080b10); color:inherit; cursor:pointer; }
.model-preview::before { content:""; width:78px; height:78px; border:1px solid rgba(255,138,52,.56); transform:rotate(30deg) skewY(-8deg); background:rgba(255,138,52,.08); }
.model-preview::after { content:"3D"; position:absolute; color:var(--class-primary); font-size:1rem; font-weight:850; }
.model-preview:hover,.model-preview:focus-visible { background:#171d26; }
.model-preview:focus-visible,.printing-action:focus-visible,.submit-button:focus-visible,.icon-close:focus-visible,.download-button:focus-visible,.delete-button:focus-visible { outline:3px solid var(--class-ring); outline-offset:2px; }
.model-info { display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:12px; padding:16px; }
.student-number { display:grid; place-items:center; width:42px; height:42px; border-radius:4px; background:var(--class-primary); color:var(--class-on-primary); font-size:1.15rem; font-weight:850; }
.model-name { min-width:0; }
.model-name strong,.model-name span { display:block; }
.model-name span { margin-top:3px; color:var(--class-muted); font-size:.8rem; text-transform:uppercase; }
.model-variants { grid-column:1/-1; display:grid; margin-top:4px; border-top:1px solid var(--class-border); }
.model-variant { min-height:48px; display:grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:center; gap:8px; padding:9px 0; }
.model-variant + .model-variant { border-top:1px solid var(--class-border); }
.model-variant strong { min-width:0; color:var(--class-muted); font-size:.78rem; }
.model-variant button,.model-variant a { min-height:34px; display:inline-flex; align-items:center; justify-content:center; padding:7px 9px; border:1px solid var(--class-border); border-radius:4px; background:transparent; color:var(--class-fg); font:800 .75rem inherit; cursor:pointer; }
.model-variant a { color:var(--class-primary); }
.model-variant button:hover,.model-variant button:focus-visible,.model-variant a:hover,.model-variant a:focus-visible { border-color:var(--class-primary); outline:0; }
.model-variant button:focus-visible,.model-variant a:focus-visible { outline:3px solid var(--class-ring); outline-offset:2px; }
.model-variant button:disabled { color:var(--class-muted); opacity:.55; cursor:not-allowed; }
.model-variant-base { grid-template-columns:minmax(0,1fr) auto; }
.model-variant-disabled { grid-template-columns:minmax(0,1fr) auto; }
.model-variant-rigged { grid-template-columns:minmax(0,1fr) auto auto; }
.download-button,.viewer-tools a,.download-all { display:inline-flex; align-items:center; min-height:40px; padding:9px 12px; border:1px solid var(--class-border); border-radius:4px; color:var(--class-fg); font-weight:800; }
.printing-actions { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:64px; padding-top:24px; border-top:1px solid var(--class-border); }
.printing-action { min-height:74px; display:flex; align-items:center; justify-content:center; gap:10px; border:1px solid var(--class-border); border-radius:8px; background:var(--class-secondary); color:var(--class-fg); font:inherit; cursor:pointer; }
.printing-action span { font-size:1.45rem; }
.printing-action.primary { border-color:transparent; background:var(--class-primary); color:var(--class-on-primary); }
.printing-dialog,.viewer-dialog { border:1px solid var(--class-border); border-radius:8px; background:#0b0f16; color:var(--class-fg); }
.printing-dialog { width:min(560px,calc(100vw - 28px)); padding:24px; }
.printing-dialog::backdrop,.viewer-dialog::backdrop { background:rgba(0,0,0,.76); backdrop-filter:blur(8px); }
.dialog-head,.viewer-head { display:flex; align-items:flex-start; justify-content:space-between; gap:20px; }
.dialog-head h2 { margin:0; font-size:1.55rem; }
.dialog-head p { margin:7px 0 0; color:var(--class-muted); }
.icon-close { flex:0 0 42px; width:42px; height:42px; border:1px solid var(--class-border); border-radius:4px; background:transparent; color:var(--class-fg); font-size:1.7rem; cursor:pointer; }
.printing-dialog form { display:grid; gap:16px; margin-top:24px; }
.printing-dialog label { display:grid; gap:8px; color:var(--class-muted); font-size:.875rem; font-weight:750; }
.printing-dialog input { width:100%; min-height:48px; padding:11px 12px; border:1px solid var(--class-border); border-radius:4px; background:#05070b; color:var(--class-fg); font:inherit; }
.printing-dialog input:focus { border-color:var(--class-primary); outline:3px solid var(--class-ring); outline-offset:1px; }
.form-pair { display:grid; grid-template-columns:130px 1fr; gap:12px; }
.file-field small { color:var(--class-muted); font-weight:400; }
.form-message { min-height:24px; margin:0; color:var(--class-muted); }
.form-message.error { color:var(--print-danger); }
.form-message.success { color:var(--class-success); }
.submit-button { min-height:50px; border:0; border-radius:4px; background:var(--class-primary); color:var(--class-on-primary); font:800 1rem inherit; cursor:pointer; }
.submit-button:disabled { opacity:.48; cursor:wait; }
.admin-toolbar { display:flex; align-items:center; justify-content:space-between; margin-top:24px; padding-bottom:12px; border-bottom:1px solid var(--class-border); }
.admin-list { display:grid; max-height:48vh; overflow:auto; }
.admin-row { display:grid; grid-template-columns:44px 1fr auto auto; align-items:center; gap:10px; min-height:62px; border-bottom:1px solid var(--class-border); }
.delete-button { min-height:38px; padding:8px 11px; border:1px solid rgba(255,107,107,.45); border-radius:4px; background:transparent; color:var(--print-danger); font-weight:800; cursor:pointer; }
.viewer-dialog { width:min(1100px,calc(100vw - 24px)); height:min(760px,calc(100vh - 24px)); padding:0; overflow:hidden; }
.viewer-head { min-height:68px; align-items:center; padding:12px 16px; border-bottom:1px solid var(--class-border); }
.viewer-head strong,.viewer-head span { display:block; }
.viewer-head span { margin-top:3px; color:var(--class-muted); font-size:.8rem; }
.viewer-head-actions { display:flex; align-items:center; gap:10px; }
.viewer-animation-control { display:flex; align-items:center; gap:8px; }
.viewer-animation-control span { margin:0; font-weight:800; }
.viewer-animation-control select { min-height:42px; padding:8px 34px 8px 11px; border:1px solid var(--class-border); border-radius:4px; background:#05070b; color:var(--class-fg); font:800 .85rem inherit; }
.viewer-animation-control select:focus-visible { border-color:var(--class-primary); outline:3px solid var(--class-ring); outline-offset:1px; }
.viewer-tools { display:flex; align-items:center; gap:8px; }
.viewer-stage { position:relative; height:calc(100% - 246px); background:#05070b; touch-action:none; }
.viewer-stage canvas { width:100%; height:100%; display:block; }
.viewer-loading { position:absolute; inset:0; display:grid; place-items:center; color:var(--class-muted); }
.viewer-ad-banner { height:110px; margin:0; padding:10px 16px 14px; border-top:1px solid var(--class-border); background:#0b0f16; }
.viewer-ad-banner .ad-banner-box { min-height:64px; }
.viewer-download-bar { min-height:68px; display:flex; align-items:center; justify-content:space-between; gap:16px; padding:9px 16px; border-top:1px solid var(--class-border); background:#0b0f16; }
.viewer-download-bar span { color:var(--class-muted); font-size:.82rem; font-weight:800; }
.viewer-download-link { min-height:44px; display:inline-flex; align-items:center; justify-content:center; padding:10px 16px; border-radius:8px; background:var(--class-primary); color:var(--class-on-primary); font-weight:900; }
.viewer-download-link[aria-disabled="true"] { opacity:.45; pointer-events:none; }
.viewer-download-link:focus-visible { outline:3px solid var(--class-ring); outline-offset:3px; }
.viewer-direction-controls { position:absolute; right:16px; bottom:16px; display:grid; grid-template-columns:repeat(3,44px); grid-template-areas:". up ." "left home right" ". down ."; gap:6px; }
.viewer-direction-controls button { width:44px; height:44px; border:1px solid var(--class-border); border-radius:4px; background:rgba(11,15,22,.9); color:var(--class-fg); font:800 1.15rem inherit; cursor:pointer; backdrop-filter:blur(8px); }
.viewer-direction-controls button:hover,.viewer-direction-controls button:focus-visible { border-color:var(--class-primary); background:var(--class-secondary); outline:0; }
.viewer-direction-controls [data-view="up"] { grid-area:up; }
.viewer-direction-controls [data-view="left"] { grid-area:left; }
.viewer-direction-controls [data-view="home"] { grid-area:home; }
.viewer-direction-controls [data-view="right"] { grid-area:right; }
.viewer-direction-controls [data-view="down"] { grid-area:down; }
@media(max-width:860px){.model-list{grid-template-columns:repeat(2,minmax(0,1fr))}.printing-heading,.board-title-row{align-items:flex-start}.model-card{grid-template-rows:150px auto}.model-info{grid-template-columns:auto 1fr}.download-button{grid-column:1/-1;justify-content:center}.viewer-tools a{display:none}}
@media(max-width:560px){.printing-heading,.board-title-row{display:grid}.printing-count{justify-content:flex-start}.model-list{grid-template-columns:1fr}.model-card{grid-template-columns:112px minmax(0,1fr);grid-template-rows:auto}.model-preview{min-height:168px;border-bottom:0;border-right:1px solid var(--class-border)}.model-info{grid-template-columns:auto 1fr;padding:13px}.model-variant{grid-template-columns:1fr}.model-variant-disabled,.model-variant-rigged{grid-template-columns:1fr}.model-variant button,.model-variant a{width:100%}.download-button{grid-column:1/-1}.printing-actions{grid-template-columns:1fr}.form-pair{grid-template-columns:1fr}.printing-dialog{padding:18px}.viewer-dialog{width:100vw;height:100vh;max-width:none;max-height:none;border:0;border-radius:0}.viewer-head{min-height:64px}.viewer-head-actions{gap:6px}.viewer-animation-control span{display:none}.viewer-animation-control select{max-width:132px}.viewer-stage{height:calc(100% - 228px)}.viewer-ad-banner{height:96px;padding:8px 12px 12px}.viewer-ad-banner .ad-banner-box{min-height:56px}.viewer-download-bar{min-height:68px;padding:9px 12px}.viewer-download-link{min-height:44px;padding-inline:13px}}

/* 2026-07-19 free asset download */
.asset-download-page .classroom-hub { max-width:920px; }
.asset-download-card { margin-top:44px; border-block:1px solid var(--class-border); }
.asset-download-meta { min-height:148px; display:grid; grid-template-columns:auto minmax(0,1fr); align-items:center; gap:20px; padding:24px 0; }
.asset-download-mark { width:76px; height:76px; display:grid; place-items:center; border:1px solid rgba(255,138,52,.55); border-radius:8px; color:var(--class-primary); font-weight:900; }
.asset-download-copy { min-width:0; }
.asset-download-copy strong { display:block; color:var(--class-fg); font-size:clamp(24px,4vw,38px); overflow-wrap:anywhere; }
.asset-download-copy span { display:block; margin-top:7px; color:var(--class-muted); }
.asset-download-ad { margin:0; padding:28px 0; border-top:1px solid var(--class-border); }
.asset-download-ad .ad-banner-box { min-height:160px; }
.asset-download-actions { display:grid; gap:12px; justify-items:start; padding:28px 0; border-top:1px solid var(--class-border); }
.asset-download-actions p { margin:0; color:var(--class-muted); font-size:.9rem; line-height:1.6; }
.asset-download-link { min-height:50px; display:inline-flex; align-items:center; justify-content:center; padding:12px 18px; border-radius:8px; background:var(--class-primary); color:var(--class-on-primary); font-weight:900; }
.asset-download-link[aria-disabled="true"] { opacity:.45; pointer-events:none; }
.asset-download-link:focus-visible { outline:3px solid var(--class-ring); outline-offset:3px; }
@media(max-width:560px){.asset-download-meta{grid-template-columns:56px minmax(0,1fr);gap:14px}.asset-download-mark{width:56px;height:56px}.asset-download-actions{justify-items:stretch}.asset-download-link{width:100%}}
@media(prefers-reduced-motion:reduce){.model-preview,.printing-action{transition:none}}

/* 2026-07-18 personal modeling commissions */
.commission-heading { align-items:center; padding-bottom:36px; border-bottom:1px solid var(--class-border); }
.commission-kicker { margin:0 0 10px; color:var(--class-primary); font-size:.8rem; font-weight:850; }
.commission-heading h1 { letter-spacing:-.055em; }
.commission-heading > div:first-child > p:last-child { max-width:620px; margin-top:14px; color:var(--class-muted); font-size:1.05rem; line-height:1.65; }
.commission-contact { display:flex; flex-wrap:wrap; justify-content:flex-end; gap:10px; }
.commission-button { min-height:48px; display:inline-flex; align-items:center; justify-content:center; padding:11px 16px; border:1px solid var(--class-border); border-radius:var(--test-radius-sm,8px); color:var(--class-fg); font-weight:850; }
.commission-button.primary { border-color:transparent; background:var(--class-primary); color:var(--class-on-primary); }
.commission-button:hover,.commission-button:focus-visible { border-color:var(--class-primary); background:var(--class-secondary); outline:0; }
.commission-button.primary:hover,.commission-button.primary:focus-visible { background:var(--class-primary); }
.commission-button:focus-visible,.owner-tools > summary:focus-visible { outline:3px solid var(--class-ring); outline-offset:2px; }
.commission-guide { margin-top:40px; padding:28px 0; border-block:1px solid var(--class-border); }
.commission-guide > div:first-child { display:flex; align-items:end; justify-content:space-between; gap:24px; }
.commission-guide h2 { font-size:clamp(26px,4vw,36px); }
.commission-guide > div:first-child p { color:var(--class-muted); text-align:right; }
.commission-guide ol { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); margin:24px 0 0; padding:0; list-style:none; border-top:1px solid var(--class-border); }
.commission-guide li { min-height:96px; display:grid; align-content:center; gap:6px; padding:18px; border-bottom:1px solid var(--class-border); }
.commission-guide li + li { border-left:1px solid var(--class-border); }
.commission-guide li strong { color:var(--class-fg); }
.commission-guide li span,.commission-note { color:var(--class-muted); font-size:.9rem; line-height:1.55; }
.commission-note { margin-top:18px; }
.owner-tools { margin-top:64px; border-top:1px solid var(--class-border); }
.owner-tools > summary { min-height:54px; display:flex; align-items:center; width:max-content; color:var(--class-muted); font-size:.85rem; font-weight:800; cursor:pointer; }
.owner-tools > summary::marker { color:var(--class-primary); }
.owner-tools .printing-actions { margin-top:0; padding-top:0; border-top:0; }
@media(max-width:860px){.commission-heading{align-items:flex-start}.commission-contact{justify-content:flex-start}.commission-guide>div:first-child{display:grid;gap:8px}.commission-guide>div:first-child p{text-align:left}}
@media(max-width:640px){.commission-contact{width:100%}.commission-button{flex:1}.commission-guide ol{grid-template-columns:1fr}.commission-guide li+li{border-left:0}.commission-guide li{min-height:78px;padding-inline:4px}}

/* 2026-07-18 modeling consultation */
.commission-button { appearance:none; font:inherit; cursor:pointer; }
.consult-entry { display:flex; align-items:center; justify-content:space-between; gap:24px; margin-top:48px; padding:32px 0 8px; border-top:1px solid var(--class-border); }
.consult-entry h2 { font-size:clamp(28px,4vw,40px); }
.consult-entry p:last-child { margin-top:8px; color:var(--class-muted); line-height:1.6; }
.consult-section { scroll-margin-top:128px; margin-top:64px; padding:36px; border:1px solid var(--class-border); border-radius:var(--test-radius-md,14px); background:var(--class-surface); }
.consult-heading { display:flex; align-items:end; justify-content:space-between; gap:24px; padding-bottom:24px; border-bottom:1px solid var(--class-border); }
.consult-heading h2 { font-size:clamp(28px,4vw,40px); }
.consult-heading > p { max-width:360px; color:var(--class-muted); text-align:right; line-height:1.6; }
.consult-form { display:grid; gap:20px; margin-top:28px; }
.consult-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
.consult-form label { min-width:0; display:grid; gap:8px; color:var(--class-fg); font-weight:750; }
.consult-form label > span { font-size:.9rem; }
.consult-form label small { color:var(--class-muted); font-size:.75rem; font-weight:650; }
.consult-form input,.consult-form select,.consult-form textarea { width:100%; min-height:48px; padding:12px 14px; border:1px solid var(--class-border); border-radius:var(--test-radius-sm,8px); background:var(--class-bg); color:var(--class-fg); font:inherit; }
.consult-form textarea { min-height:156px; resize:vertical; line-height:1.6; }
.consult-form input::placeholder,.consult-form textarea::placeholder { color:var(--class-muted); opacity:.8; }
.consult-form input:focus,.consult-form select:focus,.consult-form textarea:focus { border-color:var(--class-primary); outline:3px solid var(--class-ring); outline-offset:1px; }
.consult-checks { display:grid; gap:12px; padding-top:4px; }
.consult-privacy { display:grid; gap:5px; padding:16px; border-left:3px solid var(--class-primary); background:var(--class-card); color:var(--class-muted); font-size:.85rem; line-height:1.5; }
.consult-privacy strong { color:var(--class-fg); }
.consult-checks label { grid-template-columns:22px minmax(0,1fr); align-items:start; gap:10px; color:var(--class-muted); font-weight:500; line-height:1.55; }
.consult-checks input { width:20px; min-height:20px; margin-top:1px; accent-color:var(--class-primary); }
.consult-checks a { color:var(--class-fg); text-decoration:underline; text-underline-offset:3px; }
.consult-submit { display:grid; grid-template-columns:auto minmax(0,1fr); align-items:center; gap:16px; padding-top:8px; }
.consult-submit .submit-button { width:auto; min-width:180px; margin:0; }
.consult-submit .form-message { margin:0; }
.form-trap { position:absolute!important; left:-10000px!important; width:1px!important; height:1px!important; overflow:hidden!important; }
@media(max-width:760px){.consult-entry{display:grid}.consult-entry .commission-button{width:100%}.consult-section{padding:28px 20px}.consult-heading{display:grid;gap:8px}.consult-heading>p{text-align:left}.consult-grid{grid-template-columns:1fr}.consult-submit{grid-template-columns:1fr}.consult-submit .submit-button{width:100%}}
@media(prefers-reduced-motion:reduce){.consult-section{scroll-behavior:auto}}
