/* ===================================================================
   Fizika virtual laboratoriyalari — umumiy uslub
   Barcha laboratoriya ishlari shu faylga tayanadi.

   MAVZU: yorug' — asosiy, qorong'i — tizim sozlamasiga qarab avtomatik.
   Foydalanuvchi sarlavhadagi tugma bilan majburan tanlashi mumkin
   (:root[data-theme="light"] / [data-theme="dark"]).
   Canvas ham shu o'zgaruvchilarni o'qiydi — yadro.js dagi Lab.rang().
   =================================================================== */

/* ---------- yorug' mavzu (asosiy) ---------- */
:root{
  --bg:#eef2f7; --panel:#ffffff; --panel2:#eef2f8; --line:#d2dbe8;
  --txt:#16243f; --dim:#5a6b85; --acc:#1565c0; --ok:#0f8a52;
  --warn:#9a6300; --err:#c62846;
  --inset:#f5f8fc;                      /* ichki maydon foni */
  --ok-bg:#e4f6ec; --err-bg:#fdeaee; --warn-bg:#fdf4e3;
  --ro-bg:#eef2f7; --calc-br:#b8c6da;
  --onacc:#ffffff; --onerr:#ffffff; --warntxt:#6b4500;
  /* canvas */
  --cv-bg:#f6f9fc; --cv-ink:#2a3a55; --cv-dim:#7c8ca4;
  --cv-body:#9db4d4; --cv-edge:#4a5f80; --cv-rail:#dde5ef; --cv-accent:#1565c0;
  color-scheme:light;
}
/* ---------- qorong'i mavzu ---------- */
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:#0f1420; --panel:#182134; --panel2:#1f2a41; --line:#2c3a56;
    --txt:#e6ecf7; --dim:#95a4c0; --acc:#4da3ff; --ok:#39d98a;
    --warn:#ffb020; --err:#ff5c7c;
    --inset:#0b1120;
    --ok-bg:#12301f; --err-bg:#36111c; --warn-bg:#2b2008;
    --ro-bg:#101a2c; --calc-br:#3c4c6e;
    --onacc:#07121f; --onerr:#2b0710; --warntxt:#ffd79a;
    --cv-bg:#0b1120; --cv-ink:#c9d4ea; --cv-dim:#6f86b5;
    --cv-body:#3a4c74; --cv-edge:#6f86b5; --cv-rail:#1b2439; --cv-accent:#4da3ff;
    color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --bg:#0f1420; --panel:#182134; --panel2:#1f2a41; --line:#2c3a56;
  --txt:#e6ecf7; --dim:#95a4c0; --acc:#4da3ff; --ok:#39d98a;
  --warn:#ffb020; --err:#ff5c7c;
  --inset:#0b1120;
  --ok-bg:#12301f; --err-bg:#36111c; --warn-bg:#2b2008;
  --ro-bg:#101a2c; --calc-br:#3c4c6e;
  --onacc:#07121f; --onerr:#2b0710; --warntxt:#ffd79a;
  --cv-bg:#0b1120; --cv-ink:#c9d4ea; --cv-dim:#6f86b5;
  --cv-body:#3a4c74; --cv-edge:#6f86b5; --cv-rail:#1b2439; --cv-accent:#4da3ff;
  color-scheme:dark;
}

*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--txt);
     font:15px/1.55 "Segoe UI",Roboto,Arial,sans-serif}
input,select,button,textarea{font:inherit}
a{color:var(--acc);text-decoration:none}
a:hover{text-decoration:underline}
:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- sarlavha ---------- */
header{background:var(--panel);border-bottom:1px solid var(--line);padding:12px 18px;
       display:flex;flex-wrap:wrap;gap:12px;align-items:center}
header h1{font-size:17px;margin:0;font-weight:600}
header .sp{flex:1}
header .orqaga{color:var(--dim);font-size:14px;white-space:nowrap}
header .orqaga:hover{color:var(--acc)}
input[type=text]{background:var(--inset);border:1px solid var(--line);color:var(--txt);
                 border-radius:6px;padding:6px 9px;width:145px}
select{background:var(--inset);border:1px solid var(--line);color:var(--txt);
       border-radius:6px;padding:6px 9px}
button{background:var(--panel2);border:1px solid var(--line);color:var(--txt);
       border-radius:6px;padding:8px 13px;cursor:pointer}
