html,body{height:100%}html:has(#vpython-ide),body:has(#vpython-ide){height:100dvh;min-height:0;margin:0;overflow:hidden;overscroll-behavior:none}body:has(#vpython-ide[data-theme=light]){background:#eceef1}body:has(#vpython-ide[data-theme=dark]){background:#16170f}#vpython-ide{--ide-bg: #eceef1;--ide-panel: #ffffff;--ide-border: #d6d9df;--ide-text: #111827;--ide-muted: #6b7280;--ide-soft: #f1f2f4;--ide-accent: #111827;--ide-accent-text: #ffffff;--term-bg: #f7f8fa;--term-text: #1f2937;--r-panel: 4px;--r-ctrl: 3px;height:100dvh;box-sizing:border-box;display:flex;flex-direction:column;gap:.4rem;padding:.45rem;color:var(--ide-text);background:var(--ide-bg)}#vpython-ide[data-theme=dark]{--ide-bg: #16170f;--ide-panel: #23241d;--ide-border: #3a3b32;--ide-text: #f3f4f2;--ide-muted: #9aa0a6;--ide-soft: #2c2d25;--ide-accent: #525a64;--term-bg: #14150f;--term-text: #e5e7eb}#vpython-ide *{box-sizing:border-box}#vpython-ide .ide-card,#vpython-ide .ide-toolbar,#vpython-ide .ide-statusbar{background:var(--ide-panel);border:1px solid var(--ide-border);border-radius:var(--r-panel)}#vpython-ide .ide-card{overflow:hidden}#vpython-ide .ide-head{border-bottom:1px solid var(--ide-border)}#vpython-ide .ide-muted{color:var(--ide-muted)}#vpython-ide .ide-btn{display:inline-flex;align-items:center;gap:.3rem;border:1px solid var(--ide-border);background:var(--ide-panel);color:var(--ide-text);border-radius:var(--r-ctrl);padding:.3rem .55rem;font-size:.78rem;font-weight:500;cursor:pointer;white-space:nowrap}#vpython-ide .ide-btn:hover{background:var(--ide-soft)}#vpython-ide .ide-btn:disabled{opacity:.5;cursor:default}#vpython-ide .ide-btn-primary{background:var(--ide-accent);color:var(--ide-accent-text);border-color:var(--ide-accent)}#vpython-ide .ide-icon{padding:.3rem .45rem;font-size:.9rem;line-height:1}#vpython-ide .ide-btn svg,#vpython-ide .ac-les-status svg,#vpython-ide .ac-brand svg{width:1em;height:1em;flex:0 0 auto}#vpython-ide select.ide-input,#vpython-ide input.ide-input{border:1px solid var(--ide-border);background:var(--ide-panel);color:var(--ide-text);border-radius:var(--r-ctrl);padding:.28rem .4rem;font-size:.78rem}#vpython-ide .ide-top{flex:0 0 auto}#vpython-ide .ide-toolbar{container-type:inline-size}#vpython-ide .tb-right{margin-left:0}@container (min-width: 880px){#vpython-ide .tb-right{margin-left:auto}}#vpython-ide .ac-brand{display:inline-flex;align-items:center;gap:.3rem}#vpython-ide .ac-divider{width:1px;align-self:stretch;min-height:1.3rem;margin:0 .2rem;background:var(--ide-border)}#vpython-ide .ide-workspace{flex:1 1 auto;min-height:0;display:flex;gap:.45rem}#vpython-ide .ide-examples{flex:0 0 210px;min-width:0;height:100%;display:flex;flex-direction:column;overflow:hidden}#vpython-ide .ide-lessons{flex:0 0 var(--lessons-w, 380px);min-width:0;height:100%;display:flex;flex-direction:column;overflow:hidden}#vpython-ide .ide-main{flex:1 1 auto;min-width:0;height:100%;overflow:hidden}#vpython-ide .ide-reference{flex:0 0 var(--ref-w, 330px);min-width:0;height:100%;display:flex;flex-direction:column;overflow:hidden}#vpython-ide[data-examples=closed] .ide-examples,#vpython-ide[data-lessons=closed] .ide-lessons,#vpython-ide[data-ref=closed] .ide-reference{display:none}#vpython-ide .ide-vrez{flex:0 0 8px;align-self:stretch;position:relative;cursor:col-resize;touch-action:none}#vpython-ide[data-lessons=closed] .ide-vrez-lessons,#vpython-ide[data-ref=closed] .ide-vrez-ref{display:none}#vpython-ide .ide-vrez:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--ide-border);border-radius:2px;width:3px;height:40px}#vpython-ide .ide-vrez:hover:after{background:var(--ide-muted)}#vpython-ide .ide-main{display:grid}#vpython-ide[data-monitor=bottom] .ide-main{grid-template-rows:minmax(0,1fr) 8px var(--mon-h, 230px);grid-template-areas:"editor" "rez" "monitor"}#vpython-ide[data-monitor=top] .ide-main{grid-template-rows:var(--mon-h, 230px) 8px minmax(0,1fr);grid-template-areas:"monitor" "rez" "editor"}#vpython-ide[data-monitor=right] .ide-main{grid-template-columns:minmax(0,1fr) 8px var(--mon-w, 480px);grid-template-areas:"editor rez monitor"}#vpython-ide .ide-editor-pane{grid-area:editor;min-height:0;min-width:0;display:grid;grid-template-rows:auto minmax(0,1fr) 8px var(--msg-h, 104px);grid-template-areas:"ehead" "edit" "mrez" "msgs"}#vpython-ide .ide-monitor-pane{grid-area:monitor;min-height:0;min-width:0;display:flex;flex-direction:column}#vpython-ide .ide-rez{grid-area:rez}#vpython-ide[data-edit=closed] .ide-editor-pane,#vpython-ide[data-out=closed] .ide-monitor-pane,#vpython-ide[data-edit=closed] .ide-rez,#vpython-ide[data-out=closed] .ide-rez{display:none}#vpython-ide[data-edit=closed] .ide-main,#vpython-ide[data-out=closed] .ide-main{display:block}#vpython-ide[data-edit=closed] .ide-monitor-pane,#vpython-ide[data-out=closed] .ide-editor-pane{height:100%}#vpython-ide[data-console=closed] .ide-editor-pane{grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"ehead" "edit" "msgs"}#vpython-ide[data-console=closed] .ide-mrez,#vpython-ide[data-console=closed] .ac-log{display:none}#vpython-ide .ac-console-min{padding:0 .3rem}#vpython-ide .ide-rez,#vpython-ide .ide-mrez{position:relative;touch-action:none}#vpython-ide[data-monitor=bottom] .ide-rez,#vpython-ide[data-monitor=top] .ide-rez{cursor:row-resize}#vpython-ide[data-monitor=right] .ide-rez{cursor:col-resize}#vpython-ide .ide-mrez{grid-area:mrez;cursor:row-resize}#vpython-ide .ide-rez:after,#vpython-ide .ide-mrez:after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--ide-border);border-radius:2px;width:40px;height:3px}#vpython-ide[data-monitor=right] .ide-rez:after{width:3px;height:40px}#vpython-ide .ide-rez:hover:after,#vpython-ide .ide-mrez:hover:after{background:var(--ide-muted)}#vpython-ide .ide-ehead{grid-area:ehead}#vpython-ide .ac-fname{border:0;background:transparent;color:var(--ide-text);font:inherit;font-weight:600;field-sizing:content;min-width:2ch;max-width:14rem;padding:0 .1rem}#vpython-ide .ac-fname:focus{outline:1px solid var(--ide-border);border-radius:2px}#vpython-ide .ac-ace,#vpython-ide .ac-code{grid-area:edit;min-height:0;height:100%;width:100%}#vpython-ide .ac-code{resize:none;border:0;padding:.65rem;font-family:ui-monospace,SF Mono,Menlo,monospace;line-height:1.5;background:var(--ide-panel);color:var(--ide-text)}#vpython-ide[data-theme=dark] .ac-code{background:#272822;color:#f8f8f2}#vpython-ide .ide-messages{grid-area:msgs;min-height:0;display:flex;flex-direction:column;overflow:hidden;border-top:1px solid var(--ide-border)}#vpython-ide .ac-log{flex:1 1 auto;min-height:0;overflow:auto;margin:0;padding:.45rem .6rem;white-space:pre-wrap;font-family:ui-monospace,Menlo,monospace;font-size:12px;background:var(--ide-soft);color:var(--ide-text)}#vpython-ide .ide-frame-wrap{flex:1 1 auto;min-height:0;min-width:0;overflow:auto;background:#f8fafc}#vpython-ide[data-theme=dark] .ide-frame-wrap{background:#14150f}#vpython-ide .ide-frame{display:block;width:100%;height:100%;min-height:260px;border:0;background:transparent}#vpython-ide .ide-frame-ph{display:flex;height:100%;min-height:260px;align-items:center;justify-content:center;padding:1.5rem;text-align:center;color:var(--ide-muted);font-size:.82rem}#vpython-ide .ac-examples-list{flex:1 1 auto;min-height:0;overflow:auto;padding:.35rem .4rem}#vpython-ide .ac-ex-group{margin-bottom:.55rem}#vpython-ide .ac-ex-group h4{font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ide-muted);margin:.15rem .25rem .25rem}#vpython-ide .ac-ex-item{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--ide-text);padding:.3rem .45rem;border-radius:var(--r-ctrl);font-size:.8rem;cursor:pointer}#vpython-ide .ac-ex-item:hover{background:var(--ide-soft)}#vpython-ide .ac-ref-tabs{display:flex;gap:.25rem;padding:.35rem .45rem 0;flex-wrap:wrap;flex:0 0 auto}#vpython-ide .ac-ref-tab{border:1px solid var(--ide-border);border-bottom:0;background:var(--ide-soft);color:var(--ide-muted);border-radius:var(--r-ctrl) var(--r-ctrl) 0 0;padding:.2rem .5rem;font-size:.72rem;cursor:pointer}#vpython-ide .ac-ref-tab.active{background:var(--ide-panel);color:var(--ide-text);font-weight:600}#vpython-ide .ac-ref-list{flex:1 1 auto;min-height:0;overflow:auto;padding:.35rem .5rem;border-top:1px solid var(--ide-border)}#vpython-ide .ac-ref-group{margin-bottom:.65rem}#vpython-ide .ac-ref-group h4{font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ide-muted);margin:.15rem 0 .3rem}#vpython-ide .ac-ref-item{padding:.3rem .4rem;border-radius:var(--r-ctrl)}#vpython-ide .ac-ref-item:hover{background:var(--ide-soft)}#vpython-ide .ac-ref-name{font-family:ui-monospace,Menlo,monospace;font-size:.76rem;font-weight:600}#vpython-ide .ac-ref-desc{font-size:.74rem;color:var(--ide-muted);margin-top:.06rem}#vpython-ide .ac-ref-ex{margin:.2rem 0 0;padding:.28rem .4rem;border-radius:var(--r-ctrl);background:var(--ide-soft);font-family:ui-monospace,Menlo,monospace;font-size:.71rem;overflow-x:auto;white-space:pre}#vpython-ide .ac-ref-empty{color:var(--ide-muted);font-size:.78rem;padding:.4rem}#vpython-ide .ac-les-back{padding:.1rem .4rem;font-size:.7rem}#vpython-ide .ac-les-search-wrap{padding:.5rem .5rem .25rem;flex:0 0 auto}#vpython-ide .ac-lessons-body{flex:1 1 auto;min-height:0;overflow:auto;padding:0 .55rem .55rem}#vpython-ide .ac-lessons-body>.ac-les-group:first-child{margin-top:.4rem}#vpython-ide .ac-les-group{margin-bottom:.65rem}#vpython-ide .ac-les-group h4{font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ide-muted);margin:.15rem .15rem .3rem}#vpython-ide .ac-les-item{display:block;width:100%;text-align:left;border:1px solid var(--ide-border);background:var(--ide-panel);color:var(--ide-text);padding:.45rem .55rem;border-radius:var(--r-ctrl);margin-bottom:.35rem;cursor:pointer}#vpython-ide .ac-les-item:hover{background:var(--ide-soft)}#vpython-ide .ac-les-item-title{font-size:.82rem;font-weight:600}#vpython-ide .ac-les-item-sum{font-size:.73rem;color:var(--ide-muted);margin-top:.12rem}#vpython-ide .ac-les-empty{color:var(--ide-muted);font-size:.78rem;padding:.4rem}#vpython-ide .ac-les-lead{margin-bottom:.5rem}#vpython-ide .ac-les-lead h3{font-size:.98rem;font-weight:700;margin:0}#vpython-ide .ac-les-lead .ac-les-item-sum{margin-top:.15rem}#vpython-ide .ac-les-step{margin:0 0 .85rem}#vpython-ide .ac-les-text{font-size:.82rem;line-height:1.5}#vpython-ide .ac-les-text p{margin:0 0 .5rem}#vpython-ide .ac-les-text code{font-family:ui-monospace,Menlo,monospace;font-size:.76rem;background:var(--ide-soft);padding:.04rem .25rem;border-radius:3px}#vpython-ide .ac-les-text a{color:inherit;text-decoration:underline;text-underline-offset:2px}#vpython-ide .ac-les-figure{margin:0}#vpython-ide .ac-les-figure video,#vpython-ide .ac-les-figure img{width:100%;height:auto;border:1px solid var(--ide-border);border-radius:var(--r-panel);background:var(--ide-soft);display:block}#vpython-ide .ac-les-figcap{font-size:.72rem;color:var(--ide-muted);margin-top:.25rem}#vpython-ide .ac-les-media-ph{display:flex;align-items:center;justify-content:center;text-align:center;min-height:120px;padding:1rem;border:1px dashed var(--ide-border);border-radius:var(--r-panel);background:var(--ide-soft);color:var(--ide-muted);font-size:.76rem}#vpython-ide .ac-les-code{display:flex;flex-direction:column}#vpython-ide .ac-les-code pre{margin:0;padding:.5rem .6rem;border-radius:var(--r-panel);background:var(--ide-soft);border:1px solid var(--ide-border);overflow-x:auto;font-family:ui-monospace,Menlo,monospace;font-size:.73rem;line-height:1.5;white-space:pre}#vpython-ide .ac-les-copy{align-self:flex-end;margin-bottom:.25rem;padding:.1rem .4rem;font-size:.68rem}#vpython-ide .ac-les-cap{font-size:.72rem;color:var(--ide-muted);margin:0 0 .2rem}#vpython-ide .ac-les-q{border:1px solid var(--ide-border);border-left:3px solid var(--ide-accent);border-radius:var(--r-panel);padding:.55rem .6rem;background:var(--ide-panel)}#vpython-ide .ac-les-q-prompt{font-size:.82rem;font-weight:600;margin-bottom:.4rem}#vpython-ide .ac-les-q-label{font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ide-muted);margin-bottom:.3rem}#vpython-ide .ac-les-disc{border:1px solid var(--ide-border);border-radius:var(--r-ctrl);margin-top:.3rem;background:var(--ide-soft)}#vpython-ide .ac-les-disc>summary{cursor:pointer;padding:.3rem .5rem;font-size:.76rem;font-weight:600;list-style:none;user-select:none}#vpython-ide .ac-les-disc>summary::-webkit-details-marker{display:none}#vpython-ide .ac-les-disc>summary:before{content:"▸ ";color:var(--ide-muted)}#vpython-ide .ac-les-disc[open]>summary:before{content:"▾ "}#vpython-ide .ac-les-disc .ac-les-disc-body{padding:0 .55rem .45rem;font-size:.79rem;line-height:1.5}#vpython-ide .ac-les-disc .ac-les-code{margin-top:.35rem}#vpython-ide .ac-les-refbtn{margin-top:.4rem;padding:.2rem .5rem;font-size:.72rem}#vpython-ide .ac-les-ex{border:1px solid var(--ide-border);border-left:3px solid var(--ide-muted);border-radius:var(--r-panel);padding:.55rem .6rem;background:var(--ide-panel)}#vpython-ide .ac-les-ex.done{border-left-color:#16a34a}#vpython-ide .ac-les-ex-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.35rem}#vpython-ide .ac-les-part{font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--ide-muted)}#vpython-ide .ac-les-status{display:inline-flex;align-items:center;gap:.25rem;font-size:.68rem;font-weight:600;color:var(--ide-muted)}#vpython-ide .ac-les-ex.done .ac-les-status{color:#16a34a}#vpython-ide[data-theme=dark] .ac-les-ex.done .ac-les-status{color:#4ade80}#vpython-ide .ac-les-progress{position:sticky;top:0;z-index:5;margin:0 -.55rem .7rem;padding:.5rem .55rem .45rem;background:var(--ide-panel);border-bottom:1px solid var(--ide-border)}#vpython-ide .ac-les-progress-row{display:flex;justify-content:space-between;font-size:.72rem;font-weight:600;color:var(--ide-muted);margin-bottom:.25rem}#vpython-ide .ac-les-bar{height:6px;border-radius:999px;background:var(--ide-soft);border:1px solid var(--ide-border);overflow:hidden}#vpython-ide .ac-les-bar-fill{height:100%;background:var(--ide-muted);border-radius:999px;transition:width .2s ease}#vpython-ide .ac-les-bar-fill.full{background:#16a34a}#vpython-ide .ac-les-input{width:100%;margin-top:.4rem;padding:.45rem .55rem;resize:vertical;border:1px solid var(--ide-border);border-radius:var(--r-ctrl);background:var(--ide-soft);color:var(--ide-text);font-family:ui-monospace,Menlo,monospace;font-size:.76rem;line-height:1.5}#vpython-ide[data-theme=dark] .ac-les-input{background:#272822;color:#f8f8f2}#vpython-ide .ac-les-input:focus{outline:1px solid var(--ide-muted)}#vpython-ide .ac-les-ex-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;margin-top:.4rem}#vpython-ide .ac-les-check{padding:.25rem .7rem}#vpython-ide .ac-les-fb{font-size:.78rem;line-height:1.45;margin-top:.35rem}#vpython-ide .ac-les-fb:empty{display:none}#vpython-ide .ac-les-fb.ok{color:#15803d}#vpython-ide .ac-les-fb.err{color:#b91c1c}#vpython-ide[data-theme=dark] .ac-les-fb.ok{color:#4ade80}#vpython-ide[data-theme=dark] .ac-les-fb.err{color:#f87171}#vpython-ide .ac-les-fb code{font-family:ui-monospace,Menlo,monospace;font-size:.73rem;background:var(--ide-soft);padding:.02rem .22rem;border-radius:3px}#vpython-ide .ac-les-sketch{margin-top:.2rem}#vpython-ide .ide-backdrop,#vpython-ide .ide-mobilebar,#vpython-ide .ide-menu-wrap,#vpython-ide .ide-drawer-close{display:none}#vpython-ide .ide-menu{position:absolute;top:calc(100% + 5px);right:.5rem;left:auto;z-index:5;min-width:13rem;max-width:calc(100vw - 1rem);max-height:75dvh;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:.1rem;padding:.3rem;background:var(--ide-panel);border:1px solid var(--ide-border);border-radius:var(--r-panel);box-shadow:0 12px 34px #00000059}#vpython-ide .ide-menu-item{display:flex;align-items:center;gap:.55rem;width:100%;text-align:left;border:0;background:transparent;color:var(--ide-text);padding:.6rem .55rem;border-radius:var(--r-ctrl);font-size:.9rem;font-weight:500;cursor:pointer;white-space:nowrap}#vpython-ide .ide-menu-item:hover{background:var(--ide-soft)}#vpython-ide .ide-menu-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.5rem .55rem;font-size:.9rem;font-weight:500}#vpython-ide .ide-menu svg{width:1.05em;height:1.05em;flex:0 0 auto}@media(max-width:980px){#vpython-ide .ide-examples{flex-basis:170px}#vpython-ide .ide-lessons{flex-basis:300px}#vpython-ide .ide-reference{flex-basis:270px}}@media(max-width:820px){#vpython-ide{padding:.35rem;gap:.35rem}#vpython-ide .ide-toolbar{flex-wrap:wrap}#vpython-ide .ide-toolbar>div{display:contents}#vpython-ide .tb-right{margin-left:0}#vpython-ide .ide-menu-wrap{display:inline-flex}#vpython-ide .ide-top{position:relative;z-index:30}#vpython-ide .ide-frame-wrap,#vpython-ide .ac-log,#vpython-ide .ac-examples-list,#vpython-ide .ac-lessons-body,#vpython-ide .ac-ref-list{overscroll-behavior:contain}#vpython-ide .ide-btn{padding:.5rem .6rem;font-size:.82rem}#vpython-ide .ide-btn.ide-icon{padding:.5rem .55rem}#vpython-ide .ide-hide-mobile{display:none!important}#vpython-ide .ide-examples,#vpython-ide .ide-lessons,#vpython-ide .ide-reference{position:fixed;inset:0;height:100dvh;max-height:100dvh;width:100vw;max-width:100vw;flex-basis:auto!important;z-index:60;box-shadow:0 10px 50px #00000073}#vpython-ide .ide-vrez{display:none!important}#vpython-ide .ide-drawer-close{display:inline-flex}#vpython-ide[data-examples=open] .ide-backdrop,#vpython-ide[data-lessons=open] .ide-backdrop,#vpython-ide[data-ref=open] .ide-backdrop{display:block;position:fixed;inset:0;background:#00000080;z-index:55}#vpython-ide .ide-main{display:block!important}#vpython-ide .ide-rez{display:none!important}#vpython-ide .ide-editor-pane{display:grid!important;height:100%}#vpython-ide .ide-monitor-pane{display:flex!important;height:100%}#vpython-ide[data-mobilepane=code] .ide-monitor-pane,#vpython-ide[data-mobilepane=scene] .ide-editor-pane{display:none!important}#vpython-ide .ide-statusbar{display:none}#vpython-ide .ide-mobilebar{display:flex;flex:0 0 auto;gap:.4rem}#vpython-ide .ide-mtab{flex:1 1 0;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.6rem .5rem;font-size:.9rem;font-weight:600;cursor:pointer;border:1px solid var(--ide-border);border-radius:var(--r-panel);background:var(--ide-panel);color:var(--ide-muted)}#vpython-ide .ide-mtab.active{background:var(--ide-accent);color:var(--ide-accent-text);border-color:var(--ide-accent)}#vpython-ide .ide-mtab svg{width:1.05em;height:1.05em;flex:0 0 auto}}
