• Nikitos's avatar
    Кривые и градиенты: $.curve — одна плавность на весь движок
    · 5479ba90
    Nikitos создал
    Пробел из docs/TASKS.md §1.6: рампы были зашиты в частицах, градиентный
    помощник приватен в render.js, общей интерполяции не было — каждый модуль писал
    свою формулу затухания.
    
    * make()/define()/use()/names(): кривая значений — функция (t) => y с методами
      at (зажим t), range (равномерные сэмплы), points, plus;
    * четыре режима: linear, step (ступенька), smooth и spline (Catmull-Rom);
      сплайн считает по значениям, а не по индексам, поэтому неровные по x точки
      остаются плавными;
    * встроенные кривые: linear, easeIn/Out/InOut, pop, bounce, pulse, spike,
      fadeIn/fadeOut; любая принимается там, где ждут ease (проверено на $.tween);
    * gradient(): стопы строкой '#a → #b → #c' (стрелка — '→', '->' или '=>'),
      массивом цветов, объектами {at, color} и парами; интерполяция покомпонентная,
      а не в sRGB, поэтому тёмные цвета не выцветают в серое;
    * resolve(value): функция, число или имя → функция; разбор цветов
      (#rgb/#rrggbb/#rrggbbaa/rgb()/transparent/число) вынесен в чистую часть.
    
    Тест нашёл настоящий баг: gradient() принимал только массив и игнорировал
    строку со стрелками ('#a → #b'), то есть документированный способ задания
    градиента не работал.
    
    Проверка: tests/js/curve_test.mjs (13 проверок чистых функций),
    tests/agent/highlevel_curve_test.py (8 проверок: реестр, ease в твине, градиент),
    полный набор qjs и агентских тестов зелёный.
    5479ba90