button:hover:not(:disabled){border-color:var(--acc)}
button:disabled{opacity:.38;cursor:not-allowed}
button.pri{background:var(--acc);border-color:var(--acc);color:var(--onacc);font-weight:600}
button.stop{background:var(--err);border-color:var(--err);color:var(--onerr);font-weight:600}
.variant{background:var(--panel2);border:1px solid var(--line);border-radius:6px;
         padding:6px 11px;color:var(--dim);font-size:12.5px}
.variant b{color:var(--ok)}
#mavzu{padding:6px 10px;min-width:40px}

/* ---------- varaqlar ---------- */
.tabs{display:flex;gap:2px;background:var(--panel);padding:0 18px;
      border-bottom:1px solid var(--line);flex-wrap:wrap}
.tabs button{background:none;border:none;border-bottom:3px solid transparent;border-radius:0;
             padding:11px 15px;color:var(--dim);font-size:14px}
.tabs button.on{color:var(--txt);border-bottom-color:var(--acc)}

/* ---------- joylashuv ---------- */
main{display:flex;gap:16px;padding:16px;align-items:flex-start;flex-wrap:wrap}
.stage{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px;
       position:sticky;top:12px}
.side{flex:1;min-width:460px;display:flex;flex-direction:column;gap:13px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:13px 15px}
.card h3{margin:0 0 9px;font-size:15px;font-weight:600}
.card h4{margin:14px 0 7px;font-size:14px;font-weight:600;color:var(--acc)}
.card h3 small,.card h4 small{color:var(--dim);font-weight:400;margin-left:7px}
.row{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.row label{color:var(--dim);min-width:150px;font-size:14px}
.ctr{display:flex;gap:9px;flex-wrap:wrap;margin-top:11px;align-items:center}
.timer{font:600 26px/1 Consolas,monospace;color:var(--ok);
       background:var(--inset);border:1px solid var(--line);border-radius:8px;
       padding:9px 14px;letter-spacing:1px}
.hint{color:var(--dim);font-size:13px;margin:8px 0 0}
.msg{margin-top:9px;padding:7px 11px;border-radius:6px;font-size:13px;display:none}
.msg.show{display:block}
.msg.ok{background:var(--ok-bg);color:var(--ok)}
.msg.warn{background:var(--warn-bg);color:var(--warn)}
.msg.err{background:var(--err-bg);color:var(--err)}
.prog{height:5px;background:var(--inset);border-radius:3px;overflow:hidden;margin-top:8px}
.prog i{display:block;height:100%;background:var(--ok);width:0;transition:width .25s}

/* ---------- qiymat o'zgartirgich (▼ 100 ▲ g) ---------- */
.step{display:inline-flex;align-items:stretch;border:1px solid var(--line);
      border-radius:7px;overflow:hidden;background:var(--inset);vertical-align:middle}
.step>button{border:0;border-radius:0;background:var(--panel2);color:var(--dim);
             padding:7px 11px;font-size:11px;line-height:1;cursor:pointer;
             user-select:none;-webkit-user-select:none;touch-action:manipulation}
.step>button:hover:not(:disabled){background:var(--acc);color:var(--onacc);border-color:transparent}
.step>button:disabled{opacity:.3;cursor:not-allowed}
.step input{width:64px;border:0;border-left:1px solid var(--line);border-right:1px solid var(--line);
            background:transparent;color:var(--txt);text-align:center;font:inherit;
            font-variant-numeric:tabular-nums;padding:6px 2px;
            appearance:textfield;-moz-appearance:textfield}
.step input::-webkit-outer-spin-button,
.step input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.step input:focus{outline:none;background:var(--panel)}
.step .unit{display:flex;align-items:center;padding:0 9px;color:var(--dim);
            font-size:12.5px;white-space:nowrap}
.step .dia{display:flex;align-items:center;padding:0 8px 0 0;color:var(--dim);font-size:11px}

/* ---------- jadvallar ---------- */
table{width:100%;border-collapse:collapse;font-size:13px;margin-top:6px}
th,td{border:1px solid var(--line);padding:4px 6px;text-align:center}
th{background:var(--panel2);color:var(--dim);font-weight:600;font-size:12.5px}
td.meas{color:var(--txt);font-family:Consolas,monospace;white-space:nowrap}
td.lbl{text-align:right;color:var(--dim)}
.del{color:var(--err);cursor:pointer;font-weight:700;margin-left:5px;opacity:.5;font-size:12px}
.del:hover{opacity:1}

/* ---------- talaba hisoblaydigan kataklar ---------- */
input.calc{width:82px;padding:3px 5px;text-align:center;border-radius:4px;
           border:1px solid var(--calc-br);background:var(--inset);color:var(--txt);
           font-family:Consolas,monospace;font-size:13px}
input.calc:focus{outline:none;border-color:var(--acc)}
input.calc.ok{border-color:var(--ok);background:var(--ok-bg);color:var(--ok);font-weight:600}
input.calc.bad{border-color:var(--err);background:var(--err-bg);color:var(--err)}
input.calc.warn{border-color:var(--warn);background:var(--warn-bg);color:var(--warn)}
input.calc[readonly]{background:var(--ro-bg);color:var(--dim)}
.cellhint{display:block;font-size:11px;color:var(--warn);margin-top:3px;line-height:1.3}

/* ---------- matn bloklari ---------- */
.theory{font-size:13.5px;color:var(--dim);background:var(--inset);border-left:3px solid var(--acc);
        padding:9px 13px;border-radius:0 6px 6px 0;margin-bottom:11px}
.theory code,code{color:var(--ok);font-family:Consolas,monospace}
.warnbox{font-size:13.5px;background:var(--warn-bg);border-left:3px solid var(--warn);
         padding:9px 13px;border-radius:0 6px 6px 0;margin:11px 0;color:var(--warntxt)}
.res{display:flex;gap:9px;flex-wrap:wrap;margin-top:11px}
.res div{background:var(--panel2);border:1px solid var(--line);border-radius:8px;
         padding:7px 13px;font-size:12.5px;color:var(--dim)}
.res div b{display:block;font-size:17px;color:var(--txt);margin-top:3px}
.doc{max-width:900px;line-height:1.7;font-size:14.5px}
.doc h2{font-size:17px;color:var(--acc);margin:22px 0 8px;border-bottom:1px solid var(--line);
        padding-bottom:5px}
.doc h2:first-child{margin-top:0}
.doc p{margin:0 0 10px}
.doc ol,.doc ul{margin:0 0 10px;padding-left:22px}
.doc li{margin-bottom:5px}
.fml{background:var(--inset);border:1px solid var(--line);border-radius:6px;padding:12px 13px 9px;
     margin:9px 0;font-family:Consolas,monospace;color:var(--ok);font-size:13.5px;
     line-height:1.75;white-space:pre-wrap;overflow-x:auto}

/* Vektor belgisi.  Unicode ning birikuvchi strelkasi (U+20D7) Consolas va
   boshqa ko'p monoshriftlarda YO'Q: u harf ustiga tushmay, yonida kvadratcha
   bo'lib chiqadi.  Shuning uchun strelka CSS bilan chiziladi — u shriftga
   umuman bog'liq emas va hamma brauzerda bir xil ko'rinadi. */
.vek{position:relative;display:inline-block;line-height:1}
.vek::before{content:"";position:absolute;left:0;right:2px;top:-0.22em;
             border-top:1.2px solid currentColor}
.vek::after{content:"";position:absolute;right:0;top:-0.41em;width:0;height:0;
            border:2.6px solid transparent;border-right:0;
            border-left:4px solid currentColor}
.qa{margin-bottom:15px}
.qa p{margin:0 0 5px;font-weight:500}
.qa textarea,textarea{width:100%;background:var(--inset);border:1px solid var(--line);
     color:var(--txt);border-radius:6px;padding:7px;font:inherit;font-size:13.5px}
.print-only{display:none}

/* ---------- jonli ko'rsatkichlar (energiya balansi va h.k.) ---------- */
.cells{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:7px}
.cell{background:var(--inset);border:1px solid var(--line);border-radius:7px;padding:6px 9px}
.cell span{display:block;font-size:12px;color:var(--dim);line-height:1.35}
.cell b{font-variant-numeric:tabular-nums;font-size:15px;color:var(--txt)}
.cell i{font-style:normal;color:var(--dim);font-size:12px}
.cell.good b{color:var(--ok)}
.cell.bad b{color:var(--err)}

/* ---------- grafiklar ---------- */
.charts{display:grid;grid-template-columns:1fr 1fr;gap:13px}
@media(max-width:860px){.charts{grid-template-columns:1fr}}
.chart{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:11px 13px}
.chart h4{margin:0 0 7px}
.chart canvas{display:block;width:100%;height:auto;border-radius:6px;background:var(--inset)}

/* ---------- portal (index.html) ---------- */
.portal{max-width:1100px;margin:0 auto;padding:24px 18px 60px}
.portal h2{font-size:16px;color:var(--acc);margin:28px 0 12px;
           border-bottom:1px solid var(--line);padding-bottom:6px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:14px}
.lab{background:var(--panel);border:1px solid var(--line);border-radius:10px;
     padding:14px 16px;display:flex;flex-direction:column;gap:7px;
     transition:border-color .15s,transform .15s}
.lab.tayyor:hover{border-color:var(--acc);transform:translateY(-2px)}
.lab.kutilmoqda{opacity:.5}
.lab .num{font:600 12px/1 Consolas,monospace;color:var(--dim)}
.lab .nom{font-size:15px;font-weight:600;color:var(--txt)}
.lab .izoh{font-size:13px;color:var(--dim);flex:1}
.lab .holat{font-size:12px;padding:3px 9px;border-radius:20px;align-self:flex-start}
.lab .holat.ok{background:var(--ok-bg);color:var(--ok)}
.lab .holat.wait{background:var(--panel2);color:var(--dim)}
.intro{background:var(--panel);border:1px solid var(--line);border-radius:10px;
       padding:16px 18px;margin-bottom:8px;color:var(--dim);font-size:14px}
.intro b{color:var(--txt)}
footer{color:var(--dim);font-size:12.5px;text-align:center;padding:24px 18px;
       border-top:1px solid var(--line);margin-top:30px}

/* ---------- telefon va kichik ekranlar ---------- */
/* Talabalar labni telefonda ham ochadi. Bu blok bo'lmasa sahifa
   gorizontal siljiydi (460 px li .side va canvas tufayli).
   Jadvallar esa kartaning ICHIDA siljiydi — sahifa emas. */
@media (max-width:520px){
  header{padding:8px 10px;gap:7px}
  header h1{font-size:15px;width:100%;order:2}
  header .orqaga{font-size:13px;order:1}
  header input[type=text]{width:calc(50% - 6px)}
  .tabs{padding:0 6px}
  .tabs button{padding:9px 10px;font-size:13px}

  main{padding:10px;gap:10px}
  .side{min-width:0;width:100%}
  .stage{position:static;width:100%;padding:6px}
  .stage canvas{width:100%;height:auto;display:block}

  .card{padding:11px 12px;overflow-x:auto}
  .row label{min-width:0;width:100%;margin-bottom:-2px}
  .ctr{gap:7px}
  .timer{font-size:22px;padding:8px 11px}

  /* jadval kartaning ichida siljiydi, o'qish uchun eni kamaymaydi */
  table{min-width:440px;font-size:12px}
  th,td{padding:3px 4px}
  input.calc{width:72px}
  .step input{width:58px}
  .step>button{padding:9px 13px}

  .cells{grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
  .doc{font-size:14px}
  .fml{font-size:12px;padding:8px 10px}
  .res div{padding:6px 10px}
}

/* ---------- chop etish ---------- */
@media print{
  body{background:#fff;color:#000;font-size:11px}
  header .sp,header .orqaga,.tabs,.ctr,.timer,.stage,.hint,.msg,.prog,button{display:none !important}
  main{display:block;padding:0}
  .side{min-width:0}
  .card{border:1px solid #999;break-inside:avoid;margin-bottom:10px;background:#fff;padding:8px}
  th,td{border:1px solid #666;padding:2px 4px}
  th{background:#eee;color:#000}
  .res div,.cell{border:1px solid #999;background:#fff;color:#333}
  .theory,.warnbox{background:#f4f4f4;color:#333;border-left-color:#888}
  .theory code,code,.fml{color:#000;background:#f0f0f0}
  input.calc{border:1px solid #666;background:#fff;color:#000;width:70px}
  input.calc.ok{background:#fff;color:#000;border-color:#666}
  .step{border:1px solid #666}
  .step>button{display:none !important}
  .step input{color:#000;width:56px}
  .cellhint,.del{display:none}
  .charts{grid-template-columns:1fr 1fr}
  .chart{border:1px solid #999;break-inside:avoid}
  .print-only{display:block}
  .tabpane{display:block !important;page-break-before:always}
  .tabpane[data-pane="0"]{display:none !important}
}
