@font-face{font-family:"Noto Serif SC";src:url(/shici/assets/NotoSerifSC-Regular-Bny2DHB5.otf) format("opentype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"Noto Serif SC";src:url(/shici/assets/NotoSerifSC-Bold-LgTCI_uf.otf) format("opentype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Ma Shan Zheng;src:url(/shici/assets/MaShanZheng-Regular-CbUWbbOB.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}*{margin:0;padding:0;box-sizing:border-box}body{background:#f5ecd7;overflow:hidden;font-family:"Noto Serif SC",SimSun,STSong,serif;color:#2a2520}#renderer-container{position:fixed;top:0;left:0;width:100%;height:100%}canvas{display:block}#loading{position:fixed;top:0;left:0;width:100%;height:100%;background:#f5ecd7;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:100;transition:opacity .8s ease}#loading.hidden{opacity:0;pointer-events:none}#loading h1{font-size:2rem;font-weight:400;letter-spacing:.3em;color:#3a3530;margin-bottom:1.5rem}#loading .spinner{width:40px;height:40px;border:3px solid rgba(58,53,48,.15);border-top-color:#3a3530;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}#loading .status{margin-top:1rem;font-size:.85rem;color:#8a8070}#title-header{position:fixed;top:20px;left:50%;transform:translate(-50%);text-align:center;z-index:100;pointer-events:none;background:#ffe6cf4d;backdrop-filter:blur(10px);padding:10px 28px 8px;border-radius:10px}#title-header h1{font-size:30px;font-weight:700;letter-spacing:6px;color:#3e2c12;margin:0}#title-header .subtitle{font-size:16px;color:#302109e3;letter-spacing:2px;margin-top:3px}#controls{position:fixed;top:20px;right:20px;background:#2a2520d9;backdrop-filter:blur(10px);color:#e8e0d4;padding:16px 20px;border-radius:8px;font-size:.8rem;z-index:10;min-width:200px;max-height:90vh;overflow-y:auto;box-shadow:0 4px 20px #0000004d}#controls h3{font-size:.85rem;font-weight:400;letter-spacing:.15em;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid rgba(232,224,212,.2)}.control-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.control-row label{flex-shrink:0;margin-right:10px;font-size:.75rem;color:#c0b8a8}.control-row input[type=range]{flex:1;height:4px;-webkit-appearance:none;appearance:none;background:#e8e0d433;border-radius:2px;outline:none;cursor:pointer}.control-row input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#e8e0d4;cursor:pointer}.control-row .value{min-width:30px;text-align:right;font-size:.7rem;color:#a09888;margin-left:8px}.control-divider{height:1px;background:#e8e0d426;margin:10px 0}.control-section-title{font-size:.7rem;color:#a09888;letter-spacing:.1em;margin-bottom:8px}.control-row select{flex:1;background:#e8e0d426;color:#e8e0d4;border:1px solid rgba(232,224,212,.2);border-radius:4px;padding:3px 6px;font-size:.7rem;font-family:inherit;cursor:pointer;outline:none}.control-row select option{background:#2a2520;color:#e8e0d4}#ctrl-toggle{position:fixed;top:20px;right:230px;width:32px;height:32px;background:#2a2520d9;backdrop-filter:blur(10px);color:#e8e0d4;border:none;border-radius:6px;font-size:1.1rem;cursor:pointer;z-index:11;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 10px #0000004d;transition:right .3s ease}#ctrl-toggle:hover{background:#3e3934e6}#controls.collapsed{display:none}body:has(#controls.collapsed) #ctrl-toggle{right:20px}.control-row input[type=color]{-webkit-appearance:none;appearance:none;width:32px;height:24px;border:1px solid rgba(232,224,212,.2);border-radius:4px;background:none;cursor:pointer;padding:0}.control-row input[type=color]::-webkit-color-swatch-wrapper{padding:2px}.control-row input[type=color]::-webkit-color-swatch{border:none;border-radius:2px}.poem-modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#0f0c0859;backdrop-filter:blur(2px);display:none;align-items:center;justify-content:center;z-index:200}.poem-modal-overlay.active{display:flex}.poem-modal{background:#f5ecd7f0;border:1px solid rgba(100,85,60,.35);padding:0;position:relative;max-height:85vh;overflow:hidden;box-shadow:0 0 0 1px #50412d1a,0 12px 50px #00000073}.poem-modal:before{content:"";position:absolute;inset:8px;border:1px solid rgba(100,85,60,.18);pointer-events:none;z-index:1}.poem-modal-close{position:absolute;top:12px;right:14px;background:none;border:none;font-size:1.2rem;color:#8a807080;cursor:pointer;z-index:2;line-height:1}.poem-modal-close:hover{color:#3a3530}.poem-modal-title{background:#1e1914e0;color:#ddd0bc;font-family:Ma Shan Zheng,cursive;font-size:1.5rem;font-weight:400;letter-spacing:.25em;text-align:center;padding:14px 28px;margin:22px 22px 0}.poem-modal-meta{font-family:Ma Shan Zheng,cursive;font-size:.85rem;color:#6a5e50;text-align:center;padding:14px 22px 6px;letter-spacing:.05em}.poem-modal-meta .dynasty-seal{display:inline-block;font-family:Noto Sans SC,sans-serif;color:#a04040;border:1.5px solid #a04040;padding:1px 5px;font-size:.7rem;line-height:1.3;letter-spacing:.05em;margin-right:6px;vertical-align:middle}.poem-modal-content{font-family:Ma Shan Zheng,cursive;writing-mode:vertical-rl;font-size:1.4rem;line-height:2.2;color:#2a2015;padding:16px 32px 28px;letter-spacing:.12em;white-space:pre-line;max-height:55vh;overflow-x:auto;overflow-y:hidden;width:fit-content;max-width:calc(100vw - 80px);margin:0 auto}#poet-bar{position:fixed;bottom:12px;left:50%;transform:translate(-50%);z-index:100;background:#f8d2b199;backdrop-filter:blur(12px);padding:10px 24px;display:flex;flex-direction:column;gap:7px;border:1px solid rgba(0,0,0,.1);border-radius:12px;box-shadow:0 4px 20px #00000026;font-size:12px;color:#312314}.bar-row{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;justify-content:center;white-space:nowrap;font-weight:700;color:#312314}.bar-sep-h{width:100%;height:1px;background:#00000026}.bar-sep-v{display:inline-block;width:1px;height:16px;background:#00000026;margin:0 4px}.bar-label{font-size:15px;color:#312314;white-space:nowrap;font-weight:700}.poet-chip{background:#00000014;border:1px solid rgba(0,0,0,.15);color:#312314!important;padding:3px 10px;border-radius:10px;font-family:"Noto Serif SC",serif;font-size:15px;font-weight:700;cursor:pointer;white-space:nowrap;transition:all .2s}.poet-chip:hover{background:#00000026;color:#312314!important}.poet-chip.active{background:#0003;border-color:#00000059;color:#312314!important;font-weight:700}.bar-tag{background:#00000014;border:1px solid rgba(0,0,0,.15);color:#312314!important;padding:3px 10px;border-radius:10px;font-family:"Noto Serif SC",serif;font-size:15px;font-weight:700;cursor:pointer;white-space:nowrap;transition:all .2s}.bar-tag:hover{background:#00000026;color:#312314!important}.bar-tag.active{background:#0003;border-color:#00000059;color:#312314!important;font-weight:700}.bar-weather-cb{width:14px;height:14px;margin-left:2px;margin-right:6px;cursor:pointer;accent-color:#8f1919;vertical-align:middle}#title-watermark{position:fixed;bottom:20px;left:20px;font-size:1.2rem;font-weight:400;letter-spacing:.2em;color:#3a35304d;z-index:10;writing-mode:vertical-rl}#audio-toggle{position:fixed;bottom:20px;right:20px;width:38px;height:38px;background:#2a2520d9;backdrop-filter:blur(10px);color:#e8e0d4;border:none;border-radius:50%;font-size:1.1rem;cursor:pointer;z-index:11;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 10px #0000004d;transition:transform .2s,background .2s;user-select:none}#audio-toggle:hover{background:#3c3732f2;transform:scale(1.08)}#audio-hint{position:fixed;bottom:70px;right:16px;background:#2a2520e6;backdrop-filter:blur(8px);color:#f0e8d4;padding:8px 14px;border-radius:8px;font-size:12px;line-height:1.5;text-align:center;z-index:11;box-shadow:0 2px 12px #00000040;pointer-events:none;opacity:1;transition:opacity .6s ease;white-space:nowrap}#audio-hint:after{content:"";position:absolute;bottom:-6px;right:22px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid rgba(42,37,32,.9)}#audio-hint.hidden{opacity:0;pointer-events:none}